Technical audit · 13.09.2026

sportland.ee

A sporting-goods retail chain's site

The site of the sporting-goods chain Sportland — a single capture of the homepage, 496 requests, 24 nodes, a dense retail stack. An in-house cookie banner is in place and offers refusal on the first screen, but there is no platform to gate the tags — and the advertising-tracking stack runs before the choice. The TikTok pixel does not merely load but actively sends events (with IP enrichment), the Bing advertising pixel fires, Microsoft Clarity records the session. The Google stack meanwhile respects the denial (gcs=G100), but TikTok, Bing and Clarity do not know consent mode. And these three most active trackers are not named in the policy at all — even though the policy lists social networks as recipients.

Request timeline

+164…+206 ms · functional and A/B before the banner
static.sizebay.technology (size selection, +164 ms), widget.dixa.io (chat, +201 ms), dev.visualwebsiteoptimizer.com/j.php (VWO A/B, +206 ms). All before any choice.
+3751…+4848 ms · advertising pixels before the choice
bat.bing.com/bat.js (Bing UET, +3751 ms), analytics.tiktok.com/events.js (TikTok pixel, +3767 ms), www.clarity.ms/tag/uet (Clarity, +4560 ms), bat.bing.net/actionp (Bing action, +4593 ms), analytics-ipv6.tiktokw.us/enrich_ipv6 (TikTok IP enrichment, +4848 ms).
+6914…+15787 ms · event sending and session recording
TikTok POST api/v2/pixel, pixel/act, pixel/inter — active sending of events; z.clarity.ms/collect — session recording (16 requests); region1.google-analytics.com/g/collect — GA4 page_view with gcs=G100 (three counters).

Declared versus actual

✓ Controller — Sportland Eesti AS (reg. 10677712) — declared
✓ The privacy policy names: Google, Facebook, Instagram, YouTube, Snapchat, Meta, VWO (vwo_uuid_v2) — declared
✓ On the site — an in-house banner «Luba küpsised?» with three buttons, refusal on the first screen — declared
✓ Supervisory authority — Andmekaitse Inspektsioon — declared
+ The TikTok advertising pixel (with active event sending and IP enrichment) is not named in the policy — not declared
+ Microsoft Clarity (session recording) is not named in the policy — not declared
+ Bing / Microsoft UET (advertising pixel) is not named in the policy — not declared
+ Advertising pixels and session recording fire before the choice in the banner; there is no platform to gate the tags — not declared
+ Sizebay, Dixa, New Relic are not named in the policy — not declared
+ Exponea/Bloomreach (personalisation engine, tracks browsing history) is served from a first-party subdomain and not named in the policy — not declared

Transfer timings

+206 ms dev.visualwebsiteoptimizer.com

VWO j.php; cookie vwo_uuid_v2.

+3767 ms analytics.tiktok.com

events.js, sdkid CQTJ1DRC77U6D8VT25MG; then POST event sending.

+4560 ms www.clarity.ms

tag/uet 187208454; not named in the policy.

+4593 ms bat.bing.net

action; not named in the policy.

+4848 ms analytics-ipv6.tiktokw.us

enrich_ipv6 — TikTok.

+15787 ms region1.google-analytics.com

GA4 page_view, gcs=G100.

Detected trackers

Indicators of GDPR non-compliance

Context

sportland.ee is the site of Sportland Eesti AS (reg. code 10677712), a chain of sporting-goods stores (clothing, footwear, equipment). The processing is described by a privacy policy; the site runs on an in-house platform with the Sanity CMS and is served via Cloudflare.

The capture is a single recording of the homepage: 496 requests, 24 nodes. The stack is dense for retail: advertising pixels (TikTok, Bing), session recording (Clarity), A/B tests (VWO), size selection (Sizebay), chat (Dixa), monitoring (New Relic) and three GA4 counters.

Who data goes to directly

The TikTok advertising pixel (actively sends events, IP enrichment), the Bing advertising pixel, Microsoft Clarity (session recording), VWO (A/B) — all before the choice. Google Analytics — under denial (gcs=G100). Functionally — Sizebay (size), Dixa (chat), New Relic (monitoring). The first party is the site, the Sanity CMS, the in-house metrics.sportland counters.

Declared versus actual

The discrepancy here is at two points, both significant.

There is a banner, but the tags are not gated, and advertising fires before the choice. The site has an in-house banner «Luba küpsised?» with three buttons, and refusal on the first screen is present («Nõustun vajalikuga») — this is better than notice-only stubs. But there is no consent-management platform that would hold tag loading back until the choice: the banner is implemented by an in-house script and does not gate the tags. As a result the advertising-tracking stack runs before any choice. The TikTok advertising pixel (sdkid CQTJ1DRC77U6D8VT25MG) does not merely load but actively sends events — a series of POST requests api/v2/pixel, pixel/act (action), pixel/inter (interaction), plus enrich_ipv6 (enrichment by IP address). The Bing/Microsoft UET advertising pixel (bat.js + action) fires at +3751…+4593 ms. Microsoft Clarity runs session recording (16 /collect requests). VWO loads at +206 ms. All before the user’s choice. The Google stack meanwhile respects the denial — GA4 (three counters) carries status gcs=G100 — but TikTok, Bing and Clarity do not know Google’s consent mode and operate directly. TikTok is especially significant here: active sending of events with IP enrichment to an ad network of Chinese jurisdiction.

And separately — personalisation via a first-party subdomain. The Exponea/Bloomreach engine (CDP) is served not from a third-party domain but from the site’s own subdomain metrics.sportland.ee (exponea.min.js, +1082 ms) — so in the list of domains it looks like in-house infrastructure. But it is a personalisation platform: at +3018…+3031 ms, via sportland.ee/graphql, it serves personalised homepage blocks — bloomreach-homepage-personalized, recently-viewed, new-arrivals. The «recently viewed» block directly means that the user’s browsing history is tracked and used for personalisation — and all of this before the choice in the banner. Serving from a first-party subdomain is a common technique whereby a third-party engine looks like the first party and slips past a cursory glance at the list of domains; Bloomreach is not named in the policy.

And the most active trackers are not disclosed. The privacy policy names Google, Facebook, Instagram, YouTube, Snapchat, Meta, VWO. But the three components that work most actively in the capture — the TikTok advertising pixel (sending events), Microsoft Clarity (session recording) and Bing/Microsoft UET (advertising pixel) — are not mentioned in the policy at all: neither by name, nor via their cookies (_ttp, _clck, _uetsid, MUID). Sizebay, Dixa and New Relic are also not named. So the policy lists social networks as recipients, while the TikTok, Clarity and Bing that are actually and actively working are hidden from the visitor.

Proven: advertising pixels and session recording fire before the choice. VWO +206 ms, Bing +3751, TikTok +3767, Clarity +4560; there is no consent-management platform in the capture.

Proven: TikTok actively sends events. A series of POST api/v2/pixel, pixel/act, pixel/inter and enrich_ipv6 — not just loading, but transfer.

Proven: the Google stack respects the denial. All GA4 requests (three counters) carry gcs=G100.

Proven: TikTok, Clarity, Bing are not disclosed. A search of the policy finds neither the names nor their cookies.

Proven: the banner offers refusal on the first screen. The screenshot records the «Nõustun vajalikuga» button.

Not established: the consent decision. There is no record of a choice in the capture; the key fact is that the stack ran before the choice.

Not proven: the content of the TikTok and Clarity events. The bodies of the POST requests in the published file are redacted (a size note remains), so what exactly is in the TikTok events and the Clarity recording cannot be read from the file; the conclusion rests on the fact of active sending and recording before consent.

Observation boundaries

The capture covers the homepage and records browser behaviour, not server-side processing: what TikTok, Microsoft and Bing do with the received data and how they are linked is not verified by a browser capture. What is established: advertising pixels and session recording fire before the choice and are not disclosed in the policy. The TikTok/Clarity request bodies were redacted during cleaning (a size note remains), so the content of the events and the recording is not given. Sizebay, Dixa and New Relic are attributed to the functional part (size, chat, monitoring), but they too are not named in the policy. The group domains (sportland.com/.lv, metrics.sportland.lv) are attributed to Sportland’s infrastructure.

The file is published cleaned of personal data (621 redactions, self-check clean); the firing of TikTok/Bing/Clarity before the choice, TikTok’s active POST event sending, the gcs=G100 status of GA4 and the absence of TikTok/Clarity/Bing from the policy text can be verified directly against the published file and the screenshots. The banner and its buttons are from the screenshots (live UI).

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

Conclusion

The sporting-goods chain keeps an in-house cookie banner that offers refusal on the first screen («Nõustun vajalikuga») — this is better than stubs. But there is no platform that would hold the tags back until the choice, and the advertising-tracking stack runs before any decision. The TikTok advertising pixel does not merely load but actively sends events with IP enrichment; the Bing advertising pixel fires; Microsoft Clarity records the session. The Google stack meanwhile respects the denial (gcs=G100) — but TikTok, Bing and Clarity do not know consent mode and operate directly.

Separately and no less importantly: the three most active trackers — TikTok, Clarity, Bing — are not named in the policy at all, whereas the policy lists social networks as recipients. That is, a visitor reading the policy does not learn that the TikTok advertising pixel sends their actions with IP enrichment, or that Microsoft Clarity records their session.

Remediation: condition the loading and firing of TikTok, Bing and Microsoft Clarity on actual consent, so that before the choice they neither load nor send events; introduce a consent-management platform that holds the tags back until the decision (the current banner offers a choice but does not gate loading); name TikTok, Microsoft Clarity, Bing (and also Sizebay, Dixa, New Relic) in the policy as recipients with their purpose stated; for TikTok — take into account the sensitivity of transfer to an ad network of the relevant jurisdiction; preserve the correct consent mode of the Google stack and extend the gating principle to the whole advertising stack.

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/sportland-ee-2026-09-13.har
SHA-256: 41fa67d8d3f21520a54eda83da850a28de2b91d91329661708d1f556b4c97b02
Screenshot
Скриншот интерфейса
Cookie banner (ET) «Luba küpsised?»: «Küpsiste sätted» / «Nõustun vajalikuga» / «Nõustun kõigiga» — refusal on the first screen; in Network the advertising requests have already fired · 13.09.2026
Скриншот интерфейса
The same banner (RU): «Cookie settings» / «I accept necessary» / «I accept all» · 13.09.2026
Скриншот интерфейса
Category settings: performance and marketing off by default; the marketing text acknowledges data sharing with third parties · 13.09.2026
Скриншот интерфейса
Composition of sources in DevTools: TikTok, Bing, Clarity, VWO, New Relic among the loaded components · 13.09.2026
Re-check snapshot
Awaiting changes
HAR files are stored on EU infrastructure (Proton Drive). SHA-256 is published for integrity verification.