📚

Can you stack discounts on Shopify? The complete guide

A plain-English explanation of how Shopify handles multiple discounts, why it only ever applies one discount per product, and what your real options are for running layered or conditional promotions.

The short answer

By default, Shopify does not stack two discounts on the same product. When more than one discount could apply to a single item, Shopify applies only the largest one and ignores the rest — even if you have "combine with other discounts" enabled. This surprises a lot of store owners, because the setting sounds like it should allow stacking. It doesn't, at least not the way most people expect.

To genuinely stack two product-level discounts — say, a collection sale price plus an extra volume bonus — you need a Shopify Function that calculates the combined result and applies it as a single discount. That's the real workaround, and it's what specialized apps are built on.

What Shopify's "combine discounts" setting actually does

This is the single biggest point of confusion, so it's worth being precise. Shopify groups discounts into three classes: product discounts, order discounts, and shipping discounts. The "combine with other discounts" setting lets discounts from different classes coexist on the same order — for example, one product discount plus one free-shipping discount.

What it does not do is let two discounts of the same class apply to the same product. Two product discounts on one item will never stack natively. Shopify resolves the conflict by keeping the larger discount and discarding the smaller one.

The classic trap

A store owner sets up a 50% off automatic discount on their clearance collection. Then they create a second automatic discount: "buy 4 or more, get an extra 10% off." They enable combinations on both, expecting customers who buy 4+ items to get 60% off.

Instead, customers get exactly 50% off. Shopify sees two product discounts competing for the same items, keeps the bigger one (50%), and silently ignores the 10%. Nothing in the admin warns you this is happening.

Why Shopify works this way

It's a deliberate design choice, not a bug. Allowing unlimited same-class stacking would make discount math unpredictable and open the door to runaway discounting — customers combining several promotions into prices far below what the merchant intended. Shopify's "largest single discount wins" rule keeps pricing predictable, but it also rules out a whole category of promotions that physical retailers run all the time.

The promotions Shopify can't run natively

If you've hit a wall trying to set any of these up, you've found the edge of what native Shopify discounts can do:

All of these require either two product discounts on one item, or per-collection logic Shopify's discount engine doesn't expose.

Your actual options

There are three realistic ways to handle this, depending on how technical you are:

1. Live with one discount. Simplify the promotion down to a single percentage. Easy, but you lose the behavioral pull of "buy more, save more" layering.

2. Build a custom Shopify Function. Shopify Functions are server-side scripts that run inside checkout and let you write custom discount logic — including combining discounts into a single calculated result. This is the technically correct path, but it requires development work, deployment as an app, and ongoing maintenance.

3. Use an app built on Shopify Functions. Several apps wrap Function-based discount logic in a no-code interface. Most are generic rule-builders aimed at developers; a few are built specifically for the layered, conditional promotions retailers actually run.

How Function-based stacking works under the hood

The key insight: a well-built discount app doesn't try to layer two Shopify discounts (which Shopify would reject). Instead, the Function calculates the combined result internally — for example, 50% base plus 10% volume equals 60% — and hands Shopify one discount. From Shopify's perspective it's a single discount, so there's no conflict. From the customer's perspective, they see the full stacked savings at checkout. The "stacking" happens in the math, not by piling Shopify discounts on top of each other.

Where Custom Promos fits

Custom Promos is a Shopify app built on Shopify Functions specifically for the layered and conditional promotions described above. It's aimed at non-technical store owners — particularly boutique and independent retailers — who need these promotions without touching code or assembling rules in a developer-oriented builder. You pick a promotion type, choose your collections with a visual picker, set your numbers, and activate. The combined discount logic runs automatically at checkout.

It handles collection sales with volume bonuses, tiered volume discounts, spend thresholds, buy-X-get-Y promotions, single-item discounts, and multi-collection sales with cross-collection volume unlocks — the exact scenarios Shopify's native system can't.

Run the promotions Shopify won't let you

Stacked sales, layered collections, conditional bonuses — configured in minutes, no code required.

See the promotion types →

Frequently asked questions

Can you stack discounts on Shopify?

By default, no. When more than one discount could apply to the same product, Shopify applies only the single largest discount and ignores the rest — even when you've enabled discount combinations. Combinations only allow discounts of different classes (such as one product discount plus one shipping discount) to coexist; they don't let two product discounts stack on the same item. To genuinely stack two product-level discounts you need a Shopify Function that calculates the combined result and applies it as one discount.

Why won't my two Shopify discounts combine?

Because Shopify only allows one discount per class per product. If you create two automatic product discounts expecting them to add together, Shopify keeps the larger one and ignores the other. The "combine" setting refers to combining across discount classes (product, order, shipping), not stacking two product discounts on the same item.

How do I run a sale price plus a volume bonus on Shopify?

Shopify can't do this natively, because it would require two product discounts on the same item. The workaround is a Shopify Function that calculates the combined discount (for example a 50% sale plus a 10% volume bonus equals 60%) and applies it as a single discount at checkout. Apps built on Shopify Functions, such as Custom Promos, handle this without code.

What are Shopify Functions and how do they help with discounts?

Shopify Functions are server-side scripts that run inside Shopify's checkout infrastructure, replacing the older Shopify Scripts system. For discounts, a Function receives the cart and returns custom discount logic, which lets it do things the native engine can't — like combining a base sale with a volume bonus, applying different percentages to different collections, or converting items to a flat price above a threshold.

Do I need Shopify Plus to stack discounts?

No. Shopify Functions are available on standard Shopify plans, so Function-based discount apps work without upgrading to Plus.

Explore the promotion types