GA4 Live Debugger Documentation
Everything you need to inspect GA4 hits, monitor your DataLayer, and catch tracking issues before they reach production. This guide covers setup, feature configuration, and common troubleshooting scenarios.
New to the extension? Start with the product overview to see what it does at a glance.
Getting Started
After installing the extension, you can access the debugger in two places:
- Side Panel: Click the extension icon in Chrome's toolbar, or press Alt+Shift+D. The panel opens alongside your page so you can browse and debug simultaneously.
- DevTools Panel: Open Chrome DevTools (F12) and look for the GA4 Live Debugger tab. This gives you a wider view while you work in Elements, Network, or Console.
Both views show the same data in real time. Use whichever fits your workflow.
chrome://extensions/shortcuts and find GA4 Live Debugger to set your preferred key combination.
Hit Inspection & Routing
The feed captures every GA4 network request in real time. Hits automatically group by page navigation so you can trace exactly what fired and when.
Search & Filtering
Use the search bar at the top of the panel to quickly find specific event names, parameter values, or URLs. You can also use the quick-filter chips to instantly isolate Issues (hits with warnings or errors), or filter the feed by event type: Page, Auto, Ecom, Recom, and Custom.
Transport Badges
Each hit shows a badge indicating where the request is being sent. This tells you at a glance whether data is going client-side, through a proxy, or to a server-side GTM container.
| Badge | What It Means |
|---|---|
| Client-Side | Sent directly to Google-owned endpoints (default behavior). |
| Gateway | Proxied through Google Tag Gateway. |
| sGTM 1P | Routed to a first-party server-side GTM environment. |
| sGTM Provider | Sent to a known third-party sGTM hosting provider (e.g., Stape). |
| sGTM Cross-Domain | Sent to a server-side GTM on a different root domain (server-side processing confirmed). |
| sGTM Server-Side | Sent to a self-hosted server-side endpoint. |
| Proxy (Unconfirmed) | Sent off-domain, but server-side processing is not confirmed by the payload. |
Batch Unpacking
GA4 often batches multiple events into a single network request. The debugger unpacks these automatically. Each event displays as its own card with a numeric indicator showing its position in the original batch. No manual payload inspection needed.
Campaign Parameters
The extension automatically extracts industry-standard campaign tracking variables and ad click identifiers from each hit. These are displayed in a dedicated section so you can instantly verify that your UTM parameters and attribution tags are passing through correctly, without having to manually parse complex query strings.
Tracking Setup Discovery
The extension automatically detects and lists every Measurement ID and GTM container active on the page, including Google's Optimized GTM containers. Each entry shows a hit count so you can confirm all expected properties are receiving data and spot unexpected containers.
DataLayer & Platform Monitoring
The DataLayer tab captures every dataLayer.push() in real time. You can toggle between a formatted table view and raw JSON for each push. Beyond standard GTM arrays, the debugger monitors platforms that bypass the standard DataLayer architecture.
Shopify & Tealium Support
The extension captures tracking events from popular ecommerce and tag management systems:
- Shopify Customer Events: Captures events from Shopify's
analytics.subscribeAPI, even when firing inside an isolated Custom Pixel sandbox. - Tealium iQ: Intercepts
utag.viewandutag.linkevents directly on the page, surfacing the client-side Tealium payload without touching the network layer.
Event Correlation
The debugger links each DataLayer push to its resulting GA4 network hit. Matched pairs show a link badge. Click it to jump directly to the corresponding card.
When correlation breaks, you'll see one of two states:
- Orphaned DataLayer Push: A push fired but no GA4 hit followed. Likely causes: tag trigger not configured, consent denied, or the event name does not match any tag.
- Orphaned GA4 Hit: A network request fired without a preceding push. This typically means a hardcoded
gtag('event', ...)call that bypasses GTM entirely.
Diagnostics & Audits
The Diagnostics panel runs over 30 automated checks against your tracking implementation. It surfaces issues you would otherwise have to hunt for manually, inspecting everything from page-level GTM configuration down to individual event parameters.
Privacy & Data Governance
| Audit | What It Checks |
|---|---|
| Live PII Detection | Scans outgoing hits for emails and phone numbers leaking into URLs, event parameters, or product data. The exact location is flagged with the value masked for your privacy. |
| Email Redaction Check | Reads server-delivered property settings to verify if GA4's built-in email redaction feature is enabled. |
| Consent State Sync | Decodes consent parameters from network requests (gcs, gcd) and compares them against DataLayer consent defaults to identify race conditions or unapplied CMP states. |
Ecommerce Validation
| Audit | What It Checks |
|---|---|
| Missing Transaction IDs | Flags purchase or refund events that are missing a transaction_id parameter. |
| Value & Currency Formats | Detects dirty text in value fields (e.g. "2 USD" instead of a pure number) and warns when a value is sent without a currency code. |
| Malformed Item Arrays | Identifies missing item arrays on required conversion events, and flags individual item rows missing both an ID and a name. |
| DataLayer Schema | Validates e-commerce structure at the DataLayer push level before the network hit is generated. |
SPA & Session Integrity
| Audit | What It Checks |
|---|---|
| Stale URLs & Routing | For React, Vue, and Next.js sites: Identifies events that fire before the route fully updates, resulting in stale URLs or dropped referrers. |
| Cross-Domain Links | Flags navigations from configured cross-domain sites that arrive without the _gl linker parameter. |
| Identity & Session Loss | Identifies unexpected mid-session Client ID or Session ID resets that break user attribution, accurately accounting for expected resets during a consent grant. |
| Duplicate Pageviews | Detects multiple page_view hits for the same ID on one URL, often caused by Enhanced Measurement conflicts or SPA history triggers. |
GTM X-Ray & Implementation
| Audit | What It Checks |
|---|---|
| Shopify Sandbox Monitor | Detects hits inside the Shopify Web Pixel iframe. Warns if the sandbox swallowed the referring URL or passed the internal iframe URL instead of your storefront address. |
| DataLayer Typos | Identifies DataLayer push event names that are near-miss misspellings of your actual configured GTM triggers. |
| Container Health | Flags heavy containers (>800KB), high Custom HTML usage, high CPU risk (excessive Custom JS variables), and deprecated Universal Analytics tags. |
| Nested & Non-Prod GTM | Warns when containers inject other GTM containers, or when a staging/preview snippet is running on a live site. |
| Mixed Implementation | Detects when both GTM and hardcoded gtag.js are firing on the same page. |
GA4 Limits & Quotas
| Audit | What It Checks |
|---|---|
| Oversized Payloads | Flags batch requests exceeding 130KB. Google silently drops requests over this limit. |
| Character Limits | Warns when event names exceed 40 characters, or when parameter values exceed 100 characters (or 500 characters on GA4 360). |
| Parameter Limits | Warns when hits contain more than the allowed 25 event parameters or 25 user properties (scales to 100 for GA4 360). |
Control Modes
Two toggle switches in the toolbar control how the extension interacts with outgoing requests.
Debug Mode
Appends the debug_mode=1 parameter to all outgoing GA4 requests. These hits appear in your GA4 property's DebugView in real time.
Block Mode
Intercepts all GA4 requests at the network level and prevents them from leaving the browser, regardless of destination. This covers standard Google-owned endpoints, first-party sGTM domains, Google Tag Gateway, and self-hosted server-side endpoints. Hits still appear in the debugger feed so you can inspect every parameter, but nothing reaches Google's servers.
When to use it:
- QA testing on production without inflating real metrics.
- Validating event parameters before going live.
- Debugging consent implementations without sending denied-consent pings.
Data Dictionary & Team Sync
The Data Dictionary brings your tracking plan into the debugger. Hover over any event name or parameter in the feed to see its definition in a tooltip. No more switching between spreadsheets and the browser.
Adding Definitions
Open the extension settings to manage your dictionary. You have two options:
- Manual entry: Add individual event or parameter definitions one at a time.
- CSV import: Bulk import from a file. Useful for migrating from an existing tracking spec.
Definitions can be scoped to Global, Account, Property, or Measurement ID level. Narrower scopes override broader ones.
Team Sync via Google Sheets
Keep your entire team working from the same definitions without manual exports:
- Create a Google Sheet with your tracking plan definitions.
- Publish the sheet to the web as CSV (File → Share → Publish to web → CSV).
- Paste the published URL into the Team Sync field in extension settings.
The extension syncs in the background. Imported definitions show as read-only in the UI to prevent local drift from the source of truth.
Settings & Preferences
Open the extension settings or use the panel overflow menu to customize the debugger's behavior.
- Red Toolbar Alerts (Auditor Mode): Turns the extension icon red in your browser toolbar when critical errors (e.g. PII leaks, non-prod GTM containers) are detected on the page.
- Raw Data Mode (Show/Hide Warnings): Hides all inline error badges and warning cards for a clean, presentation-ready view. The informational grid stays visible.
- Audit using GA4 360 Limits: Adjusts the debugger's alert thresholds. Suppresses standard warnings for high parameter counts (allows up to 100 parameters) and long values (up to 500 characters) for Enterprise properties.
- Show Raw Parameter Keys: Displays original GA4 protocol keys (e.g.
lps,gcd) instead of friendly labels in the feed. - Console Logging: Mirrors every captured event directly to the Chrome DevTools console. Useful when you need hit inspection available while actively working in the Elements or Network panels.
- DataLayer Correlation: Toggle the push-to-hit correlation engine on or off to optimize performance.
- Click to copy parameter values: Click any parameter value in the feed to instantly copy it to your clipboard.
- Compact DataLayer cards: Hides action buttons on DataLayer cards until expanded, saving vertical space in the feed.
- Hide URL path: Removes the page path from hit card headers for a narrower Side Panel layout.
- Custom DataLayer Name: Specify a custom array name if your site uses one instead of the default
dataLayer.
Exporting Data
Click the Export button in the overflow menu to download your capture session. Available formats include CSV, TSV, and JSON. You can scope exports to visible hits only or all captured hits.
Troubleshooting
Check your filters. If you have filtered to specific event types, other hits will not show. Reset filters to confirm hits are actually missing.
Check for ad blockers. Extensions like uBlock Origin can intercept GA4 requests before this extension reads them. Try disabling other extensions temporarily.
Verify the page has GA4. Open the DevTools Network tab and filter for collect. If nothing appears there either, the page is not sending GA4 hits.
Confirm DataLayer monitoring is on. Toggle it via the DataLayer switch in the panel toolbar.
Check your array name. If the site uses a custom DataLayer name (anything other than window.dataLayer), update the Custom DataLayer Name field in extension settings.
Timing issue. If the DataLayer was populated before you opened the panel, historical pushes should still appear with the Historical badge. If they do not, try a full page reload with the panel already open.
Shopify runs your tracking scripts inside an isolated Web Pixel sandbox (an iframe). When hits fire from inside this sandbox, they often report the iframe's internal URL instead of your real storefront URL, breaking your GA4 page reports. The extension flags this with a Sandboxed iFrame URL warning so you can adjust your Custom Pixel code to map the true page_location.
Verify the sheet is published. Open the URL you pasted in a private/incognito window. If you see CSV data, it is working. If you get a login prompt, the sheet is not publicly published.
Check the format. Make sure you published as CSV, not HTML or TSV. The URL should end in /pub?output=csv.
Force refresh. Click Force Sync Now in settings to trigger an immediate pull instead of waiting for the background interval.
Reload after toggling. Block Mode intercepts all GA4 requests regardless of domain, including first-party sGTM endpoints. However, requests already queued by the browser before Block Mode activated may slip through. A page reload ensures all new requests pass through the blocking rules.
Check for ad blockers. Another extension may have already blocked or redirected the request before Block Mode could intercept it. Verify the routing badge on any hits that appear to be getting through.
Orphaned GA4 Hits (no DataLayer push): These are typically hardcoded gtag() calls that fire directly without going through the DataLayer. They are expected if you use gtag.js alongside GTM, or if Google auto-collects events like scroll or click.
Orphaned DataLayer Pushes (no hit): Check if consent is blocking the tag from firing. Also verify the event name matches a trigger condition in GTM. A push that does not match any trigger will never produce a hit.
Ready to debug your GA4 implementation?
Free, no account required. Everything runs locally in your browser.
Add GA4 Live Debugger to Chrome