Consent Mode v2 is often described as a switch that turns advertising tags on or off. It is not. It is a signaling layer that sits between your consent banner and Google’s tag infrastructure, and its job is to tell Google tags what they are allowed to do with storage and user data before those tags decide whether to fire, what to send, and what to suppress. The ad request itself is downstream of that decision. This article traces the path from the ad_storage flag to the cookieless ping to the modeled conversion, using Google’s own documentation as the primary artifact.
What Consent Mode v2 actually defines
Consent Mode was updated in November 2023 to add two parameters beyond the original ad_storage and analytics_storage. The four parameters Google documents are:
ad_storage— allowed values'granted'or'denied'. Controls whether advertising cookies may be read or written.ad_user_data— allowed values'granted'or'denied'. Sets consent for sending user data related to advertising to Google.ad_personalization— allowed values'granted'or'denied'. Sets consent for personalized advertising.analytics_storage— allowed values'granted'or'denied'. Controls analytics cookie read/write.
That list comes directly from Google’s Set up consent mode on websites guide. The guide is explicit that ad_user_data and ad_personalization are the v2 additions, and that sites already using the original two parameters need to add them.
Two implementation details matter more than most teams realize. First, defaults must be set before any command that sends measurement data. Google’s example places gtag('consent', 'default', ...) ahead of the config call, and the guide warns that “if your consent code is called out of order, consent defaults won’t work.” Second, if your banner loads asynchronously, you can pass wait_for_update with a millisecond value so tags wait for the CMP to call gtag('consent', 'update', ...) before firing. Google’s example uses 500 ms.
Region scoping is also part of the spec. A default command can carry a region array using ISO 3166-2 codes, and the most specific region wins. Google’s own example sets ad_storage to granted for US and denied for US-CA, with the California visitor receiving the denied state.
What fires when ad_storage is denied
This is where the common mental model breaks. Denying ad_storage does not stop network requests to Google. It changes what those requests contain and what they are allowed to do.
Google Analytics’ Consent mode on websites and mobile apps page describes the behavior directly: “When visitors deny consent, instead of storing cookies, tags send pings to Google.” The same page enumerates the ping types:
- Consent state pings for Google Ads and Floodlight tags — communicate the default consent state and any update when the visitor grants or denies consent for each consent type. These are sent from each page where consent mode is enabled, and are also triggered for some tags when state changes from
deniedtogranted. - Key event pings — indicate that a key event has occurred.
- Google Analytics pings — sent from each page where GA is implemented, on load and when events are logged.
The documented payload of these pings is deliberately coarse. Google lists functional information such as timestamp, user agent, referrer, and headers added passively by the browser; coarse information such as whether the current or prior page in the navigation included ad-click information in the URL (GCLID/DCLID); boolean consent state; a random number generated on each page load; and information about the consent platform used, such as a Developer ID.
When ad_storage='denied', the documented behaviors are specific:
- No new advertising cookies may be written.
- No existing first-party advertising cookies may be read.
- Requests are sent through a different domain to avoid previously set third-party cookies being attached in request headers.
- Google Analytics will not read or write Google Ads cookies, and Google Signals will not accumulate data for that traffic.
- IP addresses are used to derive IP country but are never logged by Google Ads and Floodlight systems and are immediately deleted upon collection.
If ads_data_redaction='true' is also set, ad-click identifiers such as GCLID and DCLID in consent and key event pings are redacted. That is a separate flag from ad_storage and is configured via gtagSet in Tag Manager or the equivalent in gtag.js.
The practical consequence: a denied ad_storage state still produces a request to Google. It is a request stripped of cookie identity, stripped of persistent identifiers, and carrying only the coarse signals above. The ad request path is not severed; it is downgraded.
Basic versus advanced: the difference is whether tags load at all
Google’s documentation distinguishes two implementations. In basic consent mode, Google tags are blocked until the consent dialog appears and the user consents. In advanced consent mode, Google tags load before the consent dialog appears and send cookieless pings when consent is declined.
The tradeoff table in the Analytics documentation is blunt about the consequence. Advanced implementation enables behavioral modeling in Google Analytics, conversion modeling in Google Analytics, and conversion modeling in Ads. Basic implementation does not. The footnote is the part most teams miss: “When tags are blocked due to consent choices, no data is collected, and conversion modeling in Ads is based on a general model.” The models use features such as browser type, key event action type, time of day, and other high-level, non-identifying variables.
So the choice is not “do I want modeling or not.” It is “do I want modeling informed by my site’s cookieless pings, or modeling based on a general model that has no signal from my traffic.” Both are modeled. Only one is calibrated to your observed consent-denied population.
How modeled conversions are produced
The mechanism, as documented, is a gap-fill. Google Analytics receives cookieless pings from consent-denied traffic. Those pings carry coarse dimensions — user agent, screen resolution, IP address (used transiently, not logged by GA), and whatever fields the advertiser explicitly sets such as user_id and custom dimensions. Google then uses that data for behavioral and conversion modeling to fill gaps in observed data.
For Ads specifically, the Analytics documentation states that conversion modeling in Ads is available under advanced implementation, and that under basic implementation it falls back to a general model. The inputs to the general model are the high-level variables listed above. The inputs to the calibrated model are the cookieless pings plus those same high-level variables.
What the documentation does not provide is a formula, a coefficient, or a per-conversion confidence interval. Google does not publish the model architecture or the training data composition. Any vendor claiming to know the exact uplift from consent mode modeling is extrapolating from their own account data, not from a published specification. That distinction matters when someone presents a percentage as if it were a documented constant.
Where TCF v2.2 fits — and where it does not
Consent Mode v2 and IAB Europe’s Transparency & Consent Framework v2.2 are separate systems that often coexist on the same page. TCF v2.2, launched 16 May 2023 with an implementation deadline moved to 20 November 2023, is a framework for capturing and communicating consent signals across vendors. Its policy changes include removal of legitimate interest as a legal basis for advertising and content personalization purposes (3, 4, 5, and 6), standardized vendor disclosures, and requirements that users can easily resurface the CMP UI to withdraw consent.
The interaction that matters for this article is documented in Google’s Analytics consent page: “When your users deny consent with a consent solution that uses the TCF, Google Analytics properties aren’t able to model data to fill in the missing information.” That is a hard boundary. A TCF-based denial does not feed the same modeling pipeline that a Consent Mode denial does, at least not for Google Analytics properties.
On the OpenRTB side, the relevant fields are regs.ext.gdpr and user.ext.consent, which carry GDPR applicability and the TCF consent string respectively. Google’s Consent Mode signals are not the same artifact as a TCF consent string. They are Google’s own parameter set, transmitted through Google’s tag infrastructure. The mapping between the two is not a one-to-one translation, and Google’s documentation does not publish a field-level mapping table. Where behavior is undocumented, the honest answer is that it is undocumented.
What to check in your own implementation
Given the above, a few concrete checks follow from the documentation:
- Verify default ordering. The
gtag('consent', 'default', ...)call must precedeconfigand any event command. Google’s guide states that out-of-order consent code causes defaults to fail. - Confirm all four parameters are set. Sites that implemented the original two-parameter version need to add
ad_user_dataandad_personalization. The v2 upgrade note is explicit about this. - Decide basic versus advanced deliberately. If you block tags until consent, you are choosing the general model for Ads conversion modeling. If you load tags before consent, you are choosing the calibrated model. Neither is free; the first trades modeling fidelity for a stricter tag posture.
- Check whether
ads_data_redactionis set. It is a separate flag fromad_storageand changes what appears in consent and key event pings. - Check region scoping. If you set
deniedglobally when only EEA visitors require it, you are suppressing measurement everywhere. Google’s guide recommends scoping defaults to the regions where banners are surfaced. - If you use a TCF-based CMP, understand the modeling boundary. Google’s documentation states GA properties cannot model data from TCF-based denials. That is a documented limitation, not a configuration error.
FAQ
Does denying ad_storage stop requests to Google?
No. Google’s documentation states that when consent is denied, tags send cookieless pings instead of storing cookies. The request path remains; the payload and storage behavior change.
What is the difference between ad_storage and ad_user_data?
ad_storage governs cookie read/write for advertising. ad_user_data governs whether user data related to advertising is sent to Google. They are separate parameters with separate allowed values, both added or confirmed in the November 2023 update.
Can I get modeled conversions without loading Google tags before consent?
Google’s documentation distinguishes advanced implementation (tags load before the dialog, cookieless pings sent) from basic implementation (tags blocked until consent). Under basic implementation, conversion modeling in Ads is based on a general model rather than one informed by your site’s pings.
Does a TCF v2.2 denial feed the same modeling pipeline as a Consent Mode denial?
For Google Analytics properties, no. Google’s documentation states that when users deny consent through a TCF-based solution, GA properties cannot model data to fill in the missing information.
Where does the consent state attach to the ad request?
Google’s documentation describes consent state pings sent from each page where consent mode is enabled, carrying the default and updated state for each consent type. The ad request itself is downstream of the tag’s decision about what it is permitted to send. Google does not publish a field-level mapping between Consent Mode parameters and OpenRTB fields such as user.ext.consent; that mapping is not documented in the sources reviewed here.
Primary sources
- Google, Set up consent mode on websites — parameter definitions, default/update commands, region scoping,
wait_for_update, v2 upgrade note. - Google, Consent mode on websites and mobile apps — ping types, ping payload contents,
ad_storage='denied'behaviors,ads_data_redaction, basic vs. advanced tradeoffs, TCF modeling limitation. - IAB Europe, TCF 2.2 Launches! All You Need To Know — policy changes, implementation timeline, GVL v3.
Sources not retrieved during research and therefore not cited for factual claims: Google Ads help page on conversion modeling (timeout), OpenRTB 2.6 specification on GitHub (HTTP error), Google Tag Platform developer guide on consent mode (HTTP error). Claims about those documents are not made here.



