Technical audit · 2026-05-29

bahn.de

Germany's National Railway Operator

Deutsche Bahn — Germany's largest transport operator. 411 requests, 8 domains. All external domains are either DB's own infrastructure or declared services. The at.bahn.de/1x1.gif tracking pixel fires with no consent recorded. Optimizely and Verint initiate requests that end up blocked by the browser.

Timeline of the leak

+179–500 ms · load
All CSS, JS bundles, fonts (icon-font-fallback.woff2) load from www.bahn.de. Proprietary infrastructure.
+461–462 ms · tracking init
initTracking-DFtVjSRH.js and onConsentProvidedOrEdited-GrrqcBQr.js load as part of the main bundle.
+3811 ms · tracking
at.bahn.de/ccrm — a request to DB's own analytics endpoint (302 redirect).
+4070 ms · pixel
cdn-at.bahn.de/1x1.gif — a Tealium/Adobe Analytics tracking pixel. A 1×1 GIF — a classic analytics beacon.
+4588 ms · blocked
cdn.optimizely.com — A/B testing configuration. Status 0 — blocked by the content blocker.
+4980 ms · blocked
ucm-eu.verint-cdn.com — the Verint SDK. An EU endpoint. Status 0 — blocked.

Declared versus actual

Adobe Analytics — in the policy (via at.bahn.de) — заявлен
Tealium — in the policy as Tag Management — заявлен
Optimizely — in the policy as A/B testing — заявлен
Verint Systems — in the policy (Ziegelteich 29, 24103 Kiel) — заявлен
Qualtrics — in the policy — заявлен
m-pathy — in the policy — заявлен

Transfer timings

+3811 ms at.bahn.de

DB's own analytics endpoint. /ccrm → 302.

+4070 ms cdn-at.bahn.de

1x1.gif tracking pixel. Tealium/Adobe Analytics.

+4588 ms cdn.optimizely.com

Optimizely A/B datafile. Initiated by JS before being blocked.

+4980 ms ucm-eu.verint-cdn.com

Verint SDK next-bahn-de. EU endpoint. Initiated before being blocked.

Detected trackers

Indicators of GDPR non-compliance

Context

Deutsche Bahn AG is Germany’s federal railway company, responsible for passenger and freight transport. Ticket sales, bookings, account management. HAR: 411 requests, 8 domains. 390 requests to www.bahn.de, 9 to assets.static-bahn.de, 7 to cms.static-bahn.de — and 5 to external domains, two of which belong to DB itself (at.bahn.de, cdn-at.bahn.de).

Proprietary analytics infrastructure

DB uses at.bahn.de as its own analytics domain — a bahn.de subdomain, meaning it is technically first-party. Through /ccrm (+3811 ms), a redirect fires to cdn-at.bahn.de/1x1.gif (+4070 ms). The “redirect to a 1x1 pixel” pattern is a classic implementation of Tealium iQ Tag Management with an Adobe Analytics beacon. The policy confirms that Tealium and Adobe Analytics are used for analytics, with IP addresses anonymized where required.

There is no cookie banner and no SET-Cookie in the HAR. This means either that consent was carried over from a previous session (though the Cookies in the requests are also empty), or that tracking fires with no explicit user consent. The file names initTracking-DFtVjSRH.js and onConsentProvidedOrEdited-GrrqcBQr.js indicate the presence of consent logic — but its activation is not recorded in the HAR.

Optimizely and Verint — status 0

Both services are declared in the policy, and both initiate requests in the HAR — Optimizely (+4588 ms) and Verint (+4980 ms). Status 0 means the requests were blocked at the network level (uBlock Origin or a similar content blocker in the audit browser). This does not mean DB’s consent mechanism blocked them — on the contrary, the very fact that a network request to an external domain was initiated means the JS code had already executed. The browser-level blocker intercepted the request after it was initiated.

Documentation: detailed and correct

bahn.de’s privacy policy names all the providers involved by name: Tealium, Adobe Analytics, Optimizely, Qualtrics, m-pathy, Verint. For each, an address, legal basis, and description of the processing are given. For Optimizely, the stated legal basis is explicit: § 25 Abs. 1 TDDDG (consent). For Verint: Art. 6(1)(b) DSGVO (contract). This level of disclosure is unmatched by most sites in the Irish series.

Conclusion

bahn.de shows correct documentation and, apparently, the presence of a consent mechanism — but the HAR records neither a banner nor cookies, and the tracking pixel fires anyway. Two external services (Optimizely, Verint) initiate requests before being blocked by the browser. A full compliance assessment would require testing in a browser with no blockers, while observing the banner’s actual behavior.

Evidence
Original (audit)
HAR file: de/bahn-de-2026-05-29.har
SHA-256: 4ae4bea877ba3a6226cf7a23bed2cdb7d198fb0da69677584bfdee8aa056f2f0
Re-check snapshot
Awaiting changes
HAR files are stored on EU infrastructure (Proton Drive). SHA-256 is published for integrity verification.
IMPORTANT: before filing a complaint with the regulator, first contact the company directly and give it 30 days to respond. Without this step the regulator may reject the complaint. Details and a template letter to the company are in the Methodology.
Ready-to-send complaint letter

Where 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 bahn.de.

2. Circumstances
I visited the website bahn.de and found indications that the processing of my personal data does not comply with the GDPR. The technical analysis published on gdpru.eu on 29 May 2026 (open methodology, reproducible measurements) documents the following indications:

1) at.bahn.de/ccrm (+3811 ms) and cdn-at.bahn.de/1x1.gif (+4070 ms) load with no cookie banner recorded in the HAR and no SET-Cookie headers in the responses. 1x1.gif is a classic Tealium/Adobe Analytics tracking pixel. initTracking-DFtVjSRH.js and onConsentProvidedOrEdited-GrrqcBQr.js load as part of the main JS bundle, yet the tracking pixel fires before explicit user consent is recorded in the HAR.

2) Optimizely (cdn.optimizely.com, +4588 ms) and Verint (ucm-eu.verint-cdn.com, +4980 ms) initiate network requests — both with status 0 (blocked by the audit browser's content blocker, not by any consent mechanism). The fact that the request was initiated means the JS code driving these requests had already executed before it was blocked. The policy declares Optimizely A/B testing and Verint data collection as requiring consent under § 25 Abs. 1 TDDDG.

Full technical documentation is published at: https://gdpru.eu/en/audits/de-bahn-de/

3. Provisions violated
GDPR Art. 6(1), Art. 7; TDDDG § 25; TDDDG § 25 — Optimizely and Verint initiated before consent

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]