v2.0 replaces 1.0's binary "preConsent" flag with a tiered classifier. The classifier reads the gcs= parameter Google stamps on every Consent Mode v2 ping, plus the observed consent state, and produces one of four classifications per fire.
The gcs parameter
Consent Mode v2 stamps every Google ping with a gcs= param encoding the consent state at fire time:
| Value | Meaning |
|---|---|
G100 | Both denied (ad_storage + analytics_storage) |
G101 | Analytics granted, ads denied |
G110 | Ads granted, analytics denied |
G111 | Both granted |
| (absent) | Pre-Consent-Mode pings or non-Google fires |
The four classifications
MODELED — denied-state modeling ping
Google fires "modeled" pings while consent is denied so it can model conversion data without setting cookies. gcs=G100 with no cookies set. Expected behaviour. Low concern.
PLUMBING — Consent Mode infrastructure event
Events like cookie_consent_update that are part of the Consent Mode mechanism, not user tracking. Surfaced for completeness but not flagged as violations.
VIOLATION — non-Google tracker fired while consent was denied
A Meta, LinkedIn, or other non-Google fire happened while observed consent state is denied. Likely a real privacy violation — these vendors don't have a Consent Mode equivalent, so a fire = a tracking call.
INCONSISTENT — gcs claims granted but observed state is denied
The ping declares gcs=G111 but Pixel Auditor's observed consent state is denied. High concern — usually a misconfigured GTM consent template that's reporting granted when it shouldn't be.
Where classifications appear
- Inline badge on the affected event row in Live Events
- The Audit tab's "Consent Mode findings" section, grouped by classification
- The exported audit report's consent timeline section
The consent timeline
The Audit tab includes a horizontal timeline showing every gtag('consent', 'default'|'update', …) call. Each marker shows the timestamp, the field that changed, and the new value. Tags that fired in violation are tinted red on the timeline.
Expected sequence for a compliant setup
- T+0 —
gtag('consent', 'default', { ad_storage: 'denied', analytics_storage: 'denied' })at the very top of<head> - T+0–500ms — CMP banner renders, modeled pings (gcs=G100) may fire
- User clicks Accept
- T+Naccept —
gtag('consent', 'update', { ad_storage: 'granted', analytics_storage: 'granted' }) - T+Naccept+ms — full pings with cookies (gcs=G111)
Anything that doesn't match — a non-Google fire before the update, or a granted-state ping with denied cookies — is what the classifier flags.
For the simulator that lets you test all this without waiting for users, see Consent Mode Simulator. For pre-consent violations specifically, see Pre-consent violations.