The 30-Day Lowest Price Rule: What EU Retailers Actually Need to Prove a Discount
Your marketing team wants to run a "-40%" banner on Friday. Legally, that number is only allowed if you can prove what the price actually was for the previous 30 days. Not what you'd like it to have been. Not the RRP on the box. The genuine lowest price the product sold for in your own store over the prior month.
Most retailers treat the EU's Omnibus Directive as a legal question for the compliance team. It isn't. It's a data-retention question, and if you can't answer it with records, no amount of legal review will save the campaign. You cannot display a 30-day low you never recorded.
This guide explains what the rule requires after the September 2024 ALDI SÜD ruling, why it quietly became a data problem, and how to build the price history — your own and your competitors' — that keeps discount claims defensible.
What the Omnibus Directive Actually Requires
The Omnibus Directive amended the EU's Price Indication Directive and has been in force across member states since May 2022. The core rule is deceptively simple: whenever you announce a price reduction, you must also state the prior price, and that prior price must be the lowest price you applied during the 30 days before the reduction.
The intent is to kill "fake discounts" — the practice of inflating a reference price for a few days so a permanent "sale" looks like a saving. Before Omnibus, a retailer could set a "was €129" tag it never seriously sold at, then run "now €79" indefinitely. The directive makes that illegal by anchoring the reference to real, recent selling history.
A few specifics that trip teams up:
- The reference is the lowest, not the last. If the item bounced between €99 and €89 over the month, your legal reference is €89 — even if it was sitting at €99 the day before the sale.
- It applies to every announced reduction, including percentage claims, strike-through prices, and "lowest price ever" style messaging.
- Progressive discounts have a carve-out. If you increase a discount continuously during a campaign, you may keep referencing the pre-campaign price. Stop and restart, and the 30-day clock re-applies.
- Loyalty and personalised prices are treated differently by different national regulators — check your specific market's guidance.
The ALDI SÜD Ruling Made the Rule Sharper
For two years, retailers argued about how the reference price should be calculated when a percentage discount was shown against a strike-through price. ALDI SÜD's German stores advertised products with a "lowest price in 30 days" figure but calculated the headline percentage against a higher, more recent price.
In September 2024, the Court of Justice of the EU (Case C-330/23) settled it: the advertised reduction must be calculated on the lowest price from the prior 30 days, not on a more recent, higher price. Showing the 30-day low as a footnote while computing the percentage off a different number does not comply.
The practical takeaway is uncomfortable for a lot of promotional calendars. Your percentage, your strike-through, and your "you save €X" all have to trace back to the same genuine 30-day low. And "trace back to" means you need the data to prove it if a regulator or competitor challenges you.
Why This Is a Data Problem, Not a Legal One
Here's the part legal reviews miss. Compliance with the 30-day rule depends entirely on having a reliable, timestamped record of your own prices — and, increasingly, your competitors'.
Consider what you actually need to be able to produce on demand:
- Your own price history, per SKU, per market, going back at least 30 days — with enough granularity to catch intraday changes if you reprice dynamically.
- Proof the reference price is the genuine low, not a value someone typed into the CMS the morning of the sale.
- The same records for localised variants — the .de, .fr and .fi versions of the same product may have diverged.
If your prices live only in the current state of your e-commerce platform — where each change overwrites the last — you have no history to prove anything. Most platforms store the current price beautifully and the past price nowhere. That's the gap.
There's a second, less obvious exposure: your competitors' claims. Omnibus applies to them too. A rival running an inflated "-50%" that never held for 30 days is making an illegal claim you can report — but only if you captured their price history to prove the reference never existed. Competitive price history turns a vague "that looks like a fake discount" into evidence.
How to Build the Price History You Need
There are three layers, and most retailers need all three.
Layer 1: Capture and retain your own prices
Stop overwriting. Every price change should be written to an append-only log — SKU, market, currency, old price, new price, timestamp. This is a small engineering task on your own systems, but it is the foundation. Without it, you are relying on memory and screenshots.
If you reprice dynamically, log every change, not a daily snapshot. A daily snapshot can miss a two-hour dip that becomes your legal 30-day low.
Layer 2: Monitor competitor price history
You cannot see inside a competitor's database, so you reconstruct their history by observing their storefront on a schedule. This is a price scraping problem: collect each competitor SKU's displayed price at a regular interval, store it with a timestamp, and you build the same append-only history for them that you keep for yourself.
The frequency matters. Monitoring once a week will not reliably catch a competitor's genuine 30-day low, and it certainly won't catch a two-day fake-reference spike. Daily is the practical minimum; for fast-moving categories, twice daily. The technical challenge is that this data has to be complete and accurate over long windows — a scraper that silently fails for four days leaves a hole exactly where the low might have been. That's where self-healing scraper infrastructure earns its keep: compliance evidence with gaps is not evidence.
Layer 3: Make the history queryable
Raw logs are not proof until someone can query them. Structure the data so a category manager can answer "what was the lowest price for SKU X between date A and date B" in seconds, and so the answer is auditable. This is the same competitive pricing database most teams build for margin decisions — the compliance use case comes almost for free once the history exists.
Quick Reference: Is Your Discount Compliant?
| Check | What "compliant" looks like | Where the data comes from |
|---|---|---|
| Reference price | The genuine lowest price in the prior 30 days | Your own append-only price log |
| Percentage claim | Calculated off that 30-day low (post-ALDI SÜD) | Same log, queried per SKU/market |
| Per-market accuracy | Each localised store checked separately | Logs segmented by domain/currency |
| Intraday dips | Captured, not averaged away | Change-level logging, not daily snapshots |
| Competitor claims | Their reference verifiable against real history | Scheduled competitor price monitoring |
Where ScrapeWise Fits — and Where It Doesn't
ScrapeWise handles Layer 2 and feeds Layer 3: we collect competitor price history on a schedule from any storefront — including JavaScript-heavy sites and localised domains — and deliver it as clean, timestamped, queryable data. That gives you the competitor 30-day lows you need to benchmark against and to challenge illegal claims.
Honest limitations: ScrapeWise does not log your own internal prices — Layer 1 is a change you make in your own systems, and it's the one you must not skip. We're also not a legal service; we provide the price evidence, not the compliance sign-off. And there's no self-serve free tier for this — coverage is scoped to your competitor set and markets, so it's a "get a quote" conversation, not a credit-card signup.
Conclusion
The 30-day lowest price rule looks like a legal constraint and behaves like a data requirement. The retailers who run discounts confidently in 2026 aren't the ones with the best lawyers — they're the ones who kept the history. Log your own prices append-only, monitor your competitors' prices on a reliable schedule, and make both queryable. Do that, and every "-40%" banner comes with its own proof attached.
If you want the competitor side of that history collected and delivered clean, that's what we do — get a quote scoped to your markets and competitor set.
Paste a competitor URL — start tracking prices in 60 seconds
Any e-commerce site, any SKU count. Clean structured feeds on your schedule, no code required.
97% accuracy on Amazon benchmarks · no credit card · book a 15-min call →
