The EU Omnibus Directive turned the oldest trick in retail — inflate, then "discount" — into a compliance problem. Any announced price reduction now has to be measured against the lowest price you actually charged in a defined prior window, and if you cannot substantiate that reference price, you are not allowed to advertise the reduction at all. Here is how the rule works, the distinction that makes it tractable, and the fail-closed design we run so our sale shelf stays both honest and alive.
The 30-day lowest-prior-price rule
Under Directive (EU) 2019/2161 (the "Omnibus" directive, amending the Price Indication Directive), when a trader announces a price reduction they must state the prior price, defined as the lowest price applied during a period of at least the 30 days before the reduction. In plain terms: your "was" price is not the highest recent price, not the RRP, and not last week's price — it is the lowest price you actually charged in the preceding 30 days. If a product bounced between €20 and €25 in that window, the lawful reference for a new sale is €20.
National implementations vary in the fine detail, including how they treat goods that have been on the market for a short time, so treat the specifics as jurisdiction-dependent and worth professional review. The core principle — lowest prior price over a defined recent window — is the part that is consistent and that your systems must be able to prove. For anything beyond that principle, read the directive itself on EUR-Lex and take legal advice.
Membership vs announcement: the distinction that untangles it
The mistake that gets retailers into trouble is conflating two questions. We keep them strictly separate.
- Membership — is this product on sale at all? That is a merchandising question: is the current price below the vendor's own regular price, so it belongs on the "on sale" shelf?
- Announcement — may we display a strikethrough, a "was" price or a percentage off? That is a legal question, and the only lawful basis for it is a substantiated Omnibus prior price.
These are not the same, and treating them as one is where fabricated "was" prices come from. A product can legitimately sit on the sale shelf (its price is below the regular price today) while we still have no right to print a specific strikethrough, because we cannot substantiate what the lowest price was over the prior window. Separating membership from announcement lets the sale shelf stay populated and useful while the legal claim is gated independently.
One gate, failing closed
The safe default for a compliance rule is to fail closed: when in doubt, show nothing rather than risk an unlawful claim. We route every price-reduction display — the strikethrough, the "−N%" badge, the word "sale" as a discount claim — through a single gate. That gate asks one thing: do we hold a substantiated prior price for this product? If yes, it returns the reference and the badge renders. If no, it returns nothing and no reduction is shown anywhere, on any surface.
The single-gate design matters as much as the fail-closed default. If four different templates each decide independently whether to show a discount, you have four chances to get it wrong and four places to audit. One gate means one implementation of the rule, one place to test it, and no surface that can quietly render an unsubstantiated claim. A fallback that guesses a prior price when the real one is missing is not a convenience — it is precisely the unlawful claim the directive prohibits.
On our marketplace, if there is no substantiated prior price, there is no discount badge — ever, on any surface. The gate returns null and every card and product page simply shows the current price with no strikethrough. It is less dramatic than a wall of red percentages, and it is the only version we can stand behind if a regulator asks how a specific "was" price was calculated.
Capturing price history you can actually trust
You cannot enforce a lowest-prior-price rule without a reliable price history, and this is subtler than it looks. A pure write-hook — record the price whenever it changes — misses the most important case, because a price that never changes is still the prior price. If a product sat untouched at €20 for a month, no change event ever fired, yet €20 is exactly the reference a later sale must beat.
So we capture two ways: a write-hook that records a point whenever a price moves, and an hourly snapshot that samples every product's current price regardless of whether it changed. The hook catches rapid moves precisely; the snapshot guarantees that stable prices are represented in the history. From that combined record, the lowest price over the prior window is a straightforward query — and the gate above has something real to read.
Newly listed products are the tricky case. The directive lets member states provide a shorter reference period for goods that have been on the market for less than the standard window, which means a compliant system has to know how long each product has actually been on sale, not just how long you happen to have been recording its price. Those are different clocks: your price history might only start when the product was ingested, while the lawful reference depends on the product's own age. Track the product's genuine listing age so a brand-new item is judged on the right, shorter window rather than being wrongly promoted into the full one — and confirm the exact period your jurisdiction applies with a lawyer.
A sale shelf that survives compliance
Operators fear that Omnibus compliance means killing the sale shelf. It does not — it means the shelf stops lying. Keep the merchandising and the legal claim separate: let products whose current price is below the regular price populate the sale shelf on merchandising grounds, and gate the strikethrough and percentage claims on substantiated priors. A product with no substantiated prior can still be discoverable and still be a genuine deal; it just shows its honest current price instead of an invented saving. Honesty here is also adjacent to other display rules — the same discipline underlies truthful free-shipping thresholds, and it sits alongside your broader consumer-facing obligations like consent and privacy and correct VAT display.
Key takeaways
- The prior price is the lowest price in the defined recent window (at least 30 days under Directive (EU) 2019/2161) — not the RRP, not last week's price.
- Separate membership from announcement: being on the sale shelf is a merchandising decision; showing a strikethrough is a legal claim that needs a substantiated prior.
- Route every reduction display through one gate that fails closed — no substantiated prior means no badge on any surface, and never a guessed fallback.
- Capture price history with a write-hook and an hourly snapshot, because an unchanged price is still a valid prior and emits no change event.
- Keep the sale shelf alive by letting products qualify on merchandising while gating the legal claim independently.
- National rules differ in detail; treat the specifics as jurisdiction-dependent and take professional legal advice.
Frequently asked questions
What is the EU Omnibus Directive's rule on sale prices?
Can I show a discount if I don't have the price history?
Does the Omnibus Directive kill my sale shelf?
How do you record price history for Omnibus compliance?
Is this legal advice?
A sale shelf that's honest by construction.
Our pricing display gates every discount claim through one fail-closed rule, on a marketplace that lives on your domain.
Request early access See the live marketplace →