Back to blog
Guides

GA4 Purchase Event Not Firing? A Diagnostic Playbook for Agencies

By Tracefox Team

Why this breaks so often

Google Analytics 4's purchase event is the single most valuable data point most e-commerce sites collect. It's also the most fragile:

  • It fires on the order-confirmation page only
  • It depends on a correctly-configured GA4 measurement ID, properly-formatted ecommerce data layer, and either a direct gtag call or a GTM tag
  • Any of those three layers can break independently
  • None of them throw visible errors when they do

This playbook is how agencies diagnose it fast.

Step 1: Confirm the event actually isn't firing

Before assuming a break, rule out a lag. GA4's real-time reports show events within seconds. The standard reports have a 24-48 hour delay. If you're looking at yesterday's report, the absence of purchase events might just be data processing lag.

What to do: place a test order (or use a 100% discount coupon). Watch the GA4 real-time view for the purchase event in the next 60 seconds. If you see it, the tag is fine, the issue is reporting lag or a segment/filter in your report.

If you don't see it, proceed.

Step 2: Inspect the confirmation page source

Open the thank-you page in your browser. Open DevTools → Network tab. Filter to "google" or "collect."

You should see:

  • A request to www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX (the GA4 script)
  • A request to www.google-analytics.com/g/collect?... (the actual event ping)

Missing the script load? Your GA4 base code isn't on the page. Either your GTM container isn't loading, or your direct gtag snippet was removed from the template.

Missing the collect request? Script loads but the event isn't being sent. The GTM tag isn't firing, or the direct gtag('event', 'purchase', …) call isn't being hit.

Step 3: Check the dataLayer

On the thank-you page, open DevTools → Console and run:

dataLayer

You should see an object with a purchase event that includes transaction_id, value, currency, and items. If the object is empty or missing the purchase event, the data layer itself isn't being populated.

Common reasons:

  • Shopify: additional_scripts.liquid was modified or removed. Shopify's Google & YouTube channel can also silently stop pushing to the data layer after an auth issue.
  • WooCommerce: the tracking plugin (Google Listings & Ads, WPCode, Site Kit) is disconnected or misconfigured.
  • Custom storefront: the developer removed or changed the data layer push during a checkout refactor.

Step 4: Check GTM (if using GTM)

Open GTM → Preview mode. Walk through a test checkout. On the thank-you page, you should see:

  • The purchase event in the data layer (left pane)
  • Your GA4 Event tag firing on that event (right pane)

Data layer event present, but GA4 tag not firing? Your trigger is broken. Most common cause: the trigger was looking for purchase but your data layer is pushing Purchase (case mismatch) or dl_purchase (naming convention difference).

Tag firing but sending to wrong property? Check the GA4 Measurement ID inside the tag config. An agency that manages multiple clients sometimes pastes the wrong ID after a property migration.

Step 5: Check consent mode

If you implemented Google Consent Mode v2 (required for EEA/UK), events are gated behind ad_storage and analytics_storage consent states. A user who hasn't granted consent won't fire the purchase event.

This is correct behavior, but it's also the source of a lot of "my purchase events stopped" reports. What changed:

  • Did you recently deploy Consent Mode v2?
  • Did your CMP update change default consent states?
  • Is your CMP setting consent states before or after the GA4 tag?

If all your events dropped to near-zero (not just a reduction), consent is likely blocking everything. Use Google Tag Assistant or GTM Preview to verify consent states are being set correctly.

Step 6: Check ad blockers + Safari ITP

Like the Meta Pixel, GA4 is blocked by most ad blockers and partially mitigated by Safari's ITP. You'll lose ~15-25% of events to these by default.

If you're seeing a sudden drop rather than the expected baseline loss, ad blockers aren't the cause. If you're trying to recover those lost events, use Measurement Protocol (server-side) or a solution like Stape.io's server-side GTM to bypass client-side blocking.

Automation: catching this before a client does

The manual playbook above takes 15-30 minutes per investigation. For agencies managing 10+ client stores, that's unsustainable. Automated script and event monitoring catches most of these failures in minutes.

Tracefox's approach:

  • Script monitoring: on every scan of your client sites, we verify googletagmanager.com/gtag/js?id=G-... is still present. Disappearance = HIGH severity alert with before/after evidence.
  • Cookie monitoring: we track which cookies are set after consent. Missing _ga and _ga_* cookies often indicates the tag isn't running, even if the script is loading.
  • Consent banner state: we detect your CMP and track whether consent is being accepted/declined in a way that would gate events.

When any of these drift, you get a Slack alert within minutes, fast enough to diagnose before the next day's reporting cycle.

The "I have 20 clients, I can't audit all of them" problem

This is the real pain point. Even a diligent agency doesn't have time to manually audit GA4 on 20 clients weekly. The options:

  1. Tag audit tools (tagnabbers like ObservePoint, Data Layer Inspector), thorough but expensive, usually $500+/mo and aimed at enterprise.
  2. Checklist spreadsheets and quarterly reviews, what most agencies actually do. Catches issues months late.
  3. Automated script + event monitoring (Tracefox, similar), $19-129/mo, runs continuously, alerts on drift.

For most agencies, option 3 is the pragmatic answer. It's not as thorough as option 1 but it catches 90% of real-world GA4 breakages (missing script, disappeared Pixel, consent misconfiguration) at a price point that works at scale.

The 5-minute weekly audit

Whatever tooling you have, add this five-minute weekly ritual to your agency ops:

  1. Place a test order on one rotating client each week
  2. Watch the GA4 real-time view for the purchase event
  3. If missing, run the playbook above
  4. Document the result in your client log

Five minutes × 20 clients / 20 weeks = one audit per client per quarter. Combined with automated monitoring in between, you'll catch issues your clients never notice.


Stop relying on "I'll check it next month." Start Tracefox free, set up automated monitoring across every client site in an hour, get alerted when GA4 silently breaks. Built for PPC agencies and SEO agencies.

Catch broken checkouts before your customers do

Tracefox replays your checkout on a schedule across desktop, mobile, and tablet, and alerts the moment a step fails. Bonus on every plan: tracking pixel, script, and consent banner monitoring.

Start free