All articles →

Five Dutch webshops paid 621,000 euro for a discount badge

The "was 49.95, now 29.95" sticker has a rule behind it. Most small shops are breaking it without knowing.

You have seen the badge a thousand times. Old price crossed out, new price in red, maybe a countdown timer. Every store does it. Your theme has a setting for it.

Here is the part nobody mentions when they sell you the theme: in the EU, that crossed out price is regulated. Get it wrong and it is not a warning letter, it is a fine.

The Rule, In One Sentence

If you announce a price reduction, the "before" price you show must be the lowest price you charged in the previous 30 days. Not the RRP. Not what you charged in January. The lowest price in the last 30 days.

That is Directive 2019/2161, the Omnibus Directive, in force across all 27 member states.

Why This Is Not Theoretical

Enforcement is running. According to Bird & Bird's 2025 analysis of the directive, penalties are being imposed in Belgium, the Netherlands and Spain, and five companies in the Netherlands were fined a total of 621,000 euro.

The ceiling is worse than the average case. The directive sets fines at up to 4 percent of annual turnover in the affected member states, with a 2 million euro floor where turnover cannot be determined. Individual member states are free to go higher.

Where Small Shops Trip

Three patterns, all of them easy to fall into.

The permanent sale. You set the "compare at" price once when you create the product and never touch it. Six months later that reference price has no relationship to anything you actually charged. That is the clearest violation there is.

The reset trick. You raise the price for a week, then discount from the raised price. The 30 day lookback exists specifically to stop this.

The app that decides for you. Plenty of discount and countdown apps write the reference price for you, based on the RRP from your supplier feed. The app is not liable. You are.

What Compliant Actually Looks Like

You need to know, per product, what your lowest price was over the previous 30 days, and show that as the reference. If your planned discount is not actually below that number, you cannot present it as a discount at all.

For a shop with 40 products and a price history, that is a spreadsheet problem. For a shop with 400, it is not.

I built an endpoint for it. You send your price history, you get back the legally correct reference price, ready made display text in Dutch and English, and a warning when the discount you are planning would not be compliant.

curl -X POST https://api.insightoperator.org/api/v2/omnibus/lowest-price \
      -H 'Content-Type: application/json' \
      -d '{"current_price":19.99,
           "price_history":[{"price":24.99,"date":"2026-07-01"},
                            {"price":17.99,"date":"2026-07-10"}],
           "announced_discount_from":24.99}'

That example comes back is_valid_discount: false, because you sold it for 17.99 ten days ago. Advertising "was 24.99" would be the violation. The correct line is "lowest price in the last 30 days: 17.99".

The same API validates EU VAT numbers against VIES and gives you the current VAT rates for all 27 member states, which is the other half of the compliance picture.

THE 12 POINT LIST

Omnibus is one item on a longer list. VAT registration thresholds, IOSS, the distance selling rules, and the product research items that decide whether any of it was worth doing.

I put the whole thing in a 12 point checklist you can run through before you commit money to a product. Free, appears on your screen straight away: https://insightoperator.org

The 12 point EU dropship checklist
Check this before you spend a euro on inventory. Free, on your screen straight away.
Get the checklist →