How the prior price is calculated
The 30-day window, campaigns, percentages, warnings and the worked examples behind OmniBuzz's price engine.
This page describes the decisions OmniBuzz takes. Where the law is silent, the app takes the conservative reading. It is not legal advice. See Legal basis for the sources.
The prior price
The prior price is the lowest price you applied in the 30 days before a reduction starts. OmniBuzz works it out like this:
- One value per day. The price history of each variant, in each market and currency, is turned into one value per calendar day in your shop’s time zone. A price that applied for any part of a day counts for that day, and the day’s value is the lowest one.
- On sale means compare-at above price. A variant is on sale when its compare-at price is above its price.
- Campaign start. A campaign starts at the most recent change from not on sale to on sale. If the price goes back to normal at any point, the campaign ends and the next sale is a new one. A weekly “20% off” is not one long campaign.
- Anchor day. Each time the price drops inside a campaign, OmniBuzz treats it as a new announcement. The anchor is the day of the most recent drop, or the campaign start if there is none.
- Window. The prior price is the lowest of the daily values in the 30 days before the anchor day, and of every price you applied on the anchor day before the drop.
Earlier promotional prices inside the window count. A price raised shortly before a sale does not become the reference, because the lowest price still wins.
Progressive reductions. Some countries use the Article 6a(5) option that lets the prior price stay fixed while one uninterrupted campaign gets deeper. The price engine supports it, but the admin has no switch for it yet. Every market uses the strict reading above.
The percentage
The percentage is floor((prior - price) × 100 / prior), calculated in whole cents and rounded down, so the shop never claims more than it gives. It is always based on the prior price, never on your crossed-out price. If the reduction is under 1%, or the price is not below the prior price, the percentage is 0 and the storefront shows only the prior price.
Warnings
OmniBuzz lists two problems on the Home page:
- Sale price is not below the lowest price of the last 30 days. The sale is not a real reduction: the price is at or above the prior price. Remove the sale or lower the price.
- Price is above the lowest price of the last 30 days. The current price is higher than the reference.
The label still shows the prior price in both cases. Your theme keeps showing the crossed-out compare-at price, which the app cannot remove, so the prior price must be stated next to it. Showing it does not make such a sale lawful.
A third warning counts variants with less than 30 days of price history so far.
New products
If a product has been on the market for fewer than 30 days, the window can shrink to the days since launch, but only where a member state allows a shorter period for new goods under Article 6a(4). OmniBuzz can apply that rule, but the admin has no setting for it yet, so the 30-day window applies. A product with less history than the window is marked as having partial history instead.
Worked examples
All amounts are in euros. The examples are taken from the app’s test cases.
The lowest price, not the last price
A jacket sold at 100 for weeks, went up to 160 on 10 October, and a sale starts on 5 November at 50. The window is 6 October to 4 November. The lowest price in it is 100, so the prior price is 100 and the reduction is -50%. Measured from the crossed-out 160, the same sale would read -68%.
A sale that repeats an earlier promo price
The normal price is 100. On Sunday 11 October a one-day promo runs at 80. On Sunday 18 October the shop runs it again at 80. The 11 October price is inside the window, so the prior price is 80 and the second sale is not a reduction at all. The label shows “Lowest price in the last 30 days: €80.00” with no percentage, and the app warns. A real 20% off would be 64.
The increase trap
The price is 100 for weeks, goes up to 130 for five days, and then a “20% off” sale at 104 starts, calculated from 130. The lowest price in the window is still 100. The sale price of 104 is above it, so there is no reduction. To offer a real 20% off the prior price of 100, set the price to 80.
The CJEU banana case
A price of 1.29 rose to 1.69, then an offer at 1.29 came back with 1.69 crossed out. The 30-day low is 1.29, equal to the offer price. Measured from the crossed-out price this would look like about 24% off. Measured from the prior price there is no reduction.
Right after install
The app was installed on 17 October and the first sale starts on 29 October at 70, with a compare-at price of 100. OmniBuzz has 12 days of history, all at 100, so it shows a prior price of 100 and -30% and marks the variant as partial. If you sold at 85 between 29 September and 16 October, the true prior price is 85 and the legal reduction is 17%, not 30%. This is the case the warning exists for.
Known limits
- Discount codes and automatic discounts are in scope of the rule but are not modelled. OmniBuzz only sees price and compare-at price. Check the prior price yourself for public codes.
- The perishables exemption is not modelled.
- The law applies per sales channel. OmniBuzz models Shopify markets, not physical stores.
- Price history is kept for 180 days (730 days on Plus). When the 30-day window would reach past the history that is kept, the label is hidden for that variant and market, and the admin counts it among the variants whose sale started before the stored price history. This happens when a campaign’s start, or its latest price drop, is more than about 150 days back (about 700 on Plus). After you leave Plus, the longer history is kept for 30 more days.
- One history per variant and market is OmniBuzz’s reading of the rule, not something the law states.