The Omnibus 30-day prior price: five things that quietly break
Since the Omnibus Directive (Directive (EU) 2019/2161) was transposed across the EU, a storefront that announces a price reduction has to state the lowest price it charged for that item in the 30 days before the reduction. The rule itself is Article 6a of the Price Indication Directive 98/6/EC as amended; Germany puts it in § 11 PAngV, and other member states have their own wording, but the shape is the same everywhere.
Displaying a line that says "lowest price in the last 30 days" is the easy part. Being able to defend the number in it is not. What follows are the ways it breaks — all of them things that look fine in a demo store and only show up in a shop with real price movements. They apply to any implementation, ours included; several are bugs we hit ourselves while building the tracking.
1. If you start today, you have no history — and you cannot backfill it
A tracker cannot report prices it never observed, and there is no store of prices sitting around waiting to be imported.
Shopify keeps no price history of its own: the platform holds the price a variant has now, and the previous value is simply overwritten. Order data is not a substitute either, because orders only record prices somebody actually bought at. A price you displayed for nine days without making a sale does not appear anywhere in your order history.
The practical consequence: tracking has to be running for 30 days before the campaign, not installed the week of it. Any tool that offers to reconstruct your past 30 days is either reading order data — which is incomplete by definition — or guessing.
2. The reference price has to survive a price increase
This is the single check worth running before trusting any implementation, including this one.
Set a variant to €43. Leave it there. Now reduce it to €40. The line has to read €43.
Some implementations effectively derive the "lowest" value from the current price, so the same test reads "lowest price: €40" — which is wrong, useless, and completely invisible in a demo store where prices only ever go down. We hit it ourselves while building both the Wix badge and the Shopify price block, which is why it is the first test we run on any change to the price line.
3. Per variant, not per product
The prior price attaches to the thing the customer actually buys.
A product with three variants at different prices, discounted at different times, needs three independent histories. Anything that stores one value per product is correct for one variant by accident and wrong for the others. Shops with size or colour variants at tiered prices hit this immediately.
4. Currency: store the low as charged, not as converted
If you sell in several currencies and the tool keeps a single history that it converts at today's exchange rate, the figure on the page is a price nobody was ever charged.
The low has to be stored per market, in the currency it was charged in. This one is easy to miss because it is invisible in a single-currency shop and silently wrong the moment you open a second market.
5. When there is no reduction, publish nothing
The obligation attaches to announced reductions. It is not a duty to publish a price history under every product all the time.
A permanent "lowest price in 30 days" line under full-price items is not required, and it invites questions you did not have to answer — about whether the figure is right, and about items whose history you do not have. Showing the line only where you are announcing a reduction is both the compliant behaviour and the smaller surface area.
Frequently asked questions
Does the rule apply to every discount? It applies where you announce a price reduction — a strike-through price, a "was/now", a percentage off. General advertising claims that do not announce a specific reduction on a specific product are a different question, and national implementations differ in the detail.
What counts as the reference price? The lowest price you applied in the 30 days before the reduction, for that item. Note that the Court of Justice addressed the related question of percentage claims in C-330/23 (Verbraucherzentrale Baden-Württemberg v Aldi Süd, Eighth Chamber, 26 September 2024, CELEX 62023CJ0330): where a reduction is advertised as a percentage, that percentage has to be calculated on the prior price too, not on a higher one.
Can I use my supplier's list price or an RRP as the reference? Not for this line. The figure is about what you charged, not what the item is nominally worth. An RRP comparison is a separate claim with its own rules.
How long do I need to keep the history? The 30-day window is what you display, but you need to be able to show how the figure was derived if someone asks — a consumer association, a competitor, or a regulator. Keeping the raw observations, exportable, is worth more than keeping only the computed low.
Is 30 days always the window? It is the baseline. There are specific carve-outs in the directive — for example for goods that spoil or expire quickly, and for products introduced less than 30 days ago, where member states may allow different treatment. Check your own market's transposition rather than assuming the baseline everywhere.
Sources
- Directive 98/6/EC on consumer protection in the indication of prices, consolidated text, EUR-Lex. Article 6a is the prior-price rule, including the carve-outs in paragraphs 3 to 5.
- Directive (EU) 2019/2161 (Omnibus Directive), EUR-Lex. Article 2 inserts Article 6a.
- § 11 Preisangabenverordnung (PAngV), the German transposition.
- Judgment in Case C-330/23, Verbraucherzentrale Baden-Württemberg v Aldi Süd, Court of Justice of the European Union, 26 September 2024.
Written by the team behind EU Compliance Kit, a Shopify and Wix app that records price observations and renders the prior-price line. The failure modes above apply to any implementation; several were ours. Nothing here is legal advice — for how a rule applies to your shop, ask a lawyer in your market.