By Stormly in Knowledge
Published: Apr 17, 2026
Why GA4 Misses 30–60% of Shopify Purchases (And What Actually Works)
You open Shopify. 312 orders this month. You open GA4. 189 orders this month. Both are looking at the same store, same customers, same purchases.
Which number do you trust?
The answer most Shopify merchants do not want to hear: Shopify is right. GA4 is missing 123 orders. That is 39% of your purchases, gone. And the conversion rate you have been optimizing, the one you showed your agency, the one driving your ad spend decisions, is wrong.
This is not an edge case. On r/shopify, a merchant posted: “GA4 tracking isn’t natively integrated. It’s missing about 60% of my purchases. Do I really need to spend $200/month just to have reliable event tracking?” The post got 35 comments. Almost all of them described the same problem.
The short answer to their question: you do not have to spend $200/month. But first, you need to understand why this happens.
Why GA4 Misses Shopify Purchases (The Actual Explanation)
GA4 is a client-side tracking tool. It fires events via JavaScript in the browser. When a customer completes a purchase on your Shopify store, GA4 needs to run a purchase event on the order confirmation page. If the JavaScript does not execute, the purchase does not get recorded.
Three things consistently prevent that JavaScript from executing on Shopify stores.
The checkout domain problem
Shopify’s checkout runs on a different domain from your storefront. Your store lives at yourstore.com. Checkout lives at yourstore.myshopify.com or Shopify’s shared checkout domain, depending on your plan. GA4 treats these as different domains.
When a customer moves from yourstore.com to the checkout domain, GA4 loses the session. The purchase fires (if it fires at all) with no campaign attribution, no user history, and often with a new anonymous user ID. Even if the event records, the attribution is wrong. That is why so many merchants see 50%+ of orders showing “unknown source” – it is not that the traffic source is actually unknown. It is that the session broke when checkout started.
Shopify Plus merchants get access to checkout extensibility, which helps. Standard Shopify merchants do not.
Safari and ITP
Safari’s Intelligent Tracking Prevention blocks or severely degrades third-party JavaScript from doing what GA4 needs to do. Safari accounts for roughly 19% of web traffic globally. On many Shopify stores selling to US-based consumers, it runs 25% or higher.
ITP caps cookie lifetimes, blocks cross-domain tracking, and prevents the session stitching that GA4 uses to connect a user’s browsing session to their purchase. If a customer browses on Safari, adds to cart, and completes checkout an hour later, GA4 often sees this as two unconnected events.
Ad blockers and consent banners
uBlock Origin has 40+ million active users. Firefox blocks third-party trackers by default. Consent banners, required under GDPR and increasingly adopted in non-EU markets, reduce tracking consent rates.
On high-traffic Shopify stores in EU markets, tracking consent rates run between 55% and 70%. That means GA4 is starting blind on 30-45% of sessions before any other issue even applies.
Add all three together – checkout domain breaks, ITP, and consent/blockers – and losing 40-60% of purchase events is not unusual. It is expected.
What Most Merchants Try (And Why It Gets Complicated)
The standard recommendation for fixing Shopify tracking is to implement Google Tag Manager, then set up server-side GTM using a service like Stape or a self-hosted Cloud Run instance.
Here is what that actually involves:
- Set up a GTM container on your Shopify store
- Provision a server-side GTM container (requires a Google Cloud account, Cloud Run instance, or a paid service at $10-200/month depending on traffic volume)
- Configure Shopify’s customer events API to send purchase data to the sGTM endpoint
- Set up GA4 tags in sGTM to forward the data to your GA4 property
- Test and validate that the data is flowing correctly
- Debug the inevitable issues with product data not mapping correctly to GA4’s enhanced ecommerce schema
This is not impossible. If you have a developer or a technically capable analyst, it takes one to two weeks to implement correctly. But it is not a one-click fix, and “correctly” is doing a lot of work in that sentence. The number of stores that have partially working sGTM setups – ones that capture more purchases but still miss attribution, or lose product-level data in the transformation – is large.
And at the end of all of it, you have more accurate purchase counts in GA4. You do not have product-level analytics. GA4 can tell you that a purchase happened. It cannot tell you which of your 300 products has the highest cart abandonment rate, which category retains customers at 3x the rate of others, or which SKU is killing your average order value.
See accurate eCommerce tracking without the setup nightmare – Free trial
What the Tracking Gap Actually Costs You
This is where most articles stop at “your conversion rate is wrong.” The deeper problem is what you are optimizing based on wrong data.
Ad spend decisions
You are running Google Shopping campaigns. GA4 reports a 2.1% ROAS. Your agency says you should cut the budget. But if GA4 is missing 40% of purchases, your actual ROAS is closer to 3.5%. You are pulling back on a campaign that is working.
The inverse also happens. A campaign appears to be over-performing in GA4 because it happens to reach Safari-heavy audiences less often. You scale it. The incremental purchases are not there.
Conversion rate benchmarking
You read that a good Shopify CVR is 2-4%. You are at 2.1% according to GA4 and you spend three months trying to optimize your product pages. If your actual CVR is 3.4%, you just wasted three months fixing something that was not broken.
Attribution chaos
One merchant in r/shopify described this exactly: “50%+ of orders show the first session as ‘visited your store from an unknown source’.” If half your attributed sessions are unknown, you cannot make meaningful channel decisions. You cannot know whether to invest more in SEO, email, or paid. You are flying blind on spend allocation.
What Actually Works: Server-Side Purchase Capture
The accurate approach to Shopify purchase tracking is server-side capture: reading the purchase event from Shopify’s backend rather than from browser JavaScript. Shopify records every order on its servers, regardless of what happens in the customer’s browser. That data is accurate. It does not depend on Safari allowing cookies, ad blockers not running, or the checkout confirmation page loading completely.
Server-side approaches avoid the checkout domain problem entirely, because the data never goes through the browser at all. They are immune to ITP. They record purchases that happen even when customers close the browser before the confirmation page fully loads.
Stormly connects directly to Shopify’s backend data through a native integration. Every purchase event is captured at the source – not after it passes through a browser, a GTM container, or a consent banner. There is no pixel configuration, no sGTM container to provision, and no developer required.
In practice, stores using Stormly’s native Shopify integration see purchase capture rates of 99%+ compared to Shopify’s own order count. A store running 340 monthly orders in Shopify sees 337 recorded in Stormly. GA4 on the same store shows 204 orders – a 40% gap that was invisibly distorting every decision the team was making.
That 40% is not just a number. It is the product performance data, the customer cohort data, and the conversion rate benchmarks you have been building your decisions on.
Beyond Accuracy: What You Can Actually Do With Complete Data
Fixing the tracking gap gets you accurate numbers. But accurate numbers in GA4 still do not answer the questions eCommerce operators actually need answered.
GA4 tells you your conversion rate is 3.2%. It does not tell you that product A has a 0.4% CVR while product B has 9.8% CVR. It does not tell you that your store-wide abandonment rate of 68% is being driven almost entirely by four products that account for 31% of your abandoned cart events. It does not connect purchase history to customer retention to show you which product category is building your highest-LTV buyers.
When Stormly captures your Shopify purchase data at the server level, it does not just record that a purchase happened. It connects that purchase to the customer’s full behavior history, links it to the product and category, tracks whether that customer returns, and builds the retention, abandonment, and product-level CVR reports that actually drive merchandising decisions.
A concrete scenario: a store with 280 SKUs used Stormly’s cart abandonment by product report after fixing their tracking. They found that one product – a mid-priced item they had been promoting heavily – had an 84% cart abandonment rate versus a 51% average for similar items. The product had a 3-star rating from 12 reviews, mostly about sizing. The store added a sizing guide, addressed the top complaints in the product description, and abandonment dropped to 58% within three weeks.
That insight does not exist in GA4, even after you fix the tracking. Accurate purchase counts get you to the starting line. Product-level analytics get you to decisions.
The Practical Next Step
If you are currently running GA4 on Shopify and you have not verified whether your purchase data is accurate, the simplest check is to compare your GA4 order count for the last 30 days against your Shopify order count for the same period. Use Shopify as the baseline – it is recording server-side and it is right.
If the gap is more than 10%, your ad spend attribution, conversion rate benchmarks, and any reports based on GA4 data are wrong.
If the gap is 40% or more – which is common for standard Shopify plans without sGTM – you are making product and marketing decisions on data that is missing nearly half the picture.
The fix does not require becoming a data engineer. Native Shopify integrations that capture purchase data at the server level sidestep the entire client-side tracking problem without requiring GTM, sGTM, Stape, or any custom pixel configuration.
Stop optimizing a conversion rate that is wrong. See accurate eCommerce tracking without the setup nightmare – Free trial.