New stores: 14 days of Protector freeFirst 25 stores.Uptime, daily scans, Slack and Telegram alerts. No card.See what’s included

Ecommerce

Discount codes that stack: pricing mistakes that turn a sale into a loss

Richard K.

Richard K. · September 1, 2026 · 10 min read

A customer buys a $120 jacket during your site-wide 20% off sale. They also have an email code for another 15% off. Both apply. Then a third automatic discount, left over from a bundle promotion nobody remembered to turn off, quietly stacks on top. The jacket ships for $61. It cost you $70 to make and fulfill.

Nobody approved that price. No one on your team typed it in. It happened because three separate discount rules, each reasonable on its own, were never tested together. This is one of the more common ways a promotion goes from smart marketing to a line item on the wrong side of your P&L, and it happens on Shopify, WooCommerce, and BigCommerce stores of every size.

Automatic discounts don't know a promo code is running

Most platforms let you set up automatic discounts (a rule that applies without any code entry) alongside promo codes that customers type in at checkout. The trouble starts when store owners treat these as separate systems that surely won't collide.

Shopify's automatic discounts, for example, can be configured to combine with product discounts, order discounts, or shipping discounts depending on settings you may have touched once, months ago, and never revisited. WooCommerce coupon rules have similar combination toggles buried in settings that don't get reviewed each time a new promotion launches. BigCommerce's cart-level rules behave the same way. None of these platforms are misbehaving. They're doing exactly what they were configured to do. The configuration is just older than anyone remembers, and it was never tested against the newest campaign.

A seasonal flash sale set up in a hurry is the classic trigger. Someone launches a 25% off code for a weekend push, forgetting that an automatic "free shipping over $50" rule and a leftover "10% off first order" discount are both still live. A first-time customer buying $60 worth of product gets 25% off, free shipping, and 10% off, stacked. The margin on that order may not survive.

Forgotten sale prices are the quiet twin of promo codes

The second common failure doesn't involve a code at all. It involves a sale price that was set directly on the product, then never reverted after the sale ended, combined later with an unrelated promo code.

Imagine a store that runs a end-of-season sale, marking a $40 item down to $28 in the product catalog itself. The sale ends, the banner comes down, the marketing calendar moves on. But the $28 price stays in the system because reverting prices was a manual step that fell through the cracks during a busy week. Three weeks later, a new 15% off code goes out to the email list. Customers apply it to the still-discounted $28 price, checking out at $23.80 for an item that should be back at $40. The store loses on every one of those orders, and the loss is invisible unless someone is actively comparing intended margin to actual margin, order by order.

This kind of drift is hard to catch by eye because the storefront looks correct. The price tag is real, the code is real, and the checkout math is technically accurate. The mistake happened earlier, when the sale price was never unwound. It's a similar pattern to other silent failures covered in checkout is where stores silently bleed: the storefront reports success while the business quietly absorbs a cost nobody signed off on.

Currency and rounding errors compound percentage discounts

The third mistake is more subtle and shows up most often in stores selling across multiple currencies or using percentage-based discounts on low-margin items.

A 20% discount on a $9.99 item in USD is a clean, sensible $1.99 off. The same 20% discount converted and rounded for a store's EUR or GBP storefront, run through a currency conversion plugin that rounds to the nearest whole unit for display, can land differently than intended. Depending on how the platform handles the conversion and rounding order (discount first, then convert, or convert first, then discount), the effective discount percentage in the secondary currency can end up higher than the one configured. On thin-margin items, a percentage point or two of unintended discount is the difference between a profitable sale and a break-even one, multiplied across every order in that currency.

Rounding problems also appear when store owners stack a percentage discount with a flat-amount code, like "20% off" plus "$5 off orders over $30." On a $32 order, the two discounts interact in an order that isn't always obvious from the settings screen, and the final price can undercut cost on the lowest-margin items in a cart before anyone notices the pattern.

A discount stack is never one mistake. It's two or three reasonable rules meeting each other for the first time at checkout.

Where these mistakes hide from normal review

The reason discount stacking survives so long in real stores is that nobody looks at the checkout the way a paying customer does. Store owners review the discount code settings screen, which shows the rule in isolation. They review the product price in the catalog, which shows the base price and the sale price separately. They rarely watch the actual math a live cart produces when a real customer applies a real code on top of whatever automatic rules and sale prices happen to be active that day.

This is the same blind spot that causes plenty of other checkout failures to go unnoticed for weeks, as covered in checkout is where stores silently bleed. A discount stack doesn't throw an error. The order completes, payment processes, confirmation email goes out. Everything downstream treats the transaction as normal because, technically, it is: the system did what it was told. The only sign something is wrong is a margin number that's lower than it should be, and margin per order isn't a number most store owners check in real time.

Seasonal peaks make this worse. Promotions multiply heading into big sale periods, and rules pile up faster than anyone can test them individually. The lead-up to Black Friday and Cyber Monday is exactly when this kind of layered discount is most likely to get configured under time pressure and least likely to get properly reviewed, a pattern worth planning around well ahead of time, as outlined in your BFCM prep should start in August.

How to catch a stacking problem before it costs a season's margin

The fix isn't complicated, but it requires treating discount testing as a checkout exercise, not a settings review. Before any promotion goes live, run a real test order through the actual storefront, applying the new code exactly as a customer would, with every other active discount, sale price, and automatic rule still turned on. Check the final price against what you expected, not against what the settings page implies.

Build a simple habit of reverting sale prices the same day a promotion ends, rather than leaving it for later. If your platform supports scheduled pricing (start and end dates tied to the discount itself, rather than a manual price edit) use it, since a scheduled sale price reverts on its own and removes the human step where things get forgotten.

For multi-currency stores, confirm which order your platform applies discount and conversion in, and spot-check the effective discount percentage in each currency at least once per campaign rather than assuming it matches your home currency. And for high-traffic periods, keep a running audit of active discounts, both automatic and code-based, so nobody is discovering a forgotten stacking rule from a campaign that ended two quarters ago. Ongoing price monitoring, checking that the price customers actually pay matches what you intended across your catalog, catches this kind of drift faster than a manual audit ever will.

Frequently asked questions

Why did my discount code combine with another discount at checkout?
A discount code combines with another discount when your platform's combination settings allow automatic discounts, sale prices, or other codes to apply alongside it, which is a configuration choice rather than a bug. Shopify, WooCommerce, and BigCommerce all let store owners control whether discounts stack, but these settings are often set once during initial setup and never revisited when new promotions launch. The fix is to review combination rules before every campaign and test an order at actual checkout with all active discounts turned on.
How do I stop a sale price from stacking with a new promo code?
Sale prices stack with new promo codes when the discounted price was never reverted to the original price after the sale ended, so the new code applies on top of an already-reduced number. Using scheduled pricing, with a start and end date built into the discount itself, removes the manual step of reverting the price and prevents it from lingering into future promotions. If your platform doesn't support scheduling, add a calendar reminder to revert pricing the same day every sale ends.
Can currency conversion cause a discount to be bigger than intended?
Yes, currency conversion combined with rounding can make an effective discount larger than the percentage configured, especially on low-priced items where rounding to the nearest whole currency unit has an outsized impact. This happens because platforms handle the order of conversion and discount application differently, and rounding at the wrong step can shift a clean 20% discount into something closer to 22% or 25% in a secondary currency. Spot-checking the final converted price against your intended discount percentage for each active currency catches this before it affects a full campaign.

The discount stack you don't see is still costing you

None of these mistakes require a hacker, a bug, or bad faith from anyone on your team. They require two or three reasonable pricing decisions, made at different times by different people, meeting for the first time inside a real customer's cart. The storefront reports a successful sale either way. Only your margin knows the difference.

Cassian™ includes Pricing Pulse, which checks that the prices customers actually pay match what you intended, catching the kind of drift that a settings review alone won't surface. Combined with a habit of testing real checkout paths before every campaign, it's usually enough to catch a stacking problem before it runs for a full sale weekend instead of a single afternoon.