Skip to content

Guide 02 · Debugging · GA4 + Tag Manager

Your GA4 purchase event never arrives: trace it with Tag Assistant and DebugView

Checked 11 November 2026 · Verification: example arithmetic recomputed (10.01 × 3 + 21.01 × 2 = 72.05); reference file validated structurally · Steps traced to Analytics Help, Tag Manager Help, and Google's developer documentation, opened 11 November 2026 · 10-minute read

The checkout works, the order lands, and GA4 shows no purchase. The event is failing at one of four places, and they are checked in order, from the browser to the report. Each checkpoint has one yes-or-no question and one fix. Start at checkpoint 1 and stop at the first no — that is where the break is.

Expected signal

A working purchase looks like this: the GA4 Event tag sits under Tags Fired on the purchase event in Tag Assistant, the purchase event appears in DebugView with transaction_id, value, currency, and the items array, and the order shows in the Realtime report within minutes. Standard reports take 24 to 48 hours.

Download the reference: the purchase event reference (JSON) (MD5 f05548cef28f0bea09b24d15619c733d). It lists every parameter the purchase event takes, which ones are required, the item fields, the four checkpoints below, and the worked example: order T_12345 at $72.05. The matching tag, trigger, and data layer variables are already in the GA4 base container (JSON) from the setup guide.

The setup this guide assumes

The site sends a purchase event to the data layer when an order completes, and a Google Analytics: GA4 Event tag in Tag Manager sends it on to GA4. The tag carries the property's Measurement ID, the event name purchase, the parameters transaction_id, value, currency, tax, shipping, coupon, and items, and a Custom Event trigger that fires when the data layer event equals purchase. That is exactly the configuration Google's ecommerce documentation describes, and exactly what the downloadable container holds. If your setup differs — a different event name, a different trigger — fix the setup first; this guide debugs the standard one.

The worked example

Google's own worked purchase is order T_12345: two items, a tee at $10.01 times 3 and a second tee at $21.01 times 2, with tax of $3.60, shipping of $5.99, currency USD, and coupon SUMMER_SALE. The value GA4 must receive is the sum of price times quantity for all items, without shipping or tax:

ItemPriceQuantityLine total
Stan and Friends Tee (SKU_12345)$10.013$30.03
Google Grey Women's Tee (SKU_12346)$21.012$42.02
value sent to GA4$72.05

That arithmetic was recomputed here before publication: 10.01 × 3 is 30.03, 21.01 × 2 is 42.02, and the two sum to 72.05. The data layer push that carries it is Google's, from the same developer page:

dataLayer.push({ ecommerce: null });  // Clear the previous ecommerce object.
dataLayer.push({
  event: "purchase",
  ecommerce: {
    transaction_id: "T_12345",
    value: 72.05,
    tax: 3.60,
    shipping: 5.99,
    currency: "USD",
    coupon: "SUMMER_SALE",
    items: [
      { item_id: "SKU_12345", item_name: "Stan and Friends Tee",
        price: 10.01, quantity: 3 },
      { item_id: "SKU_12346", item_name: "Google Grey Women's Tee",
        price: 21.01, quantity: 2 }
    ]
  }
});

Two details in that push matter for debugging. First, the ecommerce: null line clears the previous ecommerce object, so a stale cart cannot leak into the purchase. Second, every item needs an item_id or an item_name; both is recommended, and the price must be a number, not a string.

The four checkpoints

  1. Tag Assistant Preview: did the tag fire? In Tag Manager, click Preview, enter the site URL, and click Connect. Complete a test purchase. In the Tag Assistant debug view, select the purchase event in the left panel. The GA4 Event tag must appear under Tags Fired. If it is under Tags Not Fired, the trigger did not match: open the trigger and confirm it is a Custom Event trigger whose event name is exactly purchase, firing on All Custom Events. A trigger on Page View or on a differently spelled event name never fires for this push. The data layer event name and the GA4 event name are two different things; here both are purchase, and both must match exactly.
  2. DebugView: did GA4 receive it? With Preview still connected — Tag Assistant adds the debug signal to your session — go to Admin, then under Data display, click DebugView. The Seconds stream in the middle column shows events logged in the last 60 seconds; the Minutes stream on the left covers the last 30 minutes. Click the purchase event to see its parameters: transaction_id, value, currency, and the items array. If the event appears here, the tag and the property are right and the problem is downstream, at checkpoint 4. If DebugView stays empty, two causes dominate: debug mode is not on for your device (set debug_mode to true in the GA4 Event tag for this event only, and remove it when you are done), or a client-side privacy control or consent mode setup is blocking Analytics — Google's DebugView page says events are not visible in debug mode when either is in play.
  3. The Measurement ID: is it the right property? Compare the Measurement ID in the GA4 Event tag against the one in Admin, then Data Streams, then the web stream. They must be identical, character for character. A tag carrying another property's G- ID fires cleanly and reports cleanly — into the other property. This is the checkpoint people skip because the tag looks right, and it is the one that explains a purchase visible in DebugView on one property and absent on another. Copy the ID from the stream; do not type it from memory.
  4. The report lag and the missing parameter. If the event is in DebugView, collection works. Two things then stand between the event and a standard report. First, time: many reports and explorations can take 24 to 48 hours to process data, so check the Realtime report for the order now and the standard reports tomorrow. Second, registration: GA4 receives every parameter you send, but a custom parameter only becomes a dimension in your reports after you register it under Admin, then Data display, then Custom definitions, with event scope and the exact parameter name. A new custom dimension can be added to a report 24 to 48 hours after the data was sent and the dimension was created, and it only applies to events sent after registration — earlier events show as (not set), and the scope and the event parameter cannot be changed after saving. The recommended purchase parameters — transaction_id, value, currency, items — populate the revenue reporting in GA4 without registration; it is your own extra parameters that need this step.

Dead ends

DEAD END — Purchase WITH A CAPITAL P IS A DIFFERENT EVENT. GA4 event names are case-sensitive. A data layer event named Purchase never matches a trigger waiting for purchase, and it reports as a separate event if it arrives at all. Use the recommended name exactly as written.

DEAD END — debug_mode FALSE DOES NOT TURN DEBUG OFF. To disable debug mode, remove the debug_mode field. Setting it to false does not disable it, and the test traffic keeps flowing into your reports while you think it stopped.

DEAD END — CHECKING A STANDARD REPORT TEN MINUTES AFTER THE TEST. Standard reports can take 24 to 48 hours to process data. An empty standard report ten minutes after a test proves nothing. DebugView and Realtime are the same-day checks; standard reports are tomorrow's.

DEAD END — THE VALUE INCLUDES SHIPPING AND TAX. The value parameter is the sum of price times quantity for all items, without shipping or tax. Tax and shipping travel as their own parameters. A value of $81.64 for the example order — 72.05 plus 3.60 plus 5.99 — is wrong, and revenue will overstate by exactly that much on every order.

End state

A purchase that passes all four checkpoints shows in DebugView within a minute of the order, in Realtime the same day, and in the standard purchase reports within 24 to 48 hours, with the right transaction ID, the right value, and the right items. If a checkpoint fails, the fix is at that checkpoint — a trigger, a debug flag, an ID, or a wait — not a rebuild of the whole setup. The reference file on this page lists the four questions in order, so the next missing event takes minutes to place, not an afternoon.

Sources

Checked 11 November 2026. The click paths above are the ones in Google's help and developer pages, opened 11 November 2026. No step in this guide was run inside a live Analytics property or a live Tag Manager container, because both need a Google sign-in and this site does not sign in as anyone. What was run: the example arithmetic, recomputed in Python 3.12.3 — 10.01 × 3 is 30.03, 21.01 × 2 is 42.02, and 30.03 plus 42.02 is 72.05, matching the value in Google's example — and the structural validation of the reference file and the container file, which passed all 31 checks. The data layer example is Google's own code sample from the ecommerce developer page. Google moves menu items without warning; if a path on this page no longer matches, the linked help page is the current map.