The IAB Transparency and Consent Framework version 2.2 is a common standard for structured consent signalling in Europe. Understanding how it connects to GA4, and what your CMP needs to do to make the integration work correctly, is essential for any publisher or advertiser serving EU audiences.
How TCF 2.2 signals reach GA4
TheIAB TCFframework works by encoding user consent choices into aTC string, a compact, standardised representation of which vendors a user has consented to and for which purposes. Your CMP reads the user's choices and writes this string to a standardised API that other scripts on the page can read. For organisations operating in EU markets, this work sits inside the broaderGDPR and GA4 compliance review, and the mapping behaves differently foranalytics versus ads consent signals.
GA4 does not natively read the TC string. The connection is bridged byGoogle Consent Mode— for the underlying setup, see ourConsent Mode v2 implementation guide. When your CMP detects TCF consent, it must translate the relevant purpose consents into Consent Mode signals, specificallyanalytics_storageandad_storage, using thegtag('consent', 'update', {...})call. Without this translation layer, TCF consent choices have no effect on GA4 behaviour.
This translation step is also whereCMP and GA4 consent timingmost often breaks: the TC string can be set correctly while the Consent Mode update arrives too late for GA4 to use it.
Confirm your CMP is TCF 2.2 certified
Check the IAB Europe vendor list and your CMP documentation if you rely on a TCF-based implementation. Certification alone does not prove the Google consent integration is wired correctly, so treat it as one verification point rather than the whole audit.
Verify the consent mode default state is set before GTM loads
Add a gtag consent default call in a script tag that loads before your GTM snippet. Set analytics_storage and ad_storage to 'denied' as the default. Without this, GA4 may fire unconstrained before consent is collected.
Confirm the CMP fires a consent mode update on user interaction
Open your browser Network tab and filter for requests to analytics.google.com (the primary GA4 endpoint) or google-analytics.com (legacy endpoint). Accept cookies in your CMP banner. Confirm a new GA4 hit fires immediately after with gcs parameter showing consent granted. If no hit fires after consent, the update call is missing or misconfigured.
Test the full TCF purpose-to-consent-mode mapping
TCF Purpose 1 (store and/or access information on a device) is the most directly relevant purpose for analytics_storage. Your CMP's Google integration documentation specifies exactly which TCF purposes trigger which Consent Mode signals — do not assume the mapping without checking your CMP's configuration guide, as this varies across certified CMPs and has changed between TCF versions.
Validate with GA4 DebugView
Enable GA4 DebugView and test the consent flow. After accepting analytics purposes, GA4 events should appear in DebugView. After denying them, GA4 events should either not appear or appear as pings (consent mode active, no user data). Confirm the behaviour matches your expected data collection rules.
TCF 2.2 + GA4 implementation verification plan
Validate
- CMP appears on IAB Europe's certified vendor list
- Consent Mode default state (denied) set before GTM container loads
- Network tab shows GA4 consent update firing after user accepts
- GA4 DebugView shows events only after analytics purposes are granted
- TCF Purpose 1 is mapped to analytics_storage in CMP configuration
- Consent Mode v2 (ad_user_data, ad_personalization) signals present if using Google Ads
Fix
- Add default consent state script tag before GTM snippet in page head
- Configure CMP to fire gtag consent update on TCF consent callback
- Map TCF Purpose 1 to analytics_storage in your CMP's Google integration settings
- Enable Consent Mode v2 signals in CMP if running Google Ads campaigns
- Test consent flow on both desktop and mobile. CMP behaviour can differ
Watch for
- GA4 hitting google-analytics.com before the consent banner is interacted with
- Consent update not firing when user accepts, only default state hits present
- TC string present in __tcfapi but no corresponding Consent Mode update observed
- analytics_storage remaining denied after user explicitly accepts analytics purposes
- Modelled conversions not appearing in GA4 despite Consent Mode being active
Related guides to read next
Consent Mode v2 Guide
Full implementation guide for GA4 Consent Mode v2, covering GTM setup, CMP integration, and modelling eligibility.
GDPR and GA4 Compliance
What GDPR means for your GA4 setup, which data is covered, and how to configure your property for EU audiences.
Server-Side Consent Signals and GA4
How server-side architectures handle consent for GA4, and what you need to verify in your implementation.