Product pages
Add the block under the price once. It follows the version the shopper picks, from a dropdown, a swatch or a link to one version, and shows nothing for a combination that is not available.
For Shopify stores selling in the EU
When you announce a price reduction to EU shoppers, the Omnibus rules ask you to show the lowest price you charged in the 30 days before it. TB Dynamic Pricing works that price out from your own price history and shows it on product pages, collection grids and the cart, in the shopper’s language and currency.
The EU’s Omnibus Directive, in force since May 2022, added a requirement to how shops announce price reductions. Wherever you tell shoppers a price has come down, with a crossed-out price or a percentage off, you also show the prior price: the lowest price you charged for that product in the 30 days before the reduction.
That lets a shopper tell a real reduction from a price that went up last week so it could come down this week. Any percentage you show is worked out from the prior price too.
An example. The Alpine Down Jacket sold at €189.00 all through October. On 6 November you mark it down to €169.99, and under the price the shopper reads: Lowest price in the 30 days before this discount: €189.00.
Now say the jacket had been on sale at €179.00 for a week in mid October. The lowest price in the 30 days before 6 November is then €179.00, so that is the figure the line shows. A percentage off comes to 5% from €179.00, where the €189.00 price would have suggested 10%.
Each EU country writes the rule into its own law, and some set different details for certain goods, such as food that goes off quickly. The app works to 30 days by default, and you can change how far back it looks in Settings.
The app keeps a record of every price from the day you install it, including prices changed in the Shopify admin or by other apps, and works out each product’s 30-day price from that record.
The line goes directly under the price it is about, wherever the discount shows. In October 2025 Germany’s Federal Court of Justice held that an asterisk pointing to a footnote did not make the 30-day price clear enough (BGH, in German).
Add the block under the price once. It follows the version the shopper picks, from a dropdown, a swatch or a link to one version, and shows nothing for a combination that is not available.
Collection pages, search results, recommendations, featured collections and quick views. The line shows only while the card shows the price it was worked out from, so a swatch that switches the card to a dearer version removes it.
Updated when a shopper adds to the cart or changes a quantity. The line sits under the unit price, or under the line total in themes that only show that.
Checkout itself is not covered. Shopify lets apps add to the checkout steps only on Shopify Plus, so the line stops at the cart.
Your history is kept in your store’s currency. This is how the line gets to the currency your shopper is looking at, and when it stays hidden.
Shown as it is, in your theme's own money format, and only while the price on the page is the price the figure was worked out from.
The 30-day price is converted at the same rate as the price beside it, market adjustments included, and rounded down. Any rounding makes the saving look a little smaller, never larger.
If you type prices into a price list for a market, your history says nothing about those prices, so the line stays hidden for shoppers in that market.
If you show one, it is worked out in your store's currency from the 30-day price, so a change in exchange rate never moves it.
The line is shown in the language the shopper is reading, whatever language your admin is in. It comes with our wording in 15 languages.
The EU price rules screen lists every language your store publishes, with a field for each line, a live preview and a reset button. A language we do not ship, Japanese for example, starts from the English text until you write your own.
The wording is yours to decide and stand behind, so read our defaults through, above all in languages you do not speak. Before saving, the app checks that each line still contains the price.
With the EU price rules on, the app compares each discount with your own prices from the 30 days before it, and keeps a dated record you can download.
Every price the app writes, from a rule, a bulk change, a sale or an undo, is checked first. If it would show a crossed-out price above your 30-day low, the app lowers the crossed-out price to match, or holds the change for you to look at. You choose which in Settings.
A sale you set in the Shopify admin or with another app is checked too, and listed on the EU price rules screen with the numbers. The app does not rewrite a price you set yourself.
The 30 days are counted back from the day the discount started, so the figure stays the same for the whole sale and changes only when your prices do.
A spreadsheet of every price and crossed-out price for each product, as dated periods, up to 400 days back. Accented product names come through intact in Excel.
Consumer authorities and courts in several EU countries have looked at how shops show the prior price. These are the points they raised, with a source for each, and what the app does about each one.
Poland's consumer authority found the prior price missing at some steps of the purchase, the cart among them, or on some devices. It also found a 30-day price recalculated every day while the selling price stayed the same, and percentages worked out from a "regular" price instead of the 30-day low. UOKiK announcement (Polish)
In the app: The line shows on product pages, grids and the cart at every screen width, the 30 days are counted from the start of the discount, and percentages come from the 30-day price.
The court held that the 30-day price has to be clear at a glance. A struck-through price and a percentage with an asterisk pointing to a footnote did not meet that. BGH press release (German)
In the app: The line sits directly under the price it is about.
Across Black Friday and Cyber Monday 2025, 30% of the shops checked referenced their discounts incorrectly. National authorities can act on the findings. European Commission news
In the app: Every price the app writes is checked against your own 30-day history before it goes out.
In one example, an item marked 43% off gave the sale price itself as its "30-day best price". UOKiK announcement (English)
In the app: The 30 days end when the discount starts, so a sale price is never counted as its own prior price.
In these cases the app hides the line or stays out of the way, so the figure your shoppers see is one your own price history backs up.
No theme code to edit. The setup guide has the details for each step.
One switch on the app's home screen. The app has been recording your prices since the day you installed it.
A button on the EU price rules screen opens your theme editor, ready to place the block under the price.
A second button switches on the app embed that covers collection grids and the cart.
The screen reads your live theme and tells you whether the block and the embed are on. When it cannot tell, it says so.
The rest of the app, from bulk price changes to scheduled sales, is on the TB Dynamic Pricing page.
Since the EU's Omnibus Directive took effect in May 2022, a shop that announces a price reduction to shoppers in the EU has to show the prior price: the lowest price it charged in the 30 days before the reduction. Each EU country writes the rule into its own law, and some set different details for certain goods, so check how your country applies it.
Directly under the price on product pages, on collection and search grids, recommendations and quick views, and in the cart page and cart drawer. It shows only on products with a discount, in the shopper's language and currency.
It is added as a theme block and an app embed, so you do not edit theme code. It has been tested against the markup of Shopify's Dawn and Horizon themes and a plain generic theme, and the EU price rules screen checks your live theme and tells you whether the block and the embed are on.
Shopify does not let apps read prices from before they were installed, so the app records from the day you install. Until a product has enough history to back up the figure, the line stays hidden for that product. The EU price rules screen shows how many days are recorded.
Yes. The EU price rules screen lists every language your store publishes, with our default wording for each line, a live preview and a reset button. Languages we do not ship start from the English text until you write your own.
Every plan, starting with Essentials at $12 a month, with a 14-day free trial. The EU price rules are off when you install and take one switch to turn on.
The line comes off your storefront straight away. The app keeps recording your prices either way, so switching it back on picks up where you left off.
No. The app shows figures worked out from your own prices and the settings you choose. Whether and how the rules apply to your store is your decision, and if you are unsure, ask someone qualified. Our terms of service say the same.
This page describes what TB Dynamic Pricing does. It is not legal advice, and using the app does not by itself make a store meet any law. Whether and how these rules apply to your business is your decision; see our terms of service.
The EU price rules come with every plan, from $12 a month with a 14-day free trial. Talk with the Thought Bulb team and we’ll help you place the block and the embed on your theme.