Consent & privacy
Ballot Signal + Google Consent Mode v2
What is Google Consent Mode v2?
The de facto consent grammar for the web. If your Consent Mode implementation is correct, ours inherits it for free.
It sits in the Consent & privacy category of a campaign stack. Signals we consume, never signals we override.
Who uses it
Nonpartisan. Used across both parties and by nonpartisan organizations.
How the Ballot Signal + Google Consent Mode v2 integration works
A signal we consume, not a destination. Ballot Signal reads the gtag consent state from the dataLayer and maps the four Consent Mode v2 signals into our normalized consent object. All four should default to 'denied' in an inline head script before any tag loads; we act only on a gtag('consent','update', …) that moves the relevant signals to 'granted'. If ad_user_data or ad_personalization stays denied, no ad-destination event is ever generated for that visitor.
What syncs
- ad_storage
- analytics_storage
- ad_user_data
- ad_personalization
Field mapping
The supporter record is the same shape everywhere. What changes is where each field lands. The full record is documented on what you get.
| Supporter record | Consent signal | Notes |
|---|---|---|
| — (inbound) | Consent category state | Read from this platform, not written to it. |
| consentCategories | Normalized internal consent object | Their category names mapped onto ours. |
| consentTimestamp | Captured at the moment of the affirmative act | Stored on every supporter record produced afterwards. |
| consentVersion | Your configured policy version string | A version bump re-asks the visitor. |
| consentSource | Page URL where the consent event fired | Exact URL, not just the domain. |
How to set it up
- 1
Add an inline script in the head, before any tag, setting all four Consent Mode v2 signals to denied by default.
- 2
Ensure your consent management platform issues gtag('consent','update', …) when a visitor accepts.
- 3
Install the Ballot Signal snippet after the defaults script.
- 4
In Ballot Signal, choose which signals are required — analytics_storage for identification, plus ad_user_data and ad_personalization for any ad destination.
- 5
Test in a private window: deny, confirm nothing fires; accept, confirm the signal appears.
Why it matters
The de facto consent grammar for the web. If your Consent Mode implementation is correct, ours inherits it for free.
Related integrations
All Consent & privacy →WP Consent API
The only standardized consent contract inside WordPress — and the reason our plugin can be honest about gating without asking you to write code.
Cookiebot
One of the most widely deployed consent management platforms — if a campaign has a banner at all, it is often this one.
CookieYes
Popular low-cost CMP on WordPress and hosted builders — common on down-ballot sites.
Complianz
Implements the WP Consent API properly, which makes it the shortest path from 'installed' to 'provably gated'.
Ballot Signal + Google Consent Mode v2: questions
Is the Google Consent Mode v2 integration available today?
Live. Built, tested and available to every customer today. You can turn this on yourself without talking to us.
What authentication does the Google Consent Mode v2 integration use?
n/a (client-side signal). Credentials are stored encrypted and are never rendered back into the interface after entry.
Will this create duplicate records in Google Consent Mode v2?
No, assuming you leave deduplication on. We match on the lowercased-email hash first, then phone, then name plus address. On a match we update rather than create, and only the fields you have marked overwritable.
Does the consent record travel into Google Consent Mode v2?
Yes. Consent timestamp, consent version, consent source URL and granted categories are included in every push, by default, and there is no configuration that strips them. That is the point of the product.
See what your own website already knows.
Book a 20-minute walkthrough. We will look at your site's current consent posture first — that part is useful whether or not you buy anything.