Your GA4 ROAS and Shopify almost never match because the two tools build the revenue side of the ratio in completely different ways. GA4 measures client-side and splits each order's credit across channels with data-driven attribution, so it reports less revenue to any single paid channel. Shopify measures server-side and hands the full order to the last click, so it reports more. Same ad spend, two revenue numerators, two ROAS numbers — and neither one is the profit number you actually need.

ROAS is just a ratio: revenue divided by ad spend. The spend half usually agrees — both tools can read the same number out of Google Ads or Meta. It's the revenue half that fractures, and it fractures for reasons no plugin or pixel fix can fully close.

If you want the deeper mechanics behind why every tool in your stack disagrees, our guide to reconciling your ecommerce data is the hub for this whole topic. This article zooms in on the one ratio that drives your ad decisions.

Why GA4's revenue number comes in lower

GA4 tracks purchases with client-side JavaScript and cookies. That means it only sees a sale if the browser successfully fires the purchase event — and a meaningful slice of browsers never do.

Ad blockers and Safari/Firefox tracking prevention stop the tag from firing for roughly ten to twenty-five percent of users. Add cookie-consent declines and shoppers who close the tab before the thank-you page loads, and GA4 simply never records those orders. Shopify records all of them, because its order data is written server-side at checkout.

The result is structural. Store owners typically see GA4 purchases run fifteen to thirty percent below Shopify as a normal baseline; a thirty-to-forty-percent gap is worth investigating, and a gap above forty percent signals a real tracking break. Fewer recorded orders means less attributed revenue — so your GA4 ROAS starts lower before attribution even enters the picture.

Data-driven attribution splits the credit

Here's the part most articles skip. GA4's default model is data-driven attribution (DDA), which gives each channel a fraction of a conversion. A single order that a shopper researched through organic search, then clicked from a Google ad, might credit paid search with 0.6 of the sale instead of the whole thing.

Shopify's default is last non-direct click: whichever channel was last touched gets 100% of the order. So even for the exact same sale, GA4 hands paid search a slice while Shopify hands it the entire order. The paid-channel revenue numerator is smaller in GA4 by design.

Why Shopify's channel revenue comes in higher

Shopify isn't "more accurate" — it's answering a different question. It records every completed order (server-side truth) and assigns each one, in full, to a single last-click source.

That inflates any one channel's apparent revenue relative to GA4's fractional view. It also means Shopify credits some orders to "Facebook" or "Google" that a shopper actually discovered elsewhere and merely returned through. The same divergence shows up when GA4 sessions don't match Shopify — different counting rules, different totals, no reconciliation possible.

Neither number is wrong. GA4 answers "how much did this channel contribute across the journey?" Shopify answers "which channel got the last click before the sale?" Those are different accounting questions, so they produce different ROAS.

A worked example: one week, two ROAS numbers

Say you spend one thousand dollars on Google Ads in a single week, and that spend genuinely helped drive a batch of sales.

  • GA4 loses some buyers to blockers and consent, then splits the survivors' credit with DDA. It reports one thousand nine hundred dollars of paid-search revenue. ROAS = $1,900 ÷ $1,000 = 1.9.
  • Shopify captures every order server-side and hands each last-click order fully to Google. It reports two thousand seven hundred dollars. ROAS = $2,700 ÷ $1,000 = 2.7.

Same week, same thousand dollars in spend, same real orders — and a ROAS of 2.7 versus 1.9. If you paused Google based on the GA4 number and scaled it based on the Shopify number, you'd make opposite decisions from one true set of sales.

The lesson: never expect the two to equal each other. Watch each one's trend against itself, and reconcile them only to confirm the ratio between them stays stable.

The profit angle both numbers ignore

Here's the trap neither GA4 nor Shopify warns you about: ROAS is a revenue ratio, and revenue is not profit. A 2.7 ROAS can still lose money once product cost, shipping, and payment fees come out.

Say those 2.7-ROAS sales were print-on-demand mugs, and $1,000 in spend produced 55 orders (that's $1,000 ÷ 55 = $18.18 of ad cost per order). Walk one order at a $40 subtotal:

Per-order profit = 40 − 12 − 6 − 1.72 − 18.18 = $2.10. A ROAS that looks healthy leaves about two dollars an order — and if a refund or chargeback hits, it goes negative. That's why arguing over whether the "true" ROAS is 1.9 or 2.7 misses the point: neither ratio tells you if the order made money.

This is the gap PodVector is built to close. It connects Shopify, Meta Ads, Google Ads, Printify, Printful, and Stripe, then computes your true per-order profit — the number that survives fees, product cost, and refunds. Victor, its AI operator, reads that live data and proposes moves you approve, executing the writes on the Shopify side. Victor does not touch your ad account; he reads ad data and hands you the profit picture ROAS alone can't show.

How to compare the two numbers sanely

You can't force GA4 ROAS and Shopify ROAS to be equal, but you can make them usable:

  • Compare on trailing windows, not single days. Attribution timing and timezone rollovers desync daily figures even when the weekly totals are close. Use seven-to-fourteen-day windows.
  • Tag every paid link with UTMs. Manual UTM tagging is what makes Shopify's and GA4's channel reports comparable in the first place.
  • Track the ratio, not the equality. If GA4 usually reads about seventy percent of Shopify's paid revenue, watch for that ratio moving — a sudden drop means a tracking break, not a real sales drop.
  • Anchor on Shopify order count as the source of truth for how many sales happened, and treat the platform ROAS numbers as directional signals about influence.

The same discipline applies when you pull in other channels — reconciling Facebook conversions against GA4 or Facebook ad revenue against GA4 follows the exact same "stable ratio, not equality" rule. And if you sell across marketplaces, linking your Etsy sales with Shopify is the next reconciliation to get right.

FAQs

Why is my GA4 ROAS lower than my Shopify ROAS?

Two reasons stack. GA4 undercounts orders because it tracks client-side and loses sales to ad blockers, consent declines, and unfired tags — roughly a fifteen-to-thirty-percent purchase gap is normal. On top of that, GA4's data-driven attribution gives each paid channel only a fraction of an order, while Shopify's last-click model gives the whole order to one channel. Smaller revenue numerator, smaller ROAS.

Which ROAS should I trust — GA4 or Shopify?

Neither, as a standalone truth. Use Shopify's order count and total sales as the source of truth for how many sales happened and how much revenue you booked. Use the platform ROAS numbers as directional signals of influence. And remember both ignore costs — profit per order is the number that decides whether a campaign is actually working.

Will fixing my tracking make the two numbers match?

No. Server-side tagging and consent-mode modeling recover lost events and narrow the tracking gap, but they do nothing about the methodology gap. Data-driven versus last-click attribution, client-side versus server-side measurement, and session-counting rules will always leave GA4 and Shopify reporting different revenue. Aim for a stable ratio, not equality.

Does Shopify even calculate ROAS?

Not natively — Shopify records orders and revenue but doesn't know your ad spend, so "Shopify ROAS" usually means Shopify's attributed channel revenue divided by the spend you pull from Google or Meta. That's exactly why it diverges from GA4: you're dividing the same spend by a different revenue figure.

What's a normal gap between GA4 and Shopify?

For purchases, a fifteen-to-thirty-percent shortfall in GA4 versus Shopify is healthy; thirty to forty percent warrants a look; above forty percent points to a real break. GA4 also records fifteen to thirty percent fewer sessions, which drags on any session-based ROAS math too.

How do I know if a campaign is actually profitable?

Stop asking ROAS and start asking profit per order. Subtract product cost, shipping, payment fees, and ad cost per order from the revenue you keep. A campaign at a 2.7 ROAS can net a couple of dollars an order — or lose money after a refund. Computing true per-order profit across your connected channels is the only way to know for sure.