Webclat / Ecommerce
ecomm.webclat.com
Webclat / Ecommerce  /  field guides

GA4 not tracking purchases: the diagnosis path

Purchase events die in one of five places, and guessing which one wastes weeks. This is the diagnosis order that finds the break fastest, and the reason your platform's analytics and GA4 will never fully agree even when everything works.

Where do purchase events die?

Work the chain in order; each step has a distinct test, and the first failing test is your break.

StageThe breakThe test
1. The triggerThe thank-you or confirmation context never fires your tag - template changed, checkout type differs, consent state blocks itPlace a test order per payment method with an instrumented browser; watch the network layer
2. The payloadEvent fires but malformed - missing transaction id, value, currency, or items arrayInspect the actual request parameters, not the tag config
3. Consent and blockersEvent fires only for consenting, unblocked visitors - a population, not a bugCompare consent-accept rate to the measurement gap; they should be the same size
4. Property processingEvents arrive but land wrong - filters, unwanted-event marking, mis-mapped parameters, wrong property id on one templateRealtime and raw event views against a known test order
5. The reportData is present but the report hides it - date lag, attribution settings, comparing mismatched scopesQuery the event count directly before trusting any built report

Why do Shopify analytics and GA4 disagree?

Because they are different instruments. The platform counts orders server-side at the moment of transaction - no consent gate, no blockers, no client to crash. GA4 counts a browser event that must survive the client, the consent state, and processing. The platform's number approximates the orders table; GA4's number is the orders table as seen through measurable web conditions. A stable, explained gap is a healthy system. The defects worth hunting are changes in the gap and unexplained components of it.

Refunds are the classic false alarm. The platform nets them; a purchase event does not un-fire. A store with meaningful refund volume will always show GA4 revenue above platform net revenue unless refunds are handled explicitly.

What about ad platforms not tracking conversions?

The same chain applies with one addition: identity. Ad platforms count a conversion only when they can match the purchase to a click or a user - so beyond firing and payload, the diagnosis includes the click id surviving the journey and customer identifiers being present for matching. A conversion pixel can fire perfectly and still record nothing the platform can attribute, which reads as "not tracking" but is actually "not matching" - a different fix entirely.

How do you verify a fix honestly?

The same way the defect was found: a test order per payment method with the network layer recorded, then a closed date-range reconciliation against the orders table after the fix has run long enough to measure. A fix verified by looking at a dashboard the day after deployment is a hypothesis wearing a suit.

Common questions

GA4 shows some purchases but not all - where do I start?

Stage 3 first: compare your consent-acceptance rate to the size of the gap. If the gap is materially larger than the non-consenting population, move to stage 1 and test each payment method - express checkouts are the usual silent failure.

Why did purchases stop after a theme or checkout update?

Templates and checkout contexts are stage 1: the surface your tag depended on changed. Re-run the instrumented test order; the network layer will show whether the event still fires.

Should Shopify analytics and GA4 ever match exactly?

No. One counts server-side orders, the other consented browser events. The goal is a stable, explained delta, not equality.

Is duplicate counting related to this?

Same chain, opposite symptom - usually stage 2, a missing or inconsistent transaction id letting refresh-refires or dual senders count twice.

Find out what your tracking actually reports.

A runtime audit of your store: every tag that fires, every event that reaches your analytics and ad platforms, and where the numbers diverge from the orders table. Evidence first, opinions second.

Request an audit