Resources/Guides/Compliance
Compliance guide · 16 min read

Consent Compliance: GDPR, CCPA, DPDP

Verify your consent banner actually blocks tags. Check regional rates. Catch pre-consent fires. The 2026 compliance baseline for any enterprise operating across EU, US, and India.

Swapnil Jaykar
Founder, TagDrishti. 12+ years leading analytics engineering and tag governance for Fortune 500 retailers, fintechs, and SaaS companies. Previously built monitoring systems that processed 2B+ daily tag events.
Published 14 Apr 2026Updated 22 Apr 2026

The number that keeps compliance officers awake in 2026 is this: EU regulators issued 2.4x more tracking-related fines in 2025 than 2024, and the DPDP Board in India has published its first enforcement framework with a ₹250 crore ceiling. If your CMP says you’re compliant but you’ve never verified it in production, you are one audit away from a very expensive finding. This guide is how I run a consent audit for every enterprise client.

Why Consent Monitoring Is Non-Negotiable in 2026

Consent Management Platforms (CMPs) are supposed to block tags until the user grants consent. In practice, they fail silently. The CMP loads, the banner displays, the user makes a choice, but behind the scenes, tags fire anyway. The CMP vendor says it is configured correctly. GTM says the tag fired. Nobody checks whether the CMP actually blocked the tag before consent.

The penalties for getting this wrong are specific and growing:

  • GDPR (EU, UK): up to 4% of annual global revenue or €20 million, whichever is higher. CNIL in France alone issued over €90 million in 2024 for consent violations on advertising tags.
  • CCPA/CPRA (California): $7,500 per intentional violation. The California Privacy Protection Agency began active enforcement in 2023 and is now issuing settlements quarterly.
  • DPDP Act 2023 (India): up to ₹250 crore. The Data Protection Board published its enforcement framework in Q1 2026. Indian fintechs and ecommerce sites are first on the audit list.

Enforcement is no longer theoretical. A single pre-consent tag fire on a high-traffic site can generate thousands of violations per day.

The Three-Region Regulatory Map

Every multinational site needs to satisfy three regulatory regimes simultaneously. Each has different consent mechanics:

RegimeDefaultMechanismMax Penalty
GDPR (EU)Opt-inExplicit consent before any non-essential processing4% global revenue / €20M
CCPA/CPRA (CA)Opt-out“Do Not Sell/Share” link + honor GPC signal$7,500 per intentional violation
DPDP (India)Opt-inExplicit, granular, withdrawable consent₹250 crore

A single CMP configuration cannot cleanly satisfy all three. Your CMP must be configured with geographic rules that change the banner behavior, default consent state, and tag gating per region.

The TagDrishti Consent panel shows real-time consent compliance data for your site. Open it from the left sidebar under Consent.

The dashboard has three sections:

Consent State Overview: A summary of the current consent rates across your site. Shows: total sessions, sessions with consent granted, sessions with consent denied, sessions where consent was not requested (CMP did not load).

Pre-Consent Tag Fires: The critical section. Lists every tag that fired before the user made a consent decision. These are potential violations. Each entry shows: tag name, page URL, number of pre-consent fires in the last 24 hours, and the consent category the tag belongs to (analytics, advertising, functional). A tag appearing here means your CMP is not blocking it correctly.

Per-Region Consent Rates: A table showing consent grant rates by region. Columns: region, sessions, consent rate, opt-out rate. This data helps you understand regional patterns and verify that your CMP respects regional requirements.

The Five Consent Signals TagDrishti Measures

1. CMP Load

Did the CMP script load on the page? If the CMP fails to load (network error, script blocked, deployment error), no consent is collected and all tags fire without restriction. TagDrishti flags sessions where the CMP did not load.

2. Banner Display

Did the consent banner actually appear to the user? The CMP script can load but the banner can fail to render (CSS conflict, z-index issue, JavaScript error in the banner component). If the banner does not display, the user cannot make a choice, and the CMP defaults to a preconfigured state (usually “deny all” in GDPR regions, “accept all” elsewhere). TagDrishti detects whether the banner element was visible in the viewport.

3. User Choice

What did the user choose? Accept all, reject all, or customize. TagDrishti logs the choice and the timestamp. This is not about auditing the user. It is about verifying that tags respect the choice made.

4. Tag Gating

After the user chose, did the CMP actually block the tags it was supposed to block? This is where most failures happen. The user clicks “Reject All,” the CMP records the choice, but an analytics tag fires anyway because it is miscategorized in the CMP or because its GTM trigger does not check consent state. TagDrishti compares the user’s consent choice against which tags actually fired and flags mismatches.

5. GPC Signal (Global Privacy Control)

For CCPA compliance, browsers can send a GPC signal (Sec-GPC: 1 header or navigator.globalPrivacyControl === true). California law requires sites to treat GPC as a valid opt-out of sale/sharing of personal information. TagDrishti detects the GPC signal and checks whether advertising and data-sale tags are blocked when GPC is active.

Per-Region Consent Rates: What’s Normal, What’s Alarming

Consent rate varies dramatically by region. Typical rates observed across TagDrishti-monitored sites:

  • EU (GDPR): 45–65% consent grant rate. Users are conditioned to see consent banners and many decline. Your analytics data for EU traffic will always be partial.
  • United States (non-California): 85–95% consent rate. Many sites do not show a banner to non-California US users, or use notice-only banners with implied consent.
  • California (CCPA): 70–80% consent rate. CCPA requires an opt-out mechanism, not opt-in. Higher rates than GDPR because the default is consent granted unless the user opts out.
  • India (DPDP): 75–85% consent rate. The DPDP Act is still young and consent fatigue has not set in the way it has in the EU. Expect this rate to fall 5–10 percentage points over the next two years as users become banner-aware.
  • Rest of world: 90%+ consent rate. Many regions do not have specific consent requirements, and banners are informational only.

Use this data to set expectations for analytics data completeness. If 40% of your EU traffic declines consent, your GA4 data for EU visitors covers 60% of sessions. Adjust reporting accordingly and consider Consent Mode v2 modeling to recover some of the lost signal.

This is the highest-priority compliance feature. A pre-consent tag fire means a tag executed before the user made a consent decision. In GDPR regions, this is a violation regardless of whether the user later grants consent.

Common causes of pre-consent tag fires:

  1. Tag not gated by consent in GTM: The tag trigger does not include a consent check. It fires on “All Pages” regardless of consent state. Fix: Add a consent condition to the trigger or use Google Consent Mode.
  2. CMP loads after tags: The CMP script is placed after GTM in the page source. GTM fires tags before the CMP has a chance to block them. Fix: Move the CMP script above GTM in the <head>.
  3. Tag miscategorized in CMP: An advertising tag (Facebook Pixel) is categorized as “functional” in the CMP. Functional tags are not blocked. The tag fires immediately. Fix: Recategorize the tag in the CMP settings.
  4. Hard-coded tag on page: A developer placed a tag directly in the HTML instead of through GTM or the CMP. The CMP has no control over it. Fix: Move the tag into GTM and gate it with consent.
  5. Consent Mode not configured: Google Consent Mode v2 requires specific gtag('consent', 'default', {...}) calls before any Google tags fire. If this is missing, GA4 and Google Ads tags fire with full consent by default. Fix: Add the Consent Mode default configuration before the GTM snippet.

Consent Mode v2 introduces four consent signals that every Google tag must respect:

  • analytics_storage: governs GA4
  • ad_storage: governs Google Ads conversion tracking
  • ad_user_data: new in v2, required for EU since March 2024
  • ad_personalization: new in v2, required for EU since March 2024

The audit-safe implementation pattern:

<!-- BEFORE GTM. Sets defaults. EU visitors start denied. -->
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('consent', 'default', {
    'analytics_storage': 'denied',
    'ad_storage': 'denied',
    'ad_user_data': 'denied',
    'ad_personalization': 'denied',
    'wait_for_update': 500,
    'region': ['EU', 'EEA', 'GB']
  });
  gtag('consent', 'default', {
    'analytics_storage': 'granted',
    'ad_storage': 'granted',
    'ad_user_data': 'granted',
    'ad_personalization': 'granted'
  });
</script>

After this runs, your CMP (OneTrust, Cookiebot, etc.) issues gtag('consent', 'update', {...}) calls when the user makes a choice. Google tags then respect the current consent state on every subsequent fire.

Three failure modes I see on audit:

  1. Default granted everywhere. Fastest way to a GDPR fine. Always default to denied in EU regions.
  2. No region scoping. Your non-EU users get blocked by default, hurting analytics for no compliance reason. Use the region parameter.
  3. CMP never issues the update. The default state becomes the permanent state. Verify with TagDrishti that consent updates fire on banner interaction.

Global Privacy Control for CCPA/CPRA

Global Privacy Control (GPC) is a browser-level signal that tells websites the user does not want their personal information sold or shared. California law (CCPA/CPRA) requires sites to honor this signal automatically, without requiring the user to click an opt-out link.

TagDrishti detects GPC in two ways:

  • The Sec-GPC: 1 HTTP header on page requests.
  • The navigator.globalPrivacyControl JavaScript property.

When GPC is detected, TagDrishti checks: Are advertising tags still firing? Is the Facebook Pixel still active? Are retargeting cookies being set? If any data-sale or advertising tag fires while GPC is active, the dashboard flags it as a GPC violation.

To fix GPC violations: Configure your CMP to read the GPC signal and apply the “do not sell/share” consent category automatically. Most CMPs support this (OneTrust, Cookiebot, and Osano all have GPC settings). After configuration, test in Firefox (which sends GPC by default in private browsing) or install the GPC browser extension in Chrome.

The Violation Response Playbook

  1. Immediate: Check the Pre-Consent Tag Fires panel. Identify which tags are firing before consent. Note the page URLs and session counts.
  2. Classify severity: An analytics tag (GA4) firing pre-consent is a violation but lower risk than an advertising tag (Facebook Pixel) firing pre-consent. Advertising tags that transmit personal data to third parties are highest severity.
  3. Fix the tag gating: Use the root cause list above. Most fixes involve reconfiguring the CMP or adding consent conditions to GTM triggers. Deploy the fix.
  4. Verify: Open the site in a private window. Use the CMP to deny consent. Check the TagDrishti Live Feed. No blocked tags should fire. Grant consent. Confirm tags now fire correctly.
  5. Document: Record the violation window (start time to fix time), the number of affected sessions, the tag involved, and the fix applied. This documentation is critical if a regulator asks about your compliance practices.
  6. Prevent recurrence: Set a TagDrishti alert rule for pre-consent fires. Threshold: alert if any tag fires pre-consent more than 10 times in one hour. This catches future regressions immediately.
Consent compliance is not a one-time setup. Every CMP update, GTM publish, and site deployment can break consent gating. Continuous monitoring is the only way to stay compliant, and the only documentation that holds up under regulatory scrutiny.

Verify consent compliance in real time

14-day free trial. All three regulatory regimes monitored.

Start Free Trial →
# key_takeaways

What to remember.

  • GDPR fines reach 4% of global revenue. DPDP penalties reach ₹250 crore. Enforcement volume doubled in 2025.
  • The three failures that cause 90% of violations: CMP loaded after GTM, tag miscategorized in CMP, hard-coded tag bypassing CMP.
  • Consent Mode v2 without verification is a liability. “Default granted” is a regulator’s dream.
  • GPC is now enforced in California. Your CMP must honor it automatically and you must verify it in production.
# continue_reading

Related guides.

← all guides
14-day trial · install in 5 min · first alert today

Done reading? Start watching production.

Drop the snippet in your <head>, see every tag fire and every consent state from the first pageview. 14-day free trial, no credit card.

14 days, no credit cardinstall in 5 minutescancel from dashboard