Ecommerce Analytics
Why your Shopify numbers never match GA4 — and which one to trust
Shopify says 412 orders. GA4 says 383. Neither is broken. Here are the six structural reasons the numbers diverge, which source is authoritative for which question, and how to stop wasting hours reconciling them.
August 4, 2026 · 11 min read
Shopify and GA4 disagree because they measure different things: Shopify counts orders server-side in the store's timezone, GA4 counts client-side events in its own reporting timezone, subject to consent, ad blockers and a different attribution window. Shopify is authoritative for revenue and orders; GA4 is authoritative for on-site behaviour. Reconciling them exactly is not achievable and not worth attempting.
Every merchant hits this. Shopify's admin reports one revenue figure, GA4 reports another, the ad platforms report a third, and a morning disappears into working out which is lying. None of them is lying. They are answering different questions with different methods, and the gap between them is structural rather than a misconfiguration waiting to be found.
This article covers the six causes of divergence in order of how much damage they do, which source should be authoritative for which decision, and the small number of discrepancies that genuinely do indicate a broken setup.
The six causes, in order of impact
1. Timezone mismatch
This one is worth checking before anything else because it is common, invisible, and produces a consistent daily discrepancy that looks like a tracking problem.
Shopify reports in your store's timezone. GA4 reports in the timezone set on the property, which defaults to whatever was chosen at creation and is frequently wrong — set to the agency's timezone, or left at a default, or set before the business moved markets. If those differ by three hours, every order placed in that three-hour window lands on a different calendar day in each system.
The signature is a persistent, roughly constant daily gap that mostly disappears when you compare a full month instead of a day — because the shifted orders move within the month rather than out of it.
2. Client-side versus server-side collection
GA4 fires from the visitor's browser. Anything that stops the script stops the data: ad blockers, privacy browsers, consent banners where the visitor declines, scripts failing on a flaky mobile connection, or a customer closing the tab before the purchase event fires.
Shopify records the order server-side when it is created. There is no scenario where an order exists and Shopify did not record it.
This makes the direction of the discrepancy predictable: GA4 should report fewer conversions than Shopify. If GA4 reports more, that is a genuine defect — usually double-firing, which is cause five below.
3. Different attribution windows and models
Shopify attributes an order to the session in which it was placed, using landing and referring site data. GA4 applies its own attribution model across a lookback window that can span weeks.
So a customer who arrives from paid social, leaves, and returns a week later via email will typically be credited to email in Shopify and may be credited partly or wholly to paid social in GA4. Total revenue may match while every channel breakdown disagrees — which is the version merchants find most confusing, because the top-line number looks fine.
4. Refunds, cancellations and test orders
Shopify reports gross and net sales separately and subtracts refunds from the period they were issued in, not the period the order was placed in. GA4's purchase revenue is whatever was passed at purchase time; refunds only appear if refund events are explicitly sent, which many setups never configure.
Test orders and draft orders add another layer, as do partially fulfilled and partially refunded orders. This cause moves revenue substantially in months with high returns while barely touching order counts, which is a useful diagnostic fingerprint.
5. Duplicate and missing events
The one cause on this list that is a genuine bug. It appears when the purchase event fires from more than one place — a theme snippet plus an app plus Google Tag Manager — or when the thank-you page is reloaded and re-fires.
The signature is GA4 reporting more conversions than Shopify, or a conversion count that is a suspiciously clean multiple. This is worth fixing, unlike everything else on this list.
6. Bot and internal traffic
Session counts diverge from real human visits because of crawlers, uptime monitors, and your own team browsing the store all day. GA4 filters some known bots and misses others. This affects sessions and therefore conversion rate, without affecting orders — so it shows up as a conversion rate that looks worse than reality.
Which source is authoritative for what
| Question | Authoritative source | Why |
|---|---|---|
| Revenue, orders, AOV | Shopify | Server-side, complete, and it is the system that took the money |
| Refunds and net sales | Shopify | GA4 only knows about refunds if someone configured refund events |
| Sessions, bounce, page paths | GA4 | Shopify does not model on-site behaviour in comparable depth |
| Which channel drove a visit | GA4, with caution | Better multi-touch modelling, but it is a model, not a record |
| Which channel drove an order | Shopify | Direct landing and referring data on the order itself |
| Product-level conversion | Shopify for orders, GA4 for views | Neither has both halves; combine deliberately |
| Ad performance | The ad platform, sceptically | Every platform over-attributes to itself by design |
A gap check that takes fifteen minutes
- 1
Compare timezones first
Check the store timezone in Shopify settings against the reporting timezone in the GA4 property. If they differ, fix it and note that historical data will not retroactively change — the gap persists in old reports.
- 2
Compare a full month, not a day
Take last complete month's orders in both systems. Daily comparisons amplify timezone and session-boundary effects; monthly comparisons isolate genuine collection loss.
- 3
Check the direction
GA4 lower than Shopify is expected. GA4 higher than Shopify means duplicate purchase events, which is a real bug worth fixing today.
- 4
Quantify and accept the gap
Compute GA4 orders divided by Shopify orders. A gap in the high single digits to low teens is normal for consumer stores with heavy mobile traffic. Record the ratio so you notice when it moves, and stop investigating the level.
- 5
Investigate only a moving ratio
A stable gap is a measurement characteristic. A gap that jumps after a theme update, an app install, or a consent-banner change is a signal — that is when to look at your tag setup.
The deeper point about reporting
The reason this question consumes so much time is that most ecommerce reporting presents numbers without their provenance. A figure on a dashboard rarely says which system produced it, over which date window, in which timezone, gross or net of refunds. So when two figures disagree, there is no way to tell whether they should agree.
The fix is to attach the derivation to the number. Any metric worth acting on should be able to show its formula, its inputs, its date window and its source system on demand. That is the discipline behind Nomu's "Show the math" — every figure carries the arithmetic that produced it, so a disagreement becomes a five-second comparison of two definitions rather than an afternoon of guessing.
Frequently asked questions
What gap is normal between Shopify and GA4?
For most consumer stores, GA4 recording somewhat fewer orders than Shopify is expected, with the gap widening on mobile-heavy and privacy-conscious audiences. There is no universal figure — the number that matters is your own ratio's stability over time, not its level.
Can I make them match exactly?
No, and pursuing it is a poor use of time. Server-side tagging narrows the collection gap but cannot close the attribution-model or timezone-definition differences, because those are design choices rather than losses.
Should I use server-side tagging?
It helps if you rely on GA4 for channel decisions and are losing a large share of events to blockers. It adds real infrastructure and maintenance, so it is worth it for larger stores and usually not for smaller ones. It does not make GA4 authoritative for revenue.
Why do my ad platforms report even higher numbers?
Each platform attributes conversions to itself using its own click and view windows, so the same order is claimed by several platforms simultaneously. Summing platform-reported conversions across channels will exceed your actual order count, sometimes considerably.
Which number do I report to investors?
Shopify's, because it is the system of record for money and it is the one that reconciles with your payouts. State the source and the window explicitly whenever you present it.
Does this affect AI traffic attribution too?
Yes, and more severely, because AI-sourced sessions are a small subset where a percentage collection gap translates into very few observations. Use Shopify's order-level landing and referring data as the base for AI attribution rather than GA4 channel groupings.
The verdict
The numbers will never match, and that is not a problem to be solved. Fix the timezone, confirm GA4 is not reporting more conversions than Shopify, record your normal gap, and then assign each question to one source and stop asking the other.
The hours currently spent reconciling would be better spent on a question either system can answer clearly: which products are losing money, which traffic converts, and what changed this week that nobody noticed.
More in Ecommerce Analytics