Skip to content
Online shop & e-commerce

Discounts in your online shop: the German 30-day price rule

Struck-through price, percentage claim, reference notice: what Section 11 of the German Price Indication Ordinance requires and how courts read the rule.

14 min read PreisangabenOnlineshopUWG

A struck-through price next to a sale price is the oldest selling argument in retail. Since the German Price Indication Ordinance was recast, it is also a statement with a precise legal meaning: anyone announcing a price reduction in an online shop has to state the lowest total price of the last 30 days (PAngV) — and that is rarely last week’s price. This article sets out what the provision actually requires, how courts have read it, and how the requirement can be implemented in a shop without turning every campaign into manual work.

Key takeaways

  • The reference point for any discount claim is the lowest total price of the last 30 days, not the price charged most recently.
  • A percentage figure and any promotional emphasis of the reduction have to be calculated against that same reference price.
  • The rule comes from EU law and has applied across all member states in the same basic form since 28 May 2022.
  • A breach is both an administrative offence and a matter for competitor warning letters — the two routes exist side by side.
  • Technically it needs a price history per item and sales channel from which the reference price is derived automatically.

What the 30-day rule actually requires

The provision sits in Section 11 of the German Price Indication Ordinance and is shorter than its reputation suggests. Anyone obliged to state a total price has to indicate, whenever announcing a price reduction for goods, the lowest total price applied to consumers within the last 30 days (PAngV) before the reduction takes effect. Three words in that sentence decide almost every dispute: lowest, total, applied. Lowest means the minimum across the period, not the price that happened to be valid last. Total means the price including VAT and other price components, not a net figure and not a price stripped of mandatory surcharges. Applied means actually charged to consumers, not merely listed in a price sheet or calculated internally. Anyone who models those three terms cleanly in the shop has the larger part of the work behind them.

The rule is not a German special case. It goes back to Article 6a of the European Price Indication Directive, inserted by the amending directive: the prior price is the lowest price applied by the trader during a period of at least 30 days (EU Directive 2019/2161) before the price reduction is applied. Member states have had to apply these provisions since 28 May 2022 (EU Directive 2019/2161); the recast German ordinance entered into force on 28 May 2022 (PAngV). For goods that have been on the market for less than 30 days (EU Directive 2019/2161), member states may provide for a shorter period — an opening that shows the legislator had newly launched items in mind.

The purpose of this reference period of at least 30 days is to prevent traders from juggling prices and announcing fake price reductions, for instance raising a price for a short period only to lower it again and present the result as a substantial reduction, thereby misleading consumers.

Commission guidance on the interpretation and application of Article 6a of the Price Indication Directive, rendered from the German text

That reasoning by the European Commission (European Commission) matters more in practice than any detail question, because it supplies the yardstick a court applies to a campaign. The question is not whether a struck price was valid at some point, but whether the reduction is economically what it claims to be. A brief price increase a few days before the campaign formally produces a higher prior price — but it delivers exactly the pattern the provision is meant to prevent, and it does not affect the 30-day low in any case. The reference value stays the minimum across the whole period.

Two exemptions, and no more

The ordinance recognises exactly two exemptions (PAngV) from the obligation: individual price reductions granted to one specific customer, and goods that spoil quickly or whose best-before date is approaching. Everything else — end-of-season sales, campaign weeks, volume discounts, voucher codes applied to the item price — falls under the rule. Anyone who finds a third exemption in a leaflet should hold it against the wording of the ordinance.

Why the rule concerns the whole market

Price display is not a side issue for a small segment. German online retail most recently turned over EUR 92.3 billion (HDE) in a year, and the online share of total retail turnover stood at 13.5 per cent (HDE). One in every eight euros spent in retail therefore travels through an ordering path in which a price is not explained by a member of staff but rendered from a template. That is precisely why a configuration error in price display does not affect one shelf but the entire catalogue at once.

The trend is not receding. In the third quarter of 2025, orders for goods in German e-commerce reached EUR 17,960 million (German E-Commerce Association), measured gross including VAT. On the demand side the channel has long been ordinary: 82 per cent (Federal Statistical Office) of people aged 25 to 44 bought something online in the previous three months. Anyone labelling a discount today is therefore not addressing a tech-savvy minority but the majority of an entire age group.

Across Europe the picture is similar: 78 per cent (Eurostat) of internet users in the EU ordered online within twelve months. The complaint figures are the revealing part. 5 per cent (Eurostat) reported costs higher than indicated, while 63 per cent (Eurostat) experienced no problem at all when shopping online. Price statements are therefore not a mass grievance, but they are the category in which a discrepancy is immediately read as deception — and in which a single incident weighs on a shop’s reputation longer than a late delivery does. We described how that plays into trust signals in our article on legally compliant product reviews; price presentation is the second building block of the same credibility, and both feed into a shop’s visibility in search.

Not just the struck price

Every announcement of a reduction is covered — price tag, badge, banner, newsletter subject line and category teaser alike.

Separate per channel

The reference price is measured by the price this trader applied to consumers. A different channel with its own pricing needs its own history.

Rolling, not calendar-based

The 30 days run backwards from the start of the reduction. A calendar month is no substitute and produces wrong reference values at month boundaries.

The reference point for percentage claims

For years the most practically important question of interpretation was this: does the advertised percentage also have to relate to the 30-day low, or is it enough to name the low somewhere nearby? The Court of Justice of the European Union decided the point on 26 September 2024 (Court of Justice of the European Union). The answer was unambiguous: a price reduction presented as a percentage or as a promotional statement emphasising the advantageous nature of the price offer must be determined on the basis of the prior price within the meaning of Article 6a. The percentage is therefore not a free marketing figure next to the mandatory notice but a regulated statement in its own right.

The underlying case shows how small the amounts in dispute can be. A trader advertised a sale price of EUR 1.29 (Court of Justice of the European Union), next to it the struck-through last selling price of EUR 1.69 (Court of Justice of the European Union), and the lowest total price of the preceding 30 days was likewise EUR 1.29. The advertised percentage reduction was therefore calculated against the last selling price instead of against the 30-day low, compared with which there was no reduction at all. For shop implementation one plain consequence follows: percentage, struck price and saving in euros must not come from three different sources. They all have to be derived from the same reference value.

  • Percentage figure: calculated against the 30-day low, not against the most recent price and not against a recommended retail price.
  • Struck price: shows the same reference value that underlies the percentage — otherwise two statements on one page contradict each other.
  • Saving in euros: the difference between reference value and sale price, rounded by the same rule as the price display.
  • Promotional wording: "best price", "lowest price ever" and similar phrases emphasise advantageousness and fall under the same standard.

A recommended retail price is not a reference price

A manufacturer’s recommended retail price may still be named where it is accurate and labelled as such. It does not replace the mandatory notice about the 30-day low, however, and it is not a suitable basis for an advertised percentage once the presentation can be understood as a reduction against the trader’s own prior price. Anyone who wants to show both needs two separate, clearly labelled statements.

What the Federal Court of Justice clarified in 2025

After the European decision it was the turn of the German implementation. The Federal Court of Justice ruled on 9 October 2025 (Federal Court of Justice) on advertising with a price advantage and held that advertising a price reduction is unlawful where the lowest total price of the last 30 days is not stated in a way that is unmistakable, clearly recognisable and easily legible. What carries the decision is clarity of the price statement, that is the legibility of the figure; the reference value for the percentage had already been settled by the Court of Justice of the European Union. The previously widespread habit of adding the low only in small print at the foot of the page is off the table.

In the case decided, a coffee product had been advertised with the claim -36 per cent (Federal Court of Justice). In the preceding week the defendant had charged EUR 6.99, and in the week before that EUR 4.44 — exactly the price now advertised as the offer. Measured against the lowest total price of the last 30 days there was therefore no reduction at all; the percentage had been calculated against the previous week price, which stood beside it only in small print. For shop operators the practical message is organisational rather than legal — a discount that comes from a marketing spreadsheet instead of from the system’s price history is structurally vulnerable, however careful the individual person entering it may have been.

The core in one sentence

The reference price is not a presentation question but a calculated value: it emerges from the price history and then determines struck price, percentage and saving alike.

The price block on the product page

The requirements add up to a price block that lends itself to standardisation. The sale price sits at the top as the total price, with the struck reference price and the percentage beside it. Immediately below comes the mandatory notice that the struck price is the lowest total price of the last 30 days, then the unit price and the statements on VAT and shipping costs. Spatial proximity matters: the notice has to sit where the price is perceived, not in a collapsible area at the foot of the page and not behind an asterisk that only resolves after scrolling.

ElementVulnerable implementationRobust implementation
Struck priceLast regular price from the master recordLowest total price of the last 30 days from the price history
PercentageCalculated against an RRP or an interim priceCalculated against the same reference value as the struck price
Mandatory noticeAsterisk resolved in the page footerLine directly under the price, readable without interaction
Category pagePercentage badge only, no reference valueBadge plus struck price, notice linked on the detail page
End of campaignPrice stays, badge removed by handTime-controlled, reference value recalculated after the campaign

The price block does not stand alone. It shares the product page with the mandatory statements from product safety law, which we broke down in a separate article on GPSR and ProdSG, and with the details on payment and shipping. Both areas compete for the same space above the fold. Adding them one after another without a concept produces a page on which the purchase decision drowns in the small print — with measurable consequences, as the article on cart abandonment shows.

Unit prices and the remaining mandatory statements

The 30-day rule does not stand on its own but sits inside an ordinance that governs the whole price presentation. The unit price obligation is the part most often overlooked in practice. For goods in prepackages, open packages or as selling units without packaging, the unit price has to be stated alongside the total price. Exempt are goods with a nominal weight or volume of less than 10 grams (PAngV) or 10 millilitres (PAngV) — a threshold that mainly concerns samples and very small quantities.

The quantity unit for the unit price is prescribed as well: 1 kilogram, 1 litre, 1 cubic metre, 1 metre or 1 square metre (PAngV) of the goods. Anyone stating "per 100 grams" instead because it looks friendlier departs from the requirement. The unit price also has to sit in the immediate vicinity of the total price — the same spatial requirement that applies to the 30-day notice. In a campaign display that means: if the total price falls, the unit price falls with it, and the two values have to match. A unit price still calculated from the regular price gives the campaign away instantly.

  1. State the total price including VAT and other price components prominently.
  2. Place the struck price beside it as the lowest total price of the last 30 days and label it as such.
  3. Derive the percentage and the saving from that same reference value.
  4. Show the unit price in the prescribed quantity unit right next to it and recalculate it with the sale price.
  5. Add the statements on VAT and shipping costs, with a link to the concrete shipping charges.
  6. Limit the campaign period technically and recalculate the reference value automatically once it ends.

One test case that covers a lot

Take an item and, in a preview environment, run the sequence lower, raise again, lower once more. Then check which struck price appears: if the system shows the immediately preceding price instead of the minimum within the 30-day window, it is calculating against the wrong value. Two reductions in a row will not show it — there the preceding price is itself the minimum, and a correct and an incorrect system display the same figure. This single test case exposes the most frequent configuration error, and it can be repeated in minutes whenever an extension has been updated. Regular checks of that kind belong in the same routine as a content audit of the website.

What a breach costs

The Price Indication Ordinance carries fines. A breach of the obligation under Section 11(1) (PAngV) is expressly listed as an administrative offence. The framework comes from the German Act on Economic Offences: the offence may be punished with a fine of up to EUR 25,000 (WiStG 1954). That is the upper edge rather than the standard case — but it is high enough that the matter does not fall into the category of venial formalities.

Alongside it stands fair trading law. Its fining provision, however, presupposes a widespread infringement and applies only within a coordinated enforcement action: on those conditions the German Act Against Unfair Competition allows a fine of up to EUR 50,000 (UWG); where the trader achieved more than EUR 1.25 million (UWG) in annual turnover in the member states concerned, up to 4 per cent (UWG) of annual turnover is possible. For the faulty price display of a single trader this is typically not the route. There the most frequent case in practice is a warning letter from a competitor or an association, which requires no authority and arrives considerably faster than an administrative fine.

The European framework behind it is just as clear. The amending directive requires, for widespread infringements, a maximum fine of at least 4 % of annual turnover (EU Directive 2019/2161) of the trader in the member states concerned; where no turnover information is available, a maximum fine of at least EUR 2 million (EU Directive 2019/2161) has to be provided for. These figures target cross-border campaigns rather than the individual trader with a badly configured badge. They do show, though, how much weight the legislator attaches to correct price statements.

How often disputes actually arise can be read from the work of the German fair competition association: 54 per cent (Wettbewerbszentrale) of enquiries and complaints in 2024 concerned an allegation of misleading conduct, and across all subject areas 1,362 cases (Wettbewerbszentrale) were formally objected to; price statements and price advertising appear there as one of the example topics, without a case figure of their own. Price display is therefore not a niche topic for the legal department but one of the two fields in which competitors watch each other most closely. Anyone who has their shop looked after continuously moves that check out of chance and into a fixed rhythm.

Countdown timers and other scarcity signals

The 30-day rule rarely appears on its own. Where discounts are used, scarcity notices, countdown timers and comparison lists usually sit on the same page. A coordinated screening of online sales platforms found misleading practices on 148 of 399 (European Commission) shops examined. On 42 shops (European Commission) a countdown timer ran with a deadline for buying at a particular price that was simply false. Such elements are not in themselves a breach of the Price Indication Ordinance, but they reinforce the impression of a reduction — and so they raise the risk that the overall presentation will be judged misleading.

The spread is considerable. A study commissioned by the European Commission found manipulative design patterns on 97 per cent (European Commission) of the most popular websites and applications examined in the EU. For shop operators the conclusion is practical: a countdown that restarts once it expires, an availability display that does not come from stock, and a struck price that does not come from the history all belong to the same category of design decisions. Each can be justified in isolation and together they read as a pattern.

A countdown with a real end

The timer draws its end date from the same campaign definition as the price. When it runs out, the sale price ends too — without a restart and without manual intervention.

Stock, not assertion

"Only 3 left" comes from the stock level or it does not appear on the page. A rounded or capped display is permissible, an invented one is not.

Make pre-selection visible

Pre-ticked add-ons in the basket have to be marked separately and must not hide a price component that belongs to the total price.

Anchoring the rule in the shop system

The real work lies not in the wording on the product page but in the data model behind it. What is needed is a price history per item and sales channel that records every applied total price with a start and an end. From that history the reference price can be calculated as the minimum across a rolling window instead of being typed in by hand when a campaign is created. The difference is not cosmetic: a manually maintained field is stale by the time of the next price change, a calculated value is not.

price-history.json
{
  "item": "SKU-10482",
  "channel": "shop-de",
  "currency": "EUR",
  "history": [
    { "from": "2026-08-01", "to": "2026-08-19", "total_price": 49.90 },
    { "from": "2026-08-20", "to": "2026-08-27", "total_price": 39.90 },
    { "from": "2026-08-28", "to": "2026-09-05", "total_price": 49.90 }
  ],
  "campaign": {
    "start": "2026-09-06",
    "end": "2026-09-13",
    "total_price": 34.90,
    "reference_price": 39.90,
    "reference_window_days": 30,
    "notice": "Lowest total price within the last 30 days"
  }
}

In this example the reference price is EUR 39.90 even though EUR 49.90 was charged immediately before the campaign. That gap is exactly where most implementations fail: the system knows the prior price but not the minimum. The saving is therefore EUR 5 and not EUR 15, and the percentage reads 13 per cent instead of 30 per cent. Both values can be calculated from the record once the reference price is fixed — and both are wrong if it is pulled from the master record.

  • The price history per item and channel is written without gaps, including for bulk imports and price maintenance via interfaces.
  • The reference price is calculated when a campaign starts and not typed in by hand.
  • Struck price, percentage and saving all come from a single field in the record.
  • The mandatory notice appears on the detail page, the category page, in the basket and in feeds to price comparison sites.
  • Campaigns have a technical end date, and the reference value is recalculated afterwards.
  • Items with less than 30 days of history are handled separately and not advertised with an empty reference field.

Anyone running several sales locations has the additional case of prices differing by site; the article on location pages for multiple sites describes how such structures can be modelled cleanly. We covered the remaining mandatory statements around ordering and provider identification in the articles on payment methods in an online shop and on legal notice requirements; anyone additionally advertising with environmental claims will find the requirements in the article on environmental claims on websites. Discount campaigns also affect return behaviour, as the article on returns in online shops shows. If you would like to work through your price display in a structured way: our online shop services show how price history and display can be joined up, our pricing is stated openly, the full range of services gives an overview, and we are happy to discuss the specific case directly with you.

Sources and studies

This article is based on data from: the German Price Indication Ordinance (PAngV), the German Act on Economic Offences 1954, the German Act Against Unfair Competition (UWG), Directive (EU) 2019/2161, the European Commission guidance on Article 6a of the Price Indication Directive, the judgment of the Court of Justice of the European Union of 26 September 2024 (C-330/23), the press release of the German Federal Court of Justice of 9 October 2025 (I ZR 183/24), the HDE Online Monitor, the German E-Commerce Association, the Federal Statistical Office, Eurostat, the European Commission (sweep of online sales platforms and study on manipulative design patterns) and the annual report of the German fair competition association. This article does not replace legal advice in an individual case.

Related Articles