Skip to content
DM · Daniil Maximkin
Solution

GA4 Not Tracking Purchases on Shopify: Diagnosis

·

The short answer

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

  1. 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.
  2. 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 read window.dataLayer the old way will see nothing — it needs to use Shopify’s analytics.subscribe('checkout_completed', ...) API instead.
  3. 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.
  4. 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

  1. In Shopify Admin, go to Settings → Customer events and confirm a GA4 pixel is listed and shows as connected — not just added.
  2. 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.
  3. Place a real or test order, then open GA4 → Admin → DebugView with your debug parameter active, and walk the checkout through to confirm a purchase event appears with transaction_id, value, and an items array populated.
  4. 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.
  5. 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.
  6. Check whether the pixel is reading a dataLayer object versus subscribing to Shopify’s checkout_completed event — the former breaks under sandboxing even if the pixel “looks” installed.
  7. In DebugView, check the consent state attached to the purchase event to see whether analytics_storage was granted before it fired.
  8. 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

CauseSignal you’ll seeFix
Checkout extensibility gapNo purchase events on any path, ever; Additional Scripts is empty or shows a migration noticeInstall a Customer Events pixel that reads Shopify’s checkout_completed event
Pixel missing/sandboxedPixel shows “connected” in Shopify but DebugView shows nothing; no collect request in the network tabRewrite the pixel to use analytics.subscribe('checkout_completed', ...) instead of reading a dataLayer
Payment-method bypassStandard checkout tracks fine; Shop Pay/Apple Pay/PayPal orders never appearConfirm the pixel subscribes to the same checkout_completed event regardless of payment method and test each path independently
Consent blockingPurchase event exists in DebugView but is flagged denied, or arrives without ecommerce parametersFix 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.

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.

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.