Technical audit · 11.09.2026

delfi.ee

The largest news portal in Estonia

The largest news portal in Estonia — a single capture of the homepage, 1100 requests, 49 nodes, a very dense advertising-analytics stack. The CookieYes consent platform (IAB TCF) is in place, but it loads later than the ad server and the audience platform: Google Ad Manager, Google Ads and Cxense run before the consent mechanism, and Cxense sends data to a DMP and requests an identifier long before the user's actual decision. In parallel Microsoft Clarity runs session recording, Adnuntius serves ads, Gemius measures — all outside Google's consent mode (which for GA4 is in fact respected). The banner is asymmetrical: «Agree to all» in one click, no «Reject all» button on the first screen. The banner declares 1022 partners and access to precise geolocation via device scanning. A separate problem is retention periods: 236 partners keep data longer than a year, 20 — ten years or more, up to 11.8 years.

Request timeline

+2223…+2229 ms · ads and profiling before the CMP
securepubads.g.doubleclick.net/gpt.js and pagead2.googlesyndication.com/adsbygoogle.js (ad server, +2223…+2229 ms) and cdn.cxense.com/ari_a.js (audience profiling, +2229 ms) — all before the CookieYes consent platform (+3725 ms).
+3653…+5689 ms · tracking outside consent mode
www.clarity.ms — Microsoft Clarity session recording (46 requests); sgaee.hit.gemius.pl — Gemius (+3862 ms); cdn.adnuntius.com/adn.js and delivery.adnuntius.com/i — ad serving (+3870…+5689 ms); npttech.com — ad verification.
+6961…+7138 ms · data transfer before the actual decision
connect.facebook.net/fbevents.js (+6961 ms); comcluster.cxense.com/dmp/push — a send to the data management platform (+7121 ms); id.cxense.com/public/user/id — an identifier request (+7138 ms); region1.google-analytics.com/g/collect with gcs=G100 (denial respected).

Declared versus actual

✓ Controller — Delfi Meedia (Ekspress Grupp); a combined policy and an IAB TCF banner on CookieYes — declared
✓ Consent management — CookieYes; the banner declares 1022 partners and access to precise geolocation via device scanning — declared
✓ Recipients are disclosed in the partner export (844 require consent) — with a retention period for each — declared
✓ Banner buttons: «NÕUSTUN KÕIGIGA» (agree to all), «KOHANDA» (customise) — declared
✓ Supervisory authority — Andmekaitse Inspektsioon — declared
+ The ad server, Google Ads and Cxense load before the consent platform — not declared
+ Cxense sends data to a DMP and requests an identifier before the actual consent decision — not declared
+ The banner gives no «Reject all» on the first screen (only agree, or configure manually) — not declared
+ 236 partners keep data longer than a year, 20 — ten years or more (up to 11.8 years) — not declared

Transfer timings

+2223 ms securepubads.g.doubleclick.net

gpt.js — Google Ad Manager, before the consent platform.

+2229 ms cdn.cxense.com

ari_a.js — the Cxense audience platform.

+3725 ms cdn-cookieyes.com

Appears AFTER the ads and Cxense; 1022 partners.

+7121 ms comcluster.cxense.com

dmp/push — a send to the data management platform.

+7138 ms id.cxense.com

public/user/id — visitor identification.

Detected trackers

Indicators of GDPR non-compliance

Context

delfi.ee is the largest news portal in Estonia (Delfi Meedia, the Ekspress Grupp group). The processing is described by a combined policy and an IAB TCF banner running on the CookieYes engine; consent is managed by CookieYes.

The capture is a single recording of the homepage: 1100 requests, 49 nodes. The stack is very dense: besides consent — an ad server, two audience platforms (Cxense, Gemius), session recording (Clarity), an ad network (Adnuntius), a paywall/identification (Piano), push (OneSignal) and in-house analytics (Kaya).

Who data goes to directly

Before consent — the Google Ad Manager ad server, Google Ads, the Cxense audience platform. After the CMP loads, but before the actual decision — Cxense (a send to a DMP, identification), the Facebook pixel, Microsoft Clarity (session recording), Adnuntius (ads), Gemius. GA4 runs cookielessly with the denial respected. Functionally — Piano (paywall), OneSignal, fonts. The first party is Delfi’s infrastructure.

Declared versus actual

The discrepancy here is at three points, and all are verifiable.

Ads and profiling load before consent. The CookieYes platform appears at +3725 ms, whereas the Google Ad Manager ad server (gpt.js), Google Ads (adsbygoogle) and the Cxense audience platform (ari_a.js) run earlier — at +2223…+2229 ms. That is, the advertising stack starts before a consent mechanism even appears on the page.

Data goes out before the actual decision. The banner is closed at +6922 ms, and the partner review runs until +60911 ms — but long before that Cxense sends data to a DMP (comcluster.cxense.com/dmp/push, +7121 ms) and requests an identifier (id.cxense.com/user/id, +7138 ms), the Facebook pixel loads, Microsoft Clarity runs session recording (46 requests — recording of on-page behaviour), Adnuntius serves ads. Identification cookies cX_G, cX_P, gckp (Cxense), delfi-ppid, evid are written to the device. Tellingly, GA4 respects the consent status (gcs=G100) — but Cxense, Clarity, Gemius, Adnuntius and DoubleClick do not know Google’s consent mode and operate independently of it.

The banner is asymmetrical. On the first screen «Hindame teie privaatsust» there are only two buttons: «NÕUSTUN KÕIGIGA» (agree to all, the accent blue) and «KOHANDA» (customise). There is no «Reject all» button. Consent is given in one click, whereas to refuse one must enter the settings and manually work through 1022 partners. By the EDPB’s ruling refusal should be as easy as consent; here it is not. The banner also explicitly states access to precise geolocation via device scanning (täpse geograafilise asukoha andmeid ja tuvastamist seadme skannimise kaudu).

Footnote: retention periods at partners

A separate problem is how long the partners keep data. Of the partners with a recognised period in the export (855), more than a third declare retention longer than a year, and two dozen — a decade or longer. For a news portal, where the data serves ad delivery and audience measurement, this is disproportionate to the storage-limitation principle (GDPR Art. 5(1)(e)).

Distribution: 236 partners keep data longer than 1 year, 48 — five years or more, 20 — ten years or more. The median is 365 days, but the maximum reaches 4320 days (about 11.8 years).

Partners declaring a period of ten years or more (policy domain · period):

  • 11.8 years (4320 d): gravite.net, studio.nws.ai, www2.rampanel.com, spoods.info, hurstmediacompany.co.uk, matto-group.com
  • 10 years (3650–3653 d): responsiveads.com, phaistos.eu, e-planning.net, wunderkind.co, createwithnova.io, taptapdigital.com, cheq.ai, bluebillywig.com, connected-stories.com, jetpack.net, fraudlogix.com, amplified.co, kidoz.net, prado.co

Another 28 partners keep data for 5–8 years (including rakutenadvertising.com — 7 years, nexd.com — 8 years, paypal.com — 5 years). The full list with periods is in the attached partner export.

A year of retention for ad tracking is already at the upper edge of the reasonable. A decade for serving ads on a news site is plainly excessive: the data is not needed for that purpose for that long, and the storage-minimisation principle does not justify it.

Proven: ads and Cxense load before the CMP. DoubleClick/Google Ads and Cxense — +2223…+2229 ms; CookieYes — +3725 ms.

Proven: data goes out before the actual decision. Cxense dmp/push (+7121 ms) and user/id (+7138 ms), Facebook (+6961 ms), Clarity (46 requests) — all before the partner review is closed (+60911 ms).

Proven: the banner has no «Reject all». The screenshots record two buttons — «Agree to all» and «Customise».

Proven: retention periods are excessive. The partner export: 236 keep data >a year, 20 — ≥10 years, maximum 4320 days; the mapping «policy domain → period» is extracted directly from the export.

Proven: identifiers are written. The Application panel shows cX_G, cX_P, gckp, delfi-ppid, evid.

Proven: GA4 respects the denial. The GA4 request carries gcs=G100.

Not proven: the content of the Cxense and Facebook requests. What exactly goes into dmp/push and into the pixel beyond identifiers cannot be read from the cleaned file.

Not established: which choice the user ultimately made. The capture records the stack loading before and during interaction with the banner; the final decision cannot be read unambiguously from the capture — the key fact is that the stack ran BEFORE it.

Observation boundaries

The capture covers the homepage and records browser behaviour, not server-side processing: what the partners do with the received data and how the group’s domains are linked is not verified by a browser capture. The retention periods are taken from the CookieYes partner export (the values Andmete säilitamise periood declared by the vendors themselves), not from observing actual storage — that is, this is what the vendors declare, and it is already excessive in itself. The list of policy domains serves as an identifier of the vendors. The Clarity session recording is recorded from the fact of requests to its domain; the content of the recording is not opened up.

The file is published cleaned of personal data (505 redactions, self-check clean); the load order (ads and Cxense before the CMP), the dmp/push and user/id requests, the gcs=G100 status of GA4 and the presence of identification cookies can be verified directly against the published file and the screenshots. The banner and its buttons are from the screenshots (live UI), a separate type of evidence.

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

Conclusion

The country’s largest news portal carries a very dense advertising-analytics stack, and the consent frame does not cover it. The CookieYes platform loads later than the ad server and the Cxense audience platform: ads and profiling start before the consent mechanism. And the actual data transfer — Cxense’s send to a DMP, the identifier request, the Facebook pixel, the Clarity session recording — happens long before the user’s real decision. Google’s consent mode is respected only where it applies at all (GA4 with gcs=G100); the rest — Cxense, Clarity, Gemius, Adnuntius — are not governed by it and operate independently.

The banner makes it worse: on the first screen one can agree to everything in one click, but cannot refuse in one click — «Reject all» is not provided, refusal is hidden behind the manual configuration of 1022 partners. And behind that banner is access to precise geolocation via device scanning.

Separately there is the question of retention periods. More than a third of the partners with a stated period keep data longer than a year, twenty — a decade or longer, up to almost twelve years. For serving ads on a news site such retention horizons are disproportionate: a year is already at the limit, ten years is plainly excessive.

Remediation: condition the loading of the ad server, Cxense, Clarity, Gemius and Adnuntius on actual consent, so that before the choice they neither load nor send data (dmp/push, user/id, the pixel); add a «Reject all» button to the first screen of the banner, equivalent to «Agree to all»; reconsider the partners’ retention periods — bring them into line with the minimisation principle (Art. 5(1)(e)), removing the decade-long horizons disproportionate to the advertising purpose; preserve the correct GA4 consent mode and extend the gating principle to the whole stack, not only to what consent mode governs."

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/delfi-ee-2026-09-11.har
SHA-256: e9f87b334e8477bfef6543617755b1c7bfb27a4f7b5066b3a8c306609860e539
Screenshot
Скриншот интерфейса
Consent banner: only «NÕUSTUN KÕIGIGA» and «KOHANDA» — no «Reject all» button · 12.09.2026
Скриншот интерфейса
1022 third-party vendors — consent/opt-out only one by one · 12.09.2026
Скриншот интерфейса
HyperTV, Inc. (connected-stories.com): retention period 3650 days (10 years) · 12.09.2026
Скриншот интерфейса
Category-based cookie settings — no simple opt-out alternative · 12.09.2026
Re-check snapshot
Awaiting changes
HAR files are stored on EU infrastructure (Proton Drive). SHA-256 is published for integrity verification.