A browser-update notification service — 347 requests, 30 nodes, 23 data recipients, a recording of about ten minutes. On a page with an ad slot a full advertising circuit unfolds: Google AdSense and Ad Manager, the demand.supply platform, dozens of RTB vendors through a consent panel with a vendor count of up to 308. The Google Funding Choices consent-management platform is present on the site, but appears only after the ad stack and Google Analytics have sent the first data: the client identifier goes to analytics a second before the banner. The privacy policy names only Google Analytics and states that data is not passed to third parties without consent.
Timeline of the leak
Declared versus actual
Transfer timings
demand.supply ad stack, 101 requests; page URL in base64.
Google Publisher Tag (AdSense / Ad Manager), 59 requests.
GA4 G-1VW8K23XF3, client identifier, page_view; no TCF string.
Google Funding Choices, banner interface, 19 requests.
Criteo, RTB identifier; TCF consent string gdpr=1.
OpenX, RTB identifier.
ID5, identifier synchronisation.
Lotame, data-management platform.
Yahoo ConnectID; TCF consent string gdpr=true.
Google Ad Manager, ad delivery.
Detected trackers
- Google AdSense / Ad Manager (pagead2.googlesyndication.com, securepubads.g.doubleclick.net, safeframe.googlesyndication.com) — ad slots, 59 requests
- demand.supply (live.demand.supply, api.demand.supply) — ad stack and auction, 101 requests, page URL in base64 in the parameters
- Google Analytics 4 (G-1VW8K23XF3) via region1.google-analytics.com — client identifier, page_view event goes out before the consent banner
- Google Funding Choices (fundingchoicesmessages.google.com) — consent-management platform, appears after the first data transmissions
- Google Ad Traffic Quality (ep1/ep2.adtrafficquality.google) — traffic-quality scoring, 10 requests
- Criteo (static.criteo.net, gum.criteo.com), OpenX (oa.openxcdn.net), ID5 (id5-sync.com, cdn.id5-sync.com), Lotame (tags.crwdcntrl.net), Yahoo ConnectID (connectid/ups.analytics.yahoo.com), RTB House (invstatic101.creativecdn.com) — RTB identifiers and bidding
Indicators of GDPR non-compliance
- ePrivacy — Directive 2002/58/EC, Art. 5(3) (in conjunction with GDPR Art. 6(1)(a))There is a consent-management platform on the site — Google Funding Choices — but it appears at +75381 ms, after the ad stack and analytics have already been initialised and sent the first data. The demand.supply script is requested at +74429 ms, the initialisation of ad slots and the Google Publisher Tag at +74718…+74774 ms, the first Google Analytics 4 request with the client identifier and a page_view event at +75011 ms. That is, the consent banner is shown about a second after the data has already gone out. On the first visit the demand.supply and Google Publisher Tag requests carry no TCF consent string; the string appears in the requests only on a repeat visit. Consent, if it is collected at all, follows the transmission of data rather than preceding it.
- GDPR Art. 13(1)(e) — disclosure of recipientsThe privacy policy names only Google Analytics. The entire advertising circuit is undisclosed: Google AdSense and Ad Manager, the demand.supply platform, Funding Choices, Criteo, OpenX, ID5, Lotame, Yahoo, RTB House are absent from the document. The consent-management panel, meanwhile, declares up to 308 vendors for the purpose 'Store and/or access information on a device' and contains dozens of well-known RTB vendors. Not a single advertising recipient, nor a single field transmitted to them, is named in the policy.
- GDPR Art. 5(1)(a) — transparency and internal consistency of what is declaredThe policy states outright: collected data is not passed to third parties without the data subject's explicit consent, and the processing via cookies and Google Analytics relies on legitimate interest under Art. 6(1)(f). In fact, on visiting a page with an ad slot, data is addressed to dozens of advertising recipients, the client identifier goes to Google Analytics before the banner, and the URL of the viewed page is transmitted to the demand.supply platform in the request parameters. The statement about non-transfer to third parties without consent diverges from the actual behaviour of the site.
- GDPR Art. 13(1)(f) and Art. 44 — transfer to a third countryThe policy mentions the transfer of Google Analytics data to Google servers in the USA and refers to IP-address anonymisation. The actual set of recipients is broader: requests are addressed to advertising and identity nodes of Google, Criteo, OpenX, ID5, Lotame, Yahoo and RTB House. The legal basis for cross-border transfer with respect to these recipients and the identifiers transmitted to them is not provided in the document.
- GDPR Art. 32 — security measuresOf the security headers the site sets almost nothing: there is no Content-Security-Policy header on any of the 105 responses of its own domain, no strict transport, the frame-embedding ban appears on only three responses, and there is no content-type-sniffing ban and no referrer policy. Part of the site navigation, moreover, goes over plain http rather than https.
Context
browser-update.org is the site of a service that shows notifications about an outdated browser (a widget for embedding on third-party sites). The controller named in the policy is Thomas Hümmer Webentwicklung, Augsburg, Germany; the contact is jossele@gmx.de. The supervisory authority is the Bavarian State Office for Data Protection Supervision. The site is served through Cloudflare (cf-ray, server: cloudflare).
The recording: 347 requests, 30 nodes, 23 data recipients, a recording length of about 591 seconds, taken on 16 August 2026. The session covers several pages (home, stat.html, contact.html, update-browser.html, blog.html) and contains two passes over the page with an ad slot — at the beginning (around +74 s) and at the end of the recording (around +570 s). Of the 347 requests, 105 fall on the own domain.
The processing is described by a privacy policy (Datenschutzerklärung) in German. A copy of it in another format and an export of the consent-management panel with a list of vendors are attached to the materials; in addition, an automated technical report from the gdpru.eu/har-check tool on the same file is attached, used for cross-verification.
Who receives data directly
Google (AdSense, Ad Manager, Analytics, Funding Choices, Ad Traffic Quality), demand.supply, Criteo, OpenX, ID5, Lotame, Yahoo, RTB House.
Declared versus actual
A consent platform exists — but it is late. This is the main difference of this case from sites where there is no consent mechanism at all. Here a consent-management platform is present: Google Funding Choices. The problem is the order of events. On the page with an ad slot, the first thing requested, at +74429 ms, is the demand.supply ad-stack script. Then the ad slots are initialised and the Google Publisher Tag from AdSense is loaded. At +75011 ms Google Analytics 4 already sends a /g/collect request with the client identifier and a page_view event. And only at +75381 ms — almost a second later — is the Funding Choices banner interface requested.
That is, by the time the user is shown the consent prompt, the advertising circuit and analytics have already been deployed and the first data has already been sent. Consent must, by law, precede the placement of analytics and advertising cookies (Directive 2002/58/EC, Art. 5(3); CJEU practice); here it follows the transmission.
The consent string appears only later. On the first visit the demand.supply and Google Publisher Tag requests carry no consent string in the IAB TCF format. A consent string of 578 characters with the marker gdpr=1 appears in the requests only in the second pass (from +534 s), when the full auction with Criteo, OpenX, ID5, Lotame, Yahoo and RTB House unfolds. The Google consent-mode marker gcs=G100 is likewise present only in the second session; in the first it is absent.
The policy names only analytics. The document is honest in one respect: Google Analytics is named directly, with the provider Google Inc., USA, and transfer to servers in the USA indicated. But the entire advertising circuit is absent from the policy. There is neither AdSense and Ad Manager, nor the demand.supply platform, nor Funding Choices itself, nor a single RTB vendor. Meanwhile the consent-management panel, whose export is attached, declares up to 308 vendors for the purpose ‘Store and/or access information on a device’ alone and lists dozens of well-known advertising companies. The gap between one named recipient and hundreds of actual ones is extreme.
The statement about non-transfer to third parties diverges from practice. The policy states directly that collected data is not passed to third parties without the data subject’s explicit consent, and that the processing of cookies and analytics relies on legitimate interest under Art. 6(1)(f). In fact, on visiting a page with an ad slot, data is addressed to dozens of advertising recipients, the client identifier goes to analytics before the banner, and the URL of the viewed page is transmitted to the demand.supply platform in the request parameters in base64 encoding.
Security headers are almost absent. The own domain has no content-security header on any of the 105 responses, no strict transport, the frame-embedding ban appears on only three responses, and there is no content-type-sniffing ban and no referrer policy. Part of the navigation, moreover, goes over plain http rather than https — the addresses http://browser-update.org/update-browser.html are visible in the analytics requests themselves.
Consent: what is proven and what is not
Proven: a consent platform is present on the site. The requests to Google Funding Choices (fundingchoicesmessages.google.com) are read from the recording; the banner interface is requested at +75381 ms.
Proven: the ad stack and analytics start before the banner. The demand.supply script is requested at +74429 ms, the Google Publisher Tag at +74774 ms, the first Google Analytics 4 request with the client identifier at +75011 ms. All of them precede the request for the consent interface. The order is read from the timings and initiators of the recording.
Proven: on the first visit there is no TCF consent string in the advertising requests. The gdpr_consent parameter appears in the requests only from the second pass (from +534 s). In the first pass the demand.supply and Google Publisher Tag requests do not contain it.
Proven: the client identifier is included in the analytics requests. The cid field stands in the /g/collect requests next to the page URL and event. In the two passes of the recording the identifiers differ.
Not proven and not asserted: the content of the user’s choice in the banner. Whether the consent or refusal button was pressed is not unambiguously established from the network recording; only the order is recorded — data goes out before the banner appears, and the consent string and the gcs=G100 mode appear later. The conclusion about the violation rests on this order, not on a reconstruction of clicks.
Not proven and not asserted: the state of cookies on the device. Cookie headers and response bodies were removed from the published file during sanitisation.
Separately: the browser was sending the DNT: 1 header during capture. This had no effect on the composition and addressing of the requests.
Boundaries of observation
The recording covers several pages of the site and two passes over the page with an ad slot. The observation records the browser’s behaviour, not the services’ internal workings: server-side processing, contractual relationships with recipients and settings on their side are not verified by a browser recording. The legal assessment is made by the competent authority — in this case the Bavarian State Office for Data Protection Supervision.
The file is published sanitised of personal data: cookie headers in requests and response bodies were removed. The conclusion that the consent platform is late rests on the network level — the composition, addresses, timings and initiators of the requests are read from the recording in full, and it is visible that the ad stack and analytics send data earlier than the consent interface is requested. The full client identifiers and consent strings are not reproduced in the analysis.
The identification of services rests on domains, address patterns and cross-verification with the consent-panel export: Google AdSense and Ad Manager — by googlesyndication.com, doubleclick.net and safeframe; analytics — by google-analytics.com and the property G-1VW8K23XF3; the consent platform — by fundingchoicesmessages.google.com; demand.supply — by the domain and the address pattern of the ad slots; the RTB vendors — by criteo, openxcdn, id5-sync, crwdcntrl.net, analytics.yahoo.com, creativecdn.com; the serving provider — by the cf-ray and server: cloudflare headers. The attached automated tool report was used only as an additional cross-check; all key conclusions were re-verified against the recording itself, and on the point of security headers the own check refined the report.
Conclusion
The site of the browser-update notification service deploys, on the page with an ad slot, a full advertising circuit: Google AdSense and Ad Manager, the demand.supply platform and, through the consent-management panel, dozens of RTB vendors with a vendor count of up to 308. Of all this the privacy policy names only Google Analytics and separately states that data is not passed to third parties without consent.
A consent-management platform is present on the site — Google Funding Choices — but it appears only after the ad stack and analytics have been initialised and have sent the first data: the client identifier goes to Google Analytics about a second before the banner, and on the first visit the advertising-service requests carry no consent string. The consent string and the Google consent mode appear only on a repeat visit. The own domain has almost no security headers, and part of the navigation goes over an unprotected protocol.
Remediation: do not start the ad stack, the Google Publisher Tag and analytics before consent is obtained — bring their loading under the actual control of the consent platform, so that no requests to advertising and analytics recipients go out before the user’s choice; name all recipients of web data in the policy, with the fields transmitted and the purposes, including the advertising circuit and the vendor list of the consent panel; bring the statement about non-transfer to third parties into line with the actual practice; disclose the legal basis for cross-border transfer with respect to the advertising recipients; move the entire site to https and set a content-security-policy, strict transport, a frame-embedding ban, a content-type-sniffing ban and a referrer policy.
02cec9f008e2050d8b78f9fe6c554d527e58b73c19003c8e37b6d1fde43a049fWhere to file: Federal Commissioner for Data Protection (BfDI) — file a complaint online →
To: Federal Commissioner for Data Protection (BfDI) From: [Your name], [contact email] 1. Subject of the complaint I am filing a complaint regarding the processing of my personal data by the website browser-update.org. 2. Circumstances I visited the website browser-update.org and found indications that the processing of my personal data does not comply with the GDPR. The technical analysis published on gdpru.eu on 16 August 2026 (open methodology, reproducible measurements) documents the following indications: 1) There is a consent-management platform on the site — Google Funding Choices — but it appears at +75381 ms, after the ad stack and analytics have already been initialised and sent the first data. The demand.supply script is requested at +74429 ms, the initialisation of ad slots and the Google Publisher Tag at +74718…+74774 ms, the first Google Analytics 4 request with the client identifier and a page_view event at +75011 ms. That is, the consent banner is shown about a second after the data has already gone out. On the first visit the demand.supply and Google Publisher Tag requests carry no TCF consent string; the string appears in the requests only on a repeat visit. Consent, if it is collected at all, follows the transmission of data rather than preceding it. 2) The privacy policy names only Google Analytics. The entire advertising circuit is undisclosed: Google AdSense and Ad Manager, the demand.supply platform, Funding Choices, Criteo, OpenX, ID5, Lotame, Yahoo, RTB House are absent from the document. The consent-management panel, meanwhile, declares up to 308 vendors for the purpose 'Store and/or access information on a device' and contains dozens of well-known RTB vendors. Not a single advertising recipient, nor a single field transmitted to them, is named in the policy. 3) The policy states outright: collected data is not passed to third parties without the data subject's explicit consent, and the processing via cookies and Google Analytics relies on legitimate interest under Art. 6(1)(f). In fact, on visiting a page with an ad slot, data is addressed to dozens of advertising recipients, the client identifier goes to Google Analytics before the banner, and the URL of the viewed page is transmitted to the demand.supply platform in the request parameters. The statement about non-transfer to third parties without consent diverges from the actual behaviour of the site. 4) The policy mentions the transfer of Google Analytics data to Google servers in the USA and refers to IP-address anonymisation. The actual set of recipients is broader: requests are addressed to advertising and identity nodes of Google, Criteo, OpenX, ID5, Lotame, Yahoo and RTB House. The legal basis for cross-border transfer with respect to these recipients and the identifiers transmitted to them is not provided in the document. 5) Of the security headers the site sets almost nothing: there is no Content-Security-Policy header on any of the 105 responses of its own domain, no strict transport, the frame-embedding ban appears on only three responses, and there is no content-type-sniffing ban and no referrer policy. Part of the site navigation, moreover, goes over plain http rather than https. Full technical documentation is published at: https://gdpru.eu/en/audits/de-browser-update-org/ 3. Provisions violated ePrivacy — Directive 2002/58/EC, Art. 5(3) (in conjunction with GDPR Art. 6(1)(a)); GDPR Art. 13(1)(e) — disclosure of recipients; GDPR Art. 5(1)(a) — transparency and internal consistency of what is declared; GDPR Art. 13(1)(f) and Art. 44 — transfer to a third country; GDPR Art. 32 — security measures 4. Request I request that you investigate the violations described and 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. [Date] [Signature / name]