GA4 vs Shopify: 5 Real Reasons They Disagree

GA4 vs Shopify revenue gap: Shopify counts all orders, GA4 misses checkout purchases

On this page

Measurement

Open GA4 and Shopify side by side and the revenue never agrees. The gap is not a bug in either tool. It is what each one is built to measure. Here is what actually causes the split and which number to trust for which decision.

GA4 vs Shopify revenue gap chart: Shopify counts every order, GA4 misses checkout purchases
Shopify records every order server-side. GA4 only counts the purchase events it collects.

The two tools count different things

The GA4 vs Shopify mismatch starts here, with definitions. Shopify counts orders. When a customer pays, Shopify writes an order row with a real amount, a real timestamp, and a real currency. That row is your bank-truth: it ties to payouts and to your books.

GA4 counts events fired by JavaScript in the browser. A purchase event only exists if a tag fired on the page the customer landed on after paying, the hit reached Google, and the session was attributed to a source. Three things that can each fail quietly. So GA4 is not measuring orders. It is measuring how many purchase events it managed to collect, which is a different and usually smaller number.

Once you accept that the two systems are answering different questions, the gap stops being a mystery and becomes a list of known leak points.

Cause 1: the Shopify tag misses the checkout pages

This is the biggest one and the one people miss for months. Shopify checkout runs on a separate, sandboxed surface. The native GA4 integration and most web-pixel based tags do not fire reliably on the checkout and thank-you pages, because those pages live in a restricted context on a different domain path.

The result: a customer browses, adds to cart, and pays, but the one event that matters, the purchase, never makes it to GA4. Sessions and product views look fine. Revenue looks low. On a recent ecommerce engagement, GA4 was silently capturing only 59 percent of purchases for exactly this reason; a server-side purchase pipeline recovered the gap to roughly 100 percent. Nothing in the GA4 interface warns you this is happening, which is why teams trust a number that is missing a third of the orders.

If your GA4 purchase count is materially below your Shopify order count, assume this is the cause until proven otherwise. In most GA4 vs Shopify gaps I diagnose, this single checkout-page problem explains the bulk of the difference. It is the default failure mode for Shopify stores.

Cause 2: ad blockers and consent mode drop client-side hits

GA4 is client-side by default, so every hit depends on a script that the browser is allowed to run and send. A meaningful share of shoppers run ad blockers, privacy browsers, or extensions that block Google endpoints outright. Those purchases happen and land in Shopify, but never reach GA4.

Consent mode adds another layer. When a visitor declines cookies, GA4 either drops the hit or sends a cookieless modeled ping, depending on your setup. Either way the raw event count falls below the real order count, and the gap is larger in regions with strict consent enforcement.

Shopify does not care about any of this. The order is recorded server-side at payment, so blockers and consent choices never touch it.

Cause 3: attribution windows and timing do not line up

Shopify stamps an order at the moment of payment. GA4 attributes a conversion to the last non-direct session and reports it against that session's source and timeframe. So an order placed today can be credited by GA4 to a campaign click from last week, and it can land in a different reporting day depending on time zone settings.

Run a single-day GA4 vs Shopify comparison and the two will rarely match to the order, even when everything is wired correctly, simply because they timestamp the same sale differently. Compare a full month and the timing noise mostly washes out, which is why monthly reconciliation is far more trustworthy than daily.

Cause 4: refunds, currency, and bot traffic

Shopify net revenue subtracts refunds and cancellations. GA4 purchase value usually reflects the gross transaction at the time of the event and does not automatically claw back a later refund. So even with perfect tracking, GA4 revenue tends to read higher than Shopify net once returns are processed.

Currency adds drift for international stores: GA4 reports in your property currency at a conversion rate that may differ from the rate Shopify and your processor settle at. And bot or spam traffic can inflate GA4 sessions and, in rare cases, fake events, which never produces a real Shopify order.

None of these are failures. They are accounting differences. The fix is to stop expecting two systems with different definitions of revenue to produce the same total.

Cause 5: deduplication and double counting

When teams bolt on server-side tracking or a second tag to recover missing purchases, the new failure mode flips: the same order gets counted twice, once client-side and once server-side. GA4 now reads higher than Shopify instead of lower.

The cure is deduplication. Send a stable transaction id with every purchase event and configure GA4 to treat repeat ids as one conversion. Done right, the client-side and server-side paths reinforce each other instead of inflating the count. Done wrong, you have traded an undercount for an overcount, which is arguably worse because it looks healthy.

GA4 vs Shopify: which source to trust for what

Use Shopify as the source of truth for revenue, orders, and anything that touches money or your books. It is recorded server-side at payment and reconciles to payouts. If a number will appear in a finance conversation, it comes from Shopify.

Use GA4 as the source of truth for traffic, behavior, and the path to purchase: which channels drive sessions, where people drop in the funnel, which content earns engagement. GA4 is strong at the shape of demand and weak at the final dollar total.

When you need both, revenue attributed accurately by channel, the answer is server-side tracking with deduplication. Capture the purchase on the server from the Shopify order, send it to GA4 with a transaction id and the original session identifiers, and you get near-complete purchase coverage that still ties back to source. That is how you turn a GA4 vs Shopify standoff into one trustworthy view.

Frequently asked questions

Why is GA4 revenue lower than Shopify?

Most often because the Shopify checkout and thank-you pages are sandboxed and the GA4 tag does not fire there, so purchase events are lost. Ad blockers and declined consent drop more client-side hits. Shopify records every order server-side, so it is complete.

Which is correct, GA4 or Shopify, for revenue?

Shopify. It writes each order server-side at payment and reconciles to your payouts and books. Treat Shopify as revenue truth and GA4 as traffic and behavior truth.

How big a GA4 vs Shopify gap is normal?

A small single-digit gap from consent, blockers, and timing is normal. A gap of 20 percent or more usually means the checkout-page tracking is broken and purchases are not reaching GA4 at all.

How do I fix the GA4 vs Shopify discrepancy?

Move the purchase event server-side: capture it from the Shopify order and send it to GA4 with a transaction id and the original session ids. Deduplicate on the id so you do not double count. This recovers the missing purchases without inflating the total.

Reconcile your numbers

Get one trustworthy revenue number

If your GA4 vs Shopify numbers never agree, a GA4 audit finds the leak and a server-side fix closes it.

Newsletter

Growth moves I actually ship

One email a week. Tactics, experiments, and the occasional failure I learned from. No fluff. Unsubscribe anytime.

Work with Yaniv

Fractional Head of Growth for B2B SaaS, B2C, and e-commerce. Revenue that compounds, not spikes. Any channel, any motion, any stage.

Book a 15-min call. No deck. No pitch. Just the audit.
Share Post on X LinkedIn
Link copied!
YG
Yaniv Goldenberg
Fractional Head of Growth

Fractional Head of Growth. I scale post-PMF companies to the revenue milestone that unlocks the next round. Previously scaled Elementor from $200K to $20M ARR (100x), tripled MRR at Riverside.fm, built demand gen at cnvrg.io (acquired by Intel). Any channel, any motion, any stage. 15+ years operating. I leave when your team runs the engine without me.