# GA4 audit: <property display name> (properties/<property ID>)

<If any: "Data loss in progress: <rule and finding>" for an Active filter dropping real traffic or an export that is paused, expiring or stale. Put it first so nobody reads the score before it.>

<If any: "Data loss risk: <rule and finding>" for days over the export limit while daily tables are still complete, or while BigQuery results are missing.>

## Baseline

- Property: properties/<ID>, <standard | 360>, <ordinary | subproperty | roll-up>, time zone <zone>, currency <code>, created <date>
- Read route: <snapshot script | GA4 MCP server, started without --allow-write | interface exports>; scopes granted: <names>; scope check: <passed | not run, why>
- Read time: <YYYY-MM-DD HH:MM UTC>; as of <date>; data window <start> to <end>, previous window <start> to <end>
- Inputs: <snapshot, config, intake rows supplied N of M, exports, BigQuery results, Google Ads results>
- Script: <ran: python3 scripts/audit_ga4.py ... | not run (no Python), rules applied by hand>
- Not readable: <endpoint (status), or none>
- Decisions this property feeds: <bidding, board reporting, warehouse>

## Score

- Score <N>/100, <grade | grade withheld: partial audit>, coverage <checked> of <applicable> rules (<percent>).
- Caps: <any FAIL caps the grade at usable with caveats; a G23 or G24 FAIL or a Data loss in progress banner caps it at material issues | none>
- Areas: A <n> (8), B <n> (6), C <n> (14), D <n> (16), E <n> (10), F <n> (8), G <n> (6), H <n> (10), I <n> (16), J <n> (6)
- Previous audit: <date, score, coverage, or "first audit">

## Trust summary

- Acquisition by session: <trust | use with caveat | do not use until fixed> (<rules>); not checked: <rules>
- Key events and conversion rates: <label> (<rules>)
- Revenue and ecommerce: <label> (<rules>)
- Explorations and long date ranges: <label> (<rules>)
- Google Ads imports and bidding signals: <label> (<rules>)
- BigQuery and warehouse models: <label> (<rules>)
- EEA audiences and remarketing: <label> (<rules>)

## Analyst caveats

- Retention: explorations reach back about <N> months (to about <date>).
- Sampling: explorations over more than <N> days sample (average <N> events a day).
- Thresholding: <which probes were thresholded, or none>; a withheld row is not a zero.
- Attribution: <model>, lookback <N> days acquisition, <N> days other key events; recent changes <date and change>.
- Identity: reporting identity <Blended | Observed | Device based>, Google signals <state>.
- Modelled data: <data quality icon text on a Blended report | not recorded>; modelled users are never in the BigQuery export.
- Time zones: GA4 <zone>, Google Ads <zone>; BigQuery event_timestamp is UTC.
- Key events: <totals include session_start or similar: read per-event metrics | none>

## FAIL

- <rule ID> <slug> (priority <P1 to P4>): <finding in one sentence>.
  - Evidence: <field value with resource name | report and aggregated row | intake row and screenshot>
  - Confirmation: <data recheck or approved test, date, result | unconfirmed>
  - Exception cited: <decisions.md entry, or none>

## WARN

- <rule ID> <slug>: <finding>. Decision needed from: <owner>.

## PASS

- <rule ID> <slug>: <what was checked and found correct>

## Not checked

- <rule ID>: <reason, for example "UI evidence not supplied" or "v1alpha endpoint returned 404">

## Not applicable

- <rule ID>: <reason>

## Change list order

- <priority> <rule ID> <FAIL | WARN>, one line per finding, P1 first, FAIL before WARN

## Inventories

- Streams: <name, ID, type, measurement ID, default URI, events in the window>
- Key events: <name, counting method, default value, deletable, created, events in the window>
- Product links: <Google Ads accounts with personalization and manager flags; BigQuery project, location, modes, streams, exclusions; others>
- Custom definitions: <used of quota per scope, metrics, calculated metrics>
- Data filters: <name, type, operation, value or conditions, state, since>
- Channel groups: <name, primary, system defined, number of channels>
- Account data sharing: <Google products & services, Modeling contributions & business insights, Technical support, Recommendations for your business: on or off>

## Proposed annotations

- <date>: "<title, at most 60 characters>". <description, at most 150 characters>

## Thresholds used

- <every threshold name and value the script printed, and any config override>

## Next step

- Change list: <path or link>. Nothing in GA4, Google Ads, GTM or BigQuery was changed by this audit.
- Proposed context updates: <stack.md and decisions.md changes awaiting approval>
