Why Discount Codes Break Your Free Shipping Threshold
Shopify measures free shipping minimums on discounted prices, and combining is off by default. The math, the two failure modes, and four fixes.
Conversion and AOVThe diex team11 min read
A customer fills a cart past your free shipping minimum, applies the 20% code from your newsletter, and shipping reappears at checkout. Nothing is broken, but two different things could be happening: Shopify is measuring your minimum against discounted prices instead of the list-price subtotal the shopper was watching, or your code is displacing the free shipping discount entirely because the two were never set to combine. The fix is different for each. This article shows the two setups merchants mix up, how to tell which failure you have, works the math on one cart, and gives you four fixes with their real costs.
The two free shipping setups are not the same thing
Merchants say "my free shipping threshold" to mean one of two different features, and the fix depends on which one you run.
A free shipping discount lives in Discounts in your admin. It is a discount code or an automatic discount of the Free shipping type, and it can carry a minimum purchase amount. You can also cap it, as Shopify's free shipping discounts documentation explains: check Exclude shipping rates over a certain amount and enter a value so the discount does not cover an expensive express rate.
An order-amount shipping rate lives in Settings > Shipping and delivery. You pick a shipping profile and zone, click Add shipping option, choose Order amount as the rate type, and enter Minimum, Maximum and Price for each range. Shopify's guide to setting up shipping rates gives the example of $24.99 for orders from $0 to $100, $9.99 from $100.01 to $200, and free shipping above that. Leave the maximum empty on your last range if you do not want an upper limit.
Here is the part that catches merchants out. Switching from the discount to the shipping rate does not dodge the problem. Shopify's shipping rate troubleshooting page states it plainly under "Considerations for price-based rates": "The checkout determines shipping rates based on the total value of the cart after applying discounts, but before applying taxes." Both mechanisms read the post-discount number. What differs is how much control you get, which matters for two of the four fixes below.
One thing to settle before the math. A discount-based free shipping offer and a percent-off code only both apply if combining is switched on for each of them. The post-discount arithmetic in the next section is what you see when combining is on, or when your free shipping comes from an order-amount shipping rate, which is not a discount and so has no combination setting to turn on at all.
Shopify counts the minimum after the discount, not before
The free shipping discount page says two things that together explain everything you are seeing. First: "The minimum purchase amount counts product prices only, and other costs such as taxes are never included in the amount." Second, and this is the sentence worth pinning to your monitor: "Products are counted towards a minimum purchase amount at their discounted price."
The order of operations backs this up. Shopify's page on combining discounts says discounts apply in sequence: product discounts first to individual items, then order discounts to the revised subtotal, then shipping discounts last. Your free shipping discount is in that last group. By the time it runs and checks its minimum, the percent-off code has already cut the subtotal it is measuring.
That same page sets the ceiling on stacking: "Customers can use a maximum of 5 product or order discount codes and 1 shipping discount code on the same order." It also sets the precondition: "Multiple discounts are applied to an order only when the setting on each discount allows the combination." Combining is off by default. Product and order discounts can combine with a shipping discount only when the combination setting on each discount allows it, and multiple shipping discounts can never apply to the same order. So if you never enabled combining, your code is replacing the free shipping discount rather than shrinking the subtotal it measures, and fix 1 below is already in force on your store. If stacking rules in general are what you are untangling, we went deeper in Shopify discount combinations: what actually stacks.
With combining on, the shopper's mental model and Shopify's model disagree. The shopper sees a $93 cart and a "$75 for free shipping" promise, both satisfied. Shopify sees a $74.40 cart and a minimum that is not met.
Work the math on one cart
For example, say your free shipping minimum is $75, your flat rate is $8.95, and you emailed a 20% off code that is set to combine with shipping discounts.
A customer builds an $84 cart at list price. Free shipping is showing in the cart. They apply the code:
- Subtotal after the code: $84 x 0.80 = $67.20
- Shopify compares $67.20 against the $75 minimum, not $84
- Free shipping drops off, shipping returns at $8.95
- Customer pays $76.15
Compare that with the same cart and no code at all. The customer pays $84 and you cover $8.95 of shipping, so you net $75.05 on product. With the code, you net $67.20 and the customer covers shipping. Your take drops by $7.85 and the customer's bill drops by $7.85, which sounds even until you remember what it looks like on screen: a promised benefit disappearing at the exact moment they tried to accept your offer.
To get free shipping back, the customer now needs a list-price subtotal of threshold divided by (1 minus the discount rate):
- $75 / 0.80 = $93.75 of list-price product
- That is $9.75 more than they had in the cart
Keep that formula handy. At 25% off, a $75 threshold needs $100 of list price. At 40% off, it needs $125. The deeper your code, the further your threshold moves away from the shopper.
The friction is not hypothetical. Baymard Institute's cart abandonment research puts the average documented abandonment rate at 70.22% across 50 studies, and among shoppers who abandoned for a reason other than browsing, the top cause was "extra costs too high (shipping, tax, fees)" at 40%. A shipping charge that appears after the shopper thought they had cleared it is the sharpest version of that problem.
Four fixes, ranked by what they cost you
1. Make the two offers exclusive (free)
Set your percent-off code so it does not combine with shipping discounts. The customer then gets one offer, not a mix that half works.
Know what that looks like at checkout before you promise anything in an email. If your free shipping is an automatic discount, Shopify picks a winner: the combining discounts page says that when two or more discounts are applied but cannot be combined, "the best discount for the customer's cart is always applied." On most carts above your minimum a 20% code is worth more than an $8.95 shipping subsidy, so the code applies and shipping shows at full price. On carts where free shipping is worth more, free shipping applies and the code does not. If your free shipping offer is itself a code, the customer entering the second code gets the error "Discount couldn't be used with your existing discounts." Test both states.
This costs nothing and removes the half-working state where free shipping vanishes mid-checkout. It does not give anyone free shipping on a discounted cart. Use it when your percent-off code is already generous enough to stand alone, and say so in the email: "20% off, standard shipping rates apply." In diex, every discount has combination settings that follow Shopify's product, order and shipping discount rules, documented in the guide to scheduling, limits and combinations.
Note that this lever only exists between discounts. An order-amount shipping rate in Settings is not a discount, so there is nothing to un-combine. The post-discount cart total still picks the rate.
2. Set the threshold from post-discount totals (cheap, costs some shipping margin)
Pull your order history and look at what people actually paid, not list prices. If most promo carts land between $60 and $80 after codes, a $75 threshold fails for half of them. Dropping it to $60 for the promo window keeps the promise intact and costs you shipping on the carts between $60 and $75 that would otherwise have paid it.
Do this with your own numbers rather than a round figure borrowed from somewhere else. The method in how to pick spend tier thresholds from your own order data works the same way for a shipping minimum: find where carts already cluster, then set the line just above it.
3. Add a middle rate so shipping degrades instead of snapping back (moderate)
Instead of one cliff from free to $8.95, build order-amount ranges in Settings > Shipping and delivery:
- $0 to $49.99: $8.95
- $50 to $74.99: $4.95
- $75 and up: free
Now a code that drops a cart from $84 to $67.20 costs the customer $4.95, not $8.95. The jump is smaller and the checkout feels less punitive.
One hard requirement here: cover every value with a range. Shopify's troubleshooting page says that because checkout uses the cart total after discounts, "If you use price-based shipping rates, then ensure that there's a price-based rate that includes that cart value." A gap means no rate is available and the customer cannot complete the order at all. Discount codes are exactly what pushes carts into gaps you did not test.
4. Stop running shipping offers alongside percent-off codes (costs promo simplicity)
Run one offer at a time. Either the promotion is 20% off with normal shipping rates, or it is free shipping over $75 with no percent-off code in circulation. This is the cheapest option in margin terms and the most annoying in marketing terms, because you lose the "and free shipping" line from your email. It is often the right call for thin-margin categories where shipping is a real cost rather than a rounding error.
Decide which fix fits your margins
| Fix | Cost to you | Best when |
|---|---|---|
| Make the offers exclusive | None | The code alone converts; you cannot absorb shipping on discounted carts |
| Lower the threshold for the promo | Shipping on mid-size carts | Promo carts cluster just under your current minimum |
| Add a middle shipping rate | Partial shipping subsidy | Your rate is high enough that the cliff is visible |
| One offer at a time | Promo flexibility | Shipping is a large share of order cost |
Two questions decide it. First, what is shipping as a percentage of your average order? If a $9 rate sits on a $45 average order, you cannot absorb it twice in one promotion, so fixes 1 and 4 are your realistic set. Second, is the threshold earning its keep? A free shipping minimum is an average order value tool. If your codes regularly drag carts under it, the threshold is no longer lifting anything during promotions, and you are paying for a benefit that your own marketing cancels. On sizing the code itself, how deep a discount can go before it costs you money has the breakeven math.
Whichever you pick, tell the shopper where they stand after the code is applied. A static "free shipping over $75" banner is the thing lying to them, so remove the fixed number or reword it to say the minimum is measured after discounts. Shopify has no built-in live shipping-threshold meter. If the discount you are running is a diex spend tier, the diex spend tiers progress block shows the tier reached and the amount left to the next tier on the cart page or in the cart drawer, and updates after cart changes; the storefront blocks page covers the placements and style options.
Test it in your own checkout before the next promotion
Fifteen minutes of real testing catches all of this.
- Build a cart that clears your minimum at list price by a small margin, say $84 against a $75 minimum.
- Apply your percent-off code and watch the shipping line in the cart and again at checkout.
- Do the same with a cart that lands just under the minimum after the code, and confirm a shipping rate is actually offered rather than nothing at all.
- Repeat with your deepest active code, since that is where the gap is widest.
- If you run an automatic free shipping discount alongside codes, test the pair and note which outcome you get: both applying, or one displacing the other.
Check the storefront, not just the admin preview. The admin shows you what you configured; checkout shows you what the customer gets.
What to do this week
- Open Discounts, find your free shipping discount, and write down its minimum purchase amount and whether its combination settings allow product and order discounts.
- Divide that minimum by (1 minus your deepest active discount) to see the list-price subtotal customers really need.
- Run the five-step checkout test above with your deepest code.
- Pick one of the four fixes and apply it to the next promotion only, so you can compare.
- Update the wording in your cart banner and promo emails to match what checkout actually does.
Sources
Drafted with AI from the sources above and checked automatically against them and our product facts. Spotted a mistake? Email help@diex.app.