Free scan Install guides Developers Compare CMPs About Support Contact
Get Velo

Already have an account? Log in

What the gcd parameter means, and what it proves that gcs cannot

Consent Mode 8 August 2026· 6 min read
The Velo mascot watching two tags leave the starting line together on one page load

All posts

gcd is a parameter on the requests Google's tags send, and it carries the whole consent picture: all four Consent Mode signals in one string, each position recording what the default was and what an update changed it to. That is what it proves that gcs cannot. gcs reports where two signals ended up. gcd tells you, for all four, whether a default was ever set at all. Google does not document it, which is the other half of this post.

Why a second parameter exists at all

If you have ever debugged a consent setup from the network panel, you have read gcs. It is short, it is easy, and it answers one question: at the instant this hit left the page, was storage granted. G100 for both denied, G111 for both granted, the mixed states in between, and G1-- for a tag that fired with no consent state attached at all. We use it constantly, and the method is written up in how to check your banner is sending the Consent Mode v2 signal.

It has two limits, and they are the reason for this post. It covers ad_storage and analytics_storage only, so the two signals version two introduced are simply not in it. And on the pair it does cover it reports an outcome without a history, so a signal denied because somebody chose to deny it reads much like one denied because nobody configured it.

Both faults show up downstream as missing data, and only one of them is the visitor's decision. gcd is where that distinction lives.

How the string is put together

The value opens with 11 and then alternates a separator digit with a letter, once per signal, before a closing digit. The four letters, in order, are ad_storage, analytics_storage, ad_user_data and ad_personalization. The letters are the whole message.

One string, four positions, two facts each 1 1 t 1 t 1 l 1 p 5 ad_storage granted by default analytics_storage granted by default ad_user_data never set through Consent Mode at all ad_personalization denied by default, no update ever arrived The l is the finding. A signal nobody wired and a signal a visitor refused look identical downstream.
An illustrative gcd value broken into its four positions. Letters and structure follow Google's internal encoding, which Google does not document and may change without warning.

Each letter answers two questions at once, which is the part that repays a careful read. It records whether a default was set before the tag fired, and whether an update arrived afterwards. So one character can say that a signal started denied and was granted when the visitor accepted, or that it was never part of your Consent Mode configuration at all.

Reading it, step by step

  1. Capture a request from a Google tag

    Open the network panel, filter for the collect endpoint, and load the page in a clean session. Requests sent by a current Google tag carry gcd, and they carry it whether or not Consent Mode is configured, so an ordinary page load is usually enough to produce one. Older or hand rolled integrations may not send it, and that absence is a finding of its own.

  2. Split the string at its separators

    The value begins with 11 and then alternates a separator digit with a signal letter. The four letters, in order, are ad_storage, analytics_storage, ad_user_data and ad_personalization. Read the letters; the digits are structure, not state.

  3. Translate each letter into a default and an update

    l means the signal was never set through Consent Mode. p is denied by default with no update; q is denied by default and still denied after one. t is granted by default with no update; v is granted by default and after an update. r is denied by default then granted; u is granted by default then denied. m is denied by an update with no default before it, and n is granted by an update with no default before it.

  4. Read the ones with no default as a wiring fault

    l, m and n all say something was missing before the tag ran. l means the signal was never configured. m and n mean an update arrived for a signal that had no default, which is the ordering fault: the tag was already free to run before consent was expressed.

  5. Confirm on a documented surface before you change anything

    Take the hypothesis the string gave you into Tag Assistant or your tag manager's consent view and check it there. That is the surface Google documents, and the one to act on.

What each letter is actually telling you

Grouping the nine by what they prove beats memorising them. Three describe a signal with no default before the tag ran, and those are the ones to act on. l is the one to look for first: the signal was never set through Consent Mode at all, which is a different fault from anyone declining anything, and it is common on installs predating version two that still send the original pair. An l in the ad_user_data or ad_personalization position usually ends the investigation, because nothing is broken in the banner.

m and n mean an update reached a signal that had no default, which is the ordering fault rather than the mapping one: the tag was free to run before consent was expressed, and why tags fire before the cookie banner loads covers how to stop it. The remaining six describe a signal that was configured and then followed a path, and those are healthy readings even when the answer is a refusal.

The warning that has to travel with it

Google does not publish gcd as a contract. It is an internal parameter, its encoding can change without notice, and no version of this decode is guaranteed to survive a tag release. Every honest source on the subject says so, and it belongs here rather than in a footnote, because a decode without its expiry date is how a debugging aid turns into a false certainty six months later.

So the rule we work to is narrow. Use gcd to form a hypothesis inside a single session, when something is missing and you do not yet know why. Confirm it on a surface Google does document before changing anything, and never build monitoring on top of the string: a parser reading an undocumented parameter is not a monitor, it is an outage waiting for a release note nobody sent.

Used that way it earns its place, because of the one thing no documented surface gives you as quickly: a single character, on a request you already have open, that says whether a signal was refused or was never wired at all.

Velo sends all four signals from one category mapping you can read on a single screen, and the state a visitor chose is the state that leaves the page, which is what makes a string like this boring to read. How it is wired is on the product page.

Common questions

What people ask about this topic.

What does the gcd parameter mean?

gcd is the parameter Google's tags send that encodes all four Consent Mode signals at once, together with how each state was reached. Its shape is 11 then a value for ad_storage, then a separator and a value for analytics_storage, then ad_user_data, then ad_personalization, ending in a digit. Each value is a letter, and the letter carries two facts rather than one: whether a default was set before the tag fired, and whether an update arrived afterwards. That history is the part gcs cannot express.

What is the difference between gcs and gcd?

They answer different questions. gcs reports the current state of two signals, ad_storage and analytics_storage, at the moment the hit left the page. gcd reports all four signals and, for each one, whether it was set by default, updated later, both, or never set at all. So gcs tells you where a visitor ended up on the storage pair, and gcd tells you how the page got there across the whole set. Use gcs to read the outcome and gcd to explain it.

What does l mean in the gcd parameter?

An l in a position means that signal was never set through Consent Mode at all. It is the most useful letter in the string, because it separates a genuine refusal from an absent implementation. A visitor who declined produces a denied value; a signal nobody ever wired produces an l. Those two look identical in your reporting and have completely different fixes, so finding an l usually ends the investigation.

Can I rely on gcd for monitoring or alerting?

No, and this is the one firm rule about it. Google treats gcd as an internal parameter, its values can change without warning, and there is no published contract that would make a decode stable. Use it to diagnose a specific fault in a specific session, then confirm the fix on a surface Google does document, such as Tag Assistant or your tag manager's consent view. Anything automated that parses it is a future outage rather than a monitor.

Why does my gcd value show granted when the visitor declined?

Read which half of the letter you are looking at. Several values encode a default and an update together, so a letter can record that a signal started granted and was denied afterwards, or the reverse. If you see a value meaning granted by default with no update, the visitor's choice never reached the tag, which usually means the tag fired before the consent update or the update was never published at all.

Your banner, your consent,
your data — all in one place.

Scan your site →
Pages Free scan Product Agencies Pricing Developers Install guides Compare CMPs
Company About Velo Blog Help Contact
Account Sign up Log in Get early access
GDPR CCPA
All rights reserved
© 2026 by Amplio Data