Shopify discounts, without the regret
Put it on sale.Put it back.
Flow Discounts runs price drops, volume tiers, buy-one-get-one, cart goals, shipping offers and code campaigns across catalogues of any size. Before it changes a price it writes the old one down, and when the sale ends it puts every one back.
Changing prices is easy. Changing them back is not.
Shopify keeps no history of what a product used to cost. An app that edits your prices is writing over the only copy you had, and if it loses track of what it wrote, or you uninstall it mid-sale, the original price is simply gone.
That is the reason merchants end a sale and find products still marked down weeks later, at prices nobody chose. It is the single most common complaint in this category, and it is an architecture problem, not a bug.
So we built the ledger first
Flow Discounts records the price and compare-at price of every variant before it touches it. Ending a sale is a second pass over that record, not a guess. If a price no longer matches what we wrote, we do not overwrite it: we leave your change alone and tell you which products they were.
Try the undo
Run the sale on five products. Then change one price yourself, the way you would in the Shopify admin on a Tuesday afternoon, and end the sale.
Your products
no sale
Merino crew neck
Charcoal · M
—$129.00
Waxed field jacket
Olive · L
—$249.00
Oxford shirt
White · 16
—$89.00
Leather belt
Tan · 34
—$65.00
Wool scarf
Navy
—$55.00
What we recorded
Every line here is a row in the price ledger. It is what makes the undo possible, and what tells you when someone else got there first.
- waiting for a sale…
Seven kinds of sale, one ledger
One app for the sale you are running this week and the one you are running next month. They share the same product picker, the same schedule, and the same record of what changed.
Price sale
Edits the real price, so the product simply costs less on every sales channel, with the old price struck through. No checkout discount, no discount slot used.
This is the only kind that rewrites your catalogue, which is why every original price is recorded before it does.
- Percentage off, a fixed amount off, or a new price
- Discount from the current price or the compare-at price
- Round endings to .99, .95 or .00
- Skip products already marked down
- Floors: minimum margin, a multiple of cost, or a fixed amount
- Caps: maximum discount, maximum saving, leave expensive items alone
Merino crew neck
$90.30$129.00
Shown at the sale price everywhere, with the old price struck through
Built for catalogues that do not fit on one screen
Applying a sale across a catalogue that big is a queue, not a request. Work runs in the background in resumable chunks, respects Shopify's rate limits, and reports honest progress. A sale that is half applied says so.
- Unlimited
- discounted variants on the top plan
- 7
- kinds of sale, one price ledger
- 10,000
- discount codes per campaign
- 0
- customer records read
Say it on the storefront, if you want to
Countdowns, a volume table, a shipping bar and a saving line. They run in your shopper’s browser, talk only to your own store, set no cookies, and send nothing to us.
Sale ends in
Countdown
On the home page as a bar, on product pages as a card.
Buy more, save more Buy 2 – 4 10% off each Buy 5 – 9 18% off each Buy 10+ 25% off each Volume table
On the product page, with a badge on collection cards.
Add $18.40 more to unlock free shipping
Shipping progress
On the product page, in the cart, or both.
- Total
- $300.00
- Saving
- $42.00
Cart saving
Above the cart totals. Works with any discount, not just ours.
Widgets are optional and off until you switch them on in your theme. A price sale needs none of them: the new price is the real price, so it shows everywhere on its own, including the Shop app and your product feeds.
Priced on how much you run, not on how many variants you own
Every plan has every feature. What changes is how many sales you can run at once, and how many variants can be discounted at the same time.
Every sale type
The price ledger and full restore
Scheduled sales in your store's time zone
Product selection by file
Storefront widgets
Version history on every sale
Free to start
Prove it on a real sale before you pay anything.
$0forever
- Sales at once
- 3
- Discounted variants
- 10
- Support
- Email support
Starter
A small catalogue running a handful of sales.
$9.90per month
- Sales at once
- 10
- Discounted variants
- 150
- Support
- Email support
- Most stores land here
Growth
The plan most stores settle on.
$24.90per month
- Sales at once
- 30
- Discounted variants
- 1,000
- Support
- Email support
Scale
Seasonal sales across a deep catalogue.
$39.90per month
- Sales at once
- 100
- Discounted variants
- 10,000
- Support
- Priority email and live chat
Enterprise
No ceilings, for catalogues in the hundreds of thousands.
$99.90per month
- Sales at once
- Unlimited
- Discounted variants
- Unlimited
- Support
- Priority email and live chat
Paid plans include a 3-day free trial. Billing runs through Shopify and appears on your Shopify invoice; we never see a card. Ending a sale and restoring your prices always works, on every plan, even if a payment fails.
Questions merchants actually ask
What happens to my prices if I uninstall while a sale is running?
They stay at the sale price. Shopify cancels an app's access the moment you uninstall, before it tells the app anything, so nothing can write to your store after that. End your sales first: the app's home page always shows how many prices it is currently holding down. If you reinstall within 48 hours we can still put them back from the ledger.
Do you read my customers' details?
No. The app never opens a customer record and never asks Shopify for one. It can list your customer groups by name so you can limit a sale to one, and it stores only the reference number of the group you picked. It does not request access to orders at all.
What if I change a price myself while a sale is running?
Your change wins. When the sale ends, the app compares each price against what it wrote. If they match, it restores the original. If they do not, it leaves your price alone and lists that product as changed elsewhere, with a downloadable file of every one.
Does a price sale use up one of my discount slots?
No. A price sale edits the product price itself, so there is no discount object and no slot consumed. The other six kinds create one Shopify discount each, and Shopify allows twenty-five automatic discounts per store across every app you have installed.
Can I see what a sale did?
Every save is a version you can open, compare and restore. Every sale keeps a record of each variant it touched, what the price was before, what it set, and how it turned out. You can download the original prices at any time, and a copy is saved into your own store's Files after each price sale.
How do I pick products?
By product, by variant, by collection, by tag, by vendor, by product type, by search, or by uploading a CSV keyed on SKU, barcode, handle or title. Rule-based selections can keep themselves up to date, so products that start matching join the sale and products that stop matching leave it.
Does it slow my storefront down?
There is no storefront JavaScript unless you switch a widget on. A price sale shows the new price natively, because it is the real price. The optional widgets are small, load only on the pages that need them, and talk only to your own store.
Which countries can a shipping offer cover?
Any set you choose, or everywhere except a list. If the shopper has not entered an address yet, the offer is withheld rather than guessed, so nobody is promised free shipping that checkout then refuses.
Run the sale. Keep the receipt.
Install it, point it at a collection, and end the sale whenever you like. Every price goes back exactly where it was.