Technical audit · 07.09.2026

tele2.ee

Tele2 telecom operator website

A telecom operator's website — a single capture of the homepage, 900 requests, 22 nodes, about ten minutes. The Cookiebot consent management platform loads first, and most of the stack behaves correctly: Google DoubleClick advertising is pulled in only when the embedded video is played, already after consent, and New Relic monitoring is disclosed and serves the chat widget. But the Exponea customer data platform transmits behavioural 'banner' events — with a customer identifier and a phone-number field — two minutes before the user clicks 'accept': seven requests are delivered and accepted by the Exponea server before consent. Separately, the main document sets neither HSTS, nor Content-Security-Policy, nor referrer-policy.

Request timeline

+79417…+164700 ms · Exponea before consent
Seven POST requests to api.exponea.com/track/v2 (event_type 'banner'), all with status 200. Each carries the customer_ids.cookie identifier and a phone field. All of this before the user gives consent.
+237400…+555480 ms · Exponea after consent
Seven more Exponea /track requests, now after consent — this part is consent-conditioned.
+408967…+409656 ms · embedded video and advertising
The user starts the embedded video www.youtube.com; its player pulls in googleads.g.doubleclick.net and static.doubleclick.net. This is after consent and conditioned on the video being played.

Declared versus actual

✓ Controller — Tele2 (Tele2 Eesti AS); Tele2 is named as the responsible controller — declared
✓ Cookie declaration on the Cookiebot engine; categories with consent configuration — declared
✓ Third-party recipients are named: Meta Platforms, Microsoft, Exponea, LinkedIn, YouTube, Binkies 3D, Adform — declared
✓ Also disclosed: Google, Google Analytics, DoubleClick, New Relic (JSESSIONID), OnAudience, Genesys (chat widget) — declared
✓ Genesys — cookies necessary for the operation of the chat widget (preserving session and dialogue state) — declared
✓ Supervisory authority — Andmekaitse Inspektsioon — declared
+ That Exponea 'banner' events with a customer identifier and a phone-number field go out and are accepted by the Exponea server before consent is obtained — not declared
+ That the site's main document sets no basic set of protective headers — not declared

Transfer timings

+944 ms consent.cookiebot.com

Cookiebot from the markup; the banner is shown.

+79417 ms api.exponea.com

POST /track/v2, event_type 'banner', customer identifier + phone field. Status 200.

+164700 ms api.exponea.com

The seventh delivered Exponea request before consent.

+200578 ms consent.cookiebot.com

logconsent.ashx?action=accept — consent given only now.

+2605 ms bam.eu01.nr-data.net

New Relic via the Genesys chat widget; disclosed in the declaration.

+409480 ms googleads.g.doubleclick.net

Pulled in by the YouTube player when the video is played.

Detected trackers

Indicators of GDPR non-compliance

Context

tele2.ee is the website of the telecom operator Tele2 (Tele2 Eesti AS). Tele2 is named as the responsible controller in the policy. Consent is managed by the Cookiebot platform. The site’s main document is served by nginx and sets no protective headers.

The capture is a single recording of the homepage of the Russian version: 900 requests, 22 nodes, about ten minutes, recorded on 7 September 2026. Over the course of the session the user interacts with the site, clicks ‘accept’ in the consent banner at +200578 ms, and later starts the embedded video. Processing is described by Tele2’s privacy policy and a detailed cookie declaration.

Who receives data directly

Exponea / Bloomreach (customer data platform — before consent). Functionally and after consent — Genesys (chat), New Relic (chat monitoring), YouTube and the Google DoubleClick it pulls in, Binkies 3D. All of these, as well as Meta, Adform, Microsoft, LinkedIn, OnAudience, are named in the cookie declaration.

Declared vs. actual

Tele2’s cookie declaration is detailed and names the recipients — Meta Platforms, Microsoft, Exponea, LinkedIn, YouTube, Binkies 3D, Adform, as well as Google, DoubleClick, New Relic and OnAudience. On the disclosure side there is nothing to object to: the discrepancy is in the timing of the transfer.

First — Exponea transmits events before consent. The Cookiebot consent management platform loads first, the banner is shown, but the user clicks ‘accept’ only at +200578 ms. The Exponea customer data platform (Bloomreach Engagement) meanwhile begins transmitting much earlier: at +79417 ms the first request goes to api.exponea.com/track/v2, and before consent seven such delivered requests accumulate — at +79, +96, +105, +122, +134, +145 and +164 seconds, all with status 200. Each carries a persistent customer identifier in the customer_ids.cookie field and an event_type: "banner"; the body structure contains a phone field. Exponea is disclosed in the declaration alongside Meta and Adform — that is, it belongs to the consent-conditioned recipients. But in fact its events go out and are accepted by the Exponea server two minutes before consent is given. After +200578 ms the transfers continue — that part is already consent-conditioned, and there is no issue with it.

Second — the security headers are weak. The main document (tele2.ee/ru) is served by nginx and sets neither HSTS, nor Content-Security-Policy, nor Referrer-Policy, nor Permissions-Policy, nor X-Frame-Options, nor X-Content-Type-Options. For a telecom operator’s site, where a visitor logs into self-service and leaves subscriber data, the absence of a basic set of protective headers is notable.

The rest of the capture behaves correctly, and this is worth noting. Google DoubleClick advertising appears only at +409 seconds, when the embedded YouTube video is played — that is, already after consent and as a consequence of the user’s action. New Relic monitoring is pulled in by the Genesys chat widget, is disclosed in the declaration and belongs to the functional part. Google Tag Manager loads, but there is no request to Google Analytics in this capture.

Proven: consent was given at +200578 ms. The consent.cookiebot.com/logconsent.ashx?action=accept request records the ‘accept’ click more than three minutes after the session began.

Proven: Exponea transmits events before that moment. Seven POST requests to api.exponea.com/track/v2 in the +79417…+164700 ms range are delivered with status 200 — that is, accepted by the Exponea server rather than rejected. All of them precede consent.

Proven: the events carry an identifier and belong to Exponea. In the body of each request there is a customer_ids.cookie field with a customer identifier and an event_type: "banner"; the recipient address is the Exponea project 26c510f8-… at api.exponea.com.

Not proven, and not reproduced: the specific values. The personal fields in the published file are scrubbed (the customer identifier replaced, the phone number removed) and the service values are normalised, so neither the identifier nor the number is reproduced in the audit; because of the uniform scrubbing of the bodies, the file does not allow distinguishing whether these are seven distinct events or repeated delivery — only the fact of seven accepted transfers before consent is established.

Observation boundaries

The capture covers one page — the homepage — and records browser behaviour, not the services’ internal workings: server-side processing, the configuration of the Google Tag Manager container and contracts with recipients are not verified by a browser-level capture. The Exponea request bodies are presented in the published file with the personal fields scrubbed, as evidence of the fact of transfer; the specific customer identifier and phone number are removed from them and are not part of the audit. The New Relic monitoring is attributed to the Genesys chat widget by the initiator of the requests (the Genesys messenger). The DoubleClick advertising is attributed to the embedded YouTube player by the initiator (ytembeds).

The file is published redacted of personal data: cookie values in requests have been removed. Response headers, statuses, the load order and initiators are preserved, so the moment of consent, the statuses of the Exponea requests and their recipient are verified directly against the published file.

The legal assessment is made by the competent authority — Andmekaitse Inspektsioon.

Conclusion

The telecom operator discloses its web-data recipients in detail and by name, and behaves correctly across most of the capture: Google DoubleClick advertising appears only when the embedded video is played, already after consent; New Relic monitoring serves the chat widget and is disclosed; and Google Tag Manager generates no requests to analytics. The discrepancy is at a single but material point: the Exponea customer data platform transmits behavioural ‘banner’ events with a customer identifier and a phone-number field two minutes before the user clicks ‘accept’, and the Exponea server accepts these events. An event that, by the site’s own declaration, is conditioned on consent in fact goes out before consent.

Added to this is the weakness of the security headers: the main document sets neither HSTS, nor Content-Security-Policy, nor referrer-policy — on a telecom operator’s self-service site.

Remediation: condition the loading and the transmission of Exponea events on actual consent, so that before the ‘accept’ click not a single /track request goes out or is accepted; set the basic set of protective headers (HSTS, Content-Security-Policy, Referrer-Policy, Permissions-Policy, X-Frame-Options, X-Content-Type-Options) on the main document.

Evidence

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.

Original (audit)
HAR file: ee/tele2-ee-2026-09-07.har
SHA-256: 90c822efd78bf0231b35ee2fe8911b1ad2bc1a8ddd5ae968a3ac91d7d4be64f0
Re-check snapshot
Awaiting changes
HAR files are stored on EU infrastructure (Proton Drive). SHA-256 is published for integrity verification.