GA4 Not Tracking Purchases on Shopify: Diagnosis
·
GA4 purchase events on Shopify go missing for a small set of recurring reasons: no Customer Events pixel installed after checkout extensibility, a pixel that's installed but sandboxed away from the data it needs, an express checkout path (Shop Pay, Apple Pay) the pixel was never tested against, or consent blocking the event before it fires. DebugView on a real test order isolates which one you have faster than reading code.
Symptoms you might be seeing
- GA4's ecommerce purchase report shows zero or near-zero transactions despite real orders
- Realtime shows no purchase event during a manual test checkout
- Purchases work for some checkout paths but not others
- Google Ads shows no conversions even though GA4 is linked correctly
- The gap appeared suddenly after a theme, app, or checkout settings change
The symptom
Real orders are coming in. GA4’s purchase report is empty, or shows a fraction of what it should. This is usually the first thing a merchant notices when tracking is broken, because it’s visible without any reconciliation work — the ecommerce report just doesn’t move, even while the order list in Shopify Admin keeps growing.
It’s worth ruling out the mundane explanation before assuming the pixel is broken: test from a browser without an ad blocker or tracking-prevention extension active, since a blocked request looks identical to a missing one from inside GA4’s reports. Once that’s ruled out, the cause is almost always one of a small set of Shopify-specific issues.
Direct answer
GA4 purchase events on Shopify go missing for a small, recurring set of reasons: no Customer Events pixel installed at all after a checkout extensibility migration, a pixel that’s technically installed but sandboxed away from the data it needs, an express checkout path (Shop Pay, Apple Pay, Google Pay) the pixel was never tested against, or consent blocking the event before it can fire. Running a real test order through GA4’s DebugView isolates which of these you have faster than reading through pixel code.
Causes, ranked
- Checkout extensibility gap. If your only purchase tracking lived in the legacy “Additional Scripts” box and nothing was migrated, there may be no pixel firing on the checkout or thank-you page at all, on any path.
- Customer Events pixel missing or sandboxed. Web Pixels run in a sandboxed context with no direct access to the page’s DOM or a global
dataLayer. A pixel written to readwindow.dataLayerthe old way will see nothing — it needs to use Shopify’sanalytics.subscribe('checkout_completed', ...)API instead. - Payment-method bypass. Purchases that go through Shop Pay, Apple Pay, or PayPal Express can behave differently from a standard card checkout. If the pixel was only ever tested against the standard path, express checkouts are a common blind spot.
- Consent blocking. If analytics consent defaults to denied and the CMP never sends an update signal before the purchase fires, the event either doesn’t leave the browser or arrives without the data GA4 needs to count it.
How to diagnose it
- In Shopify Admin, go to Settings → Customer events and confirm a GA4 pixel is listed and shows as connected — not just added.
- If the store still has access to legacy Additional Scripts (Settings → Checkout → Order status page), check whether tracking code still lives there and whether Shopify shows any migration notice on that screen.
- Place a real or test order, then open GA4 → Admin → DebugView with your debug parameter active, and walk the checkout through to confirm a
purchaseevent appears withtransaction_id,value, and anitemsarray populated. - Repeat the same test using at least one express checkout path (Shop Pay or Apple Pay) separately — don’t assume a passing standard-checkout test covers it.
- Open the browser’s Network tab on the thank-you page and look for the actual collect request to Google’s analytics endpoint. This confirms the event fired client-side even if DebugView is lagging.
- Check whether the pixel is reading a
dataLayerobject versus subscribing to Shopify’scheckout_completedevent — the former breaks under sandboxing even if the pixel “looks” installed. - In DebugView, check the consent state attached to the purchase event to see whether
analytics_storagewas granted before it fired. - Confirm the GA4 property and data stream ID configured in the pixel match your live property — a stale ID pointing at an old or test property is a common, silent cause.
Decision table
| Cause | Signal you’ll see | Fix |
|---|---|---|
| Checkout extensibility gap | No purchase events on any path, ever; Additional Scripts is empty or shows a migration notice | Install a Customer Events pixel that reads Shopify’s checkout_completed event |
| Pixel missing/sandboxed | Pixel shows “connected” in Shopify but DebugView shows nothing; no collect request in the network tab | Rewrite the pixel to use analytics.subscribe('checkout_completed', ...) instead of reading a dataLayer |
| Payment-method bypass | Standard checkout tracks fine; Shop Pay/Apple Pay/PayPal orders never appear | Confirm the pixel subscribes to the same checkout_completed event regardless of payment method and test each path independently |
| Consent blocking | Purchase event exists in DebugView but is flagged denied, or arrives without ecommerce parameters | Fix the CMP’s default/update consent signals so analytics_storage is granted before the purchase tag fires |
Fix it yourself, or bring in help
Confirming pixel status in Customer Events, running a DebugView test, and checking the network tab are things any merchant comfortable in the Shopify and GA4 admin can do in under an hour. What usually needs a developer or specialist is rewriting a pixel to work inside the Web Pixels sandbox, debugging why one specific express-checkout path doesn’t fire, or wiring consent state correctly through to the purchase event. If DebugView confirms the event simply never fires — on any path — that’s a build task, not a settings fix, and worth scoping through GA4 consulting rather than trial and error against a live checkout.
One more thing worth checking before escalating: if a GTM web container sits between the pixel and GA4, confirm the container is actually publishing a live version, not just saved in a draft workspace — a surprisingly common reason a “correctly configured” tag never fires in production.
Related reading
If purchases fire but the revenue totals still don’t line up with Shopify, see GA4 revenue doesn’t match Shopify. If the checkout itself just changed and tracking broke afterward, see Shopify checkout tracking broken. For how a pixel and dataLayer relate in general, see dataLayer.
FAQ
I installed a GA4 pixel through an app, why is nothing showing up?
An installed pixel and a working pixel aren't the same thing. Many app-installed pixels are configured against the wrong GA4 property or data stream, or subscribe to the wrong Shopify checkout event. Confirm the property/stream ID matches your live GA4 property, then verify with a real test order in DebugView rather than trusting the app's own 'connected' status.
Does DebugView show everything, or can an event fire and still not show there?
DebugView only shows events tagged with your debug parameter or sent from a device running the GA4 Debug extension. If you're testing without either active, a working purchase event can fire and never appear there. Check the browser's network tab for the actual collect request as a second, independent confirmation.
Is checkout extensibility the same thing as Customer Events?
They're related but not identical. Checkout extensibility is the broader framework replacing checkout.liquid customization. Customer Events (the Web Pixels API) is the specific mechanism within it for adding tracking pixels — it's what a GA4 pixel needs to use to keep working under the new checkout.
Will Shopify's own GA4 integration work without GTM?
Yes, for standard ecommerce events — Shopify's native or custom Customer Events pixel can send purchase data directly to GA4 without a GTM container in between. GTM adds flexibility for custom parameters and multi-tag management, but it isn't required for basic purchase tracking to work.
Next steps
- ServiceGA4 Consultant
- ArticleFix the GA4 Purchase Event on Shopify (Step by Step)How the Shopify purchase event fires today, why Additional Scripts is dying, and a correct custom pixel that sends a GA4 purchase with transaction_id.
- ArticleWhy GA4 Revenue Doesn't Match Shopify OrdersWhy GA4 and Shopify revenue never match exactly, how much variance is structural and normal, and the order-level method I use to reconcile them.
Not sure whether your tracking is actually broken?
Start with a Health Check — a fast, read-only diagnosis that tells you what is wrong before you spend anything fixing it. Prefer email? Send your store URL and one sentence about what looks off.