Skip to content
Bach.ai

Returns and Refunds: Building Net Revenue Into Your True ROAS

Your dashboard reports a 4.0 ROAS and you call the campaign a winner. But a third of those orders are coming back, you’re paying to ship them in reverse, and a chunk of the inventory can’t go back on the shelf at full price. The revenue is on the screen; the giveback is not. If you scale on the headline number, you’re scaling a campaign that loses money on every fourth conversion.

Gross ROAS counts revenue you may have to hand back. To know whether a campaign is actually profitable, you have to subtract refunds, reverse-logistics cost, and restocking write-downs before you judge it. That number — call it net ROAS — is the only one worth optimizing toward.

For the neighboring economics, compare How to Compute Break-Even ROAS From Your True Margin and use Margin-Band Gating: What ROAS Target Your Margin Allows to validate the measurement decision.

Gross ROAS counts revenue you don’t keep

The platform’s reported ROAS is purchase value at the moment of checkout. It has no idea what happens 14, 30, or 60 days later when the package comes back. For a low-return category that gap is rounding error. For a high-return one it’s the whole P&L.

Three costs sit between gross revenue and money you keep:

  • Refunded revenue — the order value you return to the buyer. A revenue-weighted return rate of 30% means roughly 30% of your top-line never converts to retained sales.
  • Reverse logistics — return shipping, inspection, processing labor, and customer-service time per returned order. This is real out-of-pocket spend that the original sale never recovers.
  • Restocking write-down — the share of returned units that can’t be resold at full value: opened, used, damaged, or seasonally stale inventory that gets discounted or written off.

None of these show up in the ROAS your ad account reports. All of them are real.

The net ROAS formula

Start from the headline and subtract the giveback:

Net ROAS = (Gross revenue − Refunds − Reverse-logistics cost − Restocking write-down) / Ad spend

A worked example on a single campaign. Spend is $10,000, gross revenue is $40,000, so gross ROAS is 4.0.

Line Amount
Gross revenue $40,000
Refunds (30% return rate) −$12,000
Reverse logistics −$1,440
Restocking write-down −$1,560
Net revenue retained $25,000

Net ROAS = $25,000 / $10,000 = 2.5. The 4.0 you celebrated is really a 2.5 once returns are loaded in. Whether that’s good or bad depends entirely on your break-even — which is the next move.

For fast planning you don’t need the full table every time. A tidy approximation:

Net ROAS ≈ Gross ROAS × (1 − r − c)

where r is the revenue-weighted refund rate and c bundles reverse-logistics plus unrecoverable restocking as a fraction of gross revenue. At a 30% refund rate and ~7.5% combined return-handling cost, a 4.0 gross becomes 4.0 × (1 − 0.375) = 2.5. Same answer, back-of-envelope.

(Treat 30% as an illustrative planning figure, not a benchmark — pull your own revenue-weighted rate. Return behavior varies enormously by category, price point, and audience.)

Two campaigns, identical headline, opposite verdicts

Here’s why return rate and ROAS belong in the same view, never on separate reports. Take two campaigns both reporting a gross ROAS of 4.0:

  • Campaign A — high-return category, 30% revenue-weighted return rate. Net ROAS: 2.5.
  • Campaign B — low-return category, 8% return rate with lighter handling cost. Net ROAS: ~3.6.

Now suppose your contribution margin sets a break-even net ROAS of 3.0 — the point where ad-driven gross profit covers ad spend plus the cost of fulfilling and handling the order.

Campaign A clears the headline bar but is underwater on net: it’s burning contribution on every cohort. Campaign B sits below a “good-looking” 4.0 on some days and is still comfortably profitable. If you ranked these on gross ROAS, you’d scale the loser and starve the winner. A return-rate-adjusted ROAS flips the decision.

The lesson: there is no universal “good ROAS.” A high-return category can be unprofitable at a 4.0 headline while a low-return one is fine well below it. The break-even net ROAS is category-specific, and sometimes campaign-specific.

How to read campaigns once returns are loaded in

Set a break-even net ROAS per category, not per account. Your target is contribution margin divided into 1, then adjusted for return-handling cost. A category that returns at 30% needs a structurally higher gross ROAS to hit the same net as one that returns at 8%. One blanket account-wide target hides this.

Weight returns by revenue, not order count. If your high-AOV orders return more frequently than your cheap ones, a simple unit return rate understates the revenue you’re giving back. Use refunded value over gross value.

Respect the return window — don’t judge fresh cohorts on matured math. Returns trickle in over days or weeks. A campaign launched recently shows a gorgeous gross ROAS precisely because the returns haven’t landed yet. Either judge on a fully matured return window, or apply an expected return rate to recent cohorts so you’re comparing like with like. Reading a 7-day-old campaign’s gross ROAS as if returns were final is one of the common ways operators overspend.

Treat return rate as a campaign-level diagnostic. Discount-led audiences and aggressive prospecting frequently return more. Creative that oversells fit, finish, or scale manufactures returns by setting expectations the product can’t meet. When one ad set’s net ROAS lags its gross by far more than the account average, the creative or the audience is the leak — not the landing page.

Feed the algorithm a net signal

This is also a delivery-mechanics problem, not just a reporting one. Meta optimizes toward whatever event you feed it. If you only pass the purchase event, the system learns to find people who buy — including serial returners, who look identical to great customers at checkout. Over a learning cycle, undisciplined value optimization can quietly tilt delivery toward your highest-return pockets.

Where your stack supports it, pass a return-aware value — net of refunds, or a delayed/adjusted purchase value once the return window matures — so the algorithm chases retained revenue instead of gross checkouts. You’re not just measuring honestly; you’re steering delivery toward buyers who keep what they order.

This is the kind of read where Bach is useful: it loads your refund and reverse-logistics data into the ROAS it surfaces, flags campaigns whose net diverges sharply from their gross, and proposes the budget shift — but it stays read-only until you approve the change. The judgment on category targets stays yours.

The takeaway

Gross ROAS is a checkout snapshot; net ROAS is the P&L. Before you scale anything, run the subtraction: gross revenue minus refunds, reverse logistics, and restocking, over spend. Set a break-even net ROAS per category, weight returns by revenue, and never grade a fresh cohort before its return window closes. Once returns are loaded in, the campaign you were about to cut may be your best one — and the one you were about to scale may be the leak.

See what your Meta ads are really costing you.

Connect your account and Bach ranks every revenue leak in minutes — each with the money it costs and a one-tap fix. Free for 7 days, no credit card.

Start Free Audit
Start your free audit