Technical audit · 21.09.2026

partnerkaart.ee

Website of the Partnerkaart loyalty programme of the TKM Grupp retail holding

Website of the Partnerkaart loyalty programme of the TKM Grupp retail holding — one recording, 18 navigations, 743 requests. The Cookiebot consent platform is correctly configured: refusal is on equal footing with consent and is recorded, the Google tag on every page sends not a single request, and the embedded YouTube video is blocked. But after refusal, on the monthly-card and instalment-payment pages, the Askly chat loads: it assigns the visitor an identifier, stores it in the browser — the very same one is used on the next page — and opens a WebSocket session with its server. The declaration keeps Askly among the 'unclassified' items, so Cookiebot lets it through, while the data-processing terms promise to ask permission for everything that is not strictly necessary. The site, which has a self-service login, sets no security headers. The browser did not send a DNT header.

Request timeline

+0 ms · navigation
Opening of partnerkaart.ee: 307 and 301 redirects to www.partnerkaart.ee/et/. Apache server, WordPress. There are no security headers (strict transport, content security policy, frame-embedding denial, content-type sniffing denial, referrer policy) in the recording. The browser did not send a DNT header.
+224521…+233942 ms · self-service and app
Moving to self-service — a redirect to the sso.partnerkaart.ee login (a subdomain of the operator). On the app page the embedded YouTube video is blocked (status 0).
+247546…+252629 ms · the Askly chat after refusal
Monthly-card page: chat.askly.me/cw/chat/latest.js, configuration visitor/3je4oxr8shupgr1d7u1heqss/config, translations, a WebSocket to sessions.chat.askly.me with twVID=01m32m04xypgdqmdyn. Instalment-payment page: the same identifier and twVID, a new WebSocket session.
whole recording · no analytics or advertising
The Google tag loads on each page, but there are no /collect requests; there are no advertising or analytics transmissions in the recording.

Declared versus actual

✓ Controller — TKM Grupp AS, reg. code 10223439, Kaubamaja tn 1, Tallinn; data-protection specialist dpo@tkmgrupp.ee; terms in force from 01.02.2025 — declared
✓ For purchase history and profiling, TKM Grupp and the seller (Kaubamaja AS, Selver AS, TKM Beauty) are joint controllers — declared
✓ Profiling by gender, place of residence, age and purchase statistics (location, basket contents, frequency, payment method) — declared
✓ Cookies: 'we ask your permission to use cookies that are not strictly necessary for the basic functions of the website or for the service you have requested'; consent is withdrawn in the cookie settings — declared
✓ Recipients by category: banks and payment services, auditors and lawyers, TKM Finants AS, TKM Grupp subsidiaries, subcontractors (post, SMS and email marketing), ICT service providers, authorities — declared
✓ Data is, as a rule, not transferred outside the EEA; where necessary — on the basis of standard contractual clauses — declared
✓ Cookiebot declaration (updated 09.09.2026): statistics — Google Analytics; marketing — YouTube and others; unclassified — chat.askly.me (tw-chat-visitor-data-#, __test__), status 'pending' — declared
+ Askly — a chat with a visitor identifier and a WebSocket session after refusal; not named in the terms, not classified in the declaration — not declared
+ Google Fonts and Google Hosted Libraries — recipients of the IP address when resources load — not declared

Transfer timings

+641 ms consent.cookiebot.com

uc.js, inlineoptin mode.

+644 ms www.googletagmanager.com

gtag/js UA-15062025-19; no /collect requests.

+189501 ms consent.cookiebot.com

logconsent.ashx?action=decline.

+247546 ms chat.askly.me

Askly chat; configuration by visitor identifier 3je4oxr8shupgr1d7u1heqss.

+248598 ms sessions.chat.askly.me

WebSocket, twVID=01m32m04xypgdqmdyn; repeats at +252629 ms with the same identifiers.

Detected trackers

Indicators of GDPR non-compliance


Context

partnerkaart.ee is the website of the Partnerkaart loyalty programme of the TKM Grupp retail holding: discounts and bonuses at Kaubamaja, Selver, Delice, I.L.U. and L’Occitane, partner offers, a monthly card with instalment payment, an app and self-service. The controller is TKM Grupp AS, registration code 10223439, Kaubamaja tn 1, Tallinn; the data-protection specialist is dpo@tkmgrupp.ee. The site is built on WordPress, Apache server; the self-service login goes through sso.partnerkaart.ee.

Processing is described by the Partnerprogramm personal-data processing terms (in force from 1 February 2025), the programme terms and the Cookiebot cookie declaration (updated 9 September 2026), attached in two exports. Attached to the material are screenshots of the banner, the details tab and the offers pages.

The measurement consists of one recording lasting about four and a half minutes: the Estonian and Russian home pages, a move to self-service, and the app, monthly-card, instalment-payment, programme-description and offers pages. Seven hundred and forty-three requests. The recording was made on 21 September 2026.

Who data goes to directly

Askly (chat), Cookiebot (consent platform), Google (Fonts, Hosted Libraries; the Google tag — without data transmission), cdnjs. There is no analytics or advertising in the recording; the YouTube video is blocked.

Declared versus actual

The data-processing terms promise to ask permission for all cookies that are not strictly necessary for the basic functions of the site or for a requested service. Recipients are named only by category. The Cookiebot declaration lists Google Analytics under statistics, YouTube under marketing and the Askly chat among the unclassified items, with the status ‘pending’.

The measurement shows the following.

The consent platform works. Cookiebot loads at +641 ms in inlineoptin mode; the banner offers ‘Keeldu’, ‘Kohanda’ and ‘Luba kõik’. The refusal is recorded at +189501 ms (logconsent.ashx?action=decline). The Google tag UA-15062025-19 loads on every page, but there is not a single /collect request in the recording; the embedded YouTube video on the app page does not load (status 0) — the blocking works.

After refusal, the Askly chat operates with a visitor identifier. At +247546 ms, almost a minute after the refusal, the Askly chat loads on the monthly-card page: the script chat.askly.me/cw/chat/latest.js (920,528 bytes), the configuration chat.askly.me/api/visitor/3je4oxr8shupgr1d7u1heqss/config, translation files, and a WebSocket session sessions.chat.askly.me/api/visitor/3je4oxr8shupgr1d7u1heqss with the parameter twVID=01m32m04xypgdqmdyn. The configuration response contains assistantEnabled: true. On the next page, instalment payment, the chat loads again with the very same visitor identifier and twVID — meaning they are stored in the browser. The Cookiebot declaration describes the corresponding storage tw-chat-visitor-data-# as persistent. Askly is among the ‘unclassified’ items, so the consent platform does not block it. The user did not open the chat.

The documents do not reflect this. The terms promise to ask permission for everything that is not strictly necessary; in fact the chat with a persistent identifier operates after refusal. Askly is not named in the terms.

There are no security headers. The loyalty-programme site with a self-service login has no strict transport, content security policy, frame-embedding denial, content-type sniffing denial or referrer policy.

Other nodes: Google fonts and jQuery from ajax.googleapis.com load from the markup on every page; cdnjs.cloudflare.com serves an auxiliary jQuery library. Artefacts of the capture environment — the Microsoft Edge built-in translator (edge.microsoft.com/translate) and the Web eID browser extension — do not relate to the site.

Proven: the refusal is recorded; analytics and video are blocked. By the logconsent.ashx?action=decline request, the absence of /collect and the status 0 of the embedded video.

Proven: the Askly chat loads after refusal. The first request to chat.askly.me at +247546 ms follows the refusal at +189501 ms.

Proven: the visitor identifier persists between pages. The same identifier 3je4oxr8shupgr1d7u1heqss and twVID=01m32m04xypgdqmdyn are used on two different page loads.

Not proven and not asserted: the content of the WebSocket session. The connection frames are not preserved in the recording; only the fact of a session with a visitor identifier is established.

Separately: the browser did not send a DNT header in this recording.

Bounds of observation

The measurement covers eighteen navigations; no self-service login, chat conversation or purchases were performed. Observation captures the browser’s behaviour, not the internal side of the services. The legal assessment is made by the competent authority — in Estonia, Andmekaitse Inspektsioon.

The file is published redacted under a “lean” profile: cookie values in requests have been removed, the Cookie and Set-Cookie headers stripped; the redaction registry records 458 redactions and a checksum. The consent decision is read from the action=decline parameter; the Askly visitor identifiers — from the addresses of the requests themselves; the classification information — from the Cookiebot declaration.

The identification of services relies on domains and address patterns: the consent platform — by cookiebot.com; the chat — by askly.me; the Google tag — by googletagmanager.com/gtag/js and UA-15062025-19; the video — by youtube.com/embed.

Conclusion

A correctly configured Cookiebot consent platform operates on the Partnerkaart loyalty-programme website: refusal is on equal footing with consent and is recorded, the Google tag transmits no data, and the YouTube video is blocked. There is one violation, but it is proven directly from the network: after an explicit refusal, the Askly chat assigns the visitor an identifier, stores it in the browser and opens a WebSocket session with its server, repeating this on every subsequent page. The consent platform lets it through because it is ‘unclassified’ in the declaration, while the data-processing terms promise to ask permission for everything that is not strictly necessary and do not name Askly. The site, which has a self-service login, sets no security headers.

Remediation: classify Askly and place the loading of the chat under consent, or load the chat only when the visitor clicks its icon; name Askly in the data-processing terms; set strict transport, a content security policy, frame-embedding denial, content-type sniffing denial and a referrer 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/partnerkaart-ee-2026-09-21.har
SHA-256: eb58f2b71b2d7b828f296b5bcaf214ee1dcb71b34cb216480a18d09589985787
Screenshot
Скриншот интерфейса
Cookiebot banner on Partnerkaart: 'Keeldu' on equal footing with 'Luba kõik' · 21.09.2026
Скриншот интерфейса
The 'Üksikasjad' tab: Google Analytics cookies in the declaration — there are no requests to Google Analytics in the recording · 21.09.2026
Re-check snapshot
Awaiting changes
HAR files are stored on EU infrastructure (Proton Drive). SHA-256 is published for integrity verification.