audit_event_coverage
Audit event coverage across your codebase, Google Tag Manager, and GA4. Identify unmatched, missing, or extra events to ensure complete tracking.
Instructions
Three-way audit: codebase events ↔ GTM tags ↔ GA4 actual fires.
First, search the user's codebase for gtag('event', ...) and
dataLayer.push({event: ...}) calls and extract every distinct event name.
Pass that list as expected_events. The tool fetches the LIVE GTM
container, joins it against GA4 event counts for the date range, and
returns a per-event matrix with one of these statuses:
ok — tag active and event firing
ok_auto_collected — GA4 Enhanced Measurement event, no tag needed
no_tag_no_fire — codebase event, no GTM tag, never fires
tag_paused — GTM tag exists but is paused
tag_active_but_not_firing — tag is active but no GA4 hits
gtm_only_firing — GA4 event from a tag, not in codebase
gtm_paused_but_firing — only paused tag(s), not in codebase, yet
GA4 still fires (event comes from elsewhere)
gtm_only_not_firing — tag exists, not in codebase, no fires
ga4_only — fires in GA4, no tag, no codebase ref
ga4_fires_no_tag — codebase event firing without a GTM tag
auto_event_only — Enhanced Measurement event with no codebase ref
Also surfaces dynamic-event tags ({{Event}} variables) and Custom HTML tags that the audit cannot interpret automatically.
GTM IDs come from Tag Manager UI → Admin → Container Settings. Date format: "YYYY-MM-DD". Empty = last 30 days.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| property_id | No | ||
| date_range_end | No | ||
| gtm_account_id | No | ||
| expected_events | Yes | ||
| date_range_start | No | ||
| gtm_container_id | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||