How Deep Can a Discount Go Before It Costs You Money?
Work out what a discount percentage really costs you, where your margin numbers live in Shopify, and how much extra volume a promotion has to earn back.
Discount strategyThe diex team12 min read
Someone asks you for 20% off and you have about four seconds to decide. The honest answer is not a feeling, it is a ratio: at your margin, a 20% discount needs a specific amount of extra volume before it has paid for itself. This article does that math in full, shows you where your real cost and margin numbers sit in Shopify admin, gives you a depth table you can read off, and then says plainly where the math quietly lies to you. At the end you will have a single number: your discount ceiling.
Work from contribution margin, not the margin you think you have
The margin Shopify shows on a product page is not the margin a discount eats into. Shopify calculates it from the cost per item field only. On the product details page, cost per item is described as "the cost to you of the product or variant," and if you resell, "the price that you paid the manufacturer, excluding taxes, shipping, or other costs." The margin shown is ([price - cost] / price) × 100. That is useful, but it ignores every other cost that moves with each sale.
What you actually need is contribution margin. Cornell's cooperative extension guide to break-even pricing says "the contribution margin per unit is how much revenue you have left per unit sold after you subtract your variable costs to produce that unit," and warns that if the price you receive falls below your variable cost per unit, "YOU ARE LOSING MONEY FOR EVERY UNIT YOU SELL," at which point more volume makes things worse, not better (Cornell ENYCHP). Variable cost is everything that appears because this order happened: landed product cost, inbound freight and duty, payment processing, pick and pack, packaging, the shipping you absorb, marketplace or channel fees.
For example, say a product sells for $60 and your cost per item is $22. Shopify's product page will show a margin of about 63%. Now add the rest: $6 of shipping you absorb, about $2 of payment processing on a $60 order, $1.50 of pick, pack and packaging. Variable cost is $31.50, contribution is $28.50, and your real contribution margin is 47.5%. That gap of nearly 16 points is an easy place to over-discount. It is tempting to run the breakeven math on 63% and set a depth that 47.5% cannot carry.
Find your real numbers in Shopify: cost per item, profit and units sold
You need three things from Shopify: costs recorded on products, a report that tells you what you actually kept, and a report that tells you how many units moved.
- Enter cost per item on products. It sits in the Pricing section of each product and variant, and it is optional, which is why so many stores have it blank. Fill it in across the catalog with the bulk editor or a CSV import rather than one product at a time.
- Open Analytics > Reports. Shopify states that "Shopify Analytics' main features are available to merchants on any Shopify subscription plan," and that "staff members require the Analytics permissions to access the reports and dashboards" (Shopify reports).
- Use the profit reports. Shopify's profit reports documentation lists Gross profit by product, Gross profit by product variant, Profit margin by order, Gross profit by POS location and Average profit margin by market. Gross profit is calculated "by subtracting the cost from net sales," and margin is
([net sales - cost] / net sales) * 100. - Use the sales reports for volume. The sales reports include Total sales over time, which "displays the number of orders and the total sales that you've made over time," plus Total sales by product and Sales by discount codes. Net quantity in these reports is "number of sold items - number of returned items," which is the volume figure you want.
Two cautions straight from the profit reports page. Profit is reported "only for products and variants that had cost recorded at the time they were sold," so backfilling costs today does not fix last quarter's report. And "discounts and refunds affect your net sales and profit margin," which is why the number in Profit margin by order rarely matches the tidy margin on the product page.
Read Profit margin by order for a normal month and for your last promotion. The gap between those two margins is the margin rate you gave away. It does not tell you whether volume paid for it, because a margin percentage is a rate: selling more units at the discounted price barely moves the percentage at all. For that half of the question you need units sold over the same two periods, which is what the sales reports give you. Then subtract the variable costs Shopify does not know about (your shipping subsidy, processing, fulfillment labor) to land on contribution margin. Shopify's own guide to determining pricing starts the same way: "before you set a price for your products, you need to know how much it costs to produce them."
The breakeven rule: what a discount has to earn back
Here is the whole derivation. Let P be price, C be variable cost per unit, and m be contribution margin as a fraction, so m = (P - C) / P. Give a discount of d (also a fraction). Your new contribution per unit is:
P(1 - d) - C, which rearranges to P(m - d).
Before the discount you kept P × m per unit. So to hold total contribution flat, unit volume has to multiply by:
V = m / (m - d)
That is the whole rule. Two things fall out of it immediately. First, the multiplier depends only on your margin and the discount depth, not on your price. Second, when d reaches m, the denominator hits zero and no amount of volume saves you. At that point every extra unit sold is sold at variable cost, and past it you are in the territory Cornell warns about.
Back to the example. Contribution was $28.50 per unit. Take 20% off: price drops to $48, processing falls to about $1.70, so variable cost is $31.20 and contribution is $16.80. Divide: 28.50 / 16.80 = 1.70. You need 70% more units at $48 to make the same money you made before. If you had run that math on the product page's 63% margin, you would have calculated 0.63 / 0.43 = 1.47, and told yourself 47% more units would do it. You would have planned for about two thirds of the lift you actually need.
Small note on the table below: the formula treats all variable cost as fixed per unit, while some costs (payment processing, percentage channel fees) fall with the price. That makes the formula slightly pessimistic. In the example above it asks for 73% more units (0.475 / 0.275 = 1.73) instead of the 70% you get once processing drops with the price. It is the right direction to be wrong in.
A discount depth table at 30%, 40% and 60% margin
Extra unit volume needed just to break even on contribution. Read down your margin column.
| Discount | 30% margin | 40% margin | 60% margin |
|---|---|---|---|
| 5% off | +20% | +14% | +9% |
| 10% off | +50% | +33% | +20% |
| 15% off | +100% | +60% | +33% |
| 20% off | +200% | +100% | +50% |
| 25% off | +500% | +167% | +71% |
| 30% off | impossible | +300% | +100% |
| 40% off | impossible | impossible | +200% |
A few readings worth sitting with. At 30% margin, a 20% off sitewide sale needs you to triple unit volume. Tripling volume in a week is not a promotion, it is a different business. At 60% margin, 20% off needs a 50% lift, which is achievable with real demand behind it. And the jump from 20% to 25% at 30% margin takes the requirement from +200% to +500%, because you are approaching the point where contribution goes to zero. The last five points of depth are always the most expensive five points.
This is also why the same percentage means completely different things across your catalog. If your accessories run at 65% contribution margin and your hardware runs at 25%, a sitewide 20% code is a mild promotion on one and a quiet disaster on the other.
Where the breakeven number lies to you
The formula is a floor, not a verdict. Four things make the real number worse, and one makes it better.
- Returns. The formula assumes every unit stays sold. It does not. For example, say 8% of units come back, and each return costs you the outbound shipping you absorbed plus a return label plus inspection time. Those costs land on the units that stayed sold, so your effective contribution margin is lower than the one you calculated, and your breakeven multiplier is higher. Shopify's profit reports page notes that discounts and refunds both feed into the net sales behind your reported gross margin.
- Shipping you still pay. Flat or free shipping does not scale down with a discount. If you absorb $6 of shipping on a $60 order, that $6 is 10% of revenue at full price and 12.5% after 20% off. Discounting makes your shipping subsidy a bigger share of every order.
- Cannibalized full-price demand. The multiplier assumes the baseline would have sold at full price without the discount. If half the people who used your code would have bought anyway, you did not buy incremental volume, you bought a margin cut on existing orders. This is how a promotion that "worked" can still lose money.
- Acquisition cost. If you paid for traffic to make the promotion land, that spend is part of the cost of the discount. A 15% off campaign with paid acquisition behind it has to clear the discount and the ad spend.
- Repeat purchase value, the one in your favor. If a discounted first order genuinely produces a second order at full price, the breakeven window is longer than one order. Only claim this if you can see it in your own data: cohort the customers who first bought on a code and compare their second-order rate with everyone else. If you cannot measure it, do not budget for it.
Cheaper ways to give the same perceived value
The expensive part of a sitewide percentage is that you pay it on carts that were already going to convert at full price. Every alternative below aims at the same perceived generosity for less contribution.
Tie depth to size instead of giving it away flat. A 20% off everything sale pays 20% on a one-item cart. A tier that reaches 20% only at three units or at $150 pays the deep rate on orders that bring extra contribution with them. The blended margin stays much closer to your full-price margin, and the offer still reads as "up to 20% off." This is the one structural change that moves the math rather than trimming the edges of it. If you want to build it, diex sets up spend tiers (for example 10% off from $100, 15% off from $200) and quantity tiers that run as Shopify Functions, so Shopify applies them in the cart and at checkout. Our walkthroughs cover picking spend tier thresholds from your own order data and setting up tiered quantity discounts.
Use a free shipping threshold instead of a percentage. Baymard Institute's review of 50 studies puts the average documented cart abandonment rate at 70.22%, and the top reason US online shoppers give after "just browsing" is extra costs (shipping, tax, fees) at 40% (Baymard). Removing a $6 shipping charge at a $75 threshold costs you $6 and solves the objection customers actually name. A 20% discount on a $75 order costs you $15 and does not.
Discount selectively, not uniformly. A different percentage per product lets you put depth on overstock and slow movers while holding full price on the items carrying your margin. One campaign, one customer-facing message, very different cost.
Give goods instead of basis points. A gift with purchase costs you its variable cost, not its retail price. A $20 retail item that costs you $6 reads as a $20 benefit and costs you $6.
Set your discount ceiling this week
Rearrange the breakeven rule to solve for depth instead of volume. If V is the largest volume lift you honestly believe you can get, your ceiling is:
d_max = m × (1 - 1/V)
Do it in four steps.
- Calculate contribution margin on your top five products by revenue. Price minus landed cost, processing, fulfillment, packaging and absorbed shipping, divided by price. Enter cost per item in Shopify on anything that is blank so your profit reports start working.
- Pull two things for your last sale and for a comparable normal period of the same length. First, Analytics > Reports > Profit margin by order, which tells you how much margin rate the discount cost. Second, units: Total sales over time for orders, or Total sales by product for net quantity. Keep the channel filters the same on both periods.
- Divide the promotion's units by the baseline period's units. That ratio is your
V: the lift your own last promotion actually produced, not the one from the case study. If the promotion ran in a different season than your baseline month, compare it with the same weeks a year earlier instead. Keep the Profit margin by order comparison beside it as the separate measure of what the depth cost you. - Run the formula. At 47.5% contribution margin and a believable 1.5x lift:
0.475 × (1 - 1/1.5) = 0.475 × 0.333 = 15.8%. Your ceiling is about 15%. Write it down where whoever builds the next campaign will see it.
Then stop arguing about depth and start structuring. A 15% ceiling applied at a quantity or spend threshold will usually protect contribution better than a 10% flat code, because you only pay it on orders that cleared the threshold. Check it against your own cart mix.
Sources
- Profit reports (Shopify Help Center)
- Calculating Break-Even Price or Sales Volume (Cornell University, ENYCHP)
- Product details page: cost per item, profit and margin (Shopify Help Center)
- How to determine pricing (Shopify Help Center)
- Shopify reports (Shopify Help Center)
- Sales reports (Shopify Help Center)
- Cart abandonment rate statistics (Baymard Institute)
Drafted with AI from the sources above and checked automatically against them and our product facts. Spotted a mistake? Email help@diex.app.