Discount Leakage: How Promo Codes Cut Your Margin
Every discount code has one job: create orders that would not exist otherwise. Most codes fail that test and just make existing orders cheaper.
The only question that matters per code
Would this order have happened without the code? If yes, the discount was margin you gave away. Codes picked up by browser extensions and coupon sites fail this test almost by definition, because the customer was already in checkout when the extension found the code.
A sample store, code by code
The sample store, Cascade Supply Co., gave $436,203 in discounts across 9,713 orders over 180 days. That is roughly four orders in ten with a code on them (9,713 of 24,623), so discounts are a habit in this store.
One code stands out. COMEBACK was used on 702 orders and gave away $52.0K, at an average depth of 26.4% off. Its repeat share is 82.6%, which means more than four of every five uses came from a customer who had already bought. Those customers were coming back anyway. The code did not create the order. It lowered the price of one that was already on its way.
Put the store's codes together and the monthly picture looks like this:
| What the sample store gives away | Per month |
|---|---|
| Every discount, all codes | $74.2K |
| Estimated leak: discounts on orders from repeat or organic customers | $45.0K |
| Two codes at 25% average depth or more, combined | $31.0K |
| Recovered by fencing COMEBACK to first orders | $7.2K |
The gap between $74.2K and $45.0K matters. Not every discount is a leak. A welcome code that brings in new customers is doing its job, and it counts in the first number and not the second.
The $7.2K row is also worth reading slowly. Fencing COMEBACK to first orders only recovers the slice that went to repeat buyers. It does not recover the whole $52.0K, and a plan that promised the full amount would be wrong by a wide margin.
What each number on the list tells you
When you rank codes, four columns do most of the work:
- Orders and total discount. How much the code costs you in dollars. Sort by this first, because a small leak on a large code outweighs a large leak on a code nobody uses.
- Average depth. The share of the order the discount takes. A code that averages 26.4%, like COMEBACK, is giving away a quarter of the sale each time it is used.
- Repeat share. The share of uses from customers who had already bought. High numbers point to a code that rewards loyalty you already have.
- Net contribution after the discount. What the orders still earn once the discount is out. This is the column that decides whether to keep the code.
A code can look fine on one column and bad on another, so read them together before acting.
The audit math
incremental_proxy = conversion_lift × affected_sessions × avg_contribution
code_net = incremental_proxy − code_cost
You cannot see the order that would have happened without the code, so use proxies. Compare the conversion rate and basket size of people who used the code against a matched group who did not, and look at what share of redemptions came from customers who had already bought at full price.
Where the leaks concentrate
- Evergreen codes that reached coupon sites. These are often the single largest line. Rotate or retire them.
- Stacking. Free shipping, a percentage off and loyalty points on one order, each approved in isolation, can jointly take the order below zero contribution.
- Repeat-customer redemption. Discounts spent on customers who have already shown they will pay full price. Fence codes to genuinely new customers.
Fences that work
A fence limits who can use a code or when. The common ones are first-order only, a minimum basket size, a single category, and a short expiry. Each has a cost. A first-order fence protects margin and also stops loyal customers from getting a reward, so pair it with something that is not a discount, such as early access. A minimum basket raises the order value that the discount applies to, which is usually the better trade. Whichever you choose, change one code at a time, so you can see what the fence did.
What a clean program looks like
Every active code has an owner, an expiry, a fence (new customers only, a minimum basket, or one category) and a monthly net-contribution number next to it. A code that cannot show positive incremental contribution two months in a row gets retired. Margin recovered this way is some of the cheapest growth available, because it requires selling nothing extra.
Run it on your own codes
You need an order export with the discount code and amount on each order, plus a customer ID so repeat buyers can be told from new ones. ProfitFalcon reads that export and ranks every code by what it costs and who used it, and you can open the sample store to see the COMEBACK finding on the Cascade data. The discount leakage feature page shows the view in detail. For a step-by-step method you can follow in a spreadsheet, read how to find which discount code loses money. To see how ProfitFalcon differs from a connector-based profit app on price, see the TrueProfit comparison.
Review your codes every quarter at a minimum. A code turns from an asset into a leak the moment it reaches a coupon aggregator.
Upload your store export and see this for your own products, then decide.
Start 14-day trial14 days free. No card. Cancel anytime. Or open the sample store first.
BizFalcon AI