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
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 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.liquidwas 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
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. 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
_gaand_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:
- Tag audit tools (tagnabbers like ObservePoint, Data Layer Inspector), thorough but expensive, usually $500+/mo and aimed at enterprise.
- Checklist spreadsheets and quarterly reviews, what most agencies actually do. Catches issues months late.
- 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:
- 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
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.