Shopify Discount Stacking Explained: What Combines and What Refuses
Three discount families, three behaviours
Shopify discounts fall into families that behave differently at checkout: product and order discounts, shipping discounts, and buy X get Y offers. Whether two discounts combine is not a global store setting. It is set per discount, in the combinations section of each discount's own page, where you choose which other discount classes it can combine with. A code created last spring with combinations switched off will still refuse to stack today, no matter what the newer promotion allows.
Automatic discounts add the wrinkle merchants trip on. When more than one automatic discount could apply, Shopify applies the one that gives the customer the best value rather than stacking them all, unless the discounts are explicitly set to combine. A store wide sale and an automatic free shipping offer can therefore behave differently in the same cart depending on settings nobody has looked at since the sale was built.
The checkout tells the truth the admin hides
The reliable test is a real checkout with the exact cart a customer would build: the sale item, the code from the email, and the shipping threshold in play. Merchants who test only the code or only the sale discover the interaction from a customer screenshot, usually after the customer has done the less favourable math and decided the store is being dishonest. Most stacking complaints are not dishonesty. They are two promotions built months apart by people who never met in the same checkout.
Order of operations matters too. Percentage discounts, fixed amount discounts, and shipping discounts land in a sequence, and the displayed prices in the cart do not always make that sequence obvious. When a customer asks why the code took less off than expected, the answer is often that a product level discount had already reduced the base the code calculated from.
Run the margin math before the promotion, not after
A stack that combines a 20 percent code with a 15 percent sale and free shipping over a threshold can quietly take a product past its contribution margin, especially once shipping cost lands on the merchant. The time to model that is when the second discount is created, with the worst realistic cart, not the average cart. Promotions are designed for the best case and redeemed in the worst case by the customers paying most attention.
The practical rule that prevents most stacking surprises: one person owns discount settings during a sale period, every new discount gets its combinations set deliberately rather than by default, and the storefront gets a test checkout before the email announcing the promotion goes out. Stacking is a feature. Unplanned stacking is a pricing error with good marketing.
Related reading
If this topic is useful, these earlier guides go deeper on connected questions: Your Conversion Rate Moved and You Changed Nothing: Shopify Recounted Sessions, Every 100 Milliseconds of LCP Costs About 3.5 Percent of Conversion, and Shopify Subscriptions Explained: How Recurring Orders Actually Run.
Frequently asked questions
Why will my discount code not combine with the sale?
Combination is set per discount, not store wide. Open the code's page in the admin and check its combinations settings: if it is not set to combine with product or order discounts, it will refuse to stack with the sale even if the sale itself allows combinations.
Do automatic discounts stack on Shopify?
Not automatically. If several automatic discounts could apply, Shopify applies the one worth most to the customer unless the discounts are configured to combine. Each automatic discount's own combinations settings decide whether it plays with others.
Can a customer use two discount codes at once?
Only if both codes are set to combine with each other. By default, one code per order is the safer assumption, and a second code will replace or be rejected unless the combination settings on both codes allow them to work together.
How should I test discount stacking before a sale?
Build the worst realistic cart in a real checkout: a sale item, the emailed code, and a shipping threshold item, then confirm the final total matches the intended promotion. Testing each discount separately misses the interaction, which is where the surprises live.