Discount Cannibalization: How Much of Your Discount Revenue Was Already Coming
Discount Cannibalization: How Much of Your Discount Revenue Was Already Coming
"Cannibalization" sounds like a supply-chain problem. It isn't. It's the word for your discount eating your own sales — and it happens in three different ways that almost nobody separates.
That matters, because each type requires a different fix. If you lump them together, you'll "fix" the wrong thing.
Type 1: Margin cannibalization (the one everyone talks about)
This is the obvious one. A shopper was going to buy at full price. You showed them a discount. They bought at a lower price.
You didn't create a sale. You just paid to lower the price of one you already had.
How to spot it: compare the conversion rate of shoppers with strong buying signals (repeat visitors, cart-adders who return, returning customers) who got an offer vs. a control group that didn't. If it's the same, the discount did nothing for them.
Type 2: Pull-forward (the one nobody measures)
Pull-forward is subtler and often bigger. The shopper was going to buy — but later, at full price. Your discount didn't create demand; it moved demand forward in time and lowered its price.
This is rampant in consumables, replenishables, and anything people stock up on.
The math. A customer buys your $60 product every 3 months at full price. You run 25% off and she buys three units — a 3-month supply.
- Without the sale: 3 orders × $60 = $180 over 9 months, all at full margin.
- With the sale: 1 order × $135 (3 × $45) now, then nothing for 9 months.
You gave up $45 in margin and didn't create a single extra order. You just front-loaded purchases you were going to get anyway — at a discount. And you've now reset her purchase cycle so the next full-price order is even further away.
How to spot it: track inter-purchase time for discount vs. control cohorts. If discount buyers come back later than full-price buyers, you're pulling demand forward.
Type 3: Cross-product substitution
The shopper was going to buy from you regardless — but a different product, often a higher-margin one. The discount steered them to a lower-margin SKU or a discounted one.
You made the sale, but you cannibalized your own margin mix.
How to spot it: compare the margin mix of treated vs. control baskets, not just the total. If treated baskets skew to discounted and lower-margin items, the discount shifted the mix against you.
Why separating them matters
Each type has a different fix:
| Type | What it looks like | The fix |
|---|---|---|
| Margin | Full-price buyers discounted | Aim offers at the hesitant, with the product most likely to convert |
| Pull-forward | Stock-up at a lower price | Limit quantity, or avoid discounting replenishables |
| Substitution | Margin mix shifts down | Discount the SKU you want to move, not everything |
If you assume all cannibalization is Type 1, you'll just tighten targeting — and miss that your biggest leak is pull-forward on your bestsellers.
The measurement that catches all three
You need two things:
- A control group. Incremental orders = treated minus control. Cannibalization is the flip side of the non-incremental conversions.
- Cohort tracking after the promo. Don't stop at the sale window. Watch whether treated cohorts buy less afterward (pull-forward) and what they buy (substitution).
A promo that looks like a win during the sale can be a net loss once you see the post-promo dip.
The takeaway
"Cannibalization" is not one thing. It's three, and only one of them is visible in a normal dashboard.
Margin cannibalization costs you the discount. Pull-forward costs you the discount and a future full-price sale. Substitution costs you the margin mix. Most stores measure none of them, then wonder why a record-revenue quarter didn't show up in profit.


