How to Plan Discount Campaigns Around the 30-Day Price Rule
Adam Charvat
Since May 2022, an EU-wide rule requires every shop selling to consumers in the European Union to display the lowest price the product sold for in the last 30 days next to any announced discount. It comes from Article 6a of the EU Price Indication Directive, added by the Omnibus Directive — and it applies to sales into the EU no matter where your store is based. One sentence in the law, and yet it can sink a campaign that marketing spent months preparing.
We deal with this rule with our clients all the time: when planning campaigns, when implementing it technically, and at the point where a consumer-protection authority was already asking questions. The same mistakes keep coming up, so we wrote down how to get it right. This is not legal analysis — it is practice.
The law does not want the "price before the discount"
The most widespread misconception first. The figure the law requires is not the price before the discount. It is the lowest price the product actually sold for in the 30 days before the first price reduction — and it stays the same for the entire campaign.
Two consequences follow that surprise almost everyone:
Deepening the discount resets nothing. If you raise a discount from −50% to −60% halfway through a campaign, you are still comparing against the price before the campaign started. Legally it is one campaign, not two.
The reference survives the end of the campaign. For another 30 days after it ends, the sale price counts as the lowest. A campaign that follows too soon therefore looks different from what marketing expected. Here is an example.
The yo-yo effect: a discount labelled "it was cheaper a moment ago"
A model example we run into over and over:
Period
Price
until Jun 30
€19.90 (first campaign)
Jul 1–20
€49.90 (regular price)
from Jul 21
€24.90 (new campaign)
Product price over time: a first campaign at €19.90, a return to €49.90 and a new campaign at €24.90 where the 30-day lowest price sits below the sale price
The new campaign starts three weeks after the first one ended. The lowest price of the last 30 days is therefore €19.90 — less than the sale price. The shop advertises a discount, and the mandatory figure right next to it says: this was cheaper three weeks ago.
It is not a system error, just the plain arithmetic of two campaigns launched back to back. And it is not limited to individual products — when two catalogue-wide campaigns collide like this, the reference breaks for dozens of items at once.
There are only two ways out. Either go below the previous minimum, so the discount is real even against the first campaign. Or wait until the old campaign drops out of the 30-day window. Hence the one rule to take away from this article: leave 30 days of regular pricing between two campaigns on the same goods.
A note on terminology: this whole example is about ordinary discount campaigns. A genuine clearance — typically selling off stock close to its expiry date — follows its own legal rules and is not what this article covers.
A discount that lasts a year is not a discount
Every now and then we come across a product that has been "on sale" continuously for over a year. It never sold at its regular price during that time — so there is nothing to prove the lowest price with.
A discount is a time-limited campaign. When it lasts a year, it is not a discount but a regular price with a crossed-out fiction above it — and during an inspection you have no way to back it up. If a product should be cheaper permanently, lower its regular price.
Bundles: a more common offence than the 30-day rule itself
This is only half-related to the 30-day window, but in practice it is the most common offence of all, so it belongs here.
A typical "2+1 free" bundle sells for €50 and has €75 crossed out — the sum of the items bought separately. It looks like a discount. Except:
The bundle never sold for €75. It was created as a product at €50.
A crossed-out price is a visual discount announcement. Customers read it as "was €75, now €50", which never happened. This is no longer about the 30-day rule but about a misleading commercial practice: the impression of a price advantage by reference to a price that never applied to the product.
And it cannot be "fixed" by adding the lowest-price figure. That would just be another confusing number on the page.
The correct solution is not to use the strikethrough at all. Comparing with buying separately is a legitimate argument and it sells well — it just has to be written out, not crossed out:
Wrong: a bundle with a crossed-out sum of €75. Right: a €50 price and a sentence explaining what buying the items separately would cost
As an example, you could write: "Bought separately, these items would cost €75 in total — €25 more than this bundle." It is clear what the price is being compared with. Naming helps too — "Set of 3 – 2+1 free" carries the advantage on its own.
The same applies to a crossed-out manufacturer's suggested retail price. If you never sold at it, it is the same case.
A code in the announcement bar is a discount too
Site-wide discount codes are the most common campaign format and almost nobody handles them: the announcement bar says "SALE15 on everything" and nothing is crossed out on the products. It feels like an exception to the rules — no crossed-out price, no obligation. It is not.
A publicly advertised code is a discount announcement exactly like a crossed-out price. For the products it applies to, the lowest price of the last 30 days should be displayed — even though the product price stays written "undiscounted". And everything else in this article applies too: the reference is fixed before the campaign starts, raising the code from 15% to 20% does not reset it, and two code campaigns back to back produce the same yo-yo as two crossed-out ones.
So plan a code campaign exactly like a classic discount. An individual code for a specific customer — a loyalty reward or an apology for late delivery — is a different situation and not a public discount announcement.
Six rules for planning campaigns
Plan your campaign calendar ahead. Leave 30 days of regular pricing between campaigns on the same goods. Not because the law explicitly demands it — but because otherwise the reference from the last campaign bleeds into the new one.
Do not copy other shops' campaigns. "This shop does it that way, and they are big, so they must have it right" is the shortest path to trouble. From the outside you cannot see their price history, their terms and conditions or the legal interpretation they rely on. And above all: the reference is calculated from your history, not theirs — the same discount can come out clean elsewhere and as a yo-yo for you.
Do not experiment with prices across the board. Every short price cut writes itself into the reference for 30 days. Test on a few products, not the whole catalogue.
Budget for a return to the regular price. Thirty days of regular pricing before a big campaign is legitimate preparation — that is how you "clean" your history before Black Friday.
Only cross out genuine former prices. Not bundle sums, not suggested retail prices, not prices from elsewhere. Write comparisons as sentences.
Keep a price log. Without timestamped snapshots you cannot prove what was displayed when. We log every price change for our clients — and when an inspection came, it was the only way to prove what the customer actually saw.
And what about Shopify?
Short answer: nothing. Shopify neither calculates nor records the 30-day lowest price. Most App Store apps handle it as a rolling figure — "the lowest price of the last 30 days as of today". That is a different number from what the law wants: the law fixes the price before the campaign starts. During a campaign, a rolling calculation gradually catches up with the sale price and the figure loses its meaning. If you leave the calculation to an app, check which of the two numbers it actually computes.
One last note. This is practice from our projects, not legal advice — the details of the 30-day rule differ between EU member states, and several of them are disputed even among lawyers, from loyalty prices to what exactly counts as a "discount announcement". Before you build campaigns close to the edge, run the wording past a lawyer. And if you are dealing with this on Shopify, get in touch.
Frequently Asked Questions
The lowest price the product actually sold for in the 30 days before the first price reduction. The figure does not change during the campaign — not even when you deepen the discount — and for another 30 days after the campaign ends, the sale price counts as the lowest.
No. Deepening a discount, say from −50% to −60%, is still the same campaign and is compared against the price before it started. A new window only starts once the price returns to its regular level.
No. A crossed-out price announces a discount from a price the product used to sell for — and the sum of individual items is not such a price, because the bundle never sold for it. Write the comparison as a sentence next to the price instead of crossing anything out.
Yes. A publicly advertised code ("SALE15 on everything") is a discount announcement even though nothing is crossed out on the products — the lowest price of the last 30 days must be shown for the products the code applies to. An individual code for a single customer is not a public announcement.
No. Shopify neither calculates nor records the reference price. Most App Store apps calculate a rolling minimum up to today, which is a different number from what the law requires — the law fixes the lowest price before the campaign starts.