Technical audit · 27.09.2026

ulemiste.ee

Website of the Ülemiste Shopping Centre in Tallinn

The website of the Ülemiste shopping centre — one capture, six pages, 636 requests. The Cookiebot consent platform is in place, and Google Analytics and Adform obey it. The Meta pixel does not: it sends events from the fourth second, before any choice, and keeps going after the visitor has refused everything. There is no way to refuse on the banner's first screen, and consent cannot be withdrawn at all. The 'withdraw consent' link leads back to the same banner, whose main button is 'Yes, everything's fine', and every reopening in the capture ends with a record of full consent.

Request timeline

+0 s · entering the homepage
Redirect ulemiste.ee → www.ulemiste.ee. The site runs on WordPress and is served by Zone hosting (Apache / ZoneOS). There is no Content-Security-Policy header.
+1.0…+1.3 s · consent platform and tags
Cookiebot (uc.js, configuration, cc.js), and at the same time — Google Tag Manager GTM-TVHBW9W, the legacy UA-2561837-1 tag, reCAPTCHA, and AddToAny.
+3.4…+4.8 s · the Meta pixel and chat
connect.facebook.net/en_US/fbevents.js (+3.5 s), configuration of pixel 235999197630495 (+4.0 s), the first events to www.facebook.com/tr (+4.3 s). The Askly chat receives a visitor identifier and opens a session via websocket (+4.8 s).
+4.2 s · the Google Analytics identifier
A Google Analytics client identifier is created. From the first navigation (+33 s), it is carried in the addresses of all subsequent pages via the _gl parameter.
+244 s · full consent
Cookiebot records consent for all three categories. Immediately after — Google Analytics 4 G-ZLQEVWS163, stats.g.doubleclick.net, www.google.ee/ads/ga-audiences, and Adform. The client identifier is the one created at +4.2 s.
+249.9…+301 s · attempts to withdraw
The banner is reopened twice — at +249.9 s and +298.6 s. Both times Cookiebot records full consent (+281.4 s and +301.0 s), and Adform fires anew. Not a single refusal record.

Declared versus actual

✓ Controller — Ülemiste Center OÜ; contact info@ulemiste.ee (policy, sections 1.1, 4.5) — declared
✓ Consent is given via the banner on the first visit; consent is not requested for necessary cookies (cookie terms page) — declared
✓ Choices can be changed and consent withdrawn at any time; all cookies except necessary ones can be deleted (cookie terms page) — declared
✓ Cookiebot declaration, updated 07.09.2026: Meta cookies (_fbp and others) and Adform — 'Marketing'; _ga, _ga_#, _gid (up to two years) — 'Statistics' — declared
✓ Statistics cookies, according to the banner text, collect and report data anonymously — declared
✓ Legal bases for processing — consent, contract, legal obligation, legitimate interest (policy, section 3.3) — declared
✓ Retention periods for all purposes, including marketing — 'in accordance with the periods specified in law' (policy, section 3.4) — declared
✓ Recipients — authorised processors, accountants, couriers, payment intermediaries; named individually — Maksekeskus AS (policy, section 3.5) — declared
✓ Consent may be withdrawn at any time; a complaint may be lodged with the Andmekaitse Inspektsioon (policy, sections 4.4, 4.6) — declared
+ The Meta pixel runs before any choice in the banner and after a recorded refusal, although the declaration itself classifies it as marketing — not declared
+ There is no separate button for withdrawing consent; the Cookiebot widget with such a button is disabled — not declared
+ The withdrawal link on the cookie terms page leads to the same banner, whose main button is consent to everything — not declared
+ The Google Analytics identifier is created before consent and carried in page addresses — not declared
+ The privacy policy does not mention cookies, web analytics, or advertising pixels — not declared
+ Google reCAPTCHA and AddToAny are not named in the cookie declaration — not declared

Transfer timings

+3.5 s connect.facebook.net

fbevents.js and the configuration of pixel 235999197630495.

+4.3 s www.facebook.com

The Meta pixel's first events; they repeat on all six pages.

+4.8 s sessions.chat.askly.me

A chat session with a persistent visitor identifier.

+161 s consent.cookiebot.com

logconsent: preferences, statistics, and marketing switched off.

+200.7 s www.facebook.com

One of the pixel's six requests after the recorded refusal.

+244.4 s region1.analytics.google.com

GA4 G-ZLQEVWS163; the identifier was created before consent.

+244.7 s track.adform.net

Trackpoint 2025614.

+301.0 s consent.cookiebot.com

The second reopening of the banner again ended with a record of full consent.

Detected trackers

Indicators of GDPR non-compliance

Context

ulemiste.ee is the website of the Ülemiste shopping centre in Tallinn. The controller is Ülemiste Center OÜ (registration code 10872385, Suur-Sõjamäe 4, Tallinn). The site runs on WordPress, hosted by the Estonian provider Zone; the server header reads Apache / ZoneOS. There is no Content-Security-Policy header. The site is available in Estonian, Russian, English, and Finnish. Consent is managed by Cookiebot.

The measurement is a single capture of six page loads: the homepage in Estonian, the Russian homepage twice, and the cookie terms page three times — the page on which refusal, consent, and withdrawal were tested. In total, 636 requests to 21 hosts. Of these, 23 requests to edge.microsoft.com are the browser’s built-in translator; they have nothing to do with the site and are excluded from the review. Some pages were viewed in the browser’s machine translation into Russian, which is why the wording in screenshots 4 and 5 differs from the original.

Processing is described by two documents: the cookie terms page with the Cookiebot declaration (updated September 7, 2026) and a separate privacy policy.

Who receives data directly

Before any choice — Meta (pixel), Google (Tag Manager, reCAPTCHA, Fonts), AddToAny, Askly (chat), Cookiebot. After consent, they are joined by Google Analytics 4 with its advertising endpoints and by Adform.

Declared versus actual

The consent platform here is real. Cookiebot records decisions, Google Analytics 4 and Adform stay silent before consent, and the cookie declaration lists Meta, Google, Adform, and YouTube in detail, by category. The discrepancies are concentrated in three places: the Meta pixel, the way refusal and withdrawal work, and the privacy policy itself.

First — the Meta pixel does not obey the consent platform. The pixel’s script loads at +3.5 s, and at +4.3 s the first events go to www.facebook.com/tr. This happens on each of the six pages opened, before any choice in the banner. At +161 s, the visitor refuses everything except the necessary. Cookiebot records this, and the cookie terms page shows the status ‘Keeldu’. The pixel keeps working: six more requests go out before the next decision. Moreover, some requests to Meta fire at the same moment as presses of the banner’s own buttons — 10 ms before the decision is written to the Cookiebot log. This is how the pixel’s automatic events behave when they record clicks on a page. The declaration itself classifies Meta cookies as marketing — a category that requires consent.

Alongside this is a less visible detail. The Google Analytics identifier is created at +4.2 s, long before any decision. From the very first navigation, it travels in page addresses via the _gl parameter. When consent is finally given, analytics continues with exactly this identifier. Data collection to Google does not begin before consent, but the label under which the visitor will be counted is issued earlier.

Second — refusing is hard, withdrawing does not work. The banner’s first layer offers ‘Jah, kõik sobib’ and ‘Soovin täpsemalt valida’. There is no refuse button, and the heading ‘Jätkamiseks luba endale mõned küpsised!’ presents cookies as a condition for continuing. Refusal requires the second layer, where the toggles are off, and a press of ‘Luba valik’. Consent takes one click; refusal takes two or more.

Withdrawal is in a worse state. The cookie terms page promises that choices can be changed and consent withdrawn at any time. But the link ‘Muuda küpsiste eelistusi või keeldu nõusolekust’ withdraws nothing — it simply reopens the same banner, where the main button is once again ‘Jah, kõik sobib’. There is no separate withdraw button anywhere. In the Cookiebot settings the browser received, the floating widget with a withdraw button is explicitly disabled (enabled: false). After full consent at +244 s, the banner was reopened twice in the capture. Both times Cookiebot recorded full consent for all three categories, and Adform fired anew. The log contains no refusal record after +244 s.

Third — the privacy policy does not describe the website. It lists four legal bases as a single list, with no link to purposes. The retention period for all purposes, including marketing, is reduced to the formula ‘in accordance with the periods specified in law’. It says not a word about cookies, analytics, or advertising pixels. Everything a visitor can learn about Meta, Google, and Adform is found only in the Cookiebot declaration on a separate page. The banner, moreover, calls statistics cookies anonymous, although the declaration states right there that _ga stores a unique identifier for two years.

Separately, on functional components. The Askly chat receives a persistent visitor identifier on every page and opens a session even before the visitor has contacted the chat. Google reCAPTCHA and AddToAny load on all pages before any choice. The declaration lists Askly’s data as ‘unclassified’ and does not name reCAPTCHA or AddToAny at all. These are not recorded as separate violations, since a case can be made for the necessity of a chat and form protection. But they do not fit the picture of ’everything under the control of the consent platform’.

Proven: the Meta pixel runs before any choice. 20 requests to www.facebook.com/tr before the first decision, the first at +4.3 s.

Proven: the Meta pixel runs after refusal. The Cookiebot log at +161 s records a refusal across all three categories. The cookie terms page shows the status ‘Keeldu’ with the same time. After that — six more requests to Meta.

Proven: there is no separate withdrawal tool. In the Cookiebot settings, the widget is disabled. The terms page has only a link that reopens the banner. All three reopenings of the banner in the capture end with a record of consent.

Proven: after full consent, refusal is never recorded. After +244 s, the Cookiebot log contains only records of full consent.

Proven: the Google Analytics identifier was created before consent. The timestamp within it is 18:55:50 UTC, i.e. +4.2 s from entry. The same identifier is present in page addresses from the second navigation onward and in GA4 requests after consent.

Not proven: the names of the Meta events. The bodies of the requests to facebook.com/tr were removed during cleaning. The coincidence with presses of the banner’s buttons is established by timing, not by content.

Not established from the file: which buttons were pressed during the reopenings. Clicks are not recorded in a HAR. According to the capture protocol, these were attempts to withdraw consent. The file records their outcome — two records of full consent.

Not verified: whether the Google identifier was written to a cookie before consent. Cookie headers were removed during cleaning. Only the time of its creation and its transmission in page addresses are established.

Boundaries of this observation

The measurement covers the homepage in two languages and the cookie terms page. The shops section, gift cards, and the mobile app were not examined. The observation records browser behavior, not server-side processing. What Meta, Google, and Adform do with the data they receive is not verified by a browser-based measurement.

Pages 4–6 were viewed in the Edge browser’s machine translation. Its requests to edge.microsoft.com are excluded from the count, and banner quotations in this review are given from the Estonian original.

The file has been published cleaned: Cookie headers, the bodies of requests to Meta, and most script bodies were removed. The Cookiebot settings (settings.json) and the consent-log parameters were preserved and can be verified directly from the file. The Google client identifier and the Cookiebot consent identifier are not reproduced in this review.

Legal assessment falls to the competent authority — the Andmekaitse Inspektsioon, which is named in section 4.6 of the policy itself.

Conclusion

The shopping centre runs a fully fledged consent platform, and most of its tags obey it. The exception is the Meta pixel. It sends events from the fourth second on every page, keeps working after a recorded refusal, and fires even on presses of the banner’s own buttons. The Google Analytics identifier is also issued to the visitor before consent and lives on after consent is given.

The choice mechanism works in one direction only. Consent is one click on the first screen. Refusal is possible only via the second layer. Withdrawal does not exist as a function: the page promises it, but the link returns to a banner whose main button is ‘Yes, everything’s fine’. The widget in which Cookiebot provides a withdraw button is disabled. Every reopening of the banner in the capture ended with a record of full consent.

Remedy: bring the Meta pixel under the consent platform, so that it neither loads nor sends events without consent to marketing and falls silent immediately after refusal; do not create the Google Analytics identifier or carry it in page addresses before consent; add a refuse button to the banner’s first layer; enable the Cookiebot widget or another persistent tool with a separate withdraw button, and point the link on the terms page to it; add a section on cookies, analytics, and advertising pixels to the privacy policy, linking each purpose to its own legal basis and a specific retention period; remove the claim of anonymity for statistics cookies from the banner.

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/ulemiste-ee-2026-09-27.har
SHA-256: af5b583e1c862ac6487968bc2da1cb62c639171a98e909e177ee3fe4b718f7b2
Screenshot
Скриншот интерфейса
The first layer of the Cookiebot banner on the homepage (Estonian): 'Jah, kõik sobib' and 'Soovin täpsemalt valida' — no refuse button · 27.09.2026
Скриншот интерфейса
The banner's second layer over the cookie terms page: categories switched off; on the right — a promise that consent can be withdrawn at any time, and the link 'Muuda küpsiste eelistusi või keeldu nõusolekust' · 27.09.2026
Скриншот интерфейса
The bottom of the second layer: only 'Luba valik' and 'Jah, kõik sobib' — no separate refuse button · 27.09.2026
Скриншот интерфейса
The cookie terms page in the browser's machine translation into Russian: the same first layer of the banner — agree, or 'choose more precisely' · 27.09.2026
Скриншот интерфейса
The 'Change or withdraw your cookie settings' block (browser machine translation): the withdrawal link opens the same banner with the same two buttons · 27.09.2026
Re-check snapshot
Awaiting changes
HAR files are stored on EU infrastructure (Proton Drive). SHA-256 is published for integrity verification.