Shopify sorts every discount into one of three classes: product, order and shipping. Each discount has a Combinations setting that says which classes it may be used alongside. Tick a few boxes across a few discounts and a shopper can legally layer a sale price, two codes and free shipping on one cart. The cure is an inventory of every active discount and one deliberate test of the worst cart they allow.
How discount combinations work in Shopify
Every discount you create in Shopify, whether a code or an automatic discount, belongs to a class:
- Product discounts reduce the price of specific products or collections. "30% off all tees" is a product discount, and so is Buy X Get Y.
- Order discounts reduce the cart subtotal. "15% off your first order" is usually an order discount.
- Shipping discounts reduce or remove the shipping rate.
When you create or edit a discount, a Combinations card lets you tick which of those classes it can combine with. Two discounts can be used together only when the settings permit the pairing. When they do, Shopify works through them in a fixed sequence:
- Product discounts come off the eligible line items.
- Order discounts are calculated on the subtotal that is left.
- Shipping discounts are applied to the shipping rate.
Shopify also caps how many codes a customer can enter on one order and how many automatic discounts can be active at once. Those limits change from time to time, so treat the Combinations card on each discount, and Shopify's own help pages, as the source of truth for your store.
None of this is a flaw. Combinations exist because merchants asked for them: free shipping alongside a sale is a perfectly reasonable offer. The trouble starts when combinations are switched on one discount at a time, months apart, by different people, and nobody ever looks at them all together.
A worked example: the worst cart
Take a store selling a classic tee for $32. It costs $16 to make. Three discounts are live in late November:
- BFCM-30, an automatic 30% off everything. A product discount.
- WELCOME15, 15% off for new subscribers. An order discount, set to combine with product discounts so that newcomers are not shut out of the sale.
- VIP20, 20% off for loyalty members. An order discount, set to combine with product discounts and with other order discounts, because a customer once complained.
Each decision made sense on the day. Here is the cart a new subscriber who is also a loyalty member can now build:
| Line | Amount | Note |
|---|---|---|
| 1 × Classic tee | $32.00 | |
| BFCM-30 | −$9.60 | 30% off the item. Subtotal is now $22.40 |
| WELCOME15 | −$3.36 | 15% of $22.40 |
| VIP20 | −$4.48 | 20% of $22.40 |
| Customer pays | $14.56 | A 54.5% discount in total |
| Product cost | −$16.00 | |
| You make | −$1.44 | Before shipping and fees |
Three offers of 30, 15 and 20 percent have become more than half off, and the tee is sold below what it cost to make. Add a free-shipping code that combines with everything, at about $6 a parcel, plus a payment fee of roughly 70 cents, and the loss on this single order is over $8.
Not every shopper will find this cart. The ones who do tend to be the ones who share it. A stacking combination posted to a deals forum or picked up by a coupon browser extension can turn a handful of loss-making orders into hundreds during the busiest weekend of the year.
The stacks that do not look like discounts
The Discounts page in your admin is only part of the picture. Several other price reductions sit outside it and combine with everything by default.
Compare-at prices
Marking a product down with a compare-at price changes its selling price. Shopify does not treat that as a discount, so every eligible code applies on top of the reduced price. A "40% off" clearance collection plus a 20% welcome code is a 52% reduction, and no combination setting will stop it. The only control is to exclude sale collections from the code.
Apps
Bundle builders, volume-pricing apps, loyalty programs that convert points to codes, subscription apps with a subscriber discount, and post-purchase upsells can all create their own discounts. Each has its own combination behaviour, and it is not always visible from the main Discounts list.
Free shipping thresholds
A threshold such as "free shipping over $50" is often checked against the cart value before codes are applied. A customer can qualify with a $52 cart and then discount it to $30, leaving you paying for shipping on a small order.
Codes that have escaped
Influencer, affiliate and staff codes are created for a narrow audience and rarely stay there. If a code has no usage limit, no end date and no customer restriction, assume the public has it.
Find your floor: the most you can discount
Before auditing combinations, work out the number you are protecting. For each of your main products:
Maximum discount = 1 − (floor price ÷ full price)
For the $32 tee with free shipping: $16 cost, $6 shipping and about $1 in fees gives a floor of $23. The maximum total discount is 1 − (23 ÷ 32) = 28%. Notice what that means: with free shipping, the 30% sale on its own already brings this product to break-even at best, before a single extra code is used and before any advertising cost. If you are paying for the traffic, your real ceiling is lower still. The break-even ROAS guide shows how to fold ad spend into the same sum.
Many stores discover at this stage that the headline sale itself is the problem, and that stacking merely makes a thin margin negative.
A ten-step check before any big sale
- List every active and scheduled discount. In your Shopify admin, open Discounts and filter by Active and Scheduled. Export the list if it is long.
- Record the class and combination settings of each. A three-column note is enough: name, class, what it combines with.
- Add the reductions that are not on that page: compare-at markdowns, app discounts, bundles, loyalty rewards, free-shipping rules.
- Build the worst legal cart. Pick your lowest-margin product and apply the deepest combination the settings allow. Do the arithmetic, or let a tool do it.
- Compare it with your floor. If the worst cart is below the floor, something has to change.
- Untick combinations you did not mean. Most stores need very few: typically one sale discount combining with one shipping discount.
- Exclude sale collections from evergreen codes. Welcome, loyalty and influencer codes should apply to full-price products only.
- Add limits. One use per customer, a total usage cap, a minimum purchase amount and an end date on every code that does not need to run forever.
- Test it in a real checkout. Add the product, enter every code you can find, and see what the order summary says. Ten minutes here is worth more than any spreadsheet.
- Watch during the sale. Check the sales-by-discount report daily, and look at orders that carry two or more discount codes. If one combination suddenly spikes, it has been shared.
Offers that protect margin better than a deeper percentage
If the audit shows you have less room than you thought, there are ways to make an offer feel generous without giving the product away:
- Tiered spend offers, such as $10 off $75 and $25 off $150, raise order value instead of cutting every order equally.
- A gift with purchase costs you the gift at cost price, while the customer values it at retail.
- Bundles move more units per parcel, so shipping and fees are spread over a larger sale.
- Early access for subscribers and loyalty members rewards them with time rather than a second discount on top of the first.
A sale is supposed to trade margin for volume on purpose. The aim of this check is simply to make sure the trade you are making is the one you chose, and not one that three tick boxes chose for you.
Common questions
Can customers use more than one discount code on Shopify?
Yes, if the discounts are set to combine. Each discount has a Combinations setting where you choose which classes it can combine with: product discounts, order discounts and shipping discounts. If two codes are allowed to combine with each other's class, a customer can enter both at checkout.
How do I stop Shopify discount codes from stacking?
Open each discount in your Shopify admin, scroll to Combinations and untick the classes you do not want it to combine with. A discount with no combination boxes ticked can only be used alone. Remember that sale prices set with a compare-at price are not discounts, so codes will still apply on top of them unless you exclude those products.
Do compare-at price sales stack with discount codes?
Yes. A compare-at price is a display price, not a discount, so Shopify applies eligible discount codes and automatic discounts to the already reduced selling price. To prevent that, limit the code to collections that exclude sale items.
In what order does Shopify apply combined discounts?
Product discounts are applied first to the eligible items. Order discounts are then calculated on the subtotal that remains. Shipping discounts apply to the shipping rate. Tax is calculated after discounts.
What is a safe maximum discount?
It is the largest total discount at which you still cover product cost, shipping and payment fees. Work it out as 1 minus (unit cost plus fulfilment plus fees) divided by price. For a $32 item that costs $16 to make, $6 to ship and about $1 in fees, the ceiling is roughly 28%.
