Technical audit · 16.06.2026

rotterdam.nl

Official website of the City of Rotterdam

Rotterdam.nl is the official website of the City of Rotterdam. Homepage scan: 59 requests, 5 domains. Most of it is first-party resources and functional services: the municipality's help chatbot and an accessibility text-to-speech tool. But before the user makes any choice, a third-party A/B-testing and personalization platform initializes on the page, whose purpose is to profile visitor behavior in order to select page variants. No separate visible consent mechanism was found in the traffic, and this platform is not named in the policy. The scan contains no third-party advertising, no Google analytics, and no social media pixels.

Request timeline

519 ms · experimentation and personalization platform
The engine of a third-party A/B-testing and personalization platform loads and initializes. Its purpose is to assign the visitor a code and tailor content — that is, to profile behavior. This happens within the first second, before consent.
706 ms · accessibility text-to-speech
A page text-to-speech tool loads — an accessibility feature, not tracking.
1256 ms · help chatbot
The municipality's help chatbot widget loads — a functional tool for visitor questions.
no visible consent mechanism, no cookie set
No separate consent-collection mechanism was found in the traffic, and not a single cookie was set during the session. The personalization platform has already initialized by this point.

Declared versus actual

+ Kameleoon — not declared

Detected trackers

Indicators of GDPR non-compliance

Context

www.rotterdam.nl is the official website of the City of Rotterdam (Gemeente Rotterdam): municipal services, information for residents, requests to city departments. The data controller is the Municipality of Rotterdam. The site is informational and service-oriented.

Scan: 59 requests to 5 domains, homepage, captured in a clean Edge browser without a VPN or ad blocker. The technical stack includes functional services and one third-party personalization platform.

Who receives the data

An A/B-testing and personalization platform was observed here.

Most requests go to the site’s own domain. Among third-party services, the experimentation and personalization platform, the municipality’s help chatbot, and the accessibility text-to-speech tool run. By purpose, the personalization platform profiles visitor behavior in order to select page variants. The chatbot and text-to-speech are functional services. The scan shows no Google Analytics, no advertising networks, no social media pixels, and no session recording.

No separate visible consent-collection mechanism was found in the traffic, and not a single cookie was set during the session. Meanwhile, the personalization platform initializes within the first second — that is, before any possible choice.

Before the user’s choice, a third-party A/B-testing and personalization platform initializes. The scan shows its engine loading; the platform’s purpose is to profile behavior in order to select page variants. Functional services — the chatbot and text-to-speech — relate to the site’s operation and accessibility, not profiling.

It’s worth noting precisely: this scan shows the fact of the platform loading and initializing, not a separate data beacon. But the initialization of a personalization platform is itself the launch of profiling logic, which requires consent.

Undisclosed service

A separate point. The site’s policy does not name the third-party A/B-testing and personalization platform. In other words, a service that profiles visitor behavior in order to select page variants is not disclosed in the list of tools used.

Conclusion

Rotterdam.nl is a moderate case. There is no third-party advertising, Google analytics, or social media pixels on the site, and the chatbot and text-to-speech are functional — this works in the site’s favor. But before consent, a third-party A/B-testing and personalization platform initializes, profiling behavior, and it is not named in the policy. The key takeaway for the reader: a personalization platform is not a functional service but a profiling tool, and it should either be launched after consent or be disclosed in the policy and held pending consent. It would be enough to defer the platform’s initialization until consent and to add it to the list of tools used.

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