Platform ROAS overstates profit for two reasons at once: the platform inflates the revenue side by claiming sales it only "influenced," and ROAS ignores every cost that happens after the sale — product cost, fulfillment, payment fees, refunds, and chargebacks. So a campaign can show a 4× ROAS in Ads Manager and still lose money in your bank account. The fix is to measure true per-order profit, not platform-reported return on ad spend.

You open Meta Ads Manager and see a healthy return on ad spend. You open your bank account and the deposit is smaller than you expected. Both screens are "correct" — they are just answering different questions.

Platform ROAS answers "how much revenue did my ad plausibly influence?" Your bank answers "how much cash is actually left?" The gap between those two numbers is where thin margins quietly turn negative.

The two-part gap between ROAS and profit

Platform ROAS overstates profit in two separate ways that stack on top of each other. The first inflates the numerator (revenue). The second ignores every cost that is not ad spend.

Understanding both halves is the whole game. Most articles only cover one, so let's walk through each with real arithmetic.

Part one: the platform over-credits revenue

Your ad platform is not a neutral referee. It counts a sale whenever it can plausibly claim influence, using its own attribution window and its own view of the world.

Meta's default window is 7-day click plus 1-day view, so it claims a purchase made within a day of seeing an ad — no click required. Because of view-through and modeled conversions, Meta's reported purchase count typically runs 20–35% above your actual Shopify orders on the default window, according to Vaizle and TrackBee. That excess is not fraud — it is a different definition of "a conversion."

The problem compounds when you run more than one channel. Meta, Google, and TikTok each credit the same purchase inside their own walled garden, so summing their dashboards double-counts revenue you only earned once. This is the same measurement mismatch that makes Shopify, Meta, and GA4 disagree on the same store — the platform and your store are counting different things.

If you have ever wondered why Facebook's delayed attribution reports a sale on the click date instead of the purchase date, or why your Shopify UTM parameters stop showing the real source, you have already met this gap. The platform's revenue number is generous by design.

Part two: ROAS ignores every cost after the sale

Even if the revenue number were perfect, ROAS would still lie about profit — because ROAS only subtracts ad spend. It knows nothing about your product cost, your fulfillment, your payment processor, or your refunds.

Return on ad spend is revenue divided by ad spend. Profit is what survives after all costs. Those are not the same equation, and for a print-on-demand or dropship store the costs ROAS ignores are usually the biggest ones.

Here is what ROAS silently leaves out:

  • Cost of goods sold (COGS) — the blank, the print, and the supplier's shipping fee.
  • Payment processing — roughly 2.9% + 30¢ per order on Shopify Payments' Basic plan (US online), per ReportPundit and Webgility.
  • Refunds — Shopify reverses the revenue, but your platform usually keeps the original conversion, so ROAS stays high while cash walks out.
  • Chargebacks — about $15 per dispute in the US, according to Webgility, on top of the lost order.

None of these appear in the ROAS number. All of them appear in your payout.

Worked example: a "4× ROAS" week that lost money

Say you sell a $40 mug through a print-on-demand supplier. One week, Meta reports $4,000 in revenue on $1,000 of ad spend. On paper that is $4,000 ÷ $1,000 = a 4× ROAS — a number most sellers would celebrate.

Now let's find the real profit. Because platform revenue runs 20–35% above real orders on the default window (Vaizle), the sales Shopify actually recorded for this campaign are closer to $3,000 — that is 75 real orders at $40 each. Your real ROAS is already $3,000 ÷ $1,000 = 3×, not 4×.

Then subtract the costs ROAS never sees:

Line Amount
Real revenue (75 orders × $40) +$3,000.00
Refunds (8 orders × $40 reversed) −$320.00
COGS (75 shipped × $24) −$1,800.00
Processing (3,000 × 2.9% + 75 × 30¢) −$109.50
Chargeback fee (1 dispute) −$15.00
Ad spend −$1,000.00
True profit −$244.50

Fee rates above are from Webgility and ReportPundit; the rest is arithmetic on the example inputs.

The math: $3,000 − $320 − $1,800 − $109.50 − $15 − $1,000 = −$244.50. A campaign that reported a 4× ROAS actually lost about $245 that week. Note the refund trap: you already produced and shipped those 8 mugs, so the $24 COGS on each is gone even though the revenue reversed.

This is why ROAS and your bank deposit tell different stories. The deposit reflects how a Shopify payout is really computed — captured charges minus fees, refunds, and chargebacks — not a headline revenue figure.

What to measure instead of platform ROAS

The metric that actually predicts survival is contribution margin per order: sale price minus COGS, fulfillment, and payment fees, before you even count ad spend. If that number is thin, no ROAS can save you.

From there, break-even ROAS falls out naturally. If your contribution margin is 40% of the sale price, you break even when revenue is roughly 2.5× your ad spend — so a "3× ROAS" is barely profitable, not a win. Your break-even point depends entirely on your own margins, which is exactly what platform ROAS hides.

Two practical habits close the gap:

  • Compare on trailing windows, never single days. Platforms report on the click date and your store reports on the purchase date, so day-to-day comparisons desync even when the totals agree.
  • Reconcile revenue against the payout, not the dashboard. Only your store and your bank reflect refunds and fees. This is the same discipline you need when you reconcile Etsy-to-Shopify dropship orders across two systems.

Where PodVector fits

Doing this by hand across tabs is tedious and error-prone, which is the whole reason platform ROAS stays the default. PodVector connects your Shopify, Meta Ads, Google Ads, Printify, and Printful accounts and computes true per-order profit — sale price minus COGS, fulfillment, fees, and the ad spend that actually drove each order.

Victor, the AI operator inside PodVector, reads that live data, tells you which campaigns look profitable on the platform but lose money after costs, and proposes Shopify-side moves you can approve. Victor does not touch your ad account — he reads ad data and shows you where the real margin is. PodVector is not a dashboard; it is the profit layer that turns four disagreeing numbers into one you can bank on.

See your true per-order profit with PodVector and stop trusting a number that was never designed to measure profit.

FAQs

Does a high ROAS mean my campaign is profitable?

Not necessarily. ROAS only subtracts ad spend from revenue, so it says nothing about product cost, fulfillment, payment fees, or refunds. A campaign with a strong ROAS can still lose money once those costs come out, as the worked example above shows.

Why is my platform ROAS higher than my real ROAS?

Because the platform inflates the revenue side. It counts view-through and modeled conversions and reports on the click date, so its purchase count typically runs 20–35% above your Shopify orders on the default window, according to Vaizle. Your store only records completed orders, so its revenue is the more honest input.

Is the platform lying about my conversions?

No. Meta counts view-through and modeled conversions by design and discloses it. The platform is answering "did my ad influence this sale?" while your store answers "did a sale happen?" — two different questions with two different, legitimate answers.

What is the difference between ROAS and contribution margin?

ROAS is revenue divided by ad spend. Contribution margin is what is left from each order after COGS, fulfillment, and payment fees, before ad spend. Contribution margin tells you whether the order was worth fulfilling at all; ROAS only tells you how efficiently you bought the traffic.

Should I just stop looking at ROAS?

No — ROAS is still useful for comparing the relative efficiency of campaigns. Just don't treat it as a profit metric. Pair it with per-order contribution margin and a break-even ROAS based on your own margins so you know which "good" ROAS is actually making money.

Why doesn't my Shopify payout match my reported sales?

A payout is a batch of balance transactions — captured charges minus processing fees, refunds, and chargebacks — not a day's sales minus ad spend. Third-party gateway orders never enter Shopify Payments payouts at all, so the payout report and the sales report will never line up one to one.