Report

State of Consent 2026

Tested configurations and sampled homepages only.

Published 3 Nov 2026. Lab days: 24, 25 and 26 Sep 2026, and 11 and 12 Oct 2026 (Real Cookie Banner Pro). Wild days: 24 and 25 Sep 2026; re-run days for CookieYes and Real Cookie Banner: 28 and 29 Sep 2026.

MethodologyDownload the aggregate data (CSV)Key figures, charts and how to citeCorrections log

Commercial interests and conflict of interest

Commercial interests (read before the results). CookieTelemetry is run by Aviad Revach, a sole trader in Israel. Until 24 September 2026 we were in the affiliate programmes of Complianz, CookieHub, Termly, Enzuzo and CookieYes. On that date we gave notice to leave all five and removed every referral link; we earned $0 in commissions from any of them. Under its terms, the CookieYes agreement ended on 24 October 2026. The Complianz programme is run by iubenda / team.blue, and iubenda is also tested here. Cookiebot and Klaro have never had a commercial relationship with us. devowl.io (Real Cookie Banner) has never had an affiliate or paid relationship with us. The Real Cookie Banner Pro licence used in our lab was provided free by devowl.io on 5 Oct 2026 as a reviewer licence; there is no other relationship. We sell a paid website monitoring service that checks for tracking before consent, currently in private pilot. Some consent-platform vendors, including some tested here, offer cookie scanning of their own. A report that finds tracking before consent may help our business. That is a conflict of interest, and you should weigh our results with it in mind. To limit it, the method and counting rules were fixed before the results (one later exception, a desktop Chrome user agent string for the Real Cookie Banner Pro runs, is explained in sections 3 and 5), every named vendor saw its results and evidence before publication, and this report contains no product offer. No vendor paid for or approved these results. devowl.io took part in the review and gave feedback on our setup. The configuration we measured is the one we set up on 5 Oct 2026; it was not changed between then and the measured runs (the same configuration fingerprint on 5, 11 and 12 Oct 2026). devowl.io was not asked to approve the results.

1. Key findings

  • Lab. 270 automated runs over 5 days on our own identical WordPress installs (Complianz, Cookiebot, CookieYes, iubenda, Klaro, Real Cookie Banner), tag insertion method A (our tags hardcoded in the theme header). One tested configuration (CookieYes config 1) showed a listed tracker request before any choice on first load, in every run on two days. After a verified "reject all", no listed tracker activity on page 2 met our counting rule for any countable configuration (CookieYes: one Google tag loader request in 1 of 6 runs, on one day only). Per vendor:
    • Complianz (free plugin, as tested): config1: no counted finding on first load (the pre-choice requests came from our own test tags and are withdrawn; section 3); config2: no counted finding on first load (the pre-choice requests came from our own test tags and are withdrawn; section 3).
    • Cookiebot (free plan, dashboard snippet unchanged; see the note on automatic blocking in 3.2): config1: no counted finding on first load (the pre-choice requests came from our own test tags and are withdrawn; section 3).
    • CookieYes (free plan, as tested): config1: counted finding on first load, requests to ad.doubleclick.net, region1.google-analytics.com, www.google.com; tracking storage _ga, _ga_LABTEST000, _gcl_au, _gcl_ls; www.facebook.com from our own test tag withdrawn (section 3).
    • iubenda (free plan, as tested): config1: no counted finding on first load.
    • Klaro (open source, as tested): config1: no counted finding on first load; config2: no counted finding on first load.
    • Real Cookie Banner (free plugin; Pro with a free reviewer licence): free plugin (config 1): not countable (the plugin's banner was never switched on in our free setup; section 3); configpro (Pro, configured, desktop Chrome user agent string): no listed tracker request or tracking storage before a choice on first load (0 of 6 runs, 11 and 12 Oct 2026), and none on page 2 after a verified reject (0 of 6 runs).
  • Wild. On sampled homepages that use one of 5 CMPs, the observed share that loaded a listed tracker request before the visitor chose ranged from 46% to 77% by CMP (Wilson 95% intervals in section 4; a site counts only if seen on both measurement days; CookieYes measured on 28 and 29 Sep 2026). Site configuration, other scripts on the page and detection errors can all contribute; this study cannot separate them from the product. Real Cookie Banner's wild figure is withdrawn: by default it accepts all services for visitors it classes as bots (a setting the plugin describes as being for bots, which it says cannot give consent), and our measurement browser is one (section 5).
  • Descriptive index. The equal-weight mean across 5 CMPs at first load is 66% ³. This is a descriptive index, not market prevalence.
  • After a reject (wild). Where the reject click could be verified, listed tracker activity on page 2 was observed on a minority of sites (section 4.2). Klaro and Real Cookie Banner could not be measured on this state.

³ Index arithmetic: (68.1% + 73.2% + 76.9% + 65.6% + 45.8%) / 5 = 65.9%, from Complianz, Cookiebot, CookieYes, iubenda and Klaro.

2. Methodology summary

  • Two separate studies, never mixed. Lab: one identical WordPress install per CMP on our own lab domain, product comparison allowed. Wild: public homepages that use each CMP, aggregates only, never a named site, never a ranking.
  • Browser. Automated Chromium (Playwright), fresh context per run, German (EU) IP. Unmodified headless Chromium: its user agent contains "HeadlessChrome" and navigator.webdriver is true (section 5, measurement browser). Exception: the Real Cookie Banner Pro runs presented a desktop Chrome user agent string, because that plugin's default bot setting accepts all services for a HeadlessChrome user agent; the headless runs on that configuration are a labelled diagnostic (section 3).
  • States. 1 first load; 2 reject all then page 2; 3 accept all then page 2; 4 return visit after reject; 5 first load with Global Privacy Control. The wild study uses states 1-3. States 2, 3 and 5 begin with the same first page load as State 1, so what is seen before their click is reported once, with State 1.
  • GPC. GPC is a browser signal; EU law does not require consent tools to act on it. State 5 is a diagnostic, not a compliance test.
  • Click verification. A click state counts only if the banner closed and the CMP's own stored consent decoded to the expected choice. Failed automation and clicks whose stored state did not update are reported separately, never merged into results.
  • Observation classes. O1: a listed third-party tracker request before a choice. O2: listed tracking storage (cookie or localStorage name) before a choice. O3: O1/O2 activity after a verified reject. Consent Mode cookieless pings, CMP consent logging and first-party collectors are counted separately and never as findings (lab: the CMP's own logging requests are removed at aggregation; wild re-run of CookieYes and Real Cookie Banner: classified as consent logging during measurement, and the CMP's own script hash is recorded per run).
  • Lists. EasyPrivacy (CC BY-SA 3.0, attribution) plus a curated list of vendor-documented endpoints for the lab tag set (GA4, Google Ads, Meta Pixel, YouTube). Each list pinned by version.
  • Configurations. Config 1 = default install via the vendor's wizard. Config 2 = the vendor's own documented setup, as far as the tested plan allows, doc version archived. No tuning by us. A vendor-supplied config is re-run as config 3. Config Pro (Real Cookie Banner only) = the vendor's onboarding steps on the Pro plugin, with a free reviewer licence.
  • Counted finding (protocol 5.5). Seen in at least 2 of 3 runs on at least 2 different days; HAR, screenshot, list versions and the SHA-256 of the CMP's loaded script stored on every supporting run; one human review with a per-item checkbox. Anything less is not a finding and is not reported as one.
  • Dates. Lab run dates are lab days in Israel time (UTC+3); run timestamps are UTC.
  • Statistics (wild). Counts, eligible denominators and Wilson 95% intervals. n < 30 suppressed; 30-99 counts only; n >= 100 share plus interval. A site is eligible when the state was verified on both days, and a hit when the rule held on both days. Pooled figures weight each CMP equally. Alphabetical order.
  • Controls. A known-good site (no tags) and a known-bad site (tags, no CMP) are run before every batch. Controls gate per lab day: 2026-09-24: gate recorded in that day's findings file (no batch summary); 2026-09-25: passed (6 of 6 control runs); 2026-09-26: passed (6 of 6 control runs); 2026-10-11: passed (6 of 6 control runs); 2026-10-12: passed (6 of 6 control runs).

Full method, published before any result: Methodology.

3. Lab results per CMP

All lab rows: free tier as tested (except the Real Cookie Banner Pro configuration, free reviewer licence), insertion method A (tags hardcoded in the theme header). "Verified" means the automation worked; it is not a verdict on the product. The tables give raw per-run counts; only the finding wording is a finding, and only after human review.

Lab: first load, runs with a listed tracker request before a choice

  • Our lab installs only; free tiers unless labelled, our tags hardcoded in the theme header (insertion method A).
  • Alphabetical, not a ranking. Relationship label under each name.
  • Real Cookie Banner config1 (free plugin): not countable (section 3.6), no bar shown. Real Cookie Banner configpro: Pro with a free reviewer licence; desktop Chrome user agent string.
  • Complianz config1, Complianz config2 and Cookiebot config1: requests came from our own test tags, withdrawn (section 8), no bar shown.
  • CookieYes, config1Former affiliate: notice given 24 Sep 2026, agreement ended 24 Oct 2026, $0 earned
    6 of 6 runs
  • iubenda, config1No direct relationship; same group (team.blue) ran the Complianz programme we left on 24 Sep 2026
    0 of 6 runs
  • Klaro, config1Never a commercial relationship
    0 of 6 runs
  • Klaro, config2Never a commercial relationship
    0 of 6 runs
  • Real Cookie Banner, configproNo affiliate or paid relationship; free Pro reviewer licence from devowl.io (5 Oct 2026)
    0 of 6 runs

Verified runs with a listed tracker request before a choice (state 1, method A; raw, out of 6).

3.1 Complianz

[Former affiliate, exited 24 Sep 2026, $0 earned] (free plugin, as tested)

Complianz: raw per-run counts by configuration and state
ConfigStateRuns (outcomes)O1 before a choice (raw)O2 before a choice (raw)O3 after a verified reject (raw)Days
config1State 1: first load, no interaction6 (verified 6)0/6 (raw 6/6) ³0/6n/a2026-09-24 2026-09-25
config1State 2: reject all, then page 26 (verified 6)0/6 (raw 6/6) before the click ¹ ³0/6 before the click ¹0/62026-09-24 2026-09-25
config1State 3: accept all, then page 26 (verified 6)0/6 (raw 6/6) before the click ¹ ³0/6 before the click ¹n/a2026-09-24 2026-09-25
config1State 4: return visit after reject6 (verified 6)n/an/an/a2026-09-24 2026-09-25
config1State 5: first load with GPC (synthetic diagnostic)6 (verified 6)0/6 (raw 6/6) ³0/6n/a2026-09-24 2026-09-25
config2State 1: first load, no interaction6 (verified 6)0/6 (raw 6/6) ³0/6 (raw 6/6) ³n/a2026-09-24 2026-09-25
config2State 2: reject all, then page 26 (verified 6)0/6 (raw 6/6) before the click ¹ ³0/6 (raw 6/6) before the click ¹ ³0/62026-09-24 2026-09-25
config2State 3: accept all, then page 26 (verified 6)0/6 (raw 6/6) before the click ¹ ³0/6 (raw 6/6) before the click ¹ ³n/a2026-09-24 2026-09-25
config2State 4: return visit after reject6 (verified 6)n/an/an/a2026-09-24 2026-09-25
config2State 5: first load with GPC (synthetic diagnostic)6 (verified 6)0/6 (raw 6/6) ³0/6 (raw 6/6) ³n/a2026-09-24 2026-09-25

¹ States 2 and 3 begin with the same first page load as State 1. Their O1/O2 counts come from that page load, before the reject or accept click: the same observation as State 1, not a separate result. Activity after a verified reject is O3.

³ Raw counts include requests or storage from our own hardcoded test tags that were withdrawn as findings on 4 Oct 2026 (see the finding text and context note below, and section 8). Where every counted item of that kind was withdrawn, the figure after withdrawal is shown first and the raw count in brackets.

Findings, one per configuration (exact wording, after human review):

  • Complianz, config 1 (vendor wizard defaults, free plugin; our tags hardcoded in the theme header): on first load, the listed tracker activity observed before any choice (requests to www.facebook.com, in 3 of 3 runs on 24 Sep and 3 of 3 runs on 25 Sep 2026) came from our own hardcoded test tags in a form the tested setup was not configured to block, and is withdrawn (see the context note). No other listed tracker request or tracking storage met the counting rule. After a verified "reject all", no listed tracker activity on page 2 met the counting rule (0 of 6 runs). On a return visit the stored consent still read as the refusal (6 of 6).
  • Complianz, config 2 (free plugin, the vendor's Consent Mode guide followed as far as the free plugin allows, analytics ID entered; our tags hardcoded in the theme header): on first load, the listed tracker activity observed before any choice (requests to region1.google-analytics.com and www.facebook.com, and the storage names _ga and _ga_LABTEST000, in 3 of 3 runs on 24 Sep and 3 of 3 runs on 25 Sep 2026) came from our own hardcoded test tags in a form the tested setup was not configured to block, and is withdrawn (see the context note). No other listed tracker request or tracking storage met the counting rule. After a verified "reject all", no listed tracker activity on page 2 met the counting rule (0 of 6 runs). On a return visit the stored consent still read as the refusal (6 of 6).

Context: The requests observed before a choice in both configurations came from our own test setup, not from a script the plugin was set up to manage, so they are not reported as findings about Complianz (corrections log, section 8). Our test page carried the Meta Pixel as a hardcoded inline snippet. In config 1 Facebook was not declared in the plugin's setup wizard, and in config 2 we entered it under a service name the plugin does not recognise. In a diagnostic on our own lab site (3 runs per variant, 4 Oct 2026), with Facebook declared, the plugin held the snippet back and no request to www.facebook.com occurred, in both configurations. In config 2, the GA4 request and the _ga and _ga_LABTEST000 cookies came from the inline Google Analytics command in our test tag, which ran once the plugin's Consent Mode integration loaded Google's tag library; with only that command removed, or with only the integration turned off, neither appeared (3 of 3 runs each). The plugin held back our hardcoded Google tag loader in every run, in both configurations. Complianz states that config 2 is not a supported setup on the free plugin (see its statement below; Complianz lists Consent Mode v2 under its Premium plans).

Statement from Complianz (received 19 October 2026)

Complianz can block any script until the visitor gives consent: automatically for the integrations and services it recognises, and manually for custom scripts, including through Google Tag Manager. As with any consent management platform, blocking depends on the site owner declaring the scripts their site uses. In this test, the pre-consent requests came from tags hardcoded in the theme header that were not declared, or were declared under a service name the plugin does not recognise. Once they were declared, Complianz held them back in every run. Google Consent Mode v2 is part of Complianz Premium and is not a supported setup on the free plugin.

3.2 Cookiebot

[Never a commercial relationship] (free plan, dashboard snippet unchanged)

Cookiebot: raw per-run counts by configuration and state
ConfigStateRuns (outcomes)O1 before a choice (raw)O2 before a choice (raw)O3 after a verified reject (raw)Days
config1State 1: first load, no interaction6 (verified 6)0/6 (raw 6/6) ³0/6n/a2026-09-25 2026-09-26
config1State 2: reject all, then page 26 (verified 6)0/6 (raw 6/6) before the click ¹ ³0/6 before the click ¹0/62026-09-25 2026-09-26
config1State 3: accept all, then page 26 (verified 6)0/6 (raw 6/6) before the click ¹ ³0/6 before the click ¹n/a2026-09-25 2026-09-26
config1State 4: return visit after reject6 (verified 6)n/an/an/a2026-09-25 2026-09-26
config1State 5: first load with GPC (synthetic diagnostic)6 (verified 6)0/6 (raw 6/6) ³0/6n/a2026-09-25 2026-09-26

¹ States 2 and 3 begin with the same first page load as State 1. Their O1/O2 counts come from that page load, before the reject or accept click: the same observation as State 1, not a separate result. Activity after a verified reject is O3.

³ Raw counts include requests or storage from our own hardcoded test tags that were withdrawn as findings on 4 Oct 2026 (see the finding text and context note below, and section 8). Where every counted item of that kind was withdrawn, the figure after withdrawal is shown first and the raw count in brackets.

Findings, one per configuration (exact wording, after human review):

  • Cookiebot, config 1 (free plan, dashboard snippet unchanged; our tags hardcoded in the theme header): on first load, the listed tracker activity observed before any choice (requests to www.facebook.com, in 3 of 3 runs on 25 Sep and 3 of 3 runs on 26 Sep 2026) came from our own hardcoded test tags in a form the tested setup was not configured to block, and is withdrawn (see the context note). No other listed tracker request or tracking storage met the counting rule. After a verified "reject all", no listed tracker activity on page 2 met the counting rule (0 of 6 runs). On a return visit the stored consent still read as the refusal (6 of 6).

Context: Cookiebot was tested on its free plan with the embed snippet from the Cookiebot dashboard, used unchanged (it includes data-blockingmode="auto"). As of 28 September 2026, Cookiebot's pricing page and terms list automatic blocking for paid plans and manual blocking for the free plan (archived: https://web.archive.org/web/20260928183316/https://www.cookiebot.com/us/pricing/ and https://web.archive.org/web/20260928183402/https://www.cookiebot.com/en/terms-of-service/), while its WordPress-plugin page describes automatic blocking on the free tier (https://web.archive.org/web/20260928183617/https://www.cookiebot.com/en/wordpress-cookie-plugin/); we asked Cookiebot which applies (no answer was received before publication; see section 7, Vendor responses). The one request observed before a choice (www.facebook.com) came from our own Meta Pixel test snippet, hardcoded in the theme header and not marked up for Cookiebot's manual blocking. The Cookiebot configuration served to our page listed the two Google tag loaders, which it held back in every run, but no Meta Pixel entry; our test Pixel sets no cookie. In a diagnostic on our own lab site (3 runs, 4 Oct 2026), with only that snippet given Cookiebot's documented marketing markup, no request to www.facebook.com occurred. We therefore do not report it as a finding about Cookiebot (corrections log, section 8). We do not say that Cookiebot fails to block.

3.3 CookieYes

[Former affiliate: notice given 24 Sep 2026, agreement ended 24 Oct 2026, $0 earned] (free plan, as tested)

CookieYes: raw per-run counts by configuration and state
ConfigStateRuns (outcomes)O1 before a choice (raw)O2 before a choice (raw)O3 after a verified reject (raw)Days
config1State 1: first load, no interaction6 (verified 6)6/6 ³6/6n/a2026-09-25 2026-09-26
config1State 2: reject all, then page 26 (verified 6)6/6 before the click ¹ ³6/6 before the click ¹1/6 ²2026-09-25 2026-09-26
config1State 3: accept all, then page 26 (verified 6)6/6 before the click ¹ ³6/6 before the click ¹n/a2026-09-25 2026-09-26
config1State 4: return visit after reject6 (verified 6)n/an/an/a2026-09-25 2026-09-26
config1State 5: first load with GPC (synthetic diagnostic)6 (verified 6)6/6 ³6/6n/a2026-09-25 2026-09-26

¹ States 2 and 3 begin with the same first page load as State 1. Their O1/O2 counts come from that page load, before the reject or accept click: the same observation as State 1, not a separate result. Activity after a verified reject is O3.

² Single observations below the repetition rule; not findings.

³ Raw counts include requests or storage from our own hardcoded test tags that were withdrawn as findings on 4 Oct 2026 (see the finding text and context note below, and section 8). Where every counted item of that kind was withdrawn, the figure after withdrawal is shown first and the raw count in brackets.

Findings, one per configuration (exact wording, after human review):

  • CookieYes, config 1 (plugin defaults, free plan; our tags hardcoded in the theme header): on first load, before any choice, requests to ad.doubleclick.net, region1.google-analytics.com and www.google.com, and the storage names _ga, _ga_LABTEST000, _gcl_au and _gcl_ls, were observed in 3 of 3 runs on 25 Sep and 3 of 3 runs on 26 Sep 2026 (the same was seen in the pre-click phase of the reject, accept and GPC tests); a request to www.facebook.com in the same runs came from our own hardcoded test tags in a form the tested setup was not configured to block, and is withdrawn (see the context note). After a verified "reject all", no listed tracker activity on page 2 met the counting rule (one Google tag loader request in 1 of 6 runs, on one day). On a return visit the stored consent still read as the refusal (6 of 6).

Context: Requests to CookieYes's own consent-log endpoint (log.cookieyes.com) are the CMP's consent logging and are excluded from the findings, per the methodology. A request to www.facebook.com was also observed in every run. It came from our own Meta Pixel inline test snippet, which was not declared to CookieYes and which CookieYes's documentation handles with a consent-event wrapper rather than the data-cookieyes attribute, so it is not reported as a finding (corrections log, section 8). The Google requests and storage names came from our hardcoded Google tag loaders, which are external scripts. The configuration CookieYes served to our page listed no scripts to block. In a diagnostic on our own lab site (3 runs, 4 Oct 2026), with CookieYes's documented data-cookieyes attribute added to those two loaders and nothing else changed, none of the Google requests or storage names occurred. Whether CookieYes's automatic blocking on the free plan should cover these loaders without that attribute, for example after a cookie scan, is open; we asked CookieYes; no answer was received before publication (see section 7, Vendor responses).

3.4 iubenda

[No direct relationship; same group (team.blue) ran the Complianz programme we left on 24 Sep 2026] (free plan, as tested)

iubenda: raw per-run counts by configuration and state
ConfigStateRuns (outcomes)O1 before a choice (raw)O2 before a choice (raw)O3 after a verified reject (raw)Days
config1State 1: first load, no interaction6 (verified 6)0/60/6n/a2026-09-25 2026-09-26
config1State 2: reject all, then page 26 (verified 6)0/6 before the click ¹0/6 before the click ¹0/62026-09-25 2026-09-26
config1State 3: accept all, then page 26 (verified 6)1/6 before the click ¹ ²0/6 before the click ¹n/a2026-09-25 2026-09-26
config1State 4: return visit after reject6 (verified 6)n/an/an/a2026-09-25 2026-09-26
config1State 5: first load with GPC (synthetic diagnostic)6 (verified 6)3/6 ²0/6n/a2026-09-25 2026-09-26

¹ States 2 and 3 begin with the same first page load as State 1. Their O1/O2 counts come from that page load, before the reject or accept click: the same observation as State 1, not a separate result. Activity after a verified reject is O3.

² Single observations below the repetition rule; not findings.

Findings, one per configuration (exact wording, after human review):

  • iubenda, config 1 (default install, free plan; our tags hardcoded in the theme header): on first load, no listed tracker request or tracking storage met the counting rule (6 of 6 runs verified; 2026-09-25, 2026-09-26). After a verified "reject all", no listed tracker activity on page 2 met the counting rule (0 of 6 runs). On a return visit the stored consent still read as the refusal (6 of 6).

Context: The isolated observations are single Google tag beacons (googletagmanager.com/a?id=... or one GA4 collect) in 1 of 3 runs on one day; none repeated on a second day.

3.5 Klaro

[Never a commercial relationship] (open source, as tested)

Klaro: raw per-run counts by configuration and state
ConfigStateRuns (outcomes)O1 before a choice (raw)O2 before a choice (raw)O3 after a verified reject (raw)Days
config1State 1: first load, no interaction6 (verified 6)0/60/6n/a2026-09-24 2026-09-25
config1State 2: reject all, then page 26 (verified 6)0/6 before the click ¹0/6 before the click ¹0/62026-09-24 2026-09-25
config1State 3: accept all, then page 26 (verified 6)0/6 before the click ¹0/6 before the click ¹n/a2026-09-24 2026-09-25
config1State 4: return visit after reject6 (verified 6)n/an/an/a2026-09-24 2026-09-25
config1State 5: first load with GPC (synthetic diagnostic)6 (verified 6)0/60/6n/a2026-09-24 2026-09-25
config2State 1: first load, no interaction6 (verified 6)0/60/6n/a2026-09-24 2026-09-25
config2State 2: reject all, then page 26 (verified 6)0/6 before the click ¹0/6 before the click ¹0/62026-09-24 2026-09-25
config2State 3: accept all, then page 26 (verified 6)0/6 before the click ¹0/6 before the click ¹n/a2026-09-24 2026-09-25
config2State 4: return visit after reject6 (verified 6)n/an/an/a2026-09-24 2026-09-25
config2State 5: first load with GPC (synthetic diagnostic)6 (verified 6)0/60/6n/a2026-09-24 2026-09-25

¹ States 2 and 3 begin with the same first page load as State 1. Their O1/O2 counts come from that page load, before the reject or accept click: the same observation as State 1, not a separate result. Activity after a verified reject is O3.

Findings, one per configuration (exact wording, after human review):

  • Klaro, config 1 (vendor-documented script wrapping, opt-in; our tags hardcoded in the theme header): on first load, no listed tracker request or tracking storage met the counting rule (6 of 6 runs verified; 2026-09-24, 2026-09-25). After a verified "reject all", no listed tracker activity on page 2 met the counting rule (0 of 6 runs). On a return visit the stored consent still read as the refusal (6 of 6).
  • Klaro, config 2 (config 1 plus a YouTube service with the documented default:true; our tags hardcoded in the theme header): on first load, no listed tracker request or tracking storage met the counting rule (6 of 6 runs verified; 2026-09-24, 2026-09-25). After a verified "reject all", no listed tracker activity on page 2 met the counting rule (0 of 6 runs). On a return visit the stored consent still read as the refusal (6 of 6).

Context: Klaro has no WordPress wizard; its documented integration wraps each tag as type="text/plain", which is what both configs use. No listed tracker request or storage was observed in any state in this window. Known gaps: no persistent reopen/withdraw control on the lab page, and the YouTube iframe is not yet wrapped.

[No affiliate or paid relationship; free Pro reviewer licence from devowl.io (5 Oct 2026)] (free plugin; Pro with a free reviewer licence)

Real Cookie Banner, free plugin (config 1): not countable. In our free install the plugin's cookie banner was never switched on: its "Cookie Banner/Dialog" setting was off in our install, and our default free setup did not switch it on. The wizard created no services that need consent, the plugin showed no banner and loaded no banner script, so our hardcoded tags ran without any consent step. That is a gap in our test, not a result about the product. The no-banner observation was also made with our headless measurement browser, which Real Cookie Banner classes as a bot by default (see the method note below).

Real Cookie Banner: raw per-run counts by configuration and state
ConfigStateRuns (outcomes)O1 before a choice (raw)O2 before a choice (raw)O3 after a verified reject (raw)Days
configproState 1: first load, no interaction6 (verified 6)0/60/6n/a2026-10-11 2026-10-12
configproState 2: reject all, then page 26 (verified 6)0/6 before the click ¹0/6 before the click ¹0/62026-10-11 2026-10-12
configproState 3: accept all, then page 26 (verified 6)0/6 before the click ¹0/6 before the click ¹n/a2026-10-11 2026-10-12
configproState 4: return visit after reject6 (verified 6)n/an/an/a2026-10-11 2026-10-12
configproState 5: first load with GPC (synthetic diagnostic)6 (verified 6)0/60/6n/a2026-10-11 2026-10-12

¹ States 2 and 3 begin with the same first page load as State 1. Their O1/O2 counts come from that page load, before the reject or accept click: the same observation as State 1, not a separate result. Activity after a verified reject is O3.

Findings, one per configuration (exact wording, after human review):

  • Real Cookie Banner, Pro configuration (Real Cookie Banner Pro 5.3.8 with a free reviewer licence, set up with the vendor's onboarding steps: scanner run, services and content blockers created from the vendor's templates for our four test tags, banner switched on, every other setting at its default; our tags hardcoded in the theme header; runs with a desktop Chrome user agent string, see the method note): on first load, no listed tracker request or tracking storage met the counting rule (6 of 6 runs verified; 2026-10-11, 2026-10-12). After a verified "reject all", no listed tracker activity on page 2 met the counting rule (0 of 6 runs). On a return visit the stored consent still read as the refusal (6 of 6).

Context: Pro configuration. Real Cookie Banner Pro 5.3.8 replaced the free plugin on the same lab site on 5 Oct 2026. The Real Cookie Banner Pro licence used in our lab was provided free by devowl.io on 5 Oct 2026 as a reviewer licence; there is no other relationship. We followed the vendor's onboarding steps: the plugin's scanner was run to completion; services for Google Analytics 4, Google Ads, Meta Pixel and YouTube were created from the vendor's templates, each with the content blocker the template offers; for the three tags already in our theme header we removed only the templates' own opt-in code, as the templates advise for tags embedded elsewhere; and the cookie banner was switched on. Every other setting stayed at its default, including Google Consent Mode (off) and "Automatically accept all services for bots" (on). One visual choice differs from the template: the YouTube placeholder is a text box rather than a preview image; the blocking rules are unchanged. The plugin's banner script hash was the same in every run. After a verified "accept all", the Google Analytics, Google Ads and Meta Pixel requests and the _ga, _ga_LABTEST000 and _gcl_au cookies appeared on page 2 in 6 of 6 runs, so the test tags worked in this setup and were not observed before the accept click. devowl.io took part in the review and gave feedback on our setup. The configuration we measured is the one we set up on 5 Oct 2026; it was not changed between then and the measured runs (the same configuration fingerprint on 5, 11 and 12 Oct 2026). devowl.io was not asked to approve the results.

Method note (diagnostic, not a result): Real Cookie Banner and automated browsers. Real Cookie Banner has a vendor setting, "Automatically accept all services for bots", on by default and found under Cookies > Settings > Consent. Our standard measurement browser, unmodified headless Chromium, has a user agent containing "HeadlessChrome", which the plugin classes as a bot. The Pro configuration runs above therefore presented a desktop Chrome user agent string for the same Chromium version; the browser was otherwise unchanged (navigator.webdriver stayed true and its client hints still named HeadlessChrome). In a separate diagnostic arm on the same days, with the default headless user agent and the same configuration, the plugin showed no banner and accepted all services: requests to region1.google-analytics.com, www.google.com, ad.doubleclick.net and www.facebook.com and the cookies _ga, _ga_LABTEST000 and _gcl_au and the localStorage entry _gcl_ls were observed on first load in 12 of 12 runs (states 1 and 5, 3 runs each, on 11 and 12 Oct 2026). This matches that vendor setting, as labelled in the plugin, applied to a browser that identifies itself as automated. What we observed is the setting working as the plugin describes it, not a malfunction. The plugin's on-screen description of the setting says that bots are not subject to the GDPR (citing Art. 1 GDPR) and technically cannot give consent, and that a banner blocking them could make them treat a site as slow; it recommends letting bots browse without consent. We do not assess that legal view here. In the plugin's client code (version 5.3.8), the setting decides who is a bot from the browser's user agent string and applies only while no consent decision is stored in that browser. Site operators can switch it off under Cookies > Settings > Consent. The diagnostic does not show what a visitor's ordinary, non-automated browser receives, and it is not counted as a finding. The other five CMPs behaved the same under both user agents (section 5, measurement browser).

4. Wild prevalence

Sampled homepages detected as using each CMP; automated browser, Germany; measurement days: 24 and 25 Sep 2026; CookieYes and Real Cookie Banner (re-run): 28 and 29 Sep 2026. Aggregates only; no site is named. Alphabetical order, not a ranking. Overlapping intervals are not a claim of equivalence.

4.1 State 1: first load, no interaction

Wild: sites with a listed tracker request before a choice (first load)

  • Mark = observed share; line = Wilson 95% interval (sampling error only).
  • Alphabetical, not a ranking. Overlapping intervals are not a claim of equivalence.
  • CookieYes: measured on 28 and 29 Sep 2026; others on 24 and 25 Sep 2026.
  • Real Cookie Banner: withdrawn (section 4.1), no point shown.
  • ComplianzFormer affiliate, exited 24 Sep 2026, $0 earned
    68% (260/382)95% interval 63% to 73%
  • CookiebotNever a commercial relationship
    73% (276/377)95% interval 69% to 77%
  • CookieYesFormer affiliate: notice given 24 Sep 2026, agreement ended 24 Oct 2026, $0 earned
    77% (249/324)95% interval 72% to 81%
  • iubendaNo direct relationship; same group (team.blue) ran the Complianz programme we left on 24 Sep 2026
    66% (248/378)95% interval 61% to 70%
  • KlaroNever a commercial relationship
    46% (164/358)95% interval 41% to 51%

Share of eligible sampled homepages (a site counts only if seen on both measurement days).

Wild, state 1: eligible sites, sites observed, share and Wilson 95% interval per CMP
CMPRelationshipEligible sites (n)Sites observedShareWilson 95% intervalTier
ComplianzFormer affiliate, exited 24 Sep 2026, $0 earned38226068%63% to 73%reported
CookiebotNever a commercial relationship37727673%69% to 77%reported
CookieYesFormer affiliate: notice given 24 Sep 2026, agreement ended 24 Oct 2026, $0 earned32424977%72% to 81%reported
iubendaNo direct relationship; same group (team.blue) ran the Complianz programme we left on 24 Sep 202637824866%61% to 70%reported
KlaroNever a commercial relationship35816446%41% to 51%reported
Real Cookie BannerNo affiliate or paid relationship; free Pro reviewer licence from devowl.io (5 Oct 2026)withdrawn (section 4.1)withdrawn

The intervals cover sampling error only, not errors in CMP detection, list matching or click automation. Ten homepages had two CMPs and are counted under both.

  • Complianz: of 382 sampled homepages detected as using it and measured on both 24 and 25 Sep 2026, 260 (68%; Wilson 95% interval 63% to 73%) made a request matching our tracker lists before any choice, on both days, in an automated browser in Germany. Site configuration, other scripts on the page and detection errors can all contribute; this study cannot separate them from the product.
  • Cookiebot: of 377 sampled homepages detected as using it and measured on both 24 and 25 Sep 2026, 276 (73%; Wilson 95% interval 69% to 77%) made a request matching our tracker lists before any choice, on both days, in an automated browser in Germany. Site configuration, other scripts on the page and detection errors can all contribute; this study cannot separate them from the product.
  • CookieYes: of 324 sampled homepages detected as using it and measured on both 28 and 29 Sep 2026, 249 (77%; Wilson 95% interval 72% to 81%) made a request matching our tracker lists before any choice, on both days, in an automated browser in Germany. Site configuration, other scripts on the page and detection errors can all contribute; this study cannot separate them from the product. A site counts only if the CMP's own script was loaded and its SHA-256 recorded in each counted run. This CookieYes figure comes from a second measurement with a corrected runner, which classifies CookieYes's own consent-logging requests as consent logging, like every CMP's; the figure from our first wild run is withdrawn and not reported.
  • iubenda: of 378 sampled homepages detected as using it and measured on both 24 and 25 Sep 2026, 248 (66%; Wilson 95% interval 61% to 70%) made a request matching our tracker lists before any choice, on both days, in an automated browser in Germany. Site configuration, other scripts on the page and detection errors can all contribute; this study cannot separate them from the product.
  • Klaro: of 358 sampled homepages detected as using it and measured on both 24 and 25 Sep 2026, 164 (46%; Wilson 95% interval 41% to 51%) made a request matching our tracker lists before any choice, on both days, in an automated browser in Germany. Site configuration, other scripts on the page and detection errors can all contribute; this study cannot separate them from the product.
  • Real Cookie Banner: withdrawn. Real Cookie Banner has a setting, on by default, that accepts all services without showing a banner when the visitor's browser looks like a bot. Our measurement browser is headless Chromium, whose user agent contains "HeadlessChrome", and Real Cookie Banner classes it as a bot. On our own lab site, the same configuration showed its banner and loaded no tracker when the browser presented a desktop Chrome user agent, and accepted everything with our measurement browser. Our stored wild data cannot tell which sites had the setting on, so we do not report a figure. The plugin describes the setting as being for bots, which it says cannot give consent; it applies only while no consent decision is stored in the browser, and what we observed is the setting working as described, not a malfunction (method note in section 3).

4.2 State 2: reject all, then page 2

Wild: sites with listed tracker activity on page 2 after a verified reject

  • Mark = observed share; line = Wilson 95% interval (sampling error only).
  • Verified clicks depend on the banner's design, so these subsets differ in size and make-up between CMPs (section 4.3) and should not be compared as a ranking.
  • Alphabetical, not a ranking.
  • ComplianzFormer affiliate, exited 24 Sep 2026, $0 earned
    11% (31/284)95% interval 8% to 15%
  • CookiebotNever a commercial relationship
    26% (58/225)95% interval 21% to 32%
  • CookieYesFormer affiliate: notice given 24 Sep 2026, agreement ended 24 Oct 2026, $0 earned
    15% (28/182)95% interval 11% to 21%
  • iubendaNo direct relationship; same group (team.blue) ran the Complianz programme we left on 24 Sep 2026
    31% (38/124)95% interval 23% to 39%
  • KlaroNever a commercial relationship
    not measured (0 sites verified on both days)
  • Real Cookie BannerNo affiliate or paid relationship; free Pro reviewer licence from devowl.io (5 Oct 2026)
    not measured (first load only; no click attempted)

Share of sampled homepages where the reject click was verified on both days.

Wild, state 2: eligible sites, sites observed, share and Wilson 95% interval per CMP
CMPRelationshipEligible sites (n)Sites observedShareWilson 95% intervalTier
ComplianzFormer affiliate, exited 24 Sep 2026, $0 earned2843111%8% to 15%reported
CookiebotNever a commercial relationship2255826%21% to 32%reported
CookieYesFormer affiliate: notice given 24 Sep 2026, agreement ended 24 Oct 2026, $0 earned1822815%11% to 21%reported
iubendaNo direct relationship; same group (team.blue) ran the Complianz programme we left on 24 Sep 20261243831%23% to 39%reported
KlaroNever a commercial relationship0 sites verified on both daysnot measured
Real Cookie BannerNo affiliate or paid relationship; free Pro reviewer licence from devowl.io (5 Oct 2026)first load only; no click attemptednot measured
  • Complianz: of the 284 sampled homepages where our automated reject click could be verified on both days, 31 (11%; interval 8% to 15%) showed listed tracker activity on the next page. Verified clicks depend on the banner's design, so these subsets differ in size and make-up between CMPs (section 4.3) and should not be compared as a ranking.
  • Cookiebot: of the 225 sampled homepages where our automated reject click could be verified on both days, 58 (26%; interval 21% to 32%) showed listed tracker activity on the next page. Verified clicks depend on the banner's design, so these subsets differ in size and make-up between CMPs (section 4.3) and should not be compared as a ranking.
  • CookieYes: of the 182 sampled homepages where our automated reject click could be verified on both days, 28 (15%; interval 11% to 21%) showed listed tracker activity on the next page. Verified clicks depend on the banner's design, so these subsets differ in size and make-up between CMPs (section 4.3) and should not be compared as a ranking. A site counts only if the CMP's own script was loaded and its SHA-256 recorded in each counted run.
  • iubenda: of the 124 sampled homepages where our automated reject click could be verified on both days, 38 (31%; interval 23% to 39%) showed listed tracker activity on the next page. Verified clicks depend on the banner's design, so these subsets differ in size and make-up between CMPs (section 4.3) and should not be compared as a ranking.

4.3 Measurement validity (wild)

Click-state outcomes per CMP, both days pooled (one row per origin and day). Only "verified" runs enter the tables above.

Click-state outcomes per CMP and state
CMPStateOutcomes
Complianzaccept_then_page2automation_failed 135, clicked_state_not_updated 8, verified 624
Complianzfirst_loadautomation_failed 2, verified 765
Complianzreject_then_page2automation_failed 193, clicked_state_not_updated 4, verified 570
Cookiebotaccept_then_page2automation_failed 249, verified 511
Cookiebotfirst_loadautomation_failed 4, verified 756
Cookiebotreject_then_page2automation_failed 307, verified 453
CookieYesaccept_then_page2automation_failed 302, clicked_state_not_updated 18, verified 440
CookieYesfirst_loadautomation_failed 1, verified 759
CookieYesreject_then_page2automation_failed 375, clicked_state_not_updated 14, verified 371
iubendaaccept_then_page2automation_failed 214, clicked_state_not_updated 271, verified 281
iubendafirst_loadautomation_failed 6, verified 760
iubendareject_then_page2automation_failed 305, clicked_state_not_updated 211, verified 250
Klaroaccept_then_page2automation_failed 485, clicked_state_not_updated 241
Klarofirst_loadautomation_failed 4, verified 722
Klaroreject_then_page2automation_failed 503, clicked_state_not_updated 223
Real Cookie Banneraccept_then_page2automation_failed 782
Real Cookie Bannerfirst_loadautomation_failed 4, verified 778
Real Cookie Bannerreject_then_page2automation_failed 782
  • 10 homepages appear in two CMP samples (two CMPs detected) and are counted under each.
  • CookieYes first_load: 108 verified runs in which the CMP's own script was not loaded or not hashed (not counted; the CMP may no longer be on the page).
  • CookieYes reject_then_page2: 6 verified runs in which the CMP's own script was not loaded or not hashed (not counted; the CMP may no longer be on the page).
  • Real Cookie Banner first_load: 56 verified runs in which the CMP's own script was not loaded or not hashed (not counted; the CMP may no longer be on the page).
  • Complianz first_load: 2 sites observed on one day only (uncertain, not counted).
  • Complianz reject_then_page2: 4 sites observed on one day only (uncertain, not counted).
  • Cookiebot first_load: 3 sites observed on one day only (uncertain, not counted).
  • Cookiebot reject_then_page2: 7 sites observed on one day only (uncertain, not counted).
  • CookieYes first_load: 2 sites observed on one day only (uncertain, not counted).
  • CookieYes reject_then_page2: 7 sites observed on one day only (uncertain, not counted).
  • iubenda first_load: 6 sites observed on one day only (uncertain, not counted).
  • iubenda reject_then_page2: 2 sites observed on one day only (uncertain, not counted).
  • Klaro first_load: 3 sites observed on one day only (uncertain, not counted).
  • 24 Sep 2026 (day A): all 1600 sampled (site, CMP) pairs measured.
  • 25 Sep 2026 (day B): 1505 of 1508 sampled (site, CMP) pairs measured; 3 not measured (runner hang on the last sites; the run was stopped on 27 Sep 2026): Klaro 3.
  • 28 Sep 2026 (CookieYes re-run, day A): all 400 sampled (site, CMP) pairs measured.
  • 29 Sep 2026 (CookieYes re-run, day B): all 381 sampled (site, CMP) pairs measured.
  • 28 Sep 2026 (Real Cookie Banner re-run, day A): all 400 sampled (site, CMP) pairs measured.
  • 29 Sep 2026 (Real Cookie Banner re-run, day B): all 391 sampled (site, CMP) pairs measured.

4.4 Day A vs day B agreement (wild)

Sites whose state was verified on both days. "Agree" = the same verdict (tracker seen / not seen) on both days. Kappa corrects for chance agreement. Real Cookie Banner: withdrawn (section 4.1).

Agreement between the two measurement days per CMP and state
CMPStateDaysVerified both daysHit bothNo hit bothHit day A onlyHit day B onlyAgreementCohen's kappa
Complianzfirst_load24 and 25 Sep 20263822601201199%0.99
Complianzreject_then_page224 and 25 Sep 2026284312493199%0.93
Cookiebotfirst_load24 and 25 Sep 2026377276982199%0.98
Cookiebotreject_then_page224 and 25 Sep 2026225581604397%0.92
CookieYesfirst_load28 and 29 Sep 2026324249731199%0.98
CookieYesreject_then_page228 and 29 Sep 2026182281473496%0.87
iubendafirst_load24 and 25 Sep 20263782481244298%0.96
iubendareject_then_page224 and 25 Sep 202612438840298%0.96
Klarofirst_load24 and 25 Sep 20263581641911299%0.98

5. Limitations

  • Free tiers as tested, except Real Cookie Banner, which was also tested on Pro with a free reviewer licence (section 3). Some features that affect blocking are paid and were not tested: Complianz lists Consent Mode v2 under its Premium plans. For Cookiebot's automatic blocking, see the note in section 3.2.
  • Lab results use one insertion method (A, tags hardcoded in the theme header). Tag Manager (B) and plugin-inserted tags (C) may behave differently.
  • Day-1 lab manifests (Complianz, Klaro, Real Cookie Banner free) were classified with the curated list only; days 2-3 also used EasyPrivacy. The one visible effect was on the free Real Cookie Banner install, which is not countable (section 3). Day-1 CMP script hashes were backfilled from the stored HARs.
  • Real Cookie Banner, free plugin (config 1), is not countable in the lab: its banner was never switched on in our default free setup, so it showed no banner and loaded no banner script (section 3). The Pro configuration was measured separately on 11 and 12 Oct 2026, two to three weeks after the other lab days, with a desktop Chrome user agent string; see the method note in section 3.
  • Our first wild run classified with no CMP-domain exclusion. For CookieYes this may have counted its own consent-logging request as a tracker, so that figure was withdrawn. CookieYes and Real Cookie Banner were measured on 28 and 29 Sep 2026 with a corrected runner that classifies each CMP's own domains as consent logging. The other CMPs' figures come from the first run; the logging endpoints we checked for them are not on EasyPrivacy. In the lab, the CMP's own logging requests are removed at aggregation.
  • Wild CMP detection comes from discovery (HTTP Archive / homepage signatures); presence of the CMP on the page at measurement time was not re-verified per site, except in the CookieYes and Real Cookie Banner re-run, where the CMP's own script had to be loaded. Detection error is possible and is being sampled manually.
  • Wild reject/accept states depend on the lab-verified selectors matching each site's banner; many sites use customised banners, so click-state coverage varies widely by CMP (section 4.3).
  • The first wild run (Complianz, Cookiebot, iubenda, Klaro) did not store the CMP script hash; those wild figures are aggregates only (protocol 5.5 applies to named lab findings). In the CookieYes and Real Cookie Banner re-run a site counts only if the CMP's own script was loaded and hashed in each counted run; 170 verified runs without it were left out (section 4.3).
  • Measurement browser. All lab and wild page loads used unmodified headless Chromium 151 driven by Playwright, except that the Real Cookie Banner Pro runs presented a desktop Chrome user agent string (below). Its user agent contains "HeadlessChrome", navigator.webdriver is true, and its client hints name HeadlessChrome. Some CMPs change behaviour for browsers they class as bots. We checked the client code of each CMP in this study and ran each lab site with three browser identities (default, a crawler user agent, and a desktop Chrome user agent with the automation flag hidden). Complianz, Cookiebot, CookieYes, iubenda and Klaro behaved identically with our measurement browser and with the desktop Chrome identity. Real Cookie Banner did not (section 4.1 and the method note in section 3), so its Pro configuration was measured with a desktop Chrome user agent string only (navigator.webdriver and the client hints unchanged), and the headless runs are reported only as a diagnostic. A site's own scripts may also treat an automated browser differently; we cannot measure that, and it is one of the reasons the wild figures describe what an automated browser saw, not what every visitor sees.
  • Homepages only, one automated browser profile from Germany. Results describe sampled homepages, not EU-wide prevalence or product causation.
  • "None observed in this window" is not proof of blocking or of Consent Mode basic mode. This applies to every CMP and configuration in this report: a lab result describes the runs we made under the stated conditions and does not show that a product always blocks.
  • Hardcoded inline tags versus CMP blocking methods. Our method-A test tags are hardcoded in the theme header: an external Google tag loader plus an inline snippet (the GA4 and Google Ads gtag('config') commands, and the Meta Pixel initialisation, which itself loads the Pixel library). CMPs block in different ways: by rewriting known scripts for the services declared in their setup (Complianz), by blocking scripts their own scan or settings have identified (Cookiebot, CookieYes), or by markup the site owner adds (Cookiebot's free plan, CookieYes's attribute, Klaro). An inline snippet the CMP was not told about, or that its documented method does not cover, can run regardless of the CMP, and an inline command can also act through a tag library that the CMP itself loads (Complianz config 2). We did not mark up any tag for any CMP's manual method, except for Klaro, whose only documented method is markup. After auditing every counted lab finding on 4 Oct 2026, we withdrew the observations that came from such snippets (section 8); a lab finding is reported only where the request came from a script that the CMP's documented method for the tested setup covers, and, where that method depends on a documented prerequisite such as a completed scan, only after we have checked that it was met. The wild study does not use our test tags, but real sites can carry the same pattern, and the wild figures cannot separate it from the product.
  • Complianz configuration switches were written directly to the plugin's settings, which bypasses its 30-minute blocked-script cache; this affected no reported result.
  • Real Cookie Banner (wild): its figure is withdrawn (section 4.1 and the measurement-browser item above). It was measured on first load only; at the time there were no lab-verified selectors for its banner, so no click state was measured. The lab Pro result does not restore it. Many installs serve its script from an obfuscated path; the script was identified by its element id.
  • Wild day B (25 Sep 2026): 3 of 1508 sampled (site, CMP) pairs were not measured (runner hang on the last sites; the run was stopped on 27 Sep 2026). They are absent from both-day denominators, not counted as no-hit.

6. Independence note

  • Our former affiliate relationships and our paid monitoring service are described at the top of this report. Rows carry a relationship label. The report contains no affiliate links and no offer for our own service.
  • Selection rule and methodology were fixed before results. A former affiliate's adverse result is published the same way.
  • No vendor paid for or approved these results. Any free test licence a vendor grants is disclosed here.
  • Reviewer licence: The Real Cookie Banner Pro licence used in our lab was provided free by devowl.io on 5 Oct 2026 as a reviewer licence; there is no other relationship. devowl.io took part in the review and gave feedback on our setup. The configuration we measured is the one we set up on 5 Oct 2026; it was not changed between then and the measured runs (the same configuration fingerprint on 5, 11 and 12 Oct 2026). devowl.io was not asked to approve the results.
  • Tests measure specified browser behaviour, not GDPR or ePrivacy compliance. List matches identify candidate tracking activity; names, domains and CNAMEs alone do not establish purpose.

Required by the CookieYes affiliate terms (§6.3) while that agreement was in force (it ended on 24 October 2026); kept unchanged:

Disclaimer: This content is for informational and educational purposes only and does not constitute legal advice. CookieYes is a technology platform that assists with privacy compliance. However, it is the sole responsibility of each user to ensure compliance with applicable laws and regulations. Consult a qualified legal professional for advice specific to your situation.

See also our independence statement.

7. Vendor responses

Each named vendor received the passages, table rows, charts and labels that name it, with its evidence, at least 10 business days before publication, an offer to re-run with a configuration it supplies, and space for a reply of up to 200 words, published unedited next to its results (we omit only text that is against the law or concerns third parties, and tell the vendor first). Edits made after that material was sent did not change any vendor's results: they record a vendor's statement or that none was received, or add explanation. No veto. Silence is not agreement.

  • Complianz [Former affiliate, exited 24 Sep 2026, $0 earned]

    Statement from Complianz (received 19 October 2026)

    Complianz can block any script until the visitor gives consent: automatically for the integrations and services it recognises, and manually for custom scripts, including through Google Tag Manager. As with any consent management platform, blocking depends on the site owner declaring the scripts their site uses. In this test, the pre-consent requests came from tags hardcoded in the theme header that were not declared, or were declared under a service name the plugin does not recognise. Once they were declared, Complianz held them back in every run. Google Consent Mode v2 is part of Complianz Premium and is not a supported setup on the free plugin.

  • Cookiebot [Never a commercial relationship]

    Cookiebot received its results and evidence on 4 October 2026 and was invited to send a statement by 19 October 2026. No statement was received.

  • CookieYes [Former affiliate: notice given 24 Sep 2026, agreement ended 24 Oct 2026, $0 earned]

    CookieYes received its results and evidence on 4 October 2026 and was invited to send a statement by 19 October 2026. No statement was received.

  • iubenda [No direct relationship; same group (team.blue) ran the Complianz programme we left on 24 Sep 2026]

    iubenda received its results and evidence on 4 October 2026 and was invited to send a statement by 16 October 2026. No statement was received.

  • Klaro [Never a commercial relationship]

    Klaro received its results and evidence on 4 October 2026 and was invited to send a statement by 16 October 2026. No statement was received.

  • Real Cookie Banner [No affiliate or paid relationship; free Pro reviewer licence from devowl.io (5 Oct 2026)]

    Real Cookie Banner received its results and evidence on 13 October 2026 and was invited to send a statement by 23 October 2026. No statement was received.

8. Corrections log

  • 4 Oct 2026, before publication: a diagnostic on our own lab site showed that the Complianz config 2 GA4 request and _ga cookies came from our own hardcoded test tag. We then audited every counted lab finding for the same kind of test-setup effect and withdrew, as findings: Complianz config 1 (www.facebook.com); Complianz config 2 (_ga, _ga_LABTEST000, region1.google-analytics.com, www.facebook.com); Cookiebot config 1 (www.facebook.com); CookieYes config 1 (www.facebook.com). In each case the request or storage came from our own hardcoded test tags in a form the tested setup was not configured to block, not from a script that the CMP's documented method for that setup covers (see each context note in section 3 and the limitation in section 5). The diagnostic run data is available on request. Each affected vendor is told of the correction and receives a new reply period.
  • 5 Oct 2026, before publication: Real Cookie Banner's default "accept all services for bots" setting treats our measurement browser as a bot. Its wild figure is withdrawn and the index is recomputed over 5 CMPs (66%). The other five CMPs were checked in code and in a lab A/B and are not affected.
  • 12 Oct 2026, before publication: the Real Cookie Banner lab section said the free plugin "did not load" in our setup. That was inaccurate: the plugin was installed, but its cookie banner setting was off in our install and was never switched on in our default free setup, so it showed no banner and our test tags ran without a consent step. The free configuration stays not countable. We added a configured test of Real Cookie Banner Pro (free reviewer licence from devowl.io, 5 Oct 2026), set up with the vendor's onboarding steps and measured on 11 and 12 Oct 2026; its result is in section 3, with a method note on the plugin's default bot setting. The Real Cookie Banner wild figure stays withdrawn. devowl.io receives the configured result and a new reply period.

To report an error, write to agency@cookietelemetry.com. Corrections are dated and listed here.

Data download

state-of-consent-2026-aggregates.csv: the lab counts (verified-run counts per configuration and state after the withdrawals of 4 Oct 2026, with the raw count before them) and the wild aggregates (eligible sites, hits, share and Wilson 95% interval per CMP and state), with the relationship label on every row. Aggregates only; no site is named. Real Cookie Banner's lab install is listed as not countable, without counts. Licensed CC BY 4.0, like the charts: see key figures, charts and how to cite.