Can You Stack Discounts on Shopify? Combination Rules for Quantity Breaks and Codes

Short answer: Yes. Shopify puts every discount in a product, order or shipping class, and two combine only when each has the other's class ticked under Combinations. A quantity break is a product discount, so it can share a checkout with an order-level code and free shipping. If a product or order pair cannot combine, Shopify applies whichever saves the shopper more.
Key Facts (Verified October 11, 2026)
- Shopify sorts discounts into three classes: product, order and shipping. Per Shopify's combining-discounts guide, "multiple discounts are applied to an order only when the setting on each discount allows the combination."
- Customers can use up to 5 product or order discount codes plus 1 shipping discount code on one order. Two shipping discounts never combine, and two product discounts on the same item combine only on Shopify Plus (source).
- When discounts cannot combine, "the best discount for the customer's cart is always applied." Shopify picks the winner; the customer does not choose. The exception is shipping: product and order discounts take priority over a shipping discount they cannot combine with (source).
- Discounts apply in a fixed order: product discounts first, order discounts on the revised subtotal, shipping last. So a 15% tier plus a 10% order code is 23.5% off, not 25%. Two percentage order discounts are both calculated on the original subtotal (source).
- Two product discounts hit the same line item only on Shopify Plus, and only when the two discounts carry reciprocal discount tags. Percentage discounts are applied before fixed-amount ones (source).
- Product + order and order + order combinations need an eligible store: no
checkout.liquidcustomizations and no Licensify app. Shopify documents combinations only for orders placed through the Online Store, the Storefront API and Shopify POS (source). - A store can run a maximum of 25 active automatic discounts, and that total includes app-based discounts (source).
What does "stacking discounts" mean in Shopify?
Every discount, whether a code, an automatic discount or one created by an app, belongs to one of three classes, and the class decides what it can share a checkout with.
| Class | What it changes | Native discount types in this class | Where buy-more-save-more lands |
|---|---|---|---|
| Product | Individual line-item prices | Amount off products, Buy X get Y | Here. A quantity break is "Amount off products" with a "Minimum quantity of items" requirement |
| Order | The cart subtotal after product discounts | Amount off order | Welcome codes, sitewide sale codes, spend-threshold discounts |
| Shipping | The shipping rate only | Free shipping | Free shipping over a threshold, flat shipping credits |
"Can I stack a quantity break with a coupon?" is really "can a product discount combine with an order discount?", and Shopify answers that with a checkbox. If quantity breaks themselves are new to you, start with the ultimate guide to quantity breaks.
Which Shopify discounts can be combined? The combination matrix
This is Shopify's combinations table rewritten around a quantity break. Every "Yes" assumes both discounts have the other's class ticked under Combinations; otherwise the pair falls back to best-value-wins.
| Combination | Allowed? | What it looks like with buy-more-save-more |
|---|---|---|
| Product + Order | Yes, on eligible stores (no checkout.liquid, no Licensify) | 15% off at 3 units, then a 10% WELCOME code on the reduced subtotal |
| Product + Shipping | Yes | 15% off at 3 units plus free shipping over $50 |
| Order + Shipping | Yes | 10% WELCOME code plus free shipping |
| Product + Product, different items | Yes | 15% off at 3 mugs and 20% off any hoodie in the same cart |
| Product + Product, same item | Shopify Plus only, with reciprocal discount tags | A loyalty product discount and a quantity break on the same SKU. Non-Plus stores, and Plus stores without matching tags, get the better of the two |
| Order + Order | Yes, on eligible stores | A 10% code and a 5% code, both calculated on the original subtotal rather than one on top of the other |
| Shipping + Shipping | Never | Free shipping plus $5 off shipping. Shopify applies the better one |
The same matrix applies whether each discount is a code or automatic. A code can combine with an automatic discount, two automatics can combine, and two codes can combine; the method does not matter, only the class and the ticked boxes.
Is it still true that Shopify allows only one automatic discount?
Older guides, and some app support docs, still say Shopify allows one automatic discount per order and that automatic discounts cannot combine with codes. That stopped being true when Shopify shipped discount combinations, announced in its Winter '23 Editions release as the ability to combine multiple discounts on a single order.
Today the rules are the matrix above, and the cap that matters is different: up to 25 active automatic discounts per store, including app-created ones. A three-tier ladder built as three automatic "Amount off products" discounts uses three slots, and once you hit the ceiling a new tier simply cannot be activated.
The other stale claim is "customers can only enter one discount code." The current limit is 5 product or order codes plus 1 shipping code per order, so use the Combinations checkboxes, not the one-code assumption, to keep codes apart.
What happens when a discount code meets an automatic discount?
Say your quantity break is an automatic 15% product discount that does not allow order discounts, and a shopper types a 10% order code. Shopify does not ask the shopper to pick. Its rule is one sentence: "the best discount for the customer's cart is always applied." The discount that saves more on that cart wins; the other is dropped.
Two consequences follow:
- The winner changes with the cart. On a $60 basket, 15% ($9.00) beats 10% ($6.00), so the tier stays; in a cart that misses the tier, the code wins. That is also why "my code isn't working" is usually a combination setting, not a bug.
- Best-value-wins is a safety net, not a strategy. It only governs pairs that cannot combine; tick the boxes and both apply in full.
Two cases break the quiet version of that rule, both from Shopify's troubleshooting steps (checked October 11, 2026). First, a code that cannot combine with what is already in the cart can be refused with the message "Discount couldn't be used with your existing discounts"; Shopify's order of checks is both discounts' Combinations cards, then any active automatic discount, then apps that touch checkout. Second, shipping loses by rule rather than by value: product and order discounts take priority over a shipping discount they cannot combine with, because the discounted cart value is used to calculate shipping options, and the shopper sees "You already have a better combination."
A last exception, per Shopify's docs: custom discounts a staff member applies manually to an order (draft orders, POS) always apply regardless of combination settings. The docs list Shopify Scripts discounts as a second exception, but Scripts stopped executing on June 30, 2026, so any line-item script that used to layer a volume discount over your codes no longer runs; that logic has to be rebuilt as a discount with Combinations settings or as a Shopify Functions app.
How each discount type behaves inside a stack
Four discount types do most of the work in a buy-more-save-more stack. Here is the class each one lands in and the rule that decides what it can sit next to.
| Discount type | Class | Combines with | What to watch |
|---|---|---|---|
| Amount off products with "Minimum quantity of items" (the native quantity break) | Product | Order, shipping, and product discounts on other items | Tiers on one collection are "same item" product discounts, so on non-Plus stores only one tier applies, which is what you want. See the tiered pricing setup guide |
| Buy X get Y | Product | Order and shipping discounts | On non-Plus stores every product in a Buy X get Y is ineligible for further product discounts, so "buy 2 get 1 free" and "15% off at 3+" on one collection never both apply. Run BOGO and the ladder on different collections (BOGO apps roundup) |
| Free shipping with "Minimum purchase amount" | Shipping | Product and order discounts, never another shipping discount | Tick "Exclude shipping rates over a certain amount" so express is not silently free. Your cost is one carrier rate per parcel, which does not grow with a fourth unit (free shipping bar guide) |
| Shopify Functions / app discounts | Whichever classes the app declares, possibly more than one | Whatever the app's own combination settings allow | Not a fourth class; checkout resolves conflicts the same way. App automatic discounts count toward the 25 cap, and if an app discount refuses to stack with your code, the fix is in the app's settings |
How does Shopify Plus stack two product discounts on the same line item?
By default one product discount applies per line item. On Shopify Plus you can let several apply, but ticking "Product discounts" is not enough: Shopify uses discount tags, and the setup must be reciprocal. In Shopify's own example, Discount A is tagged promo and set to combine with discounts tagged clearance, while Discount B is tagged clearance and set to combine with promo. If only one side names the other, the pair falls back to best-value-wins. The Admin API exposes the same rule as productDiscountsWithTagsOnSameCartLine, which requires Plus and productDiscounts: true, and a third discount joins only if it matches every discount already in the group.
Same-line discounts are applied one after another, percentages before fixed amounts. Shopify's example: 10% off takes $100 pants to $90, then a $20 product discount takes them to $70. Applied to a quantity break, three $20 units with a 15% tier and a tagged $5-per-item loyalty discount come to $60.00 → $51.00 → $36.00, a 40% giveaway before any order code. For Buy X get Y, only the customer-gets items can take a second product discount, never the customer-buys items. Shopify's docs do not spell out how two percentage product discounts on one line are sequenced, so test that pair at checkout before relying on it.
Do quantity break apps built on Shopify Functions follow the same rules?
Yes. A Functions-based volume discount is a normal discount node with the same combinesWith flags, so it is a product discount that needs the same ticked boxes. What differs, per the Discount Function API reference:
- One discount, several classes. A single function can return product, order and shipping savings together, for example a tier plus free shipping, which is how an app delivers a "stack" that uses one slot.
- Limits. A store can activate a maximum of 25 discount functions, functions run concurrently with no knowledge of each other, and app automatic discounts count toward the 25 active automatic discounts.
- Tiers resolve inside the function. The app picks one tier per line (selection strategies such as
FIRSTorMAXIMUM), so a whole ladder is one discount rather than one per tier. - Codes can be refused. An automatic discount function can reject an entered code with a custom message, which is how some apps enforce "no codes on volume pricing" more visibly than an unticked box.
Our comparisons of quantity breaks apps and volume discount apps cover the individual apps.
Which discount stacks are safe for your margin, and which are dangerous?
"Safe" means the second discount has a bounded cost that does not scale with the first. "Dangerous" means two percentages compound.
| Stack | Classes | Verdict | Why |
|---|---|---|---|
| Quantity break + free shipping over a threshold | Product + Shipping | Safe | Shipping is a flat cost per parcel; the tier grows units, not the shipping bill |
| Quantity break + free gift with purchase | Product + Product (different item) | Safe | The gift costs you its landed cost once, however much the shopper buys |
| Quantity break + fixed-amount order code ($5 off over $50) | Product + Order | Usually safe | Fixed dollars shrink as a share of larger baskets; cap it with a minimum purchase amount |
| Quantity break + percentage order code (10% off) | Product + Order | Dangerous | Compounds on the reduced subtotal; the worked example below shows a 23.5% total giveaway |
| Quantity break + sitewide sale on the same items | Product + Product (same item) | Blocked on non-Plus, dangerous on Plus | Non-Plus stores get best-value-wins; Plus stores can combine both and lose the whole margin |
| Quantity break + Buy X get Y on the same items | Product + Product (same item) | Blocked | Buy X get Y items are ineligible for further product discounts unless you are on Plus |
| Two percentage order codes (10% + 5%) | Order + Order | Dangerous | Both apply in full on the original subtotal; 15% off on top of any tier |
| Quantity break + affiliate or influencer code | Product + Order | Dangerous | You pay the discount and the commission on a basket the tier already discounted |
How much margin does a stacked discount cost? A worked example
Take a $60 basket: three units at $20, a 55% gross margin, a 15% tier at 3 units, a 10% welcome code, and free shipping over $50 with a $7.00 carrier rate you absorb. Every combination box is ticked. Here is what Shopify does, in the order it does it.
| Line | Calculation | Amount |
|---|---|---|
| Subtotal | 3 × $20.00 | $60.00 |
| Cost of goods | 45% of $60.00 | $27.00 |
| Gross profit at full price | $60.00 − $27.00 | $33.00 (55.0%) |
| Product discount: 15% tier | 15% × $60.00 | −$9.00 → $51.00 |
| Order discount: 10% code | 10% × $51.00 (the revised subtotal, not $60) | −$5.10 → $45.90 |
| Total discount | $14.10 ÷ $60.00 | 23.5% (not 25%) |
| Gross profit after discounts | $45.90 − $27.00 | $18.90 (41.2%) |
| Shipping discount: free shipping | Carrier rate you now pay | −$7.00 → $11.90 (25.9%) |
| Card processing (assume $1.65) | Illustrative 2.9% + 30¢ on $45.90 | −$1.65 → $10.25 (22.3%) |
Read the last line against the first: a single unit sold at full price, with the shopper paying shipping, earns $11.00 of gross profit before fees. The fully stacked three-unit order earns $11.90 before fees and $10.25 after. You shipped three times the stock for less money, and the shopper has learned that codes work on top of tiers.
Now untick one box. If the 15% tier does not allow order discounts, the code and the tier cannot combine, and Shopify applies the better one: 15% ($9.00) beats 10% ($6.00), so the subtotal is $51.00, gross profit $24.00, minus $7.00 shipping and about $1.80 in fees leaves $15.20 (29.8%). Same shopper, same basket, nearly 50% more profit, and the only thing that changed was a checkbox.
The general rule: a percentage order code compounds on what the tier left behind, so budget (tier %) + (code %) − (tier % × code %); at 15% and 10% that is 23.5%. For tier percentages that survive this, see quantity breaks vs regular discounts, and for how many rungs the ladder should have, how many quantity break tiers to offer.
How do you set up discount combinations in Shopify admin?
These paths are taken from Shopify's discount type guides for amount off and free shipping discounts. The goal is a tier that combines with shipping and nothing else, a code that cannot reach the tier, and free shipping that combines with both.
Step 1: build the tier as an automatic product discount
- Shopify admin → Discounts → Create discount → Amount off products.
- Under Method, choose Automatic discount and title it "Buy 3, save 15%" (shoppers see the title at checkout).
- Set Value to a percentage of 15, and under Applies to pick the specific collections the ladder covers.
- Under Minimum purchase requirements, choose Minimum quantity of items and enter 3.
- Under Combinations, tick Shipping discounts only. Leave Product discounts and Order discounts unticked.
- Set Active dates and click Save. Repeat for the 5-unit and 10-unit tiers; each is a separate automatic discount and uses one of your 25 active slots.
Step 2: make the welcome code an order discount that cannot reach the tier
- Discounts → Create discount → Amount off order → Method: Discount code, enter the code.
- Set the value (10%) and, under Minimum purchase requirements, a Minimum purchase amount if you want to keep it off tiny carts.
- Under Combinations, tick Shipping discounts and leave Product discounts unticked; because both discounts must allow a combination, this side blocks the stack even if step 1 is wrong.
- Set Eligibility, usage limits, and Save.
Step 3: add free shipping that combines with both
- Discounts → Create discount → Free shipping → Automatic discount.
- Under Minimum purchase requirements, choose Minimum purchase amount and set it just above the 3-unit tier value, so the tier and the threshold pull in the same direction.
- Tick Exclude shipping rates over a certain amount and enter your standard rate, so express shipping stays paid.
- Under Combinations, tick both Product discounts and Order discounts, then Save.
Step 4: audit and test
On the Discounts page, open every active discount and read its Combinations card; a forgotten "Order discounts" tick on last year's sale is the usual leak. Then place a test order with three tier items and the welcome code and confirm checkout shows one discount line, not two.
Where do cart-drawer and discount apps fit?
Apps do not get their own rules. Anything an app does that changes a price reaches checkout as a Shopify discount, either an automatic discount it registers or a code it applies for the shopper, and both obey the classes and Combinations settings above.
In Oxify Cart Drawer & Upsells (our own app), for example, quantity-break tiers, the free gift and free-shipping progress are shown inside the drawer, and the free gift is discounted automatically by the app, with nothing for the shopper to type. That gift discount needs "Product discounts" ticked on your native tier if the two are meant to stack; leave it unticked and best-value-wins decides, so a $9.00 tier beats a $6.00 gift. The free shipping bar is display logic that reads your threshold; the free shipping itself is still the discount from step 3. Our guides to quantity breaks in the drawer, free gift with purchase and the drawer discount-code field cover each piece.
If your logic is genuinely conditional ("15% at 3 units unless a code is present, unless the customer is tagged wholesale"), a Functions-based app such as Regios Automatic Discounts (4.9, 208 reviews, Built for Shopify, from $34.99/mo, checked October 11, 2026) builds it as a flowchart; its automatic discounts still count toward the 25 cap. For a straight ladder plus a gift and a shipping bar, a cart drawer is enough; our quantity breaks apps comparison covers both.
Three scenarios: if you do this, Shopify will do that
Scenario 1: automatic tier plus a welcome code, boxes unticked
You create "Buy 3, save 15%" as an automatic product discount with only Shipping ticked, and WELCOME10 as a 10% order code. A shopper adds three $20 items and enters the code. Shopify will find the pair cannot combine and apply the tier, because $9.00 beats $6.00; the code is dropped. With two items ($40) the tier is not met, so Shopify will apply WELCOME10 and take $4.00 off. Tick Order discounts on the tier and Product discounts on the code, and Shopify will apply both: the three-item cart drops to $45.90.
Scenario 2: Buy 2 get 1 free on the same collection as the tier
You add an automatic "Buy 2 get 1 free" on the collection that carries the 15% tier, and you are not on Shopify Plus. A shopper adds three $20 items. Shopify will not stack them, because Buy X get Y items are ineligible for further product discounts; it will apply the free item ($20.00 off) and ignore the tier ($9.00).
Scenario 3: two percentage order codes on one order
WELCOME10 (10%) and SAVE5 (5%) are order codes with Order discounts ticked on each. A shopper with a $50 cart and no tier enters both. Shopify will apply both, each calculated on the original subtotal: $5.00 + $2.50 = $7.50 off, a $42.50 total, not the chained $42.75. The shopper can keep going up to five product or order codes on one order, so leave Order discounts unticked on any code you do not want joining a pile.
What breaks discount stacking on Shopify?
| Symptom | Cause | Fix |
|---|---|---|
| A product discount and an order discount never combine, even with both boxes ticked | The store is ineligible for product + order combinations: it uses checkout.liquid customizations or the Licensify app | Move to Checkout Extensibility and remove the app, then re-save the discounts |
| Free shipping disappears when the tier applies, and checkout says "You already have a better combination" | The tier and the shipping discount do not allow each other's class, and product and order discounts take priority over shipping | Tick Shipping discounts on the tier and Product and Order discounts on the shipping discount, or use one app discount that returns several classes |
| A code is refused with "Discount couldn't be used with your existing discounts" | It cannot combine with a discount already in the cart, sometimes an automatic one the shopper never added | Open both Combinations cards, then every active automatic discount, then discount and checkout apps (Shopify's order of checks) |
| Two product discounts on one SKU never stack on Plus | Discount tags are missing or one-sided | Tag both discounts and name the other's tag on each |
| Adding a code from the cart wipes the code already applied | The theme or app posts to /cart/update.js with a discount value, which replaces all codes instead of appending | Send every code together, comma-separated; see the cart drawer discount code guide |
| A new tier will not activate | 25 active automatic discounts (or 25 discount functions) reached | Deactivate expired automatics or fold the ladder into one app discount |
| A volume script stopped applying | Shopify Scripts stopped executing June 30, 2026 | Rebuild as a native discount or Functions app |
| The tier is missing on a post-purchase offer | Automatic discounts created in the admin do not apply on the post-purchase page (source) | Price the post-purchase offer on its own; see pricing a post-purchase upsell discount |
| A staff-applied discount ignores your rules | Manual custom discounts on draft orders and POS always apply | Set a staff policy; Combinations cannot block them |
Launch checklist
- Rerun the worked example with your own margin and percentages; if the stacked order earns less than one full-price unit, untick a box.
- Open every active discount and read its Combinations card, including discounts created by apps.
- Count active automatic discounts against the 25 cap before adding tiers; app discounts count.
- Put minimum purchase amounts and usage limits on every percentage code that is allowed to combine with anything.
- Place a test order for each stack you allow and screenshot the checkout discount lines.
- Write the rule in one sentence on the product page and in the cart drawer, for example "Volume pricing cannot be combined with discount codes."
Show the stack in the cart, not at checkout. Oxify Cart Drawer & Upsells shows quantity-break tiers, the free gift and free-shipping progress inside the slide-out cart, so shoppers see what they have unlocked before checkout. It is our app, rated 4.9 (40 reviews, checked October 11, 2026), carries the Built for Shopify badge, starts at $9.99/mo with every feature on every plan, and has a 14-day free trial. See the listing or read how the free gift with purchase feature applies its discount. For tiers on the product page instead, see Oxify Quantity Breaks & BYOB, and for tier ideas, quantity break strategies for AOV.
Related: Want a worked example with real postage? See the best Shopify apps for coffee and tea brands.