Discount and Promo ROI: Did That Sale Actually Make Money?

A discount can lift revenue and still lose money. Measure promo ROI for real: incremental sales, margin after discount, and a clean before/after read.

The sale looked like a win. Was it?

You ran a 20% off weekend. Revenue jumped. The dashboard went green. Everyone felt good.

Then the month closed and profit was flat — or worse, down. How does a revenue spike turn into a margin shrug?

Because a discount that lifts revenue can still destroy profit. The spike is the easy part to see. The expensive part — the margin you gave away, the orders that would have happened anyway, the next-week sales you pulled forward — never shows up on the headline chart.

Measuring a promo properly means asking a harder question than "did sales go up?" The real question is: after the discount, the orders that wouldn't have happened otherwise, and the cost of fulfilling them, did this promotion make money?

This post walks through how to read a promo honestly — what to measure, the traps that make a bad promo look good, and how to set up a clean before/after comparison in VedaX Studio using the order data you already have.

Three numbers hide behind every revenue spike

When revenue jumps during a sale, three different things are tangled together. Pulling them apart is the whole game.

1. Incremental sales — the orders the promo actually created. These are the customers who bought because of the discount and wouldn't have otherwise. This is the only revenue the promo can truly take credit for.

2. Cannibalized sales — the orders you discounted that would have happened anyway. A loyal customer who was going to buy at full price this week, but instead used your code, didn't add revenue. They subtracted margin. Every dollar of discount on a would-have-bought order is pure giveaway.

3. Pulled-forward sales — demand you borrowed from the future. A big spike during the sale followed by an unusually quiet week after often means you didn't create demand, you just rescheduled it — and paid a discount for the privilege.

The headline revenue number adds all three together and calls it a success. A real promo read separates them. You'll rarely get a perfect split, but even a rough estimate changes the verdict. If most of your "lift" was cannibalized full-price orders, the promo lost money no matter how green the chart looked.

The practical move: stop staring at the spike. Look at the shape around it — the weeks before, the discounted orders themselves, and the week after.

Margin after discount: the number that actually decides

Revenue tells you nothing about whether a sale made money. Margin after discount does.

For each order in a promo, the honest math is:

- Start with the line revenue

- Subtract the discount applied

- Subtract cost of goods (COGS)

- Subtract anything else the order consumed — shipping you ate, payment fees, gift wrap

What's left is the contribution that order made. Do that across the promo window and you have the real result — not the vanity revenue, the money you kept.

Here's the prerequisite to be honest about: VedaX computes margin from the cost data you connect — it doesn't invent COGS. If your Shopify products carry a cost-per-item, that cost flows through and margin analysis works. If your products have no cost set, VedaX can still show revenue, discount, and order-level behavior, but it can't compute true margin until cost is present. We cover this end to end in the guide to turning Shopify revenue into real margin — worth reading first if cost-per-item isn't filled in on your products yet.

With cost in place, you can ask VedaX Buddy, in plain English, for the margin-after-discount on every order in your sale window. It writes the SQL, returns the table or chart, and you see whether the discounted orders cleared the bar or quietly ran at a loss. A discount deep enough to sell below contribution cost means you paid customers to take inventory — and the more you "sell," the more you lose.

The "would they have bought anyway" problem

This is the hardest and most important question in promo analysis, and there's no connector that answers it for you. But you can get a defensible read with the data you have.

You can't rerun the week without the sale, so you estimate the counterfactual — what would have happened without the promo. A few practical approaches:

- Baseline from quiet periods. Look at a stretch of normal, non-promo weeks to establish your typical order volume and revenue. That baseline is your "would have happened anyway" floor. Sales above it during the promo are your candidate for incremental; sales at or below it were likely going to happen regardless.

- Watch the week after. If the promo week soars and the following week craters below baseline, you pulled demand forward. Net the two weeks together against two normal weeks — that comparison is far more honest than the promo week alone.

- Split new vs returning customers. A discount that brings in new customers is buying acquisition (more on valuing that in repeat purchase rate and customer LTV). A discount redeemed mostly by existing customers who buy regularly is far more likely to be cannibalization. The new-vs-returning split on discounted orders is one of the most revealing cuts you can run, and it's sitting right in your order data.

None of this is laboratory-clean. But moving from "revenue went up" to "here's roughly how much was genuinely new, here's what we cannibalized, here's what we borrowed from next week" is the difference between guessing and deciding. For the wider habit of building decisions on evidence like this, see our framework for data-driven decision making.

Setting up a clean before/after read in VedaX

Here's a concrete way to measure a promo without drowning in spreadsheets. The principle: compare like with like, and always include the period after the sale.

1. Define three windows. A baseline window (a few normal weeks before), the promo window itself, and a post-promo window of equal length right after. The post window catches pulled-forward demand — skip it and you'll overstate the win every time.

2. Tag the discounted orders. In Data Explorer, filter your orders to those carrying the promo's discount code or a discount amount greater than zero in the sale window. Save that as a view so you can come back to it. That's your promo cohort.

3. Compare the cohorts on the numbers that matter:

- Orders and revenue per window (to size the spike)

- Average order value, promo vs baseline (deep discounts often drag AOV down)

- Margin after discount per window (the verdict)

- New vs returning split on discounted orders (cannibalization signal)

- Post-window revenue vs baseline (pull-forward signal)

4. Let contribution analysis show you what moved. When margin shifts between windows, contribution analysis tells you which segment, product, or customer type drove it — so you learn whether the promo worked across the board or only torched margin on a couple of already-popular SKUs you didn't need to discount.

5. Pin it to a dashboard. Build the comparison once, pin the charts, and reuse the layout for the next sale. Over a few promos you'll start to see which discount depths and which products actually generate incremental margin and which just give money away. That same dashboard makes a clean live P&L view when you fold it into your broader profit picture.

Folding in ad spend (the honest part)

Most promos don't sell themselves — they're pushed with paid traffic. If you spent on ads to drive the sale, that cost belongs in the ROI math. Leaving it out is how a promo that lost money still looks profitable.

Here's the honest constraint: VedaX does not have a direct ad-platform connector. There's no one-click Google Ads or Meta Ads pull. What you can do is bring the spend in yourself — export your ad spend for the promo window to a Google Sheet or CSV and connect or upload it. Once it's in VedaX alongside your order data, you can set the promo's incremental margin against what you paid to drive it and get the full picture: did the incremental margin clear the ad spend, or did you pay to lose money twice?

It's a manual step, and we'd rather be straight with you than pretend a button exists. The payoff is real, though — folding acquisition cost into your promo read is exactly the kind of thing covered in marketing attribution without spreadsheets, and it's what separates a promo that bought profitable growth from one that just bought revenue.

Even without ad spend, the order-level margin read above tells you whether the sale itself was healthy. Adding spend just tightens the verdict.

Make the promo read a habit, not a fire drill

The reason most stores never learn from their promos is that the analysis happens weeks later, by hand, when the urgency has passed and the next sale is already being planned. The numbers get a glance, not a read.

VedaX is built to flip that. The Insights feed surfaces movements proactively — a margin drop during a sale window, an anomaly in discounted-order volume, a goal slipping off track — each with an "Ask Buddy" and "View data" so you can go from "something moved" to "here's why" without building a thing.

And you can have the read delivered. With an opt-in insight digest, a summary of what your data is telling you lands in your inbox on a daily or weekly cadence, at a time you choose, sent to the people who need to see it. Turn it on during a promo and the team gets a recurring, plain-English readout of how the sale is actually performing — margin and all — instead of waiting for someone to remember to run the numbers.

The takeaway: treat every discount as a hypothesis, not a celebration. Measure the promo, not the spike — incremental sales, margin after discount, the orders you'd have made anyway, and the week after. Do that consistently and you'll stop running sales out of habit and start running the ones that actually make money. If you haven't wired up your store yet, start with connecting Shopify to VedaX, make sure cost-per-item is set so margin is real, and run your next promo with the numbers on your side.

Frequently Asked Questions

How do I know if a discount actually made money or just moved revenue around?

Look past the revenue spike at three things: margin after discount on the promoted orders, how the promo window compares to a normal baseline period, and what revenue did in the week after the sale. If margin after discount stayed healthy, sales rose clearly above baseline, and the following week didn't crater below normal, the promo likely created real incremental profit. If margin was thin, the lift barely cleared baseline, or the next week went quiet, you mostly discounted orders that would have happened anyway or borrowed demand from the future.

Can VedaX calculate my true margin after a discount?

Yes, as long as cost data is present. VedaX computes margin from the cost-per-item (COGS) on your connected Shopify products or whatever cost data you upload — it doesn't invent costs. If your products have a cost set, margin after discount flows through per order automatically. If cost isn't filled in, VedaX can still show revenue, discounts, and order behavior, but it can't compute true margin until you add cost. Setting cost-per-item is the prerequisite for honest promo ROI.

Does VedaX connect to Google Ads or Meta Ads to measure promo spend?

No. VedaX does not have a direct ad-platform connector — there's no one-click Google Ads or Meta Ads integration. To fold ad spend into your promo ROI, export the spend for your sale window to a Google Sheet or CSV and connect or upload it. Once it sits alongside your order data, you can compare the promo's incremental margin against what you paid to drive traffic and get the complete picture.

What's the difference between incremental and cannibalized sales?

Incremental sales are orders the promo genuinely created — customers who bought because of the discount and wouldn't have otherwise. Cannibalized sales are orders you discounted that would have happened at full price anyway, so the discount added no revenue and only gave away margin. A revenue spike blends both. Splitting new versus returning customers on discounted orders is a practical signal: discounts redeemed mostly by regular existing customers lean toward cannibalization.

How can I get a promo performance read without building reports every time?

Set up the before/baseline/after comparison once in a dashboard and reuse it for each sale. Then turn on an opt-in insight digest so a plain-English summary of how the promo is performing — including margin — lands in your inbox on a daily or weekly schedule during the sale window. The Insights feed also flags margin drops or unusual discounted-order volume proactively, each with Ask Buddy and View data, so you investigate movements as they happen instead of running numbers weeks later.

More from VedaX Blog

See it in VedaX: Shopify and marketplace analytics in VedaX