Why Your ROAS Looks Great But ROI Is Negative

Metricuno
May 29, 2026
6 min read
Why Your ROAS Looks Great But ROI Is Negative — Your ROAS says 3x but your bank account disagrees. Here's where the gap hides — fees, returns, COGS drift, modeled conversions — and how to find yours.
Quick answer

A diagnostic walkthrough for DTC operators staring at a 3x ROAS dashboard and a shrinking bank balance — what the platforms are hiding, and how to recover the real number.

Quick answer

Reported ROAS is gross revenue divided by ad spend. ROI is contribution margin divided by ad spend. The gap is everything in between: COGS, shipping, payment fees, returns, discounts, and platform over-attribution. On a typical apparel store, a 3.2x reported ROAS often translates to a 0.85x true ROI — you're losing 15 cents on every euro spent.

Definition
Performance marketing diagnostics

ROAS-positive, ROI-negative

When ad platforms report a healthy return on ad spend but the business actually loses money on each acquired order.

ROAS-positive, ROI-negative describes the most common scaling trap in online retail: paid campaigns hit their ROAS targets in Meta and Google Ads while the P&L slips into the red. The disconnect comes from ROAS using top-line attributed revenue against ad spend only, while ROI loads in product cost, fulfilment, fees, returns, and discounts — plus correcting for the platforms double-counting and modeling conversions they didn't actually see.

For an apparel or beauty brand running 30%+ gross margin and 15% return rates, the typical gap between reported ROAS and true contribution ROI sits between 40% and 65%.

Also known as
ROAS-ROI gap
phantom ROAS
blended ROAS illusion

You see this scenario every Monday. The Meta dashboard shows a 3.4x ROAS on prospecting. Google says 4.1x on brand. Blended sits at 2.8x against a 2.5x target. Then finance closes the month and contribution margin is negative.

Why the gap happens (the mechanism)

ROAS as platforms report it is a marketing-channel metric, not a business metric. It answers "how much attributed revenue came back per euro spent" — using the platform's own attribution window, its own modeled conversions, and gross revenue before any cost of doing business.

Since iOS 14, a meaningful share of the conversions Meta credits to your campaigns are modeled rather than observed. Independent reconciliations against server-side data put the over-reporting at 20-40% on prospecting audiences — so your 3.4x is already a 2.4-2.7x before you load any cost in.

The five leaks, ranked by typical damage

On a €60 AOV apparel order with €25 ad-attributed revenue at 3x ROAS: 1. COGS (35-45% of revenue) — the biggest single line 2. Returns and refunds (12-25% in apparel) — quietly erases margin weeks after the sale 3. Modeled / double-counted conversions (15-30% revenue overstatement) 4. Shipping subsidy on free-shipping thresholds (€4-8 per order) 5. Payment processing and platform fees (4-7% of gross) Stack all five and a 3x ROAS turns into a sub-1x ROI.

How to detect it in your own numbers

Start with a single cohort: all orders acquired in one week from paid channels. Pull them from Shopify or your order system, not from the ad platform. You want the order-level truth, not the campaign-level claim.

For each order, subtract landed COGS, the discount code applied, shipping cost net of customer-paid shipping, payment processor fees (Stripe/Shopify Payments at 1.5-2.9%), and an expected-return reserve based on your 30-day return rate. What's left is contribution margin per order. Divide the cohort's total contribution by the ad spend that brought them in. That's your real ROI.

Two reconciliation checks catch the platform-side distortion. First, compare platform-reported conversions to Shopify orders tagged with the same UTM — the delta is your modeled-conversion inflation. Second, segment ROAS by new vs returning customer; if returning-customer revenue is being credited to prospecting campaigns, your acquisition ROAS is borrowed from existing LTV.

How to fix it (without killing scale)

Set a contribution-margin ROAS target, not a revenue ROAS target. Work backwards from the AOV: if landed cost + fulfilment + fees + returns reserve eats 70% of revenue, your break-even ROAS is 1 / 0.30 = 3.33x. Anything below that is unprofitable growth, regardless of what Meta says.

Refresh COGS inputs monthly. Stale cost inputs are the single biggest source of ROI drift — supplier price increases, freight surcharges, and SKU mix shifts compound silently. A cost file last updated nine months ago can make ROI look 30% better than reality.

When negative first-order ROI is actually fine

Subscription DTC, replenishment beauty SKUs, and high-AOV repeat categories should expect negative first-order ROI. The unit economics work over months 2-6 as the LTV unlocks. The trap isn't negative first-order ROI — it's negative first-order ROI on a one-and-done category like single-purchase apparel.

Experiments worth running this quarter

Test lifting the free-shipping threshold by €10-15 against your current threshold. If your current threshold sits below break-even, the higher threshold should improve contribution margin without tanking conversion rate by more than 1-2 points — a net win. Measure contribution per session, not conversion rate alone.

Test capping the welcome-discount code at 10% versus the standard 15-20% on new-visitor pop-ups. Discount codes are the most under-modeled ROI leak because they don't appear in the ROAS denominator at all — every point of discount comes straight out of contribution. Pair the test with a creative variant that leads with free returns or loyalty perks instead.

Frequently asked

Frequently asked questions

For a typical DTC brand running 35-40% contribution margin, true ROI is roughly 35-40% of reported ROAS. A 4x reported ROAS converts to roughly 1.4-1.6x ROI. If your ratio is wider than that, you have a leak — most often stale COGS or unmodeled return reserves.

Server-side conversion APIs (CAPI) close part of the gap but not all of it. Brands with mature CAPI implementations typically see 10-20% over-reporting on prospecting; brands relying on pixel-only or partial CAPI still sit at 25-40%. Reconcile monthly against your order system to know your number.

Yes — but the cleaner fix is to feed Meta value-optimized signals tied to contribution margin (via offline conversions or value rules), then keep the ROAS target where it is. That way the algorithm bids for profitable orders, not just any revenue.

They don't, by default. The ad platforms book the conversion at checkout and never see the refund 21 days later. In apparel and footwear with 15-30% return rates, this means reported ROAS is structurally inflated by the return-rate percentage unless you push refund events back into the platforms.

Both Meta and Google credit a conversion to the last ad click within the attribution window, regardless of whether that customer was already on your list. If 40% of paid-search clicks come from existing customers, their revenue inflates acquisition ROAS without representing any new business.

Take last month's total ad spend. Take total orders from paid sources. Multiply orders by (AOV × contribution margin %) — use a contribution margin you trust, around 25-35% for most apparel and beauty. Divide that contribution by ad spend. That's a usable true-ROI estimate within an hour.

It depends on the threshold relative to your AOV and unit economics. A €50 free-shipping threshold on a €55 AOV with €7 shipping cost destroys €5-7 of contribution on most orders. Brands frequently set thresholds based on competitor benchmarking rather than break-even math.

Blended ROAS mixes acquisition spend with branded-search spend and remarketing spend, all of which have very different incrementality. A 2.8x blended ROAS can mask a 1.4x prospecting ROAS subsidised by a 12x branded-search ROAS that would have happened anyway. Split by funnel stage before drawing conclusions.

Monthly at minimum, weekly if you're on volatile freight or running SKU launches. Stale COGS is the single most common reason ROI dashboards look healthier than the bank balance — a six-month-old cost file can overstate ROI by 20-30% after supplier price increases and freight changes.

Shopify's number is closer to truth because it's based on last-click attribution against actual orders, but it under-credits view-through and assisted conversions. Use Shopify ROAS as the floor and platform-reported ROAS as the ceiling — your real number sits between them, usually closer to Shopify's.

Get an AI expert review of your site

Paste your URL — Metricuno's AI runs the same heuristic checks a senior CRO consultant would, scoring your page and prioritising the fixes that'll move conversion fastest.