Technical audit · 27.09.2026

wolt.com

Wolt Food and Goods Delivery Service in Estonia

The Wolt delivery service — six pages across three subdomains, 971 requests. The banner is fair: refusal sits on the first screen, all non-essential categories are off by default, and Google Analytics runs in denied mode. But refusal only stops third-party tags. After 'Use only necessary' is clicked, Wolt's own telemetry keeps sending page views and session events together with a browser fingerprint, a device identifier, and a user identifier. The fingerprint is the same across subdomains. The policy classifies this analytics as a legitimate interest and does not mention browser fingerprinting.

Request timeline

+0 s · entering wolt.com
Redirect wolt.com → /ru/est → /en/est: the main site has no Russian version for Estonia. Not a single Set-Cookie header.
+0.8…+3.6 s · scripts before any choice
AppsFlyer (smart banners, +0.8 s), hCaptcha (+3.1 s), Google Sign-In (+3.6 s). Approximate IP-based geolocation from Wolt's own API (+3.1 s).
+3.6 s · DoorDash experimentation system
unified-gateway.dashapi.com — a request for homepage experiment variants carrying a persistent visitor_id, country, language, and a guest flag. Before any choice.
+4.4…+15.5 s · Google in denied mode
GTM-WQGLSQ5 and Wolt's own tag gateway wolt.com/gtag-gw, followed by GA4 G-CP7Z2F7NFM — all requests with gcs=G100.
+127…+188 s · telemetry after refusal
gatekeeper.wolt.com — event packets: session backgrounding and return, page views with addresses. Each contains browser_fingerprint, device_id, wolt_uid, device model, language. At the same time, api.avo.app receives event descriptions with session identifiers.
+201 s · wolt.com after refusal
wolt.com/ru → /ru/kaz. The refusal state is passed on (enrolled: false). DoorDash again receives the same visitor_id as before any choice. Google Analytics — gcs=G100 and a new identifier.
+230…+315 s · another subdomain, the same fingerprint
life.wolt.com — three more packets to gatekeeper.wolt.com with the same browser_fingerprint as on explore.wolt.com.

Declared versus actual

✓ Joint controllers for Estonia — Wolt Oy and Wolt Eesti OÜ (Maakri tn 23a, Tallinn); Wolt is part of the DoorDash, Inc. group — declared
✓ Banner: with 'Allow', cookies are used for personal offers, advertising on other sites, and service improvement; with 'Use only necessary', only cookies needed for the website to work — declared
✓ Consent categories: 'Required' — on and cannot be switched off; 'Functional', 'Marketing', 'Analytics' — off by default — declared
✓ Policy: Wolt Services use pseudonymized identifiers to track and predict service usage and preferences — declared
✓ Policy: analysis of service usage to improve the services — based on legitimate interest — declared
✓ Policy: a table of 24 vendors — Google Analytics, Google AdSense, Google Tag Manager, Upwave, AppsFlyer, hCaptcha, Meta, Firebase, Ravelin, Riskified, Adform, Floodlight, Microsoft Clarity and Bing, Interspace, Iterable, LinkedIn, Taboola, TradeDoubler, Twitter, Yahoo, Reddit, Sentry — declared
✓ Policy: complaints — to the Data Protection Ombudsman (Finland) or another competent local supervisory authority — declared
+ Browser fingerprinting (browser_fingerprint) is mentioned neither in the policy nor in the banner — not declared
+ Wolt's own telemetry keeps running after refusal of analytics — not declared
+ Avo — absent from the vendor table — not declared
+ Datadog — absent from the vendor table — not declared
+ The DoorDash experimentation system (dashapi.com) with a persistent visitor_id is not described as a separate recipient — not declared

Transfer timings

+3.6 s unified-gateway.dashapi.com

DoorDash experimentation system, persistent visitor_id.

+5.0 s region1.google-analytics.com

GA4, gcs=G100; the identifier is not kept between pages.

+68 s explore.wolt.com

log-cookie-consents-interaction, action: Decline.

+127.4 s gatekeeper.wolt.com

Event packet with browser_fingerprint, device_id, wolt_uid.

+127.4 s api.avo.app

Description of a page-view event with session identifiers.

+204.5 s unified-gateway.dashapi.com

The same visitor_id as before any choice.

+230.5 s gatekeeper.wolt.com

life.wolt.com: the same browser fingerprint as on explore.wolt.com.

Detected trackers

Indicators of GDPR non-compliance

Context

wolt.com is the Wolt food and goods delivery service. For users in Estonia, the joint controllers are Wolt Oy and Wolt Eesti OÜ (Maakri tn 23a, Tallinn). Wolt is part of the DoorDash, Inc. group. The site is split across several subdomains: wolt.com is the ordering service itself, explore.wolt.com hosts legal and reference pages, and life.wolt.com hosts articles. Consent is managed by Wolt’s own platform, which stores the decision on the server and passes it between subdomains.

The measurement: 971 requests to 22 hosts. No response sets Set-Cookie. The main site does not offer a Russian version for Estonia: the address wolt.com/ru redirects to the Kazakhstan market, which is why pages 4–6 opened in the Kazakhstan section. The refusal state recorded on the Estonian page remained in effect there.

Processing is described by Wolt’s privacy policy in its Russian and English versions, with a vendor table.

Who receives data directly

Before any choice — DoorDash (experimentation system), Google (Analytics in denied mode, Tag Manager, Sign-In), AppsFlyer, hCaptcha, Apple. After refusal — Wolt’s own telemetry, Avo, and DoorDash again.

Declared versus actual

Wolt’s consent setup is fairer than many. Refusal sits on the first screen, the “Functional”, “Marketing”, and “Analytics” categories are off by default, and the decision is recorded and applies across all subdomains. Google Analytics runs in denied mode throughout the capture: every request carries gcs=G100, and the identifier is not kept between pages. None of the advertising pixels from the vendor table — Meta, Adform, Taboola, Reddit, and others — appears in the capture. The discrepancy lies not in third-party tags but in Wolt’s own analytics.

First — refusal does not stop Wolt’s telemetry. At +68 s on the policy page, the visitor clicks “Use only necessary”. The site records a Decline action, and the saved enrolled: false state is then passed between subdomains. A minute later, gatekeeper.wolt.com goes to work. This is Wolt’s own event collector, and over the capture it receives six packets. They contain session start and end events and page views, indicating the page and section. Every packet transmits a browser fingerprint (browser_fingerprint), a device identifier (device_id), a user identifier (wolt_uid), the device model, and the language.

The browser fingerprint is the key detail. It is calculated from the device’s characteristics and makes it possible to recognise a visitor without cookies. Here it is identical on explore.wolt.com and on life.wolt.com: the visitor is recognised across subdomains after refusal. Fingerprinting constitutes access to information on the device within the meaning of Article 5(3) of the ePrivacy Directive. A strict-necessity defence is hard to make here: the packets contain page views and session events, i.e. usage analytics. That is exactly how Wolt’s banner describes the “Analytics” category, which the visitor declined.

Alongside the telemetry, Avo Inspector keeps working after refusal. It receives descriptions of the same events — event and property names with their types — along with session identifiers. And on the Russian homepage after refusal, DoorDash’s experimentation system again receives a persistent visitor_id — the same one that was sent there in the fourth second, before any choice was made.

Second — the policy and the banner say different things about analytics. The banner presents analytics as a category that can be enabled only through consent. The policy classifies analysis of service usage as a legitimate interest and describes “pseudonymized identifiers to track and predict your app and service usage”. It says nothing about browser fingerprinting. A visitor who read the banner believes they have refused analytics. A visitor who read the policy might guess that this is not so. But neither of them will learn that they are recognised by a browser fingerprint.

The vendor table in the policy is detailed: 24 services, each with a purpose and a link to its policy. Two of the services active in the capture are missing from it. Avo receives event data after refusal. The Datadog script loads on the explore and life pages, although no data submissions occurred in the capture.

Proven: refusal is recorded and applies across all subdomains. The log-cookie-consents-interaction request with a Decline action at +68 s. Afterwards, wolt.com passes the enrolled: false state with the same timestamp.

Proven: after refusal, Wolt’s telemetry sends events with a browser fingerprint. Six packets to gatekeeper.wolt.com. Each contains browser_fingerprint, device_id, wolt_uid, and session or page-view events.

Proven: the browser fingerprint is the same across subdomains. Packets from explore.wolt.com and life.wolt.com carry one and the same value.

Proven: DoorDash receives the same visitor_id before any choice and after refusal. The value matches in the requests at +3.6 s and at +204.5 s.

Proven: Google Analytics respects the denial. Every request carries gcs=G100, and the client identifiers differ between pages.

Not established: how Wolt uses the fingerprint on its side. Some telemetry data may serve fraud prevention. But the packets in the capture contain session events and page views, not security checks.

Not established: the value of device_id. It was removed when the file was cleaned. The match is established by the browser fingerprint, not by this field.

Boundaries of this observation

The measurement covers public pages on three subdomains, without signing in to an account and without placing an order. The Wolt app was not examined. The observation records browser behavior, not server-side processing. What Wolt, DoorDash, and Avo do with the data they receive is not verified by a browser-based measurement.

Pages 4–6 opened in the Kazakhstan section of the site because the main site’s Russian version redirects there for Estonia. The refusal made on the Estonian page remained in effect there. The telemetry findings rely on packets from both sections, and the browser fingerprint in them is identical.

Wolt’s news site in the third screenshot is a separate resource with its own banner. It is not part of the HAR capture and is not assessed in this review.

The file has been published cleaned: Cookie headers and the values of device_id and session identifiers were removed. The browser fingerprint and visitor_id are not reproduced in full in this review. Their match across requests can be verified in the published file.

Legal assessment falls to the competent authority. The policy names the Finnish Data Protection Ombudsman or another competent local authority; for users in Estonia, that is the Andmekaitse Inspektsioon.

Conclusion

Wolt has set up the choice the way it should be set up: refusal on the first screen, categories off by default, a decision remembered across all subdomains, and Google Analytics in denied mode. But this choice applies only to third-party tags. After refusal, Wolt’s own telemetry keeps sending page views and session events together with a browser fingerprint, a device identifier, and a user identifier. The identical fingerprint makes it possible to recognise the visitor across subdomains. After refusal, data also goes to Avo, and a persistent visitor identifier goes to DoorDash’s experimentation system.

The policy classifies this analytics as a legitimate interest, the banner as consent-based, and neither of them mentions browser fingerprinting. Avo and Datadog are absent from the vendor table.

Remedy: make Wolt’s own telemetry subject to the banner decision — do not send page-view and session events after refusal of analytics; do not calculate or transmit a browser fingerprint without consent, or limit it strictly to security purposes and disclose that purpose; do not send a persistent visitor_id to the experimentation system before consent; align the policy and the banner on a single legal basis for analytics and describe browser fingerprinting explicitly; add Avo and Datadog to the vendor table.

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/wolt-com-2026-09-27.har
SHA-256: be11a9f0d8c462d7439b5497565802a8b7963fdd292fc5da2029b94802ce20bd
Screenshot
Скриншот интерфейса
The banner on wolt.com (Tallinn, English): 'Use only necessary', 'Manage', 'Allow' — refusal is available on the first screen · 27.09.2026
Скриншот интерфейса
The privacy policy page in Russian with the same banner: 'Use only necessary', 'Manage', 'Allow' · 27.09.2026
Скриншот интерфейса
Wolt's separate news site (Newsroom) with its own banner 'Accept cookies' / 'Reject'; not part of the HAR capture · 27.09.2026
Re-check snapshot
Awaiting changes
HAR files are stored on EU infrastructure (Proton Drive). SHA-256 is published for integrity verification.