A discount is worth running when it creates sales that wouldn’t have happened otherwise, and those sales cover the margin you gave away on the ones that would have. Most sitewide sales fail that test once you count the slump that follows. Run fewer, planned promotions, replace percent-off with offers that cost less than they look, and judge every sale on incremental contribution, not revenue.
The hidden cost of discounting
Discounts come out of margin, not revenue. Take a hypothetical $100 product with $55 of variable costs: product, shipping, fulfillment, payment fees and returns. At full price it contributes $45. At 20% off it sells for $80, the costs stay at roughly $55, and it contributes about $25. The customer saved 20%; you lost 44% of your contribution on that unit.
To earn the same total contribution, you need more units. The multiple is contribution margin ÷ (contribution margin − discount), both as a share of full price. At a 45% margin:
| Discount | Contribution per unit ($100 list price) | Units needed to match full-price contribution |
|---|---|---|
| 10% off | $35 | 1.29x |
| 20% off | $25 | 1.8x |
| 30% off | $15 | 3.0x |
| 40% off | $5 | 9.0x |
If you don’t have a reliable per-order margin yet, build it first. Contribution margin for DTC walks through the costs to include.
The per-unit math is only the visible cost. Three others rarely show up in a sale recap:
- Subsidized sales. Customers who were already going to buy, including your most loyal ones, get the discount too.
- Pull-forward. People who would have bought next week buy now, so the weeks after the sale run below normal.
- A lower reference price. When sales are frequent, customers learn that full price is optional. Full-price conversion softens between events and your list starts waiting.
When a discount is worth running
Ask one question: would most of these buyers have paid full price within the next 60 to 90 days? If yes, the sale is a margin transfer from you to them. If no, it may be worth it.
| Situation | Worth discounting? | Condition |
|---|---|---|
| End-of-season, discontinued or aged inventory | Usually yes | Holding or liquidating the stock costs more than the discount |
| Peak season when the whole category discounts | Often | New customers shopping on price that week are a real share of buyers |
| First order for new customers | Sometimes | Your cohort data shows enough repeat contribution to fund it |
| Win-back for lapsed customers | Sometimes | They’ve already ignored full-price messages |
| Missing a monthly revenue target | No | You borrow from next month and pay for it in margin |
| Covering for weak conversion | No | Fix the product page or checkout; a discount hides the problem |
| New product launch | No | You anchor its price low from day one |
Alternatives to percent-off: gifts, early access and value-adds
The goal is to give something that’s worth more to the customer than it costs you, without resetting the price of what they came to buy.
Gift with purchase
You pay the gift’s cost; the customer values it at retail. A gift with a hypothetical $30 retail value that costs you $6 feels bigger than $6 off. Pick gifts that do a second job: a sample of the product you want them to buy next, a slow-moving accessory, or a limited edition that only exists as a gift.
Early access
Give subscribers or top customers first access to a launch, restock or limited run instead of a lower price. It costs almost nothing in margin and makes being on your list worth something. The simplest version is an unlisted collection sent only to that list; for strict gating, use an app or theme logic that limits the page to tagged customers.
Value-adds
Free express shipping near a gifting deadline, free engraving or personalization, an extended return window, or double loyalty points. With points, you pay only for those that get redeemed, and only on a future order.
| Offer | Real cost to you | Lowers the price anchor? | Best for |
|---|---|---|---|
| 20% off sitewide | 20% of full price on every order, including ones you’d have won anyway | Yes | Clearance, peak season |
| Gift with purchase | Gift cost on qualifying orders | No | Introducing a second product |
| Early access | Close to zero | No | Launches, restocks, limited runs |
| Free express shipping | Upgrade cost per order | No | Giftable, higher-priced products |
| Points multiplier | Points redeemed later | No | Repeat buyers in a loyalty program |
Bundles and tiered spend thresholds belong to the order-value toolkit, covered in how to increase average order value.
Building a promotion calendar
A calendar turns discounts into decisions made in advance instead of reactions to a slow week. Build it in this order:
- Set a discount budget. Decide the total margin you’ll give away, as a share of gross sales, and check the actual discount rate against it monthly.
- Place a few anchor events. Sitewide sales tied to a real reason: peak season, end-of-season clearance. Your deepest discount of the year should happen once. If a spring sale matches your Black Friday offer, customers learn that any month can be Black Friday.
- Fill the gaps with non-discount moments. Launches, early access, restocks and gift-with-purchase windows keep email and ads busy without cutting price.
- Define always-on targeted offers. Welcome and win-back only. Keep discounts out of the first abandoned-cart message, or shoppers learn that leaving a cart unlocks a code.
- Set blackout windows. No discounts on new products for their first weeks on sale, no promotions in the weeks just before an anchor event, and a minimum gap between sitewide events.
Protecting full-price customers
The people a sale hurts most are your best customers: they paid full price last week and now see 25% off in their inbox.
- Suppress recent buyers from sale announcements, for example anyone who ordered in the last 14 to 30 days, or send them early access or a thank-you gift instead.
- Consider a price-adjustment window. Honoring the difference as store credit within a short period keeps goodwill and keeps the money in the business.
- Show welcome offers only to new visitors. Most email pop-up tools can hide forms from existing subscribers and known customers.
- Exclude core bestsellers from sitewide events so your most important products keep a stable price.
- Reward loyalty with access and service, such as first access, exclusive products and easier returns, rather than ever-deeper cuts.
Measuring incremental revenue and the post-sale dip
Revenue during the sale is the wrong number. Measure a window that runs from the week before the announcement to two to four weeks after the sale ends, and compare it with a baseline: what you’d expect in the same window with no sale, based on trailing weeks and adjusted for seasonality.
A hypothetical example: a store’s baseline is $10,000 a day at a 45% contribution margin. It runs a five-day 20%-off sale and does $22,000 a day. Because each $100 item now sells for $80 and still carries $55 of costs, contribution falls to about 31% of revenue. For the next 14 days, sales run at $8,500 a day instead of $10,000.
| Period | Revenue vs baseline | Contribution vs baseline |
|---|---|---|
| 5-day sale | +$60,000 | +$11,875 |
| 14 days after | −$21,000 | −$9,450 |
| Full window | +$39,000 | +$2,425 |
The recap shows $110,000 in five days. The real gain is $2,425 of contribution before any extra ad spend or gift costs, plus one more round of customers who learned to wait.
Two refinements make the read more honest:
- Split new and returning buyers. If most sale orders came from customers who bought recently, the sale mostly moved existing demand around.
- Hold out part of the list. For email and SMS promotions, exclude a random slice of subscribers and compare revenue per subscriber over the full window.
Between events, watch four trend lines monthly: discount rate (discounts ÷ gross sales), full-price share of revenue, the share of repeat orders that use a code, and the time between sales compared with your typical purchase cycle. When I audit a store’s promotions, the share of repeat orders using a code is usually the first number I pull. Rising, it means you’ve trained your customers.
Stopping discount code leakage
Codes leak through coupon sites and browser extensions that collect and auto-apply them at checkout, through creator codes shared far beyond the intended audience, and through generic codes that get forwarded. The cost is pure margin: a shopper already at checkout, about to pay full price, finds a code. If an affiliate or creator owns that code, you may also pay commission on the order.
Shopify’s discount settings cover most of the fix: minimum purchase requirements, customer eligibility, total usage limits, one use per customer, combination rules, and start and end dates.
- Use automatic discounts for public sitewide sales, so there’s no code to share
- Generate unique, single-use codes for email and SMS; Klaviyo and many other email and SMS tools can generate them through their Shopify integration
- Put an expiry date on every code, including welcome codes
- Limit codes to one use per customer and cap total uses on creator codes
- Restrict loyalty and win-back codes to the customer segment they were written for
- Avoid guessable codes like WELCOME10 or SAVE20 that shoppers try at checkout
- Review redemptions per code monthly; uses far above a code’s distribution mean it leaked
- Disable leaked codes and rotate creator codes each campaign
Setting the discount budget, promotion calendar and incrementality reads is part of how I run ecommerce growth programs: every promotion gets judged on contribution after the dip, not on its best day.
Get it built
If revenue spikes every sale and margin doesn’t, the Growth Audit reviews your promotion history, discount rate and code leakage alongside ad spend and retention. It’s $1,500 fixed and credited if we continue. See pricing or get in touch.