# GA4 source incident: <short title>

Save this record wherever the user chooses. After approval, add a dated one-line summary with its location to `martech-context/decisions.md`. Fill every field; write "not applicable" with a reason rather than leaving one blank.

## Symptom

- Property and stream: G-XXXXXXXXXX, <stream name>
- Report or exploration:
- Exact dimension, with scope prefix (First user, Session, or none):
- Metric:
- Reporting identity (Blended, Observed, Device based):
- Channel group in use (default, primary, custom name):
- Filters, segments, comparisons:
- Property timezone:
- Data quality indicator message, if any:
- First date the pattern changed:
- Releases within a week of that date (GTM versions, CMP, redirects, checkout, payment, server senders, campaigns):
- GA4 Admin changes in that week from change history (data filters, channel groups, unwanted referrals, cross-domain list, session timeout):
- Event data retention setting, and whether the baseline is inside it:

## Denominator

- Baseline window (completed, same weekday mix):
- Affected window:
- Affected row count, baseline to affected:
- Range of the affected row over the previous 8 completed weeks:
- Eligible population used for any (not set) share:
- Total sessions, baseline to affected:
- Key events in the affected row, baseline to affected:
- Total key events, baseline to affected:
- Verdict: count rose / only the share rose

## Artifacts checked

- Event scope on non-key events:
- Event metrics with session or user dimensions:
- Google Ads dimensions on non-Ads traffic:
- Mixed scopes:
- Source Platform values (such as Unlabeled) read as a channel, and comparisons across 11 June 2026:
- (other), thresholding, sampling:
- Freshness and attribution settling:
- Increase reproduced in Session default channel group? If not, custom group diagnosis (missing channel, rule order) and draft change:

## Split by underlying fields

- Pairs inside the affected row, with sessions and key events:
- `utm_` parameters in Landing page + query string? (yes means UTMs; manual source / medium alone is not proof)
- Partial UTM sets (source without medium, or the reverse):
- Hostname, stream, device concentration:

## Export coverage (QC)

- Days checked and streams present:
- Consent mode (none, basic, advanced), reporting identity, behavioural modelling active (yes / no):
- Daily export events used for the comparison (`events`, or `events_not_denied` on advanced consent mode) against GA4 Event count from the Data API:
- Daily denied events (`events_denied`), recorded separately. On advanced consent mode a raw export count above the API figure is expected and is not a partial export.
- Excluded streams or events in the BigQuery link, export paused:
- Verdict: complete / partial (partial means no cause is ruled out from the export):

## Cause tree

For each: confirmed / ruled out / not applicable, and the evidence (query name and result, screenshot reference, test note).

- A. UTM values that miss channel rules:
- B. Parameters lost before collection:
- C. Google tag initialized late:
- D. Consent sequence errors / consented-away / modelling:
- E. Measurement Protocol or server events without session context:
- F. Cross-domain handoffs and payment referrals:
- G. Events outside a session:
- H. Landing page (not set):
- I. Campaign (not set) on non-campaign rows:
- J. AI assistant referrers (first date `ai-assistant` appears in the property):
- K. Direct inflation (bots, referrer loss, identity resets, lost click IDs):

## Fix list

In fix order. Each item: the draft (link, diff, change list), owner, approval state and date, release date.

1.

## Confirmation

- Data filter states read before the runs (name, type, Testing / Active / Inactive, date read):
- Any filter switched to Testing for the test window (approved by, start and end times):
- Test matrix file and result (all rows matched / mismatches with tickets):
- Debug runs (same-day sequence evidence only) and confirmation runs (no Tag Assistant, outside every Active filter), listed separately:
- Client ID and UTC start time recorded for each confirmation run:
- Human-run tests: who ran each, approval reference, transaction IDs refunded and excluded downstream by `transaction_id`:
- Next-day export checks (query Q8 per run):
- Processed report check (after 48 hours):
- Completed window after release, affected count, total sessions, key events:
- Exact export session counts for any change under 2% of total sessions (UI totals are approximate):
- Data loss check: did total sessions or key events fall by about the same amount as the affected row? If yes, is that drop explained (for example sessions a sender was fabricating)?
- Release annotation added to dashboards:

## What history keeps

- Dates that stay affected and why:
- Reclassification applied (custom group name, rule, order), or none:

## Evidence request sent to an agency or partner (if any)

- Exact published links, launch times, redirect or shortener path:
- Intended source and medium from the registry:
- One controlled visit through the real link, with consent state and time:
