Made by Rune Andersen @ Copenhagen, Denmark
Google Analytics 4 logo

Debug Google Analytics 4 in Chrome DevTools

To debug Google Analytics 4 in Chrome DevTools, install the free Event Watcher extension and open its panel: every Google Analytics 4 request is captured the moment it fires, decoded by a dedicated parser into named events, readable parameters, and consent signals, and cross-referenced against the visitor's consent state. Event Watcher has listed GA4 under Analytics since v1.0.0, and flags any GA4 event that fires without analytics consent.

Event-based analytics with cross-platform tracking and BigQuery export.

Last updated:

Category
Analytics
Detected via
Network requests: Event Watcher matches the request URLs this platform sends
Consent category
Analytics / statistics consent: Event Watcher flags GA4 activity that fires without it
Dedicated parser
Yes: requests are decoded into named events, parameters, and consent signals, not just raw URLs
Supported since
Event Watcher v1.0.0 (2026-02-20)
Show the URL patterns Event Watcher matches
  • google-analytics.com/g/collect
  • analytics.google.com/g/collect
  • google-analytics.com/r/collect
  • google-analytics.com/mp/collect
  • google-analytics.com/debug/mp/collect
  • region1.google-analytics.com
  • region2.google-analytics.com
  • region1.analytics.google.com
  • region2.analytics.google.com
  • googletagmanager\.com\/a\?
  • google\.com\/ccm\/collect\?[^]*tids?=G-
  • stats.g.doubleclick.net/g/collect

What GA4 traffic looks like

GA4 sends hits to /g/collect, with two first-party shapes that catch people out. Both are still GA4.

Endpoint pattern
google-analytics.com/g/collect, regional siblings like region1.google-analytics.com/g/collect, stats.g.doubleclick.net/g/collect (Google signals on), and google.com/ccm/collect?…tid=G- (server-side / Consent Mode first-party path)
Transport
GET with everything in the query string for small hits; POST for larger ones, with batched events as newline-separated event lines in the body
Key parameters
tid measurement ID (G-XXXXXXX) · en event name (page_view, purchase, custom) · cid / sid / _s client ID, session ID, hit sequence · ep.* / epn.* string and numeric event parameters · up.* user properties
Consent signals
gcs, gcd, dma: Google Consent Mode state; gcs=G100 means denied, G111 granted
E-commerce
pr1, pr2, and so on: one item per parameter, with id, nm, pr, qt fields packed into each value

Debugging GA4 with Event Watcher

  • Matches every endpoint variant above, including the regional and /ccm/collect first-party shapes.
  • The GA4 parser splits each hit into readable groups: Event, E-Commerce, Session, User Identity, Campaign / Attribution, Consent, Advertising, Page / Document, and Client Hints.
  • Batched POST bodies unpack into individual events: a single request carrying five events shows as five entries you can inspect separately.
  • Grouped view pivoted by Event Name is a quick way to compare ep.* payloads across repeated events.

GA4 and consent

Analytics consent

The extension checks GA4 against analytics consent. GA4 is the canonical Consent Mode platform: with advanced Consent Mode, hits legitimately fire before the CMP answers, but as cookieless pings carrying gcs=G100.

Worst case is the safe case: Event Watcher reads both the CMP's state and the gcs/gcd signals, so only a hit with full cookies before the user chose is flagged as a genuine violation.

See GA4 fires before consent and debugging Consent Mode v2.

Common debugging scenarios

  • purchase fires twice. Pivot Grouped view by Event Name and compare the two hits' _s sequence numbers and session IDs: double tag or page reload.
  • Wrong measurement ID on one page. Filter to GA4 and scan tid per hit; agency and site-owner streams often overlap.
  • Items missing from e-commerce reports. The E-Commerce section of the parsed hit shows whether pr1…prN are present and complete on the wire, before you blame the report.
  • A dataLayer event never becomes a GA4 hit. Confirm the push happened via which script pushed this dataLayer event, then check for a /g/collect hit with the matching en.
  • Consent Mode pings mistaken for tracking. The Consent section shows gcs per hit. Check it before flagging a violation.

See GA4 traffic on your own site

Free, no account, runs entirely inside Chrome DevTools.

Add to ChromeFree on the Chrome Web Store

Related guides

More analytics platforms