Skip to content
Discount Stacking

How to stack discounts in Shopify without the checkout guessing game

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

Screenshot coming soon

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.

Screenshot coming soon

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.

Screenshot coming soon

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.

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.

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.