Technical audit · 23.08.2026

selver.ee

Estonian supermarket chain Selver

The Estonian supermarket chain Selver — 773 requests, 34 nodes, an 8-minute recording. The consent-management platform Cookiebot is installed on the site, but the session-recording trackers Microsoft Clarity and Hotjar, the screen co-browsing Upscope and Google analytics start already in the first seconds, before the user's choice is recorded: Google Analytics sends data with the consent marker gcs=G100 in the second second, and Clarity begins session recording at +2338 ms. The policy describes cookies in general terms and does not name the recipients of web data individually.

Request timeline

+0 ms · loading the page
The recording begins on www.selver.ee. Served through Cloudflare (server: cloudflare). Of the security headers, only strict transport with subdomain inclusion and the frame-embedding ban SAMEORIGIN are set. There is no content-security-policy, referrer policy or permissions policy. The browser was sending the DNT: 1 header.
+442…+444 ms · Tag Manager and Hotjar
From the page markup, Google Tag Manager and Hotjar (session recording) start. Both are initiated by the page itself and precede any choice in the banner.
+1687…+2338 ms · Microsoft Clarity begins session recording
www.clarity.ms/tag is loaded, then scripts.clarity.ms/clarity.js, and at +2338 ms the first POST to e.clarity.ms/collect goes out — Microsoft Clarity begins session recording and heatmap building. Over the session 97 requests go to Clarity.
+1795 ms · screen co-browsing
code.upscope.io and data--eu-central.upscope.io — Upscope, a screen co-browsing technology, initiated by the page markup.
+2019 ms · Google Analytics transmits data
POST to region1.google-analytics.com/g/collect: client identifier, page URL and title, page_view event. The consent-mode marker gcs=G100 — 'consent granted', although the user's choice in the banner is not recorded by this point. Google consent pings go to pagead2.googlesyndication.com/ccm/collect.
+13011…+19169 ms · login and payment by user action
Transition to the loyalty card (sso.partnerkaart.ee) and the Swedbank bank link (www.swedbank.ee/banklink, log-in.swedbank.ee) — authentication and payment, initiated by the user's action. This is justified shop functionality.

Declared versus actual

✓ Controller — Selver AS; data-protection terms (Andmekaitsetingimused) in Estonian — declared
✓ Grounds for processing: consent, contract, law, legitimate interest — declared
✓ Cookies are used; consent to cookies can be withdrawn in the cookie settings on the site — declared
✓ A separate list of authorised processors is attached: Vaimo (IT development), Telia, Microsoft Corporation and other legal contractors — declared
✓ Processing for marketing and statistics is mentioned in general terms — declared
+ Microsoft Clarity — session recording and heatmaps, not named individually (Microsoft is listed as a processor in general terms) — not declared
+ Hotjar — session recording, not named — not declared
+ Upscope — screen co-browsing, not named — not declared
+ Google Analytics — the counter is not named individually; sends with gcs=G100 before the choice is recorded — not declared
+ Klevu (search), New Relic (monitoring), Adobe Typekit (fonts) — not named — not declared

Transfer timings

+240 ms consent.cookiebot.com

Cookiebot uc.js, configuration and SDK.

+444 ms static.hotjar.com

Hotjar, session recording.

+1687 ms www.clarity.ms

Microsoft Clarity, session recording, 97 requests, POST /collect.

+1795 ms code.upscope.io

Upscope, screen co-browsing.

+2019 ms region1.google-analytics.com

GA4, client identifier, page_view, gcs=G100.

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

New Relic, performance monitoring.

Detected trackers

Indicators of GDPR non-compliance

Context

www.selver.ee is the site of the Estonian supermarket chain Selver (Selver AS), an online grocery shop with delivery, a loyalty card and online payment. The site is served through Cloudflare (server: cloudflare); the content is in Estonian.

The recording: 773 requests, 34 nodes, a recording length of 468 seconds (about eight minutes), taken on 23 August 2026. Besides the main domain, the page addresses a large set of third-party recipients: the Cookiebot consent platform, the session-recording trackers Microsoft Clarity and Hotjar, the screen co-browsing Upscope, Google analytics (GA4, Tag Manager, consent pings, reCAPTCHA, Maps), New Relic monitoring, Klevu search, Adobe Typekit fonts, and — by user action — the loyalty card partnerkaart.ee and the Swedbank bank.

The processing is described by two documents: Selver’s data-protection terms (Andmekaitsetingimused) and a separate list of authorised processors. There is no note with the publication address and reference hash in the archive; the hash of the published file was computed during the analysis and is given in the front matter.

Who receives data directly

Microsoft (Clarity), Hotjar, Upscope, Google (Analytics, Tag Manager, Consent), New Relic, Klevu, Adobe (Typekit).

Declared versus actual

A consent platform is installed — but the trackers do not depend on it. Cookiebot runs on the site: uc.js loads at +240 ms, followed by the configuration and SDK. The consent infrastructure is present, and this is better than its absence. The problem is the order of events. Google Tag Manager starts at +442 ms, Hotjar (session recording) at +444 ms, Microsoft Clarity at +1687 ms with the first POST to e.clarity.ms/collect at +2338 ms, Upscope (screen co-browsing) at +1795 ms, and Google Analytics 4 sends a page_view with the client identifier and the gcs=G100 marker at +2019 ms. The G100 marker means “consent granted”, but it is set before the user’s choice in the banner is recorded in the recording.

Session recording is a sensitive category, and it starts among the first. Microsoft Clarity and Hotjar record the visitor’s actions — cursor movements, clicks, scrolling, form-filling — and build heatmaps. Upscope adds screen co-browsing. This is not ordinary visit statistics but behavioural recording, which per the regulator’s practice requires explicit prior consent. Over the session 97 requests go to Clarity — the service runs throughout the visit.

The recipients of web data are not named individually. The data-protection terms describe the use of cookies and the right to withdraw consent in the settings on the site, but do not provide specific recipients. Neither Microsoft Clarity, nor Hotjar, nor Upscope, nor Google Analytics, nor Klevu, nor New Relic is named in the policy. The attached list of authorised processors names legal contractors — Vaimo (IT development), Telia, Microsoft Corporation — which indirectly covers Microsoft as a company, but does not disclose Clarity as a session-recording tool and does not name the other web services.

Google consent pings, not banner advertising. The requests to pagead2.googlesyndication.com go to /ccm/collect — these are Google consent-mode and conversion pings, not the display of advertising banners. That is, no advertising is shown on the shop site, but data about consent and conversions goes to Google’s advertising infrastructure.

Security headers are almost absent. The site sets only strict transport with subdomain inclusion and the frame-embedding ban SAMEORIGIN. There is no content-security-policy, no referrer policy, no permissions policy. For a shop loading session-recording, payment and analytics third-party scripts, the absence of a content-security-policy means that the list of trusted script sources is in no way restricted.

Proven: a consent platform is present on the site. The Cookiebot requests (uc.js, consentconfig, SDK) are read from the recording from +240 ms.

Proven: the session-recording trackers and analytics start before the choice is recorded. Hotjar at +444 ms, Clarity at +1687 ms with a POST at +2338 ms, Upscope at +1795 ms, GA4 at +2019 ms — all initiated by the markup and preceding the user’s choice recorded in the recording.

Proven: Google analytics sends data with a granted-consent marker. The GA4 request carries gcs=G100 and the client identifier.

Not proven and not unambiguously established: the origin of the consent marker. The gcs=G100 marker could have been set either as a default value in the consent-mode configuration or as a saved choice from an earlier visit. Response bodies with the page markup are absent from the published file (only application-interface responses in JSON format are kept), so the script-blocking configuration of the consent platform cannot be reconstructed from the recording. What is recorded is that the session-recording trackers and analytics ran with a granted-consent state without a prior interaction with the banner in the recording itself.

Not proven and not asserted: the state of cookies on the device. Cookie headers 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 shop pages, including the steps towards the loyalty card and payment. 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 — Andmekaitse Inspektsioon.

The requests to Swedbank (swedbank.ee, log-in.swedbank.ee, pi.swedbank.com) and to the loyalty card (sso.partnerkaart.ee) are initiated by the user’s action at the login and payment steps and constitute justified shop functionality; they are not treated as third-party tracking.

There is no note with the publication address and reference hash in the archive. The hash of the published file was computed during the analysis and is given in the front matter; the address field is left empty pending its receipt.

The file is published sanitised of personal data: cookie headers in requests, HTML response bodies and tracker bodies were removed. The conclusion that the trackers start before consent is recorded rests on the network level — the composition, addresses, timings and initiators of the requests are read from the recording. The full client identifier is not reproduced in the analysis.

The identification of services rests on domains and address patterns: Cookiebot — by cookiebot.com and uc.js; Microsoft Clarity — by clarity.ms and collect; Hotjar — by hotjar.com; Upscope — by upscope.io; Google Analytics 4 — by google-analytics.com/g/collect; Google Consent — by googlesyndication.com/ccm/collect; New Relic — by nr-data.net; Klevu — by klevu.com and ksearchnet.com; Adobe Typekit — by typekit.net; the serving provider — by the server: cloudflare header.

Conclusion

The site of the Selver supermarket chain has installed the Cookiebot consent-management platform, but the actual loading of the trackers is not tied to the result of the user’s choice. The session-recording trackers Microsoft Clarity and Hotjar, the screen co-browsing Upscope and Google analytics start in the first seconds of the visit: Google Analytics sends the client identifier with a granted-consent marker gcs=G100 in the second second, and Microsoft Clarity begins session recording at +2338 ms. Recording the visitor’s behaviour falls into a category requiring explicit prior consent.

The data-protection terms, meanwhile, describe cookies in general terms and do not name the recipients of web data individually; the attached list of processors names legal contractors but does not disclose the specific session-recording and analytics web services. Of the security headers, a content-security-policy, a referrer policy and a permissions policy are absent.

Remediation: make the actual loading of the session-recording trackers, analytics and advertising pings conditional on the user’s choice in Cookiebot, so that before consent neither Clarity, nor Hotjar, nor Upscope, nor Google Analytics starts or sends data with the gcs=G100 marker; name all recipients of web data in the policy or in a separate cookie notice individually — Microsoft Clarity, Hotjar, Upscope, Google Analytics, Klevu, New Relic — with the fields transmitted and the purposes, noting the session recording separately; set a content-security-policy, a referrer policy and a permissions policy.

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/selver-ee-2026-08-23.har
SHA-256: ddbd89c22ffcbd280d05ca35ae8d3399bb11f1acbc11a90499ac0bf8fbead90c
Re-check snapshot
Awaiting changes
HAR files are stored on EU infrastructure (Proton Drive). SHA-256 is published for integrity verification.