Spain's National Commission on Markets and Competition — 217 requests, eight hosts, 25 outbound requests. A consent-management mechanism is installed on the site, including a submodule specifically designed to hold Google Analytics back until the user's choice. The counter loads around it: the tag is baked into the homepage markup and fires at the 368th millisecond, 21 ms before the submodule itself. A GA4 request carrying a client identifier and device parameters follows at the 5709th. Among four external recipients, the documents name only one.
Request timeline
Declared versus actual
Transfer timings
gtag/js for the GA4 stream, parsed from the document's markup, line 110.
Accessibility-widget script with a site token. Served via Cloudflare.
The Noto Sans font stylesheet.
Font Awesome icons, 4 requests, served via Cloudflare.
Font glyphs from Google's servers.
POST api/widget-settings, site address in the form body.
GA4 page_view: client identifier, screen resolution, browser client hints, language, page address and title.
Detected trackers
- Google Analytics 4 (G-GJ0T3SEQ50) via www.googletagmanager.com and region1.analytics.google.com
- Skynet Technologies / All in One Accessibility (www.skynettechnologies.com, freeada.skynettechnologies.com) — an accessibility widget, 17 requests
- Font Awesome (use.fontawesome.com) — an icon set, 4 requests
- Google Fonts (fonts.googleapis.com, fonts.gstatic.com) — the Noto Sans font
Indicators of GDPR non-compliance
- ePrivacy — LSSI, Law 34/2002, Art. 22.2 (in conjunction with GDPR Art. 6(1)(a))The site has a consent-management mechanism installed and configured: a Drupal 'cookies' module with the cookiesjsr library and a separate cookies_ga submodule, whose specific purpose is to prevent Google Analytics from loading before the user's choice. Loading of the counter bypasses this mechanism. The tag www.googletagmanager.com/gtag/js?id=G-GJ0T3SEQ50 is parsed by the browser directly from the main document's markup, line 110, and is requested at +368 ms — in the same millisecond window as the banner's own preloader, and 21 ms before the cookies_ga submodule loads, the very submodule that was supposed to manage this loading. The GA4 request carrying a client identifier goes out at +5709 ms. The site itself classifies analytics cookies under the 'cookies de análisis' category, which requires prior consent.
- GDPR Art. 5(1)(a) — transparencyThe data protection information document answers the question of recipients unambiguously: no transfer of data to any third party is foreseen, except in cases of legal obligation. The cookie policy opens with a statement that the commission collects the user's consent for the listed purposes. In fact, consent is not requested, and the GA4 request transmits to Google a client identifier, screen resolution of 1536x864, the Windows platform, x86/64 architecture, a list of browser versions, interface language, page address, and page title.
- GDPR Art. 13(1)(e) — disclosure of recipientsThe section on third-party cookies names one service — Google Analytics. In the scan, visitor data also goes to Skynet Technologies (17 requests across two domains, including a request to freeada.skynettechnologies.com/api/widget-settings with the site address in the form body), to Font Awesome via Cloudflare infrastructure, and to Google Fonts, from which the Noto Sans font loads. None of these recipients is named in the commission's documents.
- GDPR Art. 12(1) — accessibility of the withdrawal mechanismThe 'Desactivar las cookies' section offers a single management method — browser settings — with a promise to provide links to popular browsers; the list of links itself is absent from the text. The document says nothing about the consent-management panel installed on the site, which allows the choice to be withdrawn. A reader of the policy is directed to browser settings instead of the tool that already sits on the page.
Context
cnmc.es is the website of the National Commission on Markets and Competition, Spain’s independent administrative body. The commission oversees competition and regulates energy, electronic communications, the audiovisual sector, transport, and postal services; its remit also covers digital markets. The data controller is the commission itself, Madrid, Calle Alcalá 47. The Data Protection Officer is dpd@cnmc.es. The platform is Drupal 10.6.9.
Scan: 217 requests, eight hosts. One hundred ninety-two requests to the site’s own domain, 25 outbound. Capture duration: 5.7 seconds; full page load completed at 927 ms. Captured on May 31, 2026, on the homepage.
Two documents describe the processing: the site’s cookie policy and a data protection information document.
Who receives data directly
Google, Skynet Technologies, Font Awesome.
Declared versus actual
The discrepancy here has an unusual character. Typically, the violation consists of there being no consent mechanism at all. Here one exists, is properly configured, and even has a dedicated add-on — yet it is bypassed at the markup level.
First: the tool is installed but doesn’t work. The site runs a Drupal cookies module with the cookiesjsr library, along with a separate cookies_ga submodule. The existence of this submodule is telling: it is written for exactly one task — preventing Google Analytics from loading until the user makes a choice. Someone at the commission deliberately selected and installed the correct tool.
Here’s how it plays out. At +351 ms, the consent panel’s styling arrives; at +367 ms, its configuration; at +368 ms, its preloader. In that same millisecond window, at +368 ms, a request goes out to Google’s tag manager. The capture directly identifies the initiator: parsing of the main document’s markup, line 110. The tag is written directly into the HTML and executes during its parsing — the submodule cannot, by definition, manage it. And the submodule cookies_ga.js itself only arrives at +389 ms, twenty-one milliseconds after the very thing it’s supposed to manage.
The result: the consent panel renders, the user sees a choice, but by that point the counter has already loaded and does not depend on that choice. At +5709 ms, an event goes out to Google with a client identifier, screen resolution of 1536x864, the Windows platform, bitness and architecture, a full list of browser versions, interface language, page address, and page title. Screen resolution and the set of browser client hints are fingerprinting parameters.
Second: an outright denial of transfer. The data protection information document answers the question of recipients briefly and unambiguously: no transfer of data to any third party is foreseen, except in cases of legal obligation. The cookie policy, meanwhile, opens with a statement that the commission collects the user’s consent for the described purposes. The scan disproves both claims: consent is not requested before the transfer, and the transfer occurs.
Third: three undisclosed recipients. The section on third-party cookies names only Google Analytics. In fact, the page runs the Skynet Technologies accessibility widget — seventeen requests across two domains, including a POST to the internal endpoint freeada.skynettechnologies.com with the site address in the form body, and a site token in the script addresses. Font Awesome icons load from an external host via Cloudflare infrastructure. The Noto Sans font is pulled directly from Google’s servers — a separate transmission of IP address and referrer, unrelated to either analytics or the widget.
Fourth: the policy doesn’t know about its own panel. The section on disabling cookies directs the user to browser settings and promises to provide links to popular browsers, but the list of links itself is absent from the text. The document says not a word about the fact that a consent-management panel is installed on the site, where the choice can be changed. A reader of the policy is sent off to configure their browser instead of the tool that already exists on the page.
What the Content Security Policy header reveals
The commission sets its own Content-Security-Policy header — 1895 characters, with separate rules for scripts, frames, images, fonts, styles, and connections. It shows what is permitted to run on the pages in principle.
Permitted, beyond what was observed: Cloudflare Turnstile verification, the cdnjs, unpkg, and jsDelivr script-delivery networks, Google Translate in two address variants, reCAPTCHA, YouTube, Google Docs, Power BI, the Bootswatch theme, and a second Skynet site in the .us zone. Separately, the connection rule permits stats.g.doubleclick.net — a Google advertising node. It did not fire in this scan, but permission for it has been granted.
Consent: what is proven and what is not
Proven: the consent mechanism is installed and loads. The styling, configuration, and preloader for the cookiesjsr library arrive from the site’s own domain in the +351…+368 ms interval, along with the dedicated cookies_ga submodule at +389 ms.
Proven: the counter’s loading is not managed by this mechanism. The initiator of the request to the tag manager is recorded in the capture as parsing of the main document’s markup, with a line number given. The tag sits directly in the HTML, executes during parsing, and has no condition preceding it. The submodule intended to manage it loads after it. This claim is verified by the order of requests and does not depend on whether anyone clicked a button in the panel: whatever choice was made, the result would have been the same.
Proven: no choice was made in the panel during this session. Across all 217 requests, there is not a single one recording a user decision.
Proven: the identifier was recorded on the first visit to the site. The client identifier is transmitted to Google in the request body, meaning it exists on the device. The timestamp embedded within it points to 09:39:17 UTC — four seconds before the capture’s first request, and first-session markers in the same request confirm this is the start of the visit.
Not proven and not required: whether the panel was displayed on screen. Response bodies have been stripped from the published file, so the panel’s visual state cannot be reconstructed from it. This is immaterial to the conclusion: the counter’s loading does not depend on the panel regardless.
Separately: the browser sent a DNT: 1 header during the capture. This had no effect on the composition or volume of the transmissions. The GA4 request carries markers of non-personalized advertising and Digital Markets Act mode — the advertising component is limited; this does not affect the analytics transmission carrying the client identifier.
Limits of observation
The scan covers a single page — the homepage — in a single state. The observation records browser behavior, not the internal workings of the services: server-side processing, contractual relationships with recipients, and the services’ own settings on their owners’ side are not verified by a browser-based scan. Legal assessment falls to the competent authority — the Spanish Data Protection Agency (Agencia Española de Protección de Datos).
The file is published stripped of personal data: Cookie headers in requests, response bodies, the page title, the accessibility widget’s site token, the site address in the internal request body, and the analytics session identifier have been removed. The set of cookies on a device therefore cannot be reconstructed from the published file, and no conclusion in this analysis relies on it. The fact that the analytics identifier was recorded rests on something else and is verified directly: the identifier was transmitted to Google in the request body, visible in the file.
The list of recipients permitted by the Content Security Policy header is an inventory of what’s possible, not what was observed. The DoubleClick advertising node did not fire in this scan.
Identification of services relies on domains, address patterns, and response headers: Google — via googletagmanager.com, analytics.google.com, fonts.googleapis.com, and fonts.gstatic.com; Skynet Technologies — via skynettechnologies.com, the script names of the All in One Accessibility suite, and the internal path api/widget-settings; Font Awesome — via use.fontawesome.com. The consent mechanism was identified via the paths of the Drupal cookies module and the cookiesjsr library, with its version indicated.
Conclusion
Spain’s markets regulator installed the right tool on its site — a consent-management panel with a dedicated add-on written specifically to hold Google Analytics back until the user’s choice. And it bypassed that tool with its own markup: the counter tag is written into the homepage HTML and fires at the 368th millisecond, twenty-one milliseconds before the very add-on that was supposed to manage it loads. Five seconds later, a client identifier goes out to Google along with screen resolution, platform, a list of browser versions, and interface language.
The commission’s information document, meanwhile, answers the question of data recipients with a denial: no transfer to third parties is foreseen. The cookie policy states that consent is collected. Among four external recipients, only Google Analytics is named — the accessibility widget with seventeen requests, the external icon set, and the font from Google’s servers go unmentioned. The section on disabling cookies directs the reader to browser settings and doesn’t mention that the site has a panel where the choice can be changed, and the promised list of browser links is absent from the text.
For a body that itself supervises markets and enforces digital-regulation rules, the gap between the tool that was installed and its actual bypass indicates non-compliance with the requirements on consent and transparency. Remediation: remove the counter tag from the markup and place its loading under the control of the already-installed submodule; list all recipients in the policy along with the fields transmitted; describe the consent-management panel and the method for withdrawing consent, filling in the missing list of links; move fonts and icons onto the site’s own infrastructure; and either remove the claim of no foreseen transfers from the information document or bring practice into line with it.
How to verify: download the file and compute its checksum — sha256sum file.har (Linux, macOS) or certutil -hashfile file.har SHA256 (Windows); it must match the one shown. The conclusions apply to the scope of this measurement — see the limitations of the method.
fcbadcec25c147b111f0ba307dfa0dcc445870e2f7487dcf606c148d4262ce26Want a response from the company about this audit? → Open the tool
Fill in once — it will be inserted into every letter below:
All fields are required to print the document — this is a formal requirement of the letter itself (the particulars of an official submission), not data collection: nothing is sent or saved anywhere, it all stays in your browser and disappears when you close the page. See the methodology for details.
RIA DigiDoc — phone · Smart-ID / Mobile-ID
Send this letter directly to the company first — before contacting the regulator it has the right to respond (GDPR Art. 12(3) — 30 days).
Тема: Запрос доступа к персональным данным (ст. 15 GDPR) — cnmc.es Кому: [укажите адрес компании — DPO / поддержка / юридический отдел] От: [Ваше имя], [контактный email] Прошу предоставить доступ к моим персональным данным, обрабатываемым в связи с использованием сайта cnmc.es. 1. Категории данных и цели обработки (ст. 15(1)(a)-(c)) На основании независимого технического анализа сайта прошу подтвердить и подробно раскрыть следующие категории обработки: 1) На сайте установлен и настроен механизм управления согласием: модуль Drupal cookies с библиотекой cookiesjsr и отдельным подмодулем cookies_ga, назначение которого — не допускать загрузку Google Analytics до выбора пользователя. Загрузка счётчика этот механизм обходит. Тег www.googletagmanager.com/gtag/js?id=G-GJ0T3SEQ50 разобран браузером напрямую из разметки главного документа, строка 110, и запрошен на +368 мс — в тот же миллисекундный интервал, что и предзагрузчик самого баннера, и на 21 мс раньше, чем загружается подмодуль cookies_ga, который должен был бы этой загрузкой управлять. Обращение GA4 с идентификатором клиента уходит на +5709 мс. Аналитические cookie сайт сам относит к категории «cookies de análisis», требующей предварительного согласия. 2) Информационный документ о защите данных отвечает на вопрос о получателях однозначно: передача данных каким-либо третьим лицам не предусмотрена, кроме случаев правовой обязанности. Политика cookie открывается заявлением, что для перечисленных целей комиссия собирает согласие пользователя. Фактически согласие не запрашивается, а обращение GA4 передаёт Google идентификатор клиента, разрешение экрана 1536x864, платформу Windows, архитектуру x86/64, перечень версий браузера, язык интерфейса, адрес и заголовок страницы. 3) Раздел о сторонних cookie называет один сервис — Google Analytics. В замере данные посетителя получают также Skynet Technologies (17 запросов на двух доменах, включая обращение к freeada.skynettechnologies.com/api/widget-settings с адресом сайта в теле формы), Font Awesome через инфраструктуру Cloudflare и Google Fonts, откуда подгружается шрифт Noto Sans. Ни один из этих получателей в документах комиссии не назван. 4) Раздел «Desactivar las cookies» предлагает единственный способ управления — настройки браузера, с обещанием привести ссылки на популярные браузеры; сам перечень ссылок в тексте отсутствует. О том, что на сайте установлена панель управления согласием с возможностью отозвать выбор, документ не сообщает. Пользователь, читающий политику, направляется в настройки браузера вместо инструмента, который уже стоит на странице. 2. Получатели, сроки хранения и передача за пределы ЕЭЗ (ст. 15(1)(c)-(d), 46) Прошу также указать полный список третьих лиц-получателей, применимые сроки хранения по каждой категории и правовые основания передачи данных за пределы ЕЭЗ, если таковая происходит. Полный технический разбор с доказательствами (сохранённый сетевой журнал, контрольная сумма SHA-256) опубликован по адресу: https://gdpru.eu/en/audits/es-cnmc-es/ 3. Автоматизированная обработка и профилирование (ст. 15(1)(h)) Прошу сообщить, применяется ли в отношении меня автоматизированное принятие решений или профилирование, и если да — раскрыть логику такой обработки. С уважением, [Ваше имя] [контактный email] [Страна] [Дата]
Subject: Data access request (GDPR Art. 15) — cnmc.es To: [insert the company's address — DPO / support / legal department] From: [Your name], [contact email] I request access to my personal data processed in connection with the website cnmc.es. 1. Categories of data and purposes of processing (Art. 15(1)(a)-(c)) Based on an independent technical analysis of the site, I request confirmation and detailed disclosure of the following categories of processing: 1) The site has a consent-management mechanism installed and configured: a Drupal 'cookies' module with the cookiesjsr library and a separate cookies_ga submodule, whose specific purpose is to prevent Google Analytics from loading before the user's choice. Loading of the counter bypasses this mechanism. The tag www.googletagmanager.com/gtag/js?id=G-GJ0T3SEQ50 is parsed by the browser directly from the main document's markup, line 110, and is requested at +368 ms — in the same millisecond window as the banner's own preloader, and 21 ms before the cookies_ga submodule loads, the very submodule that was supposed to manage this loading. The GA4 request carrying a client identifier goes out at +5709 ms. The site itself classifies analytics cookies under the 'cookies de análisis' category, which requires prior consent. 2) The data protection information document answers the question of recipients unambiguously: no transfer of data to any third party is foreseen, except in cases of legal obligation. The cookie policy opens with a statement that the commission collects the user's consent for the listed purposes. In fact, consent is not requested, and the GA4 request transmits to Google a client identifier, screen resolution of 1536x864, the Windows platform, x86/64 architecture, a list of browser versions, interface language, page address, and page title. 3) The section on third-party cookies names one service — Google Analytics. In the scan, visitor data also goes to Skynet Technologies (17 requests across two domains, including a request to freeada.skynettechnologies.com/api/widget-settings with the site address in the form body), to Font Awesome via Cloudflare infrastructure, and to Google Fonts, from which the Noto Sans font loads. None of these recipients is named in the commission's documents. 4) The 'Desactivar las cookies' section offers a single management method — browser settings — with a promise to provide links to popular browsers; the list of links itself is absent from the text. The document says nothing about the consent-management panel installed on the site, which allows the choice to be withdrawn. A reader of the policy is directed to browser settings instead of the tool that already sits on the page. 2. Recipients, retention periods, and transfers outside the EEA (Art. 15(1)(c)-(d), 46) I also request the full list of third-party recipients, the applicable retention period for each category, and the legal basis for any transfer of data outside the EEA. The full technical audit with evidence (saved network log, SHA-256 checksum) is published at: https://gdpru.eu/en/audits/es-cnmc-es/ 3. Automated processing and profiling (Art. 15(1)(h)) Please state whether I am subject to automated decision-making or profiling, and if so, disclose the logic involved. Sincerely, [Your name] [contact email] [Country] [Date]
RIA DigiDoc — phone · Smart-ID / Mobile-ID
Where to file: Spanish Data Protection Agency (AEPD) — aepd.es
The regulator reviews complaints in its national language. There is an officially translated template from the European Data Protection Board (EDPB) — you can use it instead of or alongside this letter: Official EDPB complaint form (PDF, your language)
Тема: Жалоба на обработку персональных данных — cnmc.es 1. Предмет жалобы Я подаю жалобу в отношении обработки моих персональных данных сайтом cnmc.es. 2. Обстоятельства Я посетил сайт cnmc.es и обнаружил признаки несоответствия обработки моих персональных данных требованиям GDPR. Технический разбор, опубликованный на gdpru.eu 31.05.2026 (открытая методология, воспроизводимые измерения), документирует следующие признаки: 1) На сайте установлен и настроен механизм управления согласием: модуль Drupal cookies с библиотекой cookiesjsr и отдельным подмодулем cookies_ga, назначение которого — не допускать загрузку Google Analytics до выбора пользователя. Загрузка счётчика этот механизм обходит. Тег www.googletagmanager.com/gtag/js?id=G-GJ0T3SEQ50 разобран браузером напрямую из разметки главного документа, строка 110, и запрошен на +368 мс — в тот же миллисекундный интервал, что и предзагрузчик самого баннера, и на 21 мс раньше, чем загружается подмодуль cookies_ga, который должен был бы этой загрузкой управлять. Обращение GA4 с идентификатором клиента уходит на +5709 мс. Аналитические cookie сайт сам относит к категории «cookies de análisis», требующей предварительного согласия. 2) Информационный документ о защите данных отвечает на вопрос о получателях однозначно: передача данных каким-либо третьим лицам не предусмотрена, кроме случаев правовой обязанности. Политика cookie открывается заявлением, что для перечисленных целей комиссия собирает согласие пользователя. Фактически согласие не запрашивается, а обращение GA4 передаёт Google идентификатор клиента, разрешение экрана 1536x864, платформу Windows, архитектуру x86/64, перечень версий браузера, язык интерфейса, адрес и заголовок страницы. 3) Раздел о сторонних cookie называет один сервис — Google Analytics. В замере данные посетителя получают также Skynet Technologies (17 запросов на двух доменах, включая обращение к freeada.skynettechnologies.com/api/widget-settings с адресом сайта в теле формы), Font Awesome через инфраструктуру Cloudflare и Google Fonts, откуда подгружается шрифт Noto Sans. Ни один из этих получателей в документах комиссии не назван. 4) Раздел «Desactivar las cookies» предлагает единственный способ управления — настройки браузера, с обещанием привести ссылки на популярные браузеры; сам перечень ссылок в тексте отсутствует. О том, что на сайте установлена панель управления согласием с возможностью отозвать выбор, документ не сообщает. Пользователь, читающий политику, направляется в настройки браузера вместо инструмента, который уже стоит на странице. Полная техническая документация опубликована по адресу: https://gdpru.eu/en/audits/es-cnmc-es/ 3. Положения GDPR, соблюдение которых прошу проверить ePrivacy — LSSI, Ley 34/2002, ст. 22.2 (в связке с GDPR Art. 6(1)(a)); GDPR Art. 5(1)(a) — прозрачность; GDPR Art. 13(1)(e) — раскрытие получателей; GDPR Art. 12(1) — доступность средства отзыва 4. Требование Прошу проверить изложенные обстоятельства и, если несоответствие подтвердится, принять меры, предусмотренные статьёй 58(2) GDPR. 5. Приложения Полная доказательная база — HAR-файл, контрольная сумма SHA-256 и цитата из политики конфиденциальности сайта, документирующая указанное противоречие — опубликована и проверяема по ссылке в пункте 2 выше. С уважением, [Ваше имя] [контактный email] [Страна] [Дата]
Subject: Complaint regarding personal data processing — cnmc.es 1. Subject of the complaint I am filing a complaint regarding the processing of my personal data by the website cnmc.es. 2. Circumstances I visited the website cnmc.es and found indications that the processing of my personal data does not comply with the GDPR. The technical analysis published on gdpru.eu on 31 May 2026 (open methodology, reproducible measurements) documents the following indications: 1) The site has a consent-management mechanism installed and configured: a Drupal 'cookies' module with the cookiesjsr library and a separate cookies_ga submodule, whose specific purpose is to prevent Google Analytics from loading before the user's choice. Loading of the counter bypasses this mechanism. The tag www.googletagmanager.com/gtag/js?id=G-GJ0T3SEQ50 is parsed by the browser directly from the main document's markup, line 110, and is requested at +368 ms — in the same millisecond window as the banner's own preloader, and 21 ms before the cookies_ga submodule loads, the very submodule that was supposed to manage this loading. The GA4 request carrying a client identifier goes out at +5709 ms. The site itself classifies analytics cookies under the 'cookies de análisis' category, which requires prior consent. 2) The data protection information document answers the question of recipients unambiguously: no transfer of data to any third party is foreseen, except in cases of legal obligation. The cookie policy opens with a statement that the commission collects the user's consent for the listed purposes. In fact, consent is not requested, and the GA4 request transmits to Google a client identifier, screen resolution of 1536x864, the Windows platform, x86/64 architecture, a list of browser versions, interface language, page address, and page title. 3) The section on third-party cookies names one service — Google Analytics. In the scan, visitor data also goes to Skynet Technologies (17 requests across two domains, including a request to freeada.skynettechnologies.com/api/widget-settings with the site address in the form body), to Font Awesome via Cloudflare infrastructure, and to Google Fonts, from which the Noto Sans font loads. None of these recipients is named in the commission's documents. 4) The 'Desactivar las cookies' section offers a single management method — browser settings — with a promise to provide links to popular browsers; the list of links itself is absent from the text. The document says nothing about the consent-management panel installed on the site, which allows the choice to be withdrawn. A reader of the policy is directed to browser settings instead of the tool that already sits on the page. Full technical documentation is published at: https://gdpru.eu/en/audits/es-cnmc-es/ 3. GDPR provisions I ask you to examine ePrivacy — LSSI, Law 34/2002, Art. 22.2 (in conjunction with GDPR Art. 6(1)(a)); GDPR Art. 5(1)(a) — transparency; GDPR Art. 13(1)(e) — disclosure of recipients; GDPR Art. 12(1) — accessibility of the withdrawal mechanism 4. Request I request that you examine the circumstances described and, if non-compliance is confirmed, apply the measures provided for in Article 58(2) GDPR. 5. Attachments The full evidence base — the HAR file, its SHA-256 checksum and the quotation from the site's privacy policy documenting the stated contradiction — is published and verifiable at the link in point 2 above. Sincerely, [Your name] [contact email] [Country] [Date]