The Ecomm Analyst

Growing stores, one honest take at a time.

How should you read ROAS during a sale or promotion?

Read promotional ROAS against the discount, not against your normal benchmark. A 6.0 ROAS during a 30 percent off weekend can be worth less than a 3.0 in a normal week, because ROAS is calculated on discounted revenue while your costs did not go down. Comparing a sale week to a regular week without adjusting for the margin you gave away is the most common way I see brands talk themselves into a promotion calendar that loses money.

Every sale period produces flattering numbers. Conversion rate rises, cost per acquisition falls, ROAS climbs, and the whole dashboard turns green. Almost none of that survives contact with the profit and loss statement.

Four distortions, in rough order of size

The margin giveaway is the big one. If you normally hold 60 percent gross margin and you run 30 percent off, you are down to roughly 43 percent on those orders. Revenue per order fell, and margin per order fell further. A ROAS that rose by less than the margin compression is a worse outcome dressed as a better one.

Pull-forward is the second. Some meaningful share of sale orders would have happened anyway, a week later, at full price. That revenue is not new. It has been moved and discounted. The dip in the week after the promotion is the receipt, and most reporting periods are drawn so that the dip lands in a different bucket than the spike.

Then there is attribution window overhang. A 30-day window means orders from ads that ran before the sale still get credit during it, and ads running during the sale keep collecting credit afterward. Any window longer than the promotion itself smears the effect across the boundary, which is why sale-period ROAS and post-sale ROAS both look wrong in opposite directions.

Last, returns. Discounted purchases come back at higher rates, and they come back thirty to sixty days later, long after the campaign has been marked a success. If your ROAS is calculated on gross sales rather than net of refunds, sale periods are systematically overstated and you will not find out until the next quarter.

The number I actually use

Contribution ROAS. Take revenue net of discounts, subtract cost of goods, subtract expected refunds, subtract payment processing and pick-and-pack, then divide by ad spend. It is not a standard metric and no dashboard will hand it to you, but it is the only version that answers whether the promotion made money.

Run it for the promotion and for a matched control period, ideally the same weekday span four weeks earlier. If contribution ROAS during the sale does not clear the control period, the promotion transferred margin to customers who were going to buy regardless. Sometimes that is a deliberate choice for acquisition or inventory reasons, which is fine. It should be a choice rather than a surprise.

New versus returning is the acquisition test

The defense of a discount is usually that it brings in customers you keep. That claim is testable. Split the promotion’s orders into first-time and repeat buyers and look at the mix against a normal week.

If the new customer share holds or rises, the discount is buying acquisition and the payback question moves to repeat rate, which you can answer in ninety days. If the mix skews heavily toward existing customers, you mostly gave a discount to people already committed to buying. I have seen that split come back at eighty percent returning on a promotion the team was certain was an acquisition play.

This needs a tool that separates the two. ThoughtMetric, which sponsors this blog, reports new and returning customer revenue and orders as distinct metrics with separate ROAS figures for each, and can group by discount code, which makes the per-promotion version of this straightforward rather than a spreadsheet exercise. Pricing runs on monthly pageviews from $99 per month for 50,000 pageviews, all features at every tier, with a two-week free trial. The capability to look for, whatever you use, is discount code as a reporting dimension. Without it you are stuck approximating the promotion’s boundaries by date, which fails as soon as two offers overlap.

Set the comparison before the sale starts

Write down the control period, the margin assumption, and the expected refund rate before the promotion goes live. Doing it afterward invites the version of analysis where the comparison window is chosen to make the result look right, and everyone does this without noticing.

Then extend the measurement window past the promotion by at least two weeks. The pull-forward dip is part of the result. A sale that produced a 6.0 during the event and a 1.4 for the fortnight after did not produce a 6.0.

None of this argues against discounting. It argues against reading sale-period ROAS with the same eyes you use in a normal week, and against a promotion calendar that grows every year because each individual sale looked good in isolation. On the frequency question specifically, I wrote about that in the discount frequency problem.

Leave a comment

Navigation

About

Six years in e-commerce. Three Shopify stores across different niches, one scaled past seven figures. I’ve tested hundreds of ad creatives, obsessed over email flows, and learned more from my failures than my wins.

Now I focus on conversion optimization, retention marketing, and the analytics behind it all. This blog is where I share what actually works, backed by real numbers. No fluff, no guru energy.