Most stores don’t run one promotion — they run several. You might want quantity breaks on a hero product, a bundle deal on a collection, and a free gift over a spend threshold, all live at the same time. The worry with multiple discounts is real: will they stack in ways you didn’t intend, will two offers collide on the same cart, and will one of them quietly leak margin at checkout? This guide explains how Shopify actually handles more than one discount, how offer priority decides which one wins, and how to keep the whole thing enforced rather than hopeful.
Can Shopify stack discounts?
Not freely. Shopify sorts every discount into one of three combination classes — product discounts, order discounts, and shipping discounts — and each discount you create can be marked as combinable with the other classes. So a product discount can combine with a shipping discount if you allow it. What Shopify will not do by default is stack two discounts of the same class: two overlapping automatic product discounts don’t add together. Shopify applies one and picks the best deal for the shopper.
That’s the crux most merchants miss. “Combinable” means across classes, not within a class. If you set up two automatic percentage-off product discounts on the same items, you don’t get both — you get whichever is better for the customer. For the native setup and its other limits, see how to create automatic discounts on Shopify.
So you can genuinely run several discounts at once — a product discount, an order discount, and free shipping together — as long as each is a different class and marked combinable. The moment you want two offers of the same kind (say, quantity breaks and a bundle that both discount products), native combinations run out of road, and you need something that decides between them.
Which offer should win
When two offers could apply to the same cart, one of them has to win. There are two sensible policies, and a good offer app lets you choose:
- Best deal for the shopper. The app compares the qualifying offers and applies the single largest saving. This is the safest default — the customer always feels they got the best price, and you never accidentally stack two margins away.
- A priority order you set. You rank your offers, and the highest-priority qualifying one wins. Use this when a specific promotion should take precedence — a launch bundle over a standing quantity break, for example.
Scope matters here too. A per-product offer (buy 3 of this item and save) is narrow and precise; a collection-level offer (10% off everything in Summer) is broad. When both match a cart, priority rules decide which applies — which is exactly why “just turn them all on” is risky without a system that resolves overlaps deterministically. The goal is predictable margin: you should be able to say, for any cart, which single offer applied and why. Running several offers well is one of the highest-leverage things you can do for average order value.
Why a Shopify Function makes it safe
Deciding which offer wins is only half the job. The other half is enforcing that decision at the moment of payment — and that’s where a Shopify Function matters.
A Function is server-side discount logic that runs at checkout. When you’re juggling multiple offers, it re-evaluates the whole cart at payment time, re-runs your priority rules, and applies the one winning offer. Nothing else survives. That’s the difference between an offer that’s shown and an offer that’s guaranteed.
Compare that with storefront-JavaScript apps that layer discounts in the cart. They look correct on the product page, but the cart is a separate, dynamic object. With several offers live, a JS-only app can let a double discount or an unqualified offer ride through to checkout — a shopper removes the item that triggered the free gift, but the gift stays; or two offers both apply because nothing re-checked the cart server-side. Each of those is a direct margin leak. A Function re-validates, so the charge always matches the single intended offer, however the shopper edits the cart. For the full trade-off, see Shopify Functions vs discount apps.
The practical setup
If you want several offers running together without babysitting Shopify’s combination classes, run them through one app that resolves priority for you and enforces it with a Function. Our free Profit Flow AOV Bundle runs quantity breaks, bundles, BOGO and a free gift side by side, applies the best deal (or your priority order) per cart, and enforces the winner at checkout — so you never stack two offers by accident.
Whatever you use, test it the honest way: build a cart that qualifies for two offers at once, confirm the right one wins, then edit the cart to break the condition and confirm the discount disappears. That single test catches almost every leak before a customer does.
Profit Flow AOV Bundle runs quantity breaks, bundles, BOGO and a checkout-safe free gift together on any Online Store 2.0 theme, free. Add it to your store →
Running several promotions and not sure which one is actually winning at checkout? Install the free Profit Flow AOV Bundle — multiple offers, one winner per cart, every one enforced by a Shopify Function. Want a second pair of eyes on where margin leaks? Start with a free profit audit.