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.
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
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
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 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.
| Element | Vulnerable implementation | Robust implementation |
|---|---|---|
| Struck price | Last regular price from the master record | Lowest total price of the last 30 days from the price history |
| Percentage | Calculated against an RRP or an interim price | Calculated against the same reference value as the struck price |
| Mandatory notice | Asterisk resolved in the page footer | Line directly under the price, readable without interaction |
| Category page | Percentage badge only, no reference value | Badge plus struck price, notice linked on the detail page |
| End of campaign | Price stays, badge removed by hand | Time-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.
- State the total price including VAT and other price components prominently.
- Place the struck price beside it as the lowest total price of the last 30 days and label it as such.
- Derive the percentage and the saving from that same reference value.
- Show the unit price in the prescribed quantity unit right next to it and recalculate it with the sale price.
- Add the statements on VAT and shipping costs, with a link to the concrete shipping charges.
- Limit the campaign period technically and recalculate the reference value automatically once it ends.
One test case that covers a lot
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.
{
"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