TrackParity

Why Your GA4 Purchases Don't Match Shopify (and What Discrepancy Is Actually Normal)

If you’ve ever put GA4 and your Shopify admin side by side, you already know the frustrating part: the numbers never match. GA4 shows fewer orders, less revenue, or both — and it’s easy to assume something is badly broken.

Usually, it isn’t. A gap between GA4 and Shopify is normal and expected. The real skill is knowing how big a gap is acceptable — and when the difference has crossed from “harmless” into “you have a tracking bug that’s quietly wasting ad budget.”

Here’s the short version, then the details.

What discrepancy is actually normal?

GA4-vs-Shopify gapWhat it meansAction
0–5%Excellent trackingNone — this is as good as it gets
5–10%Normal / expectedNone; monitor
10–20%Still within a “healthy” range for many storesWorth a quick audit
>20%Likely a technical configuration errorInvestigate
30%+Significant GA4 tracking problemFix now

Ranges are drawn from multiple specialist analyses (Elevar, GroPulse, DigitXL, Bloom). Your “normal” depends on traffic mix and consent rates — treat these as bands, not hard lines.

The key mental model: GA4 will almost always be lower than Shopify. If GA4 is higher than Shopify — for example, roughly double your order count — that’s a different problem (duplicate events), covered below.

Why the gap exists in the first place

The two systems count in fundamentally different ways:

  • Shopify records server-side. When an order is placed, Shopify’s server writes it down. Nothing stops it — no ad blocker, no browser setting. Shopify is your source of truth for revenue.
  • GA4 relies on client-side browser events. The purchase has to fire from the shopper’s browser and reach Google. That signal gets lost when ad blockers or tracking protection (Safari ITP, Firefox) block the request, the shopper closes the tab before the confirmation page loads, JavaScript errors interrupt the tag, or consent isn’t granted (in the EU/UK, no consent can mean no event).

On top of that, several non-error factors shift the numbers even when tracking is perfect:

  1. Processing delay: GA4 can take 24–48 hours to finalize data. Comparing “today” in both tools will always look off.
  2. Time zone mismatch: if GA4 and Shopify use different time zones, orders near midnight land on different days.
  3. Currency conversion: multi-currency stores convert at different points, nudging revenue totals.
  4. Tax & shipping: by default, GA4 includes tax and shipping in purchase revenue unless you configure it out — so GA4 revenue can look inflated relative to a Shopify “net sales” report you’re comparing against.

Fix these four first, and a surprising amount of the “gap” simply disappears.

How to reconcile — a quick, repeatable check

  1. Match the window. Compare a closed period (e.g., last week), not today, so GA4 has finished processing.
  2. Align time zones between GA4 and Shopify.
  3. Align the revenue definition — decide whether you’re comparing GA4 revenue to Shopify gross or net, and configure tax/shipping consistently.
  4. Count orders, not just revenue. Order count is cleaner to reconcile than revenue and isolates whether you have a volume problem or a value problem.
  5. Check for duplicates. If GA4 order count is roughly 2× Shopify, you’re firing the purchase event twice (typically Shopify’s native GA4 integration and a GTM tag both firing).

When the gap is a real problem (and the usual culprits)

Once you’re comparing like-for-like and still see more than ~20% missing, it’s usually one of these:

  • Duplicate events — the single most common GA4 tracking issue on Shopify (one analysis attributes roughly 35% of GA4 tracking problems to duplication). Ironically this makes GA4 too high, so it can hide a real shortfall elsewhere.
  • Misconfigured Consent Mode — a bad setup can block events entirely instead of adjusting collection, silently dropping conversions in the EU/UK.
  • A broken or missing purchase event — the GA4 purchase event must include value, currency, and a non-empty items array, and must actually reach the GA4 tag. If any of that fails, purchases vanish.
  • Client-side loss at scale — heavy ad-blocker/ITP audiences push more of your real orders out of GA4’s reach; the fix is server-side tracking + Enhanced Conversions / CAPI, which recover attribution using hashed first-party data instead of cookies.

Note: one widely-cited figure suggests ~20% of Shopify orders never appear in GA4 at all. Treat that as a directional benchmark from a single source — your number depends on your audience and consent rates.

FAQ

Is it normal for GA4 to show fewer purchases than Shopify? Yes. GA4 is client-side and loses events to ad blockers, tracking protection, closed tabs, and missing consent, while Shopify records every order server-side. GA4 being 5–10% lower is normal.

What is an acceptable difference between GA4 and Shopify? Roughly 5–10% is normal, up to ~20% can still be acceptable depending on your store, and over 20% usually signals a configuration error worth fixing.

Why is GA4 showing more purchases than Shopify? That points to duplicate purchase events — often Shopify’s native GA4 integration and a GTM tag both firing. If GA4 is close to 2× your orders, that’s the cause.

Does GA4 include tax and shipping in revenue? By default, yes — which can make GA4 revenue look higher than a Shopify net-sales figure. Configure it to match whichever definition you’re comparing against.

How long until GA4 data settles? GA4 can take 24–48 hours to finish processing, so always reconcile a closed period, not today.

Sources

Is your tracking gap normal — or a real bug?

Get the free Tracking-Health Mini-Audit: drop in your Shopify, GA4 & Meta numbers and get a red/yellow/green score in ~10 minutes, plus your top 3 fixes.

No spam. Unsubscribe anytime. We never sell your data.