Technical audit · 06.09.2026

kalevspa.ee

Kalev Spa hotel website

A spa-hotel website — a single capture of the homepage, 103 requests, 24 nodes, about thirty seconds. The Cookie-Script consent management platform loads first, and the active consent is negative: the state across all analytics pings is 'denied', and the Bing advertising tag itself transmits an 'advertising denied' flag. Even so, the Facebook / Meta Pixel sends a PageView, Bing Ads UET a pageLoad, and Microsoft Clarity performs session recording, streaming the visitor's behavioural data to Microsoft (one request carries a 78 KB body). The privacy notice meanwhile names, among web recipients, only Google — neither Microsoft, nor Meta, nor the session recording itself is mentioned in it.

Request timeline

+429…+700 ms · Facebook / Meta Pixel
connect.facebook.net/fbevents.js at +429 ms, the signals/config/2019830551615601 configuration at +569 ms, then a POST to www.facebook.com/tr at +700 ms — a PageView event of pixel 2019830551615601.
+427…+899 ms · Bing Ads UET
bat.bing.com/bat.js at +427 ms, the action script /p/action/187229746.js at +611 ms, then bat.bing.net/actionp with consent events (asc=D) and bat.bing.net/action with a pageLoad event at +899 ms. Tag 187229746.
+840…+29562 ms · Microsoft Clarity session recording
www.clarity.ms/tag/uet/187229746 at +840 ms (the same identifier as Bing UET), then scripts.clarity.ms/0.8.69/clarity.js and a stream of POST requests to g.clarity.ms/collect at +1200, +1555, +3567, +7275, +11841, +16979 and +29562 ms. One of the requests carries a 78 KB body — session data is transmitted to Microsoft throughout the capture.
+505 / +16896 ms · GA4
region1.google-analytics.com/g/collect — page_view at +505 ms and scroll at +16896 ms, both with the state gcs=G100. Counter G-KH7ZTT1YDV, pings cookieless.

Declared versus actual

✓ Controller — OÜ Kalevi Veekeskus (Kalev Spa), registry number 11053554, Aia 18, Tallinn 10111 — declared
✓ Our website uses Google services (Google Ads, Google Analytics, Tag Manager) that may process personal data and cookies — declared
✓ Cookie declaration, analytics category: _clck, _clsk (Microsoft Clarity), _ga, _ga_KH7ZTT1YDV (Google) — 'cannot be used to directly identify a specific visitor' — declared
✓ Cookie declaration, targeting category: MUID (Microsoft, .clarity.ms and .bing.com — 'widely unique user identifier, synced across Microsoft domains, enables tracking'), _fbp (Facebook), _uet (Bing), YSC (YouTube), ANONCHK, MR, SM (Microsoft) — declared
✓ Necessary cookies: CookieScriptConsent (Cookie-Script), PHPSESSID — declared
✓ Collected data include name, date of birth / personal ID code, document number, bank details, credit-card data, visitor-card data under the Tourism Act, CCTV recordings — declared
✓ Supervisory authority — the Data Protection Inspectorate (Andmekaitse Inspektsioon) — declared
+ Microsoft Clarity — not named in the privacy notice; session recording as such is not described — not declared
+ Microsoft Bing Ads / UET — not named in the notice — not declared
+ Facebook / Meta Pixel — not named in the notice (the cookie declaration has only the _fbp cookie) — not declared
+ That the session recording, the Facebook pixel and the Bing tag fire under a refused consent — not declared
+ The contradiction within the declaration: analytics cookies 'do not identify directly', whereas MUID is described as a cross-site tracking identifier — not declared

Transfer timings

+308 ms cdn.cookie-script.com

Cookie-Script, first from the page markup.

+505 ms region1.google-analytics.com

GA4 page_view, gcs=G100 (denied). Counter G-KH7ZTT1YDV.

+700 ms www.facebook.com

PageView, pixel 2019830551615601, POST to /tr. Under a refused consent.

+899 ms bat.bing.net

Bing UET pageLoad, tag 187229746, asc=D (advertising denied).

+1200…+29562 ms g.clarity.ms

Seven POST requests to /collect, one with a 78 KB body — a stream of session data to Microsoft.

+840 ms www.clarity.ms

Clarity pulled in by the Bing UET tag 187229746.

Detected trackers

Indicators of GDPR non-compliance

Context

kalevspa.ee is the website of the Kalev Spa hotel in central Tallinn (hotel, water park, sports club). The controller is OÜ Kalevi Veekeskus, registry number 11053554, Aia 18, Tallinn 10111. The hotel collects a sensitive composition of data: name and personal ID code, document number, bank details, credit-card data, visitor-card data under the Tourism Act, CCTV recordings. The site is served via Apache/ZoneOS and sets HSTS with preload; of the other protective headers only a minimal Permissions-Policy is present — Content-Security-Policy, Referrer-Policy, X-Frame-Options and X-Content-Type-Options are not set.

The capture is a single recording of the homepage: 103 requests, 24 nodes, about thirty seconds, recorded on 6 September 2026. Consent is managed by the Cookie-Script platform. The booking engine and live chat (Profitroom, UpperBooking) are classified as the functional part.

Who receives data directly

Microsoft (Clarity — session recording, Bing Ads), Meta (Facebook Pixel), Google (Analytics, Tag Manager). Functionally — the Profitroom/UpperBooking booking engine.

Declared vs. actual

The hotel does have a privacy notice, and it does say something about the website — but narrowly, and not about what actually happens.

First — the trackers fire under a refused consent. The load order here is correct: the Cookie-Script platform starts first, from the page markup. The problem is not the order but that the active consent is negative, and that does not stop the trackers. The consent state in both GA4 pings is gcs=G100 (both storages denied), and the Bing UET advertising tag itself transmits the flag asc=D — advertising denied. Even so, the Facebook / Meta Pixel sends PageView, Bing Ads UET sends pageLoad, and Microsoft Clarity performs session recording. Google analytics does honour the storage denial — the pings are cookieless — but the pixel, the advertising tag and the session recording are not conditioned on that state.

Second — the session recording goes to Microsoft. Microsoft Clarity is not an ordinary counter but a session-recording and heatmap tool. In the recording you can see the browser sending, over thirty seconds, seven POST requests to g.clarity.ms/collect, one of which carries a 78 KB body: this is a stream of the visitor’s behavioural data (interactions and page state) to Microsoft, continuing for the whole session. The Clarity tag identifier is the same 187229746 as Bing UET’s — that is, the behavioural analytics and the Microsoft advertising tag are linked.

Third — of the recipients, only Google is named. The privacy notice mentions only Google services. Neither Microsoft (Clarity and Bing Ads) nor Meta is named in it, and the session recording itself is not described in the text — even though it is to Microsoft that the stream of behavioural data goes, and to Meta a pixel event. These recipients are disclosed only in the automatic cookie declaration.

Fourth — ‘analytics do not identify’ diverges from a cross-site identifier. The cookie declaration describes the analytics files (including _clck and _clsk from Clarity) as ones that ‘cannot be used to directly identify a specific visitor’. But in the targeting category the same declaration describes the Microsoft MUID cookie as a ‘widely unique user identifier’ that is ‘synced across various Microsoft domains, which enables user tracking’. An anonymised count of visits and a cross-site tracking identifier are not the same thing.

Proven: the active consent is negative. Both GA4 pings carry gcs=G100 (both storages denied), and the Bing UET tag transmits asc=D (advertising denied). So at the time of the capture, consent for analytics and advertising was not given.

Proven: the consent platform loads first. cdn.cookie-script.com starts at +308 ms from the page markup, before any tracker. So the trackers fire not because of an earlier load, but in spite of the consent state.

Proven: the trackers transmit data in this state. Facebook /tr goes out at +700 ms (PageView, POST); Bing action at +899 ms (pageLoad); Clarity /collect — seven requests at +1200…+29562 ms, one with a 78 KB body.

Proven: the session recording runs for the whole session. The g.clarity.ms/collect requests continue from +1200 ms to +29562 ms — across all thirty seconds of observation.

Not proven, and not claimed: the specific content of the transfers. The body of the Facebook /tr POST and the content of the Clarity requests are redacted/not parsed in the published file; the conclusion rests on the fact of firing, the recipient and the volume transmitted, not on a reconstruction of fields.

Observation boundaries

The capture covers one page — the homepage — and records browser behaviour, not the services’ internal workings: server-side processing and contracts with recipients are not verified by a browser-level capture. The session-recording tool is identified by the Clarity domains (clarity.ms) and the character of the requests; the volume transmitted (a 78 KB body) is taken from the published file. Functional components are separated from tracking: the Profitroom/UpperBooking booking engine and live chat serve the hotel’s booking; the jQuery, FontAwesome and cdnjs libraries and the Google fonts are functional delivery.

The file is published redacted of personal data: cookie values in requests have been removed (Cookie headers are entirely absent from the recording, so the consent state is established not from cookies but from the machine signals gcs=G100 and asc=D). Response bodies and markup are preserved, so the load order, initiators and request parameters are verified directly against the published file.

The legal assessment is made by the competent authority — Andmekaitse Inspektsioon, to which the notice itself refers.

Conclusion

The spa-hotel website keeps the Cookie-Script consent management platform and loads it first, and Google analytics does honour the storage denial — the pings are cookieless. But the rest of the tracking ignores that state: under a refused consent (gcs=G100, asc=D) the Facebook / Meta Pixel sends a PageView, Bing Ads UET a pageLoad, and Microsoft Clarity performs session recording, streaming the visitor’s behavioural data to Microsoft for the whole session.

The privacy notice meanwhile names, among web recipients, only Google — neither Microsoft, nor Meta, nor the session recording itself is mentioned in it; these recipients are disclosed only in the automatic cookie declaration, which additionally contradicts itself by describing the analytics cookies as non-identifying right next to the cross-site tracking identifier MUID.

Remediation: condition the firing of the Facebook pixel, the Bing UET tag and the Microsoft Clarity session recording on actual consent, so that under a refusal (gcs=G100, asc=D) these requests do not go out and no session recording is performed; name all web recipients in the privacy notice — Microsoft (Clarity and Bing Ads) and Meta — and describe the session recording explicitly as a separate processing operation; reconcile the description of the analytics cookies as ’non-identifying’ with the actual use of the cross-site MUID identifier and of session recording; and consider setting the basic protective headers (Content-Security-Policy, Referrer-Policy, X-Frame-Options, X-Content-Type-Options).

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