You open GA4: $42,300 in revenue this month. You open Shopify: $47,800. Which number is right, and more importantly — should you be worried?

Short answer: a 5-10% gap between GA4 and Shopify is normal and structural. Above 15%, you almost certainly have an identifiable tracking issue. This is the diagnostic checklist we run in audits — eight causes ranked from most to least common, so you can find yours without guessing.

The 8 causes at a glance

#CauseTypical directionTypical magnitude
1Double trackingGA4 higher than ShopifyVaries, often large
2Refunds not recorded in GA4GA4 higher than expected~ your return rate (e.g. 8%)
3Orders outside checkout (B2B, subscriptions)GA4 lowerCan exceed 20%
4Consent refusalGA4 lower20-40% of EU traffic
5Filters / timezone misalignmentEither directionVaries, can be large
6Currency conversionEither directionA few percentage points
7Delayed payments / event timingGA4 lower, especially at month-endSmall, transient
8Post-payment redirectsGA4 lowerSmall to moderate

Why some gap is inevitable

Shopify records orders server-side, at the moment of payment, independent of the customer’s browser. GA4 records the purchase event client-side (unless you’ve implemented server-side tracking), which depends on the GA4 script loading, consent being granted, and the confirmation page staying open long enough to fire the event.

Every link in that chain loses some data: ad blockers, consent refusal, users closing the tab right after paying, unstable mobile connections. None of this is a bug — it’s the reality of client-side measurement. GA4 will therefore structurally report less than Shopify.

First diagnostic check: the direction of the gap. GA4 lower than Shopify by 5-10% = normal. GA4 higher than Shopify = a near-certain sign of duplicate tracking. A gap beyond 15% in either direction warrants investigation.

The 8 causes, ranked by frequency

1. Double tracking (when GA4 is higher than or very close to Shopify)

The number one cause of inflated GA4 numbers: both Shopify’s native integration and a GTM tag are firing purchase independently. Check the Network tab on a test purchase — if you see two separate collect requests carrying the same purchase event, you’ve found it.

2. Refunds and cancellations

Shopify Analytics deducts refunds and canceled orders from its reports. GA4 only does this if the refund event has been explicitly implemented — it rarely is. On a store with an 8% return rate, that alone creates a mechanical 8% gap in the opposite direction of tracking loss, which can even create the illusion of “matching” numbers when two errors happen to cancel out. Check your monthly refund volume before comparing anything else.

3. Orders placed outside the standard checkout flow

Manually created orders in Shopify admin (phone sales, B2B), orders from an external sales channel (marketplace, social checkout), and subscription renewals processed automatically (Recharge and similar): all hit the register in Shopify without ever triggering a browser confirmation page — invisible to GA4. If you have a meaningful subscription channel, this alone can push the gap past 20% with zero tracking bugs involved.

If your CMP blocks GA4 until a visitor accepts cookies, every buyer who declines is a Shopify order with no GA4 equivalent. With typical EU refusal rates of 20-40%, this is often the second-largest source of volume gap. Consent Mode v2 in advanced mode lets Google model some of this lost data, but the modeling only shows up in certain reports and after a delay, which complicates direct comparison further.

5. Filters and GA4 configuration

An overly broad internal traffic filter, test data sitting in the property, or a timezone mismatch between GA4 and Shopify: an order placed at 11:50pm store time can land on the following day in GA4, skewing every daily comparison. Check both timezones — it’s a 30-second setting that can invalidate months of comparisons if misaligned.

6. Currency and conversion rates

Multi-currency stores: Shopify converts at the rate in effect at order time in your base currency; GA4 applies its own conversion, sometimes at a different rate and moment. On an international mix, a few percentage points of drift come purely from this.

7. Delayed payments and event timing

Bank transfers, installment payments, orders pending fraud review: Shopify may count the order at creation, GA4 only once the confirmation page has rendered — or never, if the customer paid through a method that doesn’t route back through checkout. Toward month-end, these timing gaps can artificially inflate the apparent discrepancy on the most recent days.

8. Post-payment redirects

Some payment gateways (3D Secure, PayPal, financing options) route the customer through external pages before returning to the confirmation. If the return fails, or the customer closes the tab after payment is confirmed (the confirmation email is often reassurance enough), the order exists in Shopify but the page carrying the purchase tag never loaded.

The diagnostic method, step by step

  1. Pick a clean period: a full month, completed more than a week ago (to let refunds and delayed payments settle).
  2. Neutralize structural causes: subtract manual orders, subscriptions, and external channels from the Shopify total; add refunds back on the GA4 side (or implement the refund event).
  3. Compare transaction count, not just revenue: a volume gap points toward lost tracking (causes 4, 7, 8); matching volume with different revenue points toward currency, refunds, or value parameters (causes 2, 6).
  4. Run a full test purchase while watching the Network tab, as described in our guide on GA4 e-commerce events (in French).
  5. Document the residual gap: once causes are identified, whatever remains becomes your baseline. That’s what you monitor going forward — not an impossible zero.

The goal is never to make the two numbers match exactly — it’s to be able to explain the gap. A documented 12% gap (5% consent, 4% subscriptions, 3% refunds) reflects healthy tracking; an unexplained 6% gap deserves investigation.

FAQ

What’s a normal gap between GA4 and Shopify revenue? 5-10% is typical and mostly explained by ad blockers, consent refusal, and unrecorded refunds. Above 15%, you likely have an identifiable tracking issue rather than expected data loss.

Does server-side tracking eliminate the discrepancy? It reduces it significantly by recovering data lost to blockers and browser restrictions, but structural causes remain: refunds, orders placed outside the checkout flow, and consent-based data loss. Expect to go from a 15-20% gap to roughly 5-8%, not zero.

Which number should I trust for reporting? Shopify, always — it’s your actual cash register. Use GA4 to compare channels against each other under consistent rules, not to establish total revenue.


This diagnostic is part of our broader coverage of GA4 and Shopify tracking. If you’re setting up tracking for the first time, our e-commerce events guide covers the fundamentals (in French — our English guides are coming soon).

Want a dashboard that reconciles your Shopify and GA4 numbers automatically, with the normal gap already documented? Check out our Shopify Dashboards offer or book a free 30-minute call.