Checkout-safe AOV systems for Shopify — free store audit available →
Get free audit
Guide

Shopify Discount Stacking Is Eating Your Margin: How to Audit It

July 10, 2026

Shopify discount stacking can quietly erode margin. How product, order and shipping discounts combine, a test matrix to find the leaks, and safe design principles to keep promotions profitable.

Auditing Shopify discount stacking that eats margin

Shopify does not let every discount pile onto every other one — and understanding exactly how discount stacking works is the first step to plugging the leak. Shopify only stacks discounts across classes: a product discount, an order discount, and a shipping discount can combine, but two discounts of the same class never stack (Shopify keeps the better one). The margin problem is almost never a bug. It’s that you enabled a combination — usually a code plus an automatic discount plus free shipping — and never stress-tested the worst-case cart it produces. The fix is not to kill promotions; it’s to audit them with a test matrix so you can see the deepest discount before a customer does.

How Shopify discount combinations actually work

Every Shopify discount belongs to one of three combination classes:

Two rules govern how these interact, and both matter:

  1. Same class does not stack. If a customer qualifies for two product discounts, Shopify applies the one that gives them the better price — not both. The same is true for two order discounts or two shipping discounts. This is Shopify’s built-in protection, and it’s why “double discounting” within a class is rarely your problem.

  2. “Combinable” means across classes. When you create a discount you explicitly choose which other classes it can combine with. Mark an order discount as combinable with shipping discounts and a customer can take both at once. That cross-class combination is real stacking — and it’s exactly where unplanned margin loss lives.

So the honest picture is: Shopify prevents the naive case (same-class doubling) automatically, and hands you the switch for the dangerous case (cross-class stacking). If a cart looks over-discounted, someone turned that switch on.

Why this matters for margin

A single stacked cart looks harmless. The problem is scale and worst-case. If your average order carries a 20% product discount, and your “combinable” settings also allow an order-level code and free shipping, your effective discount on the wrong cart can quietly climb well past what you modelled. On a low-margin SKU, three combined discounts can erase the contribution margin entirely — you ship the order at a loss and pay to acquire the customer who placed it.

You usually don’t feel this in the dashboard, because the average hides it. The damage is in the tail: the small fraction of carts that hit every combination you left open. At volume, that tail is a recurring, invisible line item.

Where the leaks actually come from

Most stacking leaks trace to one of three sources:

A related trap is assuming automatic discounts are “safe” because they need no code. They’re often the most stackable thing in the store — read how to create automatic discounts on Shopify before you leave one running alongside codes.

How to audit it: a worst-case-cart test matrix

You can’t reason about stacking in your head. Build a matrix of realistic carts and record the total discount each one produces. The goal is to find the deepest combination a real customer could assemble, then decide whether you’re happy shipping it.

For each row, build the cart in a test order (or a draft order) and read the actual total after all discounts apply. List price and effective discount are illustrative — fill in your own numbers:

Test cartProduct discountOrder discountShipping discountCombined?Effective total discountVerdict
Baseline single item20% off itemn/a20%OK
Two product promos20% off + 15% offSame class → better one only20%OK (as designed)
Product + order code20% off item$15 off orderYes~30%+Review
Product + free shipping20% off itemFree shipYes20% + ship costReview
Full stack20% off item$15 off orderFree shipYesWorst caseLikely too deep
Low-margin SKU, full stack20% off item$15 off orderFree shipYesBelow cost?Fail — fix rules

Run the matrix against your actual combinability settings, not what you think they are. Two rows earn special attention: the full stack row (does the deepest legal cart still clear margin?) and the low-margin SKU row (the same rules that are fine on a hero product can be fatal on an accessory). If any row dips below your floor, the rule set — not the customer — is the problem.

Safe design principles

Once you can see the worst case, design for it:

Common mistakes

Stacking isn’t a Shopify flaw — it’s a set of switches you own. Map them, test the worst-case carts, and either accept each combination or shut it off. When the rule is too nuanced for native settings, move the decision into a Function so the cart is judged where it’s actually assembled. If you’d rather start from a full-store diagnosis, our free profit audit reviews your live discounts and flags the combinations quietly costing you.

Not sure which discount combinations are costing you? Send us your store URL — we’ll map your combinable discounts, stress-test the worst-case carts, and tell you what to change. See Custom Apps & Shopify Functions or get a free profit audit.

Share:

FAQ

Can Shopify discounts stack?
Shopify sorts discounts into three combination classes — product, order and shipping — and each discount can be marked combinable with the other classes. Two discounts of the same class don't stack by default; Shopify applies the better one. So genuine stacking happens across classes (for example a product discount plus free shipping), which is where unintended margin loss usually hides.
Why is discount stacking eating my margin?
Because combinations you enabled interact in carts you didn't anticipate — a code plus an automatic discount plus free shipping, or an app applying its own discount on top of native ones. Without a test matrix you rarely see the worst-case cart until it's placed, and each one is a direct margin hit.
How do I stop unprofitable discount combinations on Shopify?
Map which discounts are combinable, build a test matrix of realistic worst-case carts, and set combination rules deliberately. For complex rules, enforce the intended outcome with a Shopify Function so the cart is evaluated server-side at checkout and only the offer you intend applies.

Start making more on every order

Launch a checkout-safe offer yourself, or have our team set it up and dial in your store.

Lifts average order value · No checkout edits · Works on any theme

Related reading