Skip to content
Discount Stacking

Stack Shopify discounts so cart and checkout always agree

How to stack discounts in Shopify comes down to settings the platform hides by default: every discount belongs to a class (product, order, or shipping), and whether two discounts combine is decided per offer, per class. Stackable puts those combine switches on every offer, so a volume tier, a spend goal, and free shipping add up exactly the way you configured them, every time.

The problem

Merchants on the Shopify forums ask the same question on repeat:

Why does my store apply only the highest discount and ignore the rest? I need a volume discount and free shipping to work on the same order, and Shopify support says the platform just picks one discount and drops the other.

Shopify sorts every discount into a class (product, order, or shipping) and, unless each discount explicitly opts in, refuses to combine them: when two discounts could both apply, checkout keeps one and silently drops the other. Merchants running a volume tier alongside a storewide order discount get inconsistent results with no warning, and the only way to catch it is to place a test order and read the receipt.

How it works

How Stackable solves it

The campaign editor Stacking step: combine with product discounts is on, combine with order discounts is on, and combine with shipping discounts is off.
Campaign editor: the three combine switches on the Stacking step of the campaign wizard.
01

Set the combine switches on every offer

Each offer has three switches: combine with product discounts, with order discounts, and with shipping discounts. They map one-to-one to how Shopify decides combinations at checkout, and an allocation control decides which units get a partial reward. Nothing is left to a hidden default.

The cart simulator: a $180.00 sample cart where a 15% product discount takes $27.00 and free shipping takes $9.00, for a $153.00 checkout total.
Cart simulator: a sample cart showing every offer applied and the resulting combined total.
02

Preview the combined math before it's live

Run a sample cart through every active offer and see the exact line-by-line total, the same calculation checkout will run.

A checkout order summary carrying both stacked discount lines, minus $27.00 and minus $9.00, and the same $153.00 total the cart showed.
Checkout order summary showing the same stacked discount lines the cart displayed.
03

Checkout applies the identical stack

The math runs inside a Shopify Function, so cart, checkout, and Shop Pay compute the same total off one engine, not separate logic to keep in sync.

How stacking actually works

The discount-class combination matrix

Shopify sorts every discount into one of three classes: product, order, or shipping. Whether two discounts combine across classes is decided per offer, and Stackable puts that switch on every offer you create.

The discount-class combination matrix
Combines with →Product discountsOrder discountsShipping discounts
Product discountsCombines, one product discount per cart lineConfigurable per offerConfigurable per offer
Order discountsConfigurable per offerNever combinesConfigurable per offer
Shipping discountsConfigurable per offerConfigurable per offerNever combines

Configurable means each offer's own combine switch decides whether the two classes add up. Two product discounts can apply to the same cart, but Shopify applies at most one product discount per cart line; two on the same line is a Shopify Plus feature. Two order discounts, or two shipping discounts, never combine.

The complete answer

Stacking is the part of Shopify discounts that is documented in three different places and explained correctly in almost none of them. This is the whole model in one page: the rule, the combinations that are possible, the ones that are not, what breaks, and how to check your own store without installing anything.

What does it mean to stack discounts in Shopify?

Stacking means two or more discounts apply to the same order at the same time, and the customer gets both. Shopify supports it, but only for specific pairs, and only when each discount has explicitly opted in.

Most merchants meet stacking as a complaint rather than a feature. A customer with a 15% volume discount also qualifies for free shipping, the cart page shows both, and the receipt shows one. Nothing errored, nothing was logged, and support says the platform "picks the best discount." That behaviour is correct and documented; it is just invisible until it costs you an order.

Does Shopify combine discounts by default?

No. Every discount is created with combining switched off. When two discounts could both apply and neither has opted in, checkout keeps one and silently drops the other.

This default is the right one, because the alternative is a store that quietly sells below cost the first time two promotions overlap. It just means stacking is never something that happens to you: it is something you turn on, per offer, on purpose.

What is the actual rule for combining Shopify discounts?

Two discounts combine only when they are in different classes and each one is set to combine with the other one class. Two discounts in the same class never add up: Shopify applies the one worth more and drops the other.

Both halves of that sentence matter, and this is the half every other article skips: opting in does not make two product discounts add together. It makes a product discount coexist with an order or shipping discount. Cross-class combining works on every Shopify plan.

There is one exception, and it is narrow. Product discounts are decided per cart line, so one line normally carries one product discount. Two product-class discounts on the same line is a Shopify Plus capability, tag-gated, and it needs a matching tag on both discounts.

What are the three Shopify discount classes?

Product, order, and shipping. A product discount changes item prices, an order discount comes off the subtotal, and a shipping discount reduces delivery. A discount class is not a label: it is what decides what the discount can combine with.

Volume tiers, quantity breaks, BOGO offers and percent-off-a-collection sales are product discounts. Spend goals, "$20 off orders over $150" and most storewide codes are order discounts. Free shipping thresholds are shipping discounts. If you can name the class of each of your live discounts, you can predict every stack in your store.

Why do two percentage discounts never add up?

Because they are almost always both product-class discounts, and two discounts in the same class do not stack. A 20% clearance price and a 10% storewide sale on the same shirt give 20% off, not 28% and not 30%.

Merchants often read this as a bug in their app or a caching problem on the cart page. It is neither. Shopify compares the two, keeps the one that is better for the customer, and discards the other with no error and no line in the order. The only fix is to model what you actually want as a single offer, or to move one of the two into a different class.

Which discount combinations can actually stack?

Any pair drawn from two different classes can stack, once both sides opt in. Any pair inside one class cannot. The table below is that rule written the way merchants ask it.

Which discount combinations can actually stack?
I want these to stackClasses involvedWhat to set
A volume tier and free shippingProduct plus shippingOn the tier, combine with shipping discounts. On the shipping offer, combine with product discounts.
A spend goal and free shippingOrder plus shippingOn the spend goal, combine with shipping discounts. On the shipping offer, combine with order discounts.
A volume tier and a spend goalProduct plus orderOn the tier, combine with order discounts. On the spend goal, combine with product discounts.
A BOGO offer and free shippingProduct plus shippingOn the BOGO offer, combine with shipping discounts. On the shipping offer, combine with product discounts.
A storewide code and an automatic tierOrder plus productOn the code, combine with product discounts. On the tier, combine with order discounts.
A clearance price and a storewide percentage on the same itemProduct plus productNot possible outside Shopify Plus. Leave both switches off and model the intended price as one offer.

How do I turn stacking on for one offer?

Each offer carries three switches: combine with product discounts, with order discounts, and with shipping discounts. They map one to one onto what Shopify stores on the discount, so what the editor shows is exactly what checkout will do.

The switches are per offer and they are not symmetrical by magic. Turning "combine with shipping discounts" on for your volume tier says the tier is willing; the shipping offer still has to say it too. Both sides have to opt in, which is the single most common reason a stack that looks configured does not fire.

The campaign editor Stacking step: combine with product discounts is on, combine with order discounts is on, and combine with shipping discounts is off.
Campaign editor: the three combine switches on the Stacking step of the campaign wizard.

Can an automatic discount stack with a discount code?

Yes. Automatic and code are delivery methods, not classes, so the same class rule decides. An automatic product discount and an order-class code combine when both opt in.

Two limits are worth knowing before you build a campaign on this. Checkout accepts at most five product or order codes plus one shipping code on a single order. And a code in the same class as your automatic discount still does not add to it, whatever the code says on the landing page.

What happens when two offers in the same class both qualify?

Shopify keeps the one worth more to the customer and drops the other. There is no warning, no error, and no record of the discount that lost.

This is the behaviour that makes stacking bugs so expensive to find: the store looks healthy, the orders look normal, and the only evidence is a receipt that is missing a line somebody expected. If a promotion has ever "not worked for some customers," this is the first thing to check.

What does a stacked order actually look like?

Six combinations cover almost everything merchants run. Each one below names the classes involved, the switches to set, and the total a real cart ends up paying.

  1. Example 1

    15% off three or more items, plus free shipping over $150

    The cart simulator: a $180.00 sample cart where a 15% product discount takes $27.00 and free shipping takes $9.00, for a $153.00 checkout total.
    Setup

    A product-class volume tier scoped to the collection, with combine with shipping discounts on. A shipping-class free shipping offer at a $150 threshold, with combine with product discounts on.

    Result

    A $180.00 cart pays $153.00: $27.00 off the products and $9.00 of shipping waived, on one order.

  2. Example 2

    A spend goal that also unlocks free delivery

    A cart progress bar reading spend $12.00 more to get $15 off, above an $88.00 cart where the $5 off over $50 tier already brings the subtotal to $83.00.
    Setup

    An order-class spend goal with two thresholds, $5 off at $50.00 and $15 off at $100.00, with combine with shipping discounts on. The shipping offer opts in to order discounts.

    Result

    An $88.00 cart takes the $5 tier and shows how far it is from the $15 one, and free shipping applies on top rather than replacing it.

  3. Example 3

    BOGO alongside a free shipping threshold

    A cart drawer where the cheapest of three eligible shirts drops from $32.00 to $0.00 with a BOGO applied badge, for a $156.00 subtotal.
    Setup

    A product-class buy one get one offer with repeat logic on, combining with shipping discounts. The shipping offer combines with product discounts.

    Result

    The cheapest eligible shirt drops from $32.00 to $0.00 for a $156.00 subtotal, and the same order still ships free.

  4. Example 4

    A clearance sale and a storewide order code

    A checkout order summary carrying both stacked discount lines, minus $27.00 and minus $9.00, and the same $153.00 total the cart showed.
    Setup

    Clearance stays a product discount and opts in to order discounts. The storewide code is an order discount and opts in to product discounts.

    Result

    Both lines appear on the checkout order summary and the customer pays the combined total, which is the receipt every stacked order should produce.

  5. Example 5

    Two product discounts that must not combine

    The tier editor with three quantity breakpoints: 3 to 5 at 15% off, 6 to 9 at 18% off, and 10 or more at 20% off.
    Setup

    Leave both offers on the default. Neither opts in, so they stay in the same class with no bridge between them.

    Result

    Checkout applies exactly one of the two, never both, and the tier editor is where you model the price you actually intended.

  6. Example 6

    A Black Friday stack that has to switch itself on and off

    The campaign list: a live Black Friday campaign, a live always-on free shipping campaign, and a scheduled Cyber Monday campaign, each live one carrying a pause switch.
    Setup

    Both offers carry a start and end time in the shop timezone and their combine switches set. The pair is scheduled, not published by hand at midnight.

    Result

    The stack turns on and off on schedule, one switch pauses it mid-sale without losing the settings, and each scheduled window counts against the 25 active automatic discounts a shop can hold.

Why does my cart page show one total and checkout another?

Because the two numbers were computed by different things. A cart total painted by theme JavaScript is a display; the checkout total is what Shopify calculated server-side, and it is the one that gets charged.

Any discount implemented as a cart-page script has this problem by construction. It can show a customer $92.00 and hand them a $110.00 checkout, and the customer reads that as a bait and switch. A discount that runs as a Shopify Function is priced once, on Shopify servers, so every surface reads the same number because there is only one number.

A checkout order summary carrying both stacked discount lines, minus $27.00 and minus $9.00, and the same $153.00 total the cart showed.
Checkout order summary showing the same stacked discount lines the cart displayed.

Do stacked discounts survive Shop Pay, Apple Pay, and Google Pay?

They do when the discount runs server-side. They do not when it depends on the cart page, because accelerated checkouts jump from the product page straight to payment and the theme code never runs at all.

This is the most under-tested failure mode in Shopify discounting, because the merchant testing it almost always clicks the normal checkout button. If a stack matters to your margin, place one test order through an express wallet before the campaign goes live.

How many discounts can I run at the same time?

A shop can have at most 25 active function-based automatic discounts. Shopify raised that ceiling from 5 in November 2024.

The count is about overlapping active windows, not about how many rows exist. A campaign scheduled for next month reserves its window as soon as it is created, so it consumes a slot for the period it covers. A store that keeps every seasonal campaign scheduled a year ahead can hit the ceiling without having a single discount live today.

How do I check which of my own discounts can combine today?

Shopify shows it per discount, one at a time, in the Combinations section of the discount editor. Reading five of them takes about five minutes and tells you every stack your store can currently produce.

  1. In Shopify admin, open Discounts and pick any discount that is live.
  2. Scroll to the Combinations section of the discount editor.
  3. Read the three checkboxes: product discounts, order discounts, shipping discounts. Anything unchecked can never stack with this discount, no matter what the other discount says.
  4. Open the second discount in the pair and read the same three checkboxes. Both sides have to opt in; one is never enough.
  5. Put both discounts in one test cart, complete the order, and read the receipt. The order summary lists every discount that actually applied, which is the only source of truth.
  6. Repeat the test through Shop Pay or Apple Pay. That is the surface where a cart-page discount disappears.

How do I test a stack before customers see it?

Run the cart you are worried about through a simulator before the campaign is live, and read the line-by-line result. The useful test is not that the discount fires, but that it fires on the right cart and stays off the wrong one.

Test both directions. A cart that should qualify and a cart that should just miss the threshold catch different bugs, and the second one is the one that quietly costs money. Then place one real order through an accelerated wallet, because that is the surface the cart page cannot speak for.

The cart simulator: a $180.00 sample cart where a 15% product discount takes $27.00 and free shipping takes $9.00, for a $153.00 checkout total.
Cart simulator: a sample cart showing every offer applied and the resulting combined total.
Recipes

Use it like this

Scenario

A skincare brand wants "3+ items get 15% off" to also unlock free shipping, without customers needing a separate code.

Setup

Create a volume-tier offer scoped to the skincare collection and switch on "Combine with shipping discounts." Create a free-shipping offer with the same 3-item threshold and switch on "Combine with product discounts."

Result

A 3-item cart shows 15% off product totals plus free shipping at checkout, matching exactly what the cart page already displayed.

Scenario

An always-on "buy 2, save 10%" volume tier should let a BFCM spend goal ($20 off orders over $150) add on top for big carts.

Setup

On the volume offer, switch on "Combine with order discounts." On the spend-goal offer, switch on "Combine with product discounts."

Result

A qualifying cart gets both discounts totalled on one order; smaller carts still get the automatic 10%, and neither offer breaks the other.

Scenario

A clearance sale (40% off) and a storewide order discount (15% off) must never combine, since running both would sell some products below cost.

Setup

Leave the combine switches off on both offers. Off is the default: every offer runs on its own unless you explicitly opt it in.

Result

Checkout applies exactly one of the two, never both stacked, and the simulator confirms the behavior on a sample cart before the campaign goes live.

FAQ

Common questions

Does Shopify support discount stacking natively?

Only within limits, and the controls are buried. Shopify can combine discounts across classes (product, order, shipping) when each discount opts in, but only one product discount applies per cart line (two on the same line is a Shopify Plus feature). Stackable puts the three combine switches on every offer, so you see and control exactly what checkout will do.

Will stacked discounts work with Shop Pay, Apple Pay, and Google Pay?

Yes. Every calculation runs inside a Shopify Function at checkout, so accelerated checkouts compute the identical stacked total as the regular checkout page.

Can I stop offers from combining?

Yes, that's the default. Every combine switch starts off, so an offer never adds on top of another discount class unless you opt it in. The simulator confirms the behavior on a sample cart before the campaign goes live.

How do I know what will actually stack on a real cart?

Run the cart simulator before going live: it shows which offers fired, which didn't, and why, with the exact combined total checkout will charge. Per-order reporting of which offers applied is on the roadmap.

Sources

Install Stackable and start with Discount Stacking

Every offer type runs on the same server-side engine, so whatever you combine, the checkout math holds.

Free plan available. No card required.

We use essential cookies to run this site, and, only with your permission, analytics cookies to understand traffic. Read our Cookie Policy.