Why this breaks so often
Google Analytics 4's purchase event is one of the most valuable data points an e-commerce site collects. It's also one of 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
gtagcall 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 a zero-total order with a 100% discount plus free shipping, which is still a real order you then cancel). 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: a custom pixel under Settings → Customer events was changed or removed (Shopify has phased out the old additional scripts on the order status page in favor of customer events). Shopify's Google & YouTube channel can also silently stop sending events 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
purchaseevent 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. A 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 some 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 real time for every investigation. For agencies managing 10+ client stores, that's unsustainable. Automated script monitoring catches the missing-script and missing-cookie failures on the next scan.
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
_gaand_ga_*cookies often indicates the tag isn't running, even if the script is loading. - Consent banner state: we detect your CMP and whether the banner appears, so a banner that disappears or changes gets flagged. These are technical observations, not legal advice.
When any of these drift, you get an alert (email, plus Slack on Pro and Business) after the scan that finds it. Scans run monthly on Free, weekly on Starter and daily on Pro and Business. Tracefox checks that the tag is present; it doesn't verify that the purchase event fires with the right data, so keep the test-order check below.
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:
- Tag audit tools (tagnabbers like ObservePoint, Data Layer Inspector), thorough but usually priced for and aimed at enterprise.
- Checklist spreadsheets and quarterly reviews, what most agencies actually do. Catches issues months late.
- Automated script monitoring (Tracefox, similar), flat monthly plans (see pricing), runs on a schedule, alerts on drift.
For most agencies, option 3 is the pragmatic answer. It's not as thorough as option 1, but it catches common GA4 breakages (missing script, disappeared Pixel, consent banner changes) 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:
- Place a test order on one rotating client each week
- Watch the GA4 real-time view for the purchase event
- If missing, run the playbook above
- Document the result in your client log
With 20 clients, rotating one a week means each client gets a hands-on audit about every 20 weeks. Combined with automated monitoring in between, you'll catch many issues before your clients notice them.
Stop relying on "I'll check it next month." Start Tracefox free, set up automated monitoring across your client sites, and get alerted when the GA4 tag disappears. Built for PPC agencies and SEO agencies.