Why most discounts lose money
Discounts look like they work because the top line moves. Sessions and order counts climb, revenue holds up, and the promotion gets declared a win before anyone checks what it did to profit.
The problem is that a discount comes out of your margin, not your revenue. Say you sell at a $150 average order with $60 of product, shipping and fulfillment costs baked in. At full price you keep about $90 an order. Run 20% off and the order is worth $120, but your costs stay put, so you now keep $60. The discount was 20% of revenue and a third of your profit per order. Breaking even on that promotion takes a third more orders; coming out ahead takes more again.
Every discount trades profit per order for order volume. Whether the trade pays off depends on how strongly your customers respond to price, and that response has a sweet spot. Too shallow a discount gives up margin without moving conversion much. Too deep a discount gives up more margin than any realistic volume can recover. Somewhere in between sits the level that maximises total profit, and it is rarely the round number picked in a planning meeting.
How this calculator works
Rather than guessing, the calculator brute-forces the answer. It tests every discount level in your range (0–60% by default, in 1% steps) and builds a full profit-and-loss for each one:
- Order value: your AOV (or product price × units) reduced by the discount, plus any shipping fee the customer pays.
- Conversion: your base conversion rate, lifted by your uplift assumption for every 10 points of discount, with an extra boost when the order qualifies for free shipping.
- Costs: COGS, your real shipping cost, fulfillment fees and, if you enter one, ad cost per order. All of it is charged on every order.
- Profit: orders × profit per order, minus your fixed costs for the period.
sessions × CVR(D) × (order value(D) − order costs) − fixed costs
The scenario with the highest net profit wins. Scenarios where the discounted order value cannot cover its own costs are flagged as below cost and excluded from the recommendation, because volume cannot fix negative unit economics.
The free shipping logic deserves a mention, because most spreadsheet models get it wrong. Your carrier cost is paid on every order. What changes at a free-shipping threshold is the fee revenue: below it, customers pay your shipping fee; above it, you waive the fee and conversion gets a lift instead. The calculator also checks qualification against the discounted cart value. A deep discount can pull your average order under the threshold, which claws back fee revenue but costs you the free-shipping conversion boost. Every scenario prices in that trade-off.
How to estimate your conversion uplift
One input drives this whole model: how much a discount actually lifts your conversion rate. Get that wrong and no calculator can save you, so here's how to ground it in your own data:
- Open GA4 (or Shopify Analytics) and find your last meaningful promotion: something sitewide, at a known depth, that ran for at least a week.
- Compare conversion rate during the promo to the two or three normal weeks either side of it. Ignore the launch-day spike; use the whole window.
- Divide the relative lift by the discount depth in "10% blocks". Conversion going from 2.0% to 2.9% during a 20% off sale is a 45% relative lift across two blocks, or roughly 22% uplift per 10% of discount.
In our experience most ecommerce brands land between 15% and 35% uplift per 10% block. The response is stronger for impulse-led, price-driven categories and weaker for considered purchases and luxury positioning. If you have no promo history at all, start at 20 to 25% and pay close attention to the sensitivity readout.
Why the sensitivity range matters: the calculator re-runs the whole model with your uplift assumption halved and increased by half, and shows the optimal discount in each world. If that range is narrow, your answer is robust and you can act on it. If it is wide, say 0% to 20%, your uplift estimate is doing all the work. Run a small test before committing to a sitewide number.
A worked example
The example data the calculator loads with tells a typical story. A store does 10,000 sessions a period at a 2% conversion rate, with a $150 AOV, $60 of per-order costs, an $8.95 shipping fee and $15,000 of fixed costs. At full price that's about $4,790 of net profit.
Assume conversion lifts 25% for every 10 points of discount, and the sweep finds the optimum at 13% off: profit climbs to roughly $6,050, a 26% improvement over not discounting, worth about $1,260 every period. Push to 30% off and you are back below the no-discount baseline, because the extra orders cannot cover the margin you gave away. The curve on the chart shows both the sweet spot and the cliff past it.
Now try the same store with a $100 free-shipping threshold: the optimum shifts, because discounts past roughly 33% drag the average order under the threshold and the model starts trading the conversion boost against recovered fee revenue. Gut feel misses interactions like that.
When a discount is the wrong move
Sometimes the honest answer is "don't". A few situations where this calculator will help you see it:
- Your margins are too thin. If the tool flags most of your range as below cost, no discount depth is viable. Fix landed costs, pricing or AOV first.
- Your customers barely respond to price. Uplift under about 10% per block usually means the optimum is 0%. Considered-purchase and luxury brands often live here. Promote with value-adds instead.
- You'd be pulling sales forward. The model assumes discounted orders are incremental. If a promo mostly shifts next month's full-price buyers into this month's sale, real uplift is lower than your analytics suggest.
- Brand positioning matters more than this quarter. Frequent discounting trains customers to wait for the next sale. That long-term erosion is not in this model, so price it in with judgement.
Often a structured offer beats a flat discount: tiered "buy more, save more" offers, bundles that protect perceived value, a free-shipping threshold set just above your current AOV, or a gift with purchase. Calculators for several of those are on the free tools page.
Assumptions and limitations
Every model simplifies. So you can trust the output for what it is, here's what this one assumes:
- Linear uplift. Conversion lifts by the same relative amount for each 10-point block of discount. Real response curves usually flatten at deep discounts, which is another reason to be sceptical when the optimum lands at the edge of your range (the tool warns you when it does).
- Blended averages. Sitewide mode treats every order like your average order. Mix effects, such as discount-hunters skewing towards low-margin SKUs, are not modelled.
- Constant basket size. Units per order stay fixed as the discount changes, though in reality deep discounts often increase basket size.
- Incremental demand. No pull-forward, stock-up behaviour, returns, or long-term brand effects.
- One period at a time. It is a snapshot of the promotion period, not a 12-month LTV model.
These simplifications keep the model honest. It takes you from "25% off feels right" to a defensible starting number with a known uncertainty range, and the last step is a real test on your own store.