Shopify app · three EU consumer rules, one product page
The 30-day low under every discount, a withdrawal button, the manufacturer on the page.
Omnibus, the withdrawal function of 2023/2673 and the GPSR, done from one app. The prior price is computed from the changes the app observed, never typed by hand; the request page lives in your theme and the acknowledgement goes out the moment the customer confirms; the manufacturer and the warnings come from one place. It helps you comply and writes only its own metafields.
What it does
Three rules, six things, done properly.
The lowest price of the 30 days before every reduction
“Lowest price in the last 30 days: €42.00” under the price of every discounted variant, as Directive 2019/2161 (art. 6a) asks. Computed from the price and compare-at changes the app observed in your store, never typed by hand, never estimated: while the app has fewer than 30 days before a reduction, the label stays silent or says “lowest since”, as you choose.
A withdrawal button that reads the way the directive wrote it
“Withdraw from contract here” in the 24 official languages, from the text of Directive 2023/2673 (art. 11a). An app embed for the footer or a floating button, and a block for the product page. The request page opens inside your theme, in the shopper's language; on Pro the form itself can be a block on your own page, styled in the theme editor.
Two steps, a confirmation, an acknowledgement on a durable medium
Name, e-mail, order number, what is returned, a comment; then “Confirm withdrawal”. The acknowledgement e-mail goes out only after the confirmation, with the content, the date and the time of the request. Your Reply-To, and on Pro your own “what happens next” and logo.
The request in the app and in your chat
Every confirmed request lands in Withdrawals with the order matched by its number (date and delivery status, the last 60 days), a status you set and a note, and in Telegram, Slack, Discord or e-mail as one card with the first name and initial and the order number. The e-mail stays in the app, masked.
GPSR: manufacturer, responsible person and warnings per product
One default manufacturer covers every product; others are assigned by product, or by vendor and collection on Pro. A product made outside the EU names its responsible person. Warnings and the model are written per product. The Product safety block prints it all on the product page, in your words.
Writes only its own metafields
The prior price per variant, the manufacturer, the warnings and your settings are app-owned metafields and one metaobject. The app never changes a price, a compare-at price, a product or an order, and it never creates a refund: that stays in Shopify, with you.
Why it matters
“Was €50, now €39” is not enough any more. The law asks what it was in the 30 days before.
Apps that let you type the old price by hand put the number on you. This one shows what it observed, and says “lowest since” when it has seen less than 30 days, so a label is never invented. It helps you comply; what applies to your store is yours to check.
How it works
On the page in about ten minutes.
Install from the Shopify App Store
No account to create. The app reads your products and prices, writes its own metafields, reads order dates to match a request by its number (Level 1 protected customer data, no customer fields), and owns one metaobject definition, Manufacturer.
Put the blocks on the product page
Home → Get set up opens the theme editor: add Lowest price (EU) under the price and Product safety lower down; in App embeds switch on Withdrawal link (EU). The blocks are silent until there is something to say.
Enter your manufacturer, add a recipient
Safety info: name, address, e-mail; the responsible person in the EU if you are outside it. Recipients: Telegram in two clicks, Slack, Discord or an e-mail address. Every withdrawal request arrives there the moment the customer confirms it.
Is it for you?
We would rather you know now than after a month.
Works best for
- Stores that sell to consumers in the EU, from inside or outside the EU, in any currency, and run discounts.
- Shops that want the prior price shown without a spreadsheet of old prices, and the withdrawal requests in one place.
- Stores on Online Store 2.0 themes, where the blocks go on the product page in the theme editor.
Not a good fit
- Anyone who needs legal advice: the app shows the numbers and takes the requests; whether a rule applies to you is a question for a lawyer.
- Discounts that started before the install: the app shows only what it observed, so the prior appears after 30 observed days.
- Headless storefronts without the theme editor, and stores that need the label on collection pages or in the cart.
The app writes only its own metafields and one metaobject; it never changes a price, a product or an order. It reads order dates to match a request by its number, no customer fields. Read the full privacy policy.
Plans
Free covers the three rules. Pro adds history, bulk GPSR and the report. Pro+ adds your own words and colours.
Free $0
- The 30-day low under every discount, on every product
- The withdrawal button, the request page and the acknowledgement e-mail
- Manufacturer and warnings per product, one default for all
- One recipient, 90 days of requests in the app
Pro $5/mo
or $49 a year · 14-day free trial
- Price history chart on the product page, 30 or 90 days
- Manufacturer by vendor or collection; blocks for EU shoppers only
- The compliance report: every reduction with its 30-day price history, the requests, the safety coverage, ready to print
- Up to 10 recipients · two years of requests · CSV
Pro+ $9/mo
or $89 a year · 14-day free trial
- Everything in Pro
- The request page in your words, button colours and width, with a live preview of every step
- The Withdrawal form block: the form on a page of your own, styled in the theme editor
- The acknowledgement e-mail in your words, with your logo, colours and text style
Billed by Shopify on your regular invoice. Moving down a plan deletes nothing: the blocks stay on, the paid things wait until the plan is back.
Questions
Where does the prior price come from?
From what the app saw. Every price and compare-at change Shopify reports is remembered, and the whole catalogue is read again every night. The prior price of a discount is the lowest price of the 30 days before the reduction began. Nothing is estimated: while the app has seen fewer than 30 days before a reduction, the label stays hidden, or says “Lowest price since <date>” if you prefer, and the Prices screen says so.
Does the app make my store compliant?
It helps you comply: it computes and shows the numbers the law asks for, takes the requests and prints the safety information you entered. Whether and how a rule applies to your store, and what you enter, is yours to check, with a lawyer if in doubt. We do not give legal advice.
What does the customer see after “Withdraw from contract here”?
A page in your theme, in their language: name, e-mail, order number, what they return, a comment. Then one more step, “Confirm withdrawal”, and a confirmation page with the request number. The acknowledgement e-mail goes out only after that confirmation. The customer never sees whether an order was found: that is for you, in the app. On Pro the same form can sit as a block on a page of your own, with its words and colours set in the theme editor.
What if the order number is wrong, or the order is old?
The request is taken anyway and marked “not found” in the app. The app searches the orders of the last 60 days, the window Shopify gives without wider order access. A customer who mistypes still has a valid request; you sort it out from the e-mail they left.
Which languages?
The storefront strings of the blocks, the embed and the request page come in the 24 official EU languages, from the wording of the directives; the acknowledgement e-mail in seven (English, German, French, Spanish, Italian, Dutch, Polish), the rest fall back to English. The app admin is in English.
Prices in other currencies?
The app reads prices in your shop currency. A market with its own currency sees the prior price converted at the same ratio as the price on show; a separate price list per market is not read. Discounts without a compare-at price are not seen unless you choose “Any price drop” in Prices.
Where do the blocks show?
On the product page only, in Online Store 2.0 themes: the blocks go on the product template in the theme editor, the withdrawal button is an app embed. Collection pages, search and the cart are not covered in this version.
What does each plan include?
Free covers the three rules: the 30-day low under every discount, the withdrawal button, page and acknowledgement in 24 languages, manufacturer and warnings per product with one default, one recipient, 90 days of requests in the app. Pro, $5 a month or $49 a year with 14 free days, adds the price history chart, assignment by vendor or collection, blocks for EU shoppers only, up to 10 recipients, two years of requests, CSV and the compliance report. Pro+, $9 a month or $89 a year, adds the look: the request page in your words and colours, the Withdrawal form block for your own page, and the acknowledgement e-mail in your words with your logo, colours and text style.
Privacy
Products and prices read, the app's own metafields written, order dates read to match a request. The customer's name and e-mail come from the form they fill in, stored encrypted and shown masked. Read the full privacy policy.