Learn the practical steps to stay compliant and keep your discounts trustworthy.
WHY THE RULE MATTERS
If you run an EU webshop you know that showing a discount feels good. It can turn a hesitant visitor into a buyer. But the Omnibus directive says you may only advertise a price reduction if the discounted price is lower than the lowest price you charged in the previous 30 days. Get this wrong and you risk a fine, a complaint from a consumer authority, or a competitor reporting you for an unfair practice. The feeling you really want is confidence: you can run a promotion without looking over your shoulder wondering if you broke the law.
WHAT YOU NEED TO TRACK
To prove compliance you must keep a record of the price for every SKU you sell. For each day you need to know:
1. The actual selling price (including any taxes) that was charged to customers.
2. The lowest price that appeared in the last 30 calendar days for that same SKU.
3. Whether the current price you want to show as a discount is strictly lower than that 30-day low.
If you change the price multiple times a day you must log each transaction or each price update, because the rule looks at the lowest price *ever* charged in the window, not just the price at midnight. You also need to store the timestamp so you can drop older entries once they fall outside the 30-day span.
In practice this means a simple table with columns: SKU, price, timestamp. Every time a sale occurs or a price is set you insert a row. When you evaluate a discount you query the minimum price for that SKU where timestamp is greater than now minus 30 days. If the new price is lower than that minimum you are good to go.
HOW THE VAT CHECK API HELPS
The VAT Check API already does three things for you: VIES validation of EU VAT numbers (with a 24-hour cache), Omnibus-richtlijn 2019/2161 compliance (the mandatory lowest-price-of-30-days check when a discount is applied), and a shipping-threshold calculator over the 27 EU VAT rates.
When you call the Omnibus endpoint you send the SKU, the candidate discounted price, and the date you want to apply it. The service looks at its internal price history (which you update via a separate “price-feed” call) and returns a boolean `allowed` plus a short message. If the price is not lower than the 30-day low you get `allowed: false` and a hint like “current price is not below the lowest price in the last 30 days”.
Because the API handles the date math and the sliding window you do not need to build your own cron jobs or worry about leap-year edge cases. You simply feed it the price updates as they happen and ask it before you show the discount.
AVOIDING COMMON PITFALLS
A frequent mistake is to rely only on the HTTP status code from the VIES validation endpoint. The VIES service returns HTTP 200 even when it is experiencing an outage. The real signal is in the `userError` field: only `VALID` and `INVALID` are definitive judgments. Codes like `MS_UNAVAILABLE`, `MS_MAX_CONCURRENT_REQ`, `GLOBAL_MAX_CONCURRENT_REQ`, `SERVICE_UNAVAILABLE`, or `TIMEOUT` mean the check could not be performed at that moment. If you treat any 200 as a valid VAT number you might cache a temporary failure as a permanent invalidation, leading to false rejections later.
The same principle applies to the Omnibus endpoint: always read the `allowed` flag and the accompanying message. Do not assume success because you got a 200 response.
Another pitfall is forgetting to update the price feed when you run a flash sale that lasts only a few hours. If you never log those low prices the 30-day minimum will stay artificially high, and you might block a legitimate discount that is actually compliant. Make sure every price change,whether it comes from a manual admin edit, a scheduled campaign, or a cart-level coupon,gets recorded before you ask the API for permission.
NEXT STEPS
Start by adding a simple price-logging hook to your order-processing or price-update code. Then integrate the VAT Check API’s Omnibus endpoint into the place where you render a sale badge or strike-through price. Test with a few known scenarios: a price that is truly lower than the 30-day low, a price that equals the low, and a price that is higher. Verify that the API’s `allowed` flag matches your expectation.
When you feel comfortable that your discount logic is sound, you can move on to automating compliance reports or exploring the shipping-threshold calculator for cross-border orders.
If you want a quick reference to keep handy while you build this, grab the free checklist that walks you through the VAT and Omnibus steps: https://insightoperator.org
Keep your promotions honest, and let the API worry about the heavy lifting so you can focus on growing your shop.