Ready to chat?

07515 543111
Tracking Guides

GA4 Not Matching Shopify? Here's Why

Two reports, two different revenue figures, and no idea which one to believe. It's the most common tracking complaint I hear from Shopify store owners. The good news: the gap always has a cause, and the causes are a known list.

Last updated July 2026

What Gap Is Normal?

First, the question everyone actually wants answered: how different are the numbers allowed to be before you should worry?

A 10-12% gap between GA4 and Shopify is normal. GA4 will usually report slightly less revenue than Shopify because of ad blockers, declined consent, and differences in how the two systems count. If your gap is consistently over 20%, or GA4 is reporting more than Shopify, something in your setup is broken and worth investigating.

The two systems will never match to the penny, and anyone promising you a perfect match is selling something. Shopify counts orders at the till, so to speak. GA4 counts purchase events sent from tracking code, filtered through consent banners, ad blockers, browser privacy features and its own processing. Some loss is baked in.

What matters is the size and the direction of the gap, and whether it's stable. A steady 10% undercount is life. A 30% gap, a gap that swings wildly month to month, or GA4 somehow finding revenue Shopify never took, those are symptoms. Here are the causes, roughly in the order I check them.

Cause 1: You're Counting Different Things

Before blaming the technology, check the definitions, because GA4's "purchase" and Shopify's "order" are not the same thing.

  • Refunds and cancellations. Shopify's reports can net these off depending on which report you're looking at. GA4 only knows about a refund if something explicitly sends it a refund event, and most setups never do. A store with a meaningful returns rate will drift apart on this alone.
  • Test orders and staff orders. Draft orders, test payments and staff checkouts can land in one system and not the other.
  • Taxes and shipping. Whether VAT and shipping are included in "revenue" can differ between the Shopify report you're reading and the value your purchase event actually sends. Compare like with like before panicking.
  • Timezones and date ranges. If your GA4 property and Shopify store are set to different timezones, orders near midnight fall into different days and any single-day comparison is meaningless.

None of this is broken tracking, strictly, it's mismatched bookkeeping. But it's the cheapest thing to rule out, so rule it out first.

Cause 2: Consent Banners and Ad Blockers

GA4 only sees customers whose browsers actually send it data. Two things stop that happening.

Ad blockers and browser privacy features block Google's tracking scripts outright. That customer buys, Shopify records the order, GA4 hears nothing. Depending on your audience, that alone can be several percent of orders.

Consent banners are the bigger and newer one. If a visitor declines cookies, your tags either don't fire at all or fire in a restricted "cookieless" mode, depending on how consent mode is configured. A misconfigured consent setup can silently throw away a huge slice of your conversions, and if your gap suddenly widened around the time you changed your cookie banner, you've probably found your cause. I've covered that scenario separately in consent mode conversions dropped.

Cause 3: Attribution and Session Differences

Sometimes the totals roughly match but the channel breakdown looks wrong, Shopify says most orders come from one place, GA4 swears it's another. That's usually not a bug, it's the two systems using different attribution rules: different lookback windows, different ideas about what counts as a session, different handling of a customer who clicked an ad on Tuesday and bought via email on Friday.

Where it becomes a genuine fault is when sessions are breaking mid-purchase. If a customer gets handed between domains, or your tracking loses its cookies somewhere between landing page and thank-you page, GA4 sees the purchase arrive with no history attached and files it under direct traffic. A big, unexplained pile of direct conversions is one of the most reliable smells of a broken setup rather than a definitional difference.

Cause 4: Tag Placement Problems

This is the category that produces the dramatic gaps, and it comes in two opposite flavours.

The Sandbox Problem

If your Google tags or your GTM container run inside a Shopify Custom Pixel, they're running inside a sandboxed iframe that Shopify deliberately isolates from the real page. Cookies can't persist properly, ad-click identifiers get lost, and sessions fragment, one real visitor becomes several apparent ones. This can inflate some numbers while deflating others, which is why sandbox-afflicted stores often have gaps that make no sense in either direction. Full details in the custom pixel sandbox guide, and if you want to see how bad it gets, the store that grew 200% overnight was exactly this.

Duplicate Purchase Events

The other flavour: the same purchase counted twice. Common recipe: the Google & YouTube channel app sends a purchase, and a GTM tag or theme snippet sends the same purchase again. GA4 reports more revenue than Shopify, which should be impossible, so when you see it, this is almost always why. Customers refreshing the thank-you page can add a few more. The Google Ads version of this problem, which quietly inflates your ROAS and misleads your bidding, gets its own guide: Google Ads duplicate conversions.

Cause 5: GA4 Processing Lag

The boring one that catches everybody: GA4 isn't finished counting today. Reports can take 24-48 hours to fully process, and the numbers for recent days will keep shifting as late events, consent modelling and processing catch up.

So never diagnose a gap using today's or yesterday's data. Compare a completed period, last week, last month, that both systems have had time to settle on. A "discrepancy" measured at 4pm on the day in question is just impatience with extra steps.

How to Find YOUR Cause

The list above tells you what could be wrong. Finding which one applies to your store means looking at evidence rather than reports:

  • Pick a settled week and export Shopify's orders for it. That's your ground truth.
  • Check the raw events. Place a test order and watch the network requests in your browser as you do it: does exactly one purchase event get sent, from the main page, with a sensible transaction ID?
  • Compare transaction IDs. GA4's raw event export into BigQuery, Google's data warehouse, gives you every event as a row you can query. Match its transaction IDs against Shopify's order numbers and you can see precisely which orders are missing, which are doubled, and when the pattern started. This is the closest thing to a source of truth that exists in GA4, well before dashboards and modelling get involved.
  • Look at the direction. GA4 under by a stable amount points at consent and blockers. GA4 over points at duplicates. A gap that's chaotic in both directions points at tag placement and broken sessions.

Fix It Yourself, or Get Help?

Honest decision tree. If your gap is under about 12% and stable, do nothing, that's normal and chasing it is a waste of your life. If the cause is definitional, timezones, refunds, test orders, you can fix that yourself this afternoon with the notes above. If you've found a straightforward duplicate, one obvious extra tag sending a second purchase event, removing it is usually within reach of a confident store owner too.

Where I'd stop DIYing: anything involving the custom pixel sandbox, consent mode configuration, or attribution that's collapsed into direct. Those fixes touch several systems at once, and a half-fix can leave you worse off than the original problem, or quietly delete data you can't get back. That's the point where an hour of someone reading your raw requests beats a weekend of forum threads. That's what my tracking health check is for, and if the diagnosis points at deeper plumbing, server-side tracking or ongoing GA4 help picks up from there.

Questions People Ask

The ones that come up every time GA4 and Shopify disagree.

Usually ad blockers, declined cookie consent, and counting differences like refunds and test orders. A stable undercount of 10-12% is normal. If it's over 20%, look at consent mode configuration and where your tags are placed, something is losing events.

Around 10-12%, with GA4 slightly under Shopify. The two systems count differently and GA4 can't see customers who block tracking or decline consent. Over 20%, or GA4 reporting more than Shopify, means a fault worth finding.

Almost always duplicate purchase events: two tags sending the same purchase, typically the Google & YouTube channel app plus a GTM or theme tag. GA4 can also re-count if customers refresh the order confirmation page. GA4 over Shopify is never normal, so treat it as a red flag.

Shopify, for revenue. It records the actual orders and the actual money. GA4's job is different: telling you where customers came from and how they behaved. Use Shopify for "how much", GA4 for "why", and never report GA4 revenue to your accountant.

It helps with the losses from ad blockers and fragile browser tags, so it narrows the gap, but it won't fix duplicates, consent misconfiguration or definitional differences, and done carelessly it can add its own double counting. Diagnose first, then decide whether server-side is part of the fix.

Give GA4 48 hours. Its reports take 24-48 hours to fully process, so today's numbers are always incomplete. Compare finished periods, last full week or month, and you'll be measuring the real gap instead of GA4's processing lag.

Sick of Guessing Which Number Is Right?

I'll go through your GA4, Shopify and ad platform setup, find exactly where the gap comes from, and give you a written fix list. Evidence, not guesswork. Start with a tracking health check.