You have two products that sell well on their own. You put them in a bundle or a cross-sell email, and nothing happens: orders don't grow and revenue stays flat. The problem might not be the offer. Those two products might be substitutes, not complements, and your customers were never going to buy both.
Key takeaways
-
In ecommerce, product cannibalization is when one product takes orders from another product in your own line instead of adding new demand. It is internal competition, not losing customers to competitors.
-
In order data, cannibalizing products show up as a substitute pair: they appear in the same basket less often than chance would predict, and buyers of one rarely buy the other in a later order.
-
You can run the check from a standard order export. Compare how often two products appear together with how often they would if they were unrelated, then see how many buyers of one ever buy the other.
-
Do not bundle or cross-sell substitutes. Pick one hero product per need and use the other as an upgrade, a swap or a backup.
-
Product cannibalization is not always bad. A new size or formula replacing an old one can be exactly what you want.
What is product cannibalization in ecommerce?
Product cannibalization is when a new or similar product in your own catalog pulls orders away from an existing product instead of bringing in new customers or extra demand. When cannibalization occurs, overall sales stay flat while orders move from one product to the other.
It is not about losing market share to competitors. To put a size on it, use the cannibalization rate: the lost sales of the older product, divided by the sales of the newly introduced product.
In a DTC store, product cannibalization usually sits between sizes, flavors, pack sizes or formats aimed at the same customer:
-
Two 30-day vitamin packs at slightly different price points, where shoppers pick one or the other.
-
Coffee bags and coffee pods for the same customer base, with similar flavor profiles.
-
Single dog treat bags and bulk packs, where customers choose one format and stick with it.
Brand cannibalization is the same idea one level up: a new sub-brand takes demand from an older line that served the same audience.
How do I tell if two products cannibalize each other?
Check two things in your order history: whether the two products appear in the same order less often than chance would predict, and whether buyers of one ever buy the other in a later order. If both are low and the products do the same job, they are substitutes and are splitting demand.
These signals identify a substitute pair in your order export:
-
Low co-purchase. Both products sell well but rarely share a basket. The ratio of actual overlap to the overlap you would expect by chance is called lift, and lift below 1 means the products repel each other. The support, confidence and lift glossary entry explains the three measures.
-
Low cross-over in later orders. Of all customers who bought Product A, very few ever buy Product B in a separate order, and the same holds the other way round.
-
A contrast with a known complement. Put the pair next to one that obviously goes together, like coffee and filters, and the substitute pattern is easy to see.
Substitute vs complement: what is the difference?
A substitute is a product customers buy instead of another, for the same job. A complement is one they buy alongside another, because the two go together. That single distinction decides whether a bundle or cross-sell will work or waste the offer.
-
Substitute: two 500 g coffee blends at a similar price, where shoppers pick one blend each month and rarely buy both.
-
Complement: a bag of dog food and a pack of dog treats, often in the same basket or bought by the same customer a few weeks apart.
In order data, the difference is measurable:
-
Complements: they appear together more often than chance (lift above 1), and buyers of one often come back for the other. They grow basket size and repeat revenue.
-
Substitutes: they appear together less often than chance (lift below 1), and buyers of one almost never buy the other later. They split demand and blur your retention flows.
There is a third pattern, the halo effect: a new product that increases sales of an older one instead of cannibalizing it. That is a complement relationship working in your favor. Complements are the pairs to use in product bundles that increase repeat purchases, cross-sell emails and replenishment flows. Substitutes are not.
Is product cannibalization always bad?
No. Sometimes you want a new product to take over from an old one: a better formula, a more profitable pack size, or a format that fits how often your customers reorder. That is strategic cannibalization.
The line between harmful and useful cannibalization is simple. Harmful cannibalization splits demand across too many similar SKUs without growing overall sales or margin. Useful cannibalization moves buyers to a product that is better for margin, retention or both: a skincare brand replacing an old serum with an improved one, or a pet food brand moving customers from small bags to large bags with a better margin.
The risk is in transitions nobody manages. If customers drift to a lower-margin product, or loyal buyers of the old one lose it without a clear replacement, you pay in margin and goodwill. The goal is not to avoid cannibalization at all costs, only the kind with a negative impact on profits.
How to measure product cannibalization from an order export
You can run the check in a spreadsheet from a Shopify or WooCommerce order export, with one row per product line. The columns you need:
-
Order ID
-
Order date
-
Customer ID or email
-
Product ID or SKU
-
Quantity
Then, for each pair you suspect:
-
Pick two products that do the same job, for example "House Blend 500 g" and "Breakfast Blend 500 g".
-
Count the orders that contain A, the orders that contain B, and the orders that contain both.
-
Work out the overlap you would expect if they were unrelated: orders with A, times orders with B, divided by total orders.
-
Divide the actual number of orders with both by that expected number. That is the lift. Below 1 means the products repel each other, a sign of substitution.
-
For the cross-order check, take every customer who bought A and count how many bought B in any later order. Then do it the other way round. Very low cross-over in both directions supports the substitute reading.
Run this before you launch a product that does the same job as an existing product, not only after. It is the cheapest market research you have. Product differentiation (a clear difference in size, use or customer) is what keeps two similar products apart.
Market analysis in a spreadsheet works for a handful of pairs. Across a whole catalog the number of pairs grows quickly, which is where a tool helps. Affinsy reads a store's order history from a CSV upload or orders sent by webhook or API, and lists substitutes as their own result: pairs that customers tend to buy instead of each other, to check before you bundle or cross-sell.
Worked example: a complement pair and a substitute pair
An illustration with round numbers, not a benchmark.
A coffee store has 1,000 orders in a month.
| Complement: 1 kg coffee (C) and filters (F) | Substitute: House Blend (A) and Breakfast Blend (B) | |
|---|---|---|
| Orders with the first product | 200 | 250 |
| Orders with the second product | 150 | 180 |
| Expected orders with both, if unrelated | 200 × 150 ÷ 1,000 = 30 | 250 × 180 ÷ 1,000 = 45 |
| Actual orders with both | 60 | 10 |
| Lift (actual ÷ expected) | 60 ÷ 30 = 2.0 | 10 ÷ 45 = about 0.22 |
The cross-order check agrees. Of the 180 customers who bought the 1 kg coffee, 45 bought filters in a later order, one in four. Of the 200 customers who bought House Blend, only 6 ever bought Breakfast Blend later, and of the 150 who bought Breakfast Blend, only 3 later bought House Blend.
The complement pair belongs in a bundle, a "bought together" block and a replenishment flow. The substitute pair does not. Bundling A and B would spend the offer on a pair your customers already treat as either/or.
What should I do when I find a substitute pair?
To minimize cannibalization, do not bundle or cross-sell the two together. Choose one as the hero for that need and give the other a different job.
-
Keep substitutes out of the same bundle, "bought together" block or cross-sell slot. It only forces customers to choose inside your offer. The frequently bought together limits article covers why basket widgets can surface pairs like this.
-
Pick the hero on margin and repeat behavior. Feature it in ads, welcome offers and replenishment flows. If one of the two tends to bring customers back for a second order, that is your hero; the gateway products guide shows how to find out.
-
Give the other product a clear role. Make it an upgrade, a limited edition, a swap for customers who want variety, or a backup when the hero is out of stock.
-
Check substitutes before every bundle, discount or cross-sell email, so only complementary products are pushed together.
Pricing strategies matter too: a small price gap makes switching easy, and a new product at a lower price point can pull buyers from a premium one. When a new product clearly outperforms an older one, a clean phase-out of the weaker SKU is often better than holding both.
Next steps for your product line
Pull an order export this week and work through this list:
-
List products that do the same job for the same customer, for example two protein powders with similar flavors and sizes.
-
Run the co-purchase and cross-order checks for each pair.
-
Tag each pair as complement or substitute based on the data, not on how the products look on the shelf.
-
Remove substitutes from bundles and hero slots, and plan a phase-out or a new role where needed.
-
Price any new bundle with the bundle profitability calculator before it goes live.
Affinsy runs this kind of market basket analysis on a store's own orders, with substitutes and product roles in one report.
If you would rather have the substitute pairs, the strongest complements and the bundle candidates worked out for you, the 48-hour analysis delivers them from your own order history.
FAQ
How often should I check my catalog for product cannibalization?
Quarterly works for a stable product line. Brands that launch often or run constant promotions should check monthly. Check for potential cannibalization at key moments as well: just after introducing a new product, before a big seasonal campaign, or when a promotion changes prices across the line.
Can discounts create temporary product cannibalization?
Yes. A deep discount on a similar product can pull buyers away from a full-price hero for a while. Compare the product mix in discount weeks with calmer weeks to see whether the promoted product ate into your own sales or brought in more customers.
What role does market share play in deciding if cannibalization is acceptable?
If a new product grows your total sales in the category, some internal cannibalization is acceptable. If category revenue stays flat while your own products fight each other, you are slicing the same customers into more SKUs.
Can the same pair be substitutes for some customers and complements for others?
Yes. One group might treat two products as either/or, while another buys both, in the same order or across orders. Split the check by customer segment, for example with RFM groups, to see which segments show substitute behavior and which show complement behavior. Then tailor bundles and messages to each.