For a while my instinct when sales got soft was simple: run a discount. It always worked that night, and it always felt slightly worse at month-end. Revenue was up, profit somehow wasn't. It took me embarrassingly long to do the actual math on what a discount costs.
This post is that math, plus the discount types that don't wreck your average order value, and the one metric that tells you whether a sale actually worked.
TL;DR
- Break-even on a discount = discount ÷ (gross margin − discount). At 40% margin, a 20% cut needs 2× the units just to hold profit
- Pick a discount type that protects AOV — bulk, bundle, member-only — not an across-the-board cut
- Don't fight price wars on price; fight on how you convey value
- A designed discount keeps profit; a knee-jerk one erodes it even as units climb
- Judge a sale by RPS (revenue per session), not total revenue
1. The break-even math nobody runs first
The scary part of discounting is how much extra volume you need to make the lost profit back. The formula:
extra sales needed = discount ÷ (gross margin − discount)
At 40% gross margin: a 10% discount needs +33% units. A 20% discount needs +100% — you have to sell twice as many. A 30% discount needs +300%, four times the volume, just to reach the same profit.
The lower the margin, the faster that number explodes. So before deciding "just a little off," I now run this first.
2. Discount types that protect AOV
Discounts have types, and the type decides what happens to average order value.
- Bulk ("10% off 3+") raises AOV because each order grows.
- Bundle sells related items together — add-on purchases lift AOV.
- Member-only discounts repeat buyers while keeping the list-price brand intact.
- Across-the-board cuts the list price for no reason and drags AOV and brand down together. This is the one to avoid.
3. Designed vs. knee-jerk
Same act, different design, very different numbers. A blanket 20% cut loses gross profit even as units rise. A bulk-purchase design protects AOV and grows profit. A discount isn't yes-or-no — it's how you shape it. And before discounting at all, I try to win on value: reviews, usage photos, a clear warranty.
4. Measure the sale with RPS, not revenue
This is the part that took me too long. After a sale, "revenue went up" tells you almost nothing — revenue also moves with traffic. If you bumped ads the same week, the discount's effect is buried.
Two metrics separate it:
- AOV = revenue ÷ orders — did the discount raise or lower order value?
- RPS = revenue ÷ sessions — revenue per visit, including the fact that price also moves conversion rate.
GA4 is session-first, so slicing "RPS by the channel where I discounted" is a chore. That's the problem I'm building RevenueScope to solve — it lines up RPS and AOV by channel from a revenue-first view, so a sale gets verified in numbers, not vibes.
When you run a sale, do you check the effect on revenue per session — or just look at total sales and call it a win?



Top comments (0)