Technical audit · 12.09.2026

if.ee

An insurance company's site

The site of the insurer If — a single capture of the private-client page, 73 requests, 14 nodes. The OneTrust consent management platform is in place and runs normally, the banner offers refusal on the first screen («Necessary only»), and Google's consent mode is respected — the GA4 and Google Ads events carry status gcs=G100, both storages denied, cookieless. There are two observations, both moderate. The Google Ads conversion tag and the measurement requests fire before the choice is recorded (under denial, but they fire). And the chat platform Puzzel, which sends tracking analytics, is not named in the cookie declaration, although the declaration is otherwise detailed and lists a dozen and a half recipients.

Request timeline

+367…+369 ms · the CMP and the container start together
cdn.cookielaw.org/otSDKStub.js (+367 ms) and www.googletagmanager.com/gtm.js (+369 ms) — the OneTrust consent platform and the tag container initialise almost simultaneously. Azure Application Insights (+397 ms).
+692…+1269 ms · Google Ads before the choice (under denial)
pagead2.googlesyndication.com/ccm/collect (six requests) and /pagead/conversion/11312138045 (en=conversion, +1136 ms) — the Google Ads conversion tag. All with status gcs=G100 (both storages denied), but they fire before the choice is recorded.
+1082…+6091 ms · analytics (cookieless)
region1.google-analytics.com/g/collect — GA4 page_view and PageLoad with gcs=G100; westeurope-5.in.applicationinsights.azure.com/v2/track — Azure telemetry (+1328 ms).
+1469…+2256 ms · Puzzel chat
app-state.puzzel.com/persistent_state, app-commsrv.puzzel.com/time, app-statistics.puzzel.com/api/v1/tracking (+2239 ms) — the chat platform sends state and analytics. Puzzel is not named in the cookie declaration.

Declared versus actual

✓ Controller — If P&C Insurance AS (Lõõtsa 8a, 11415 Tallinn); DPO@if.ee, data-subject requests — dsar@if.ee — declared
✓ Consent management — OneTrust; a banner with «Necessary only» / «Accept all» buttons and category settings — declared
✓ The cookie declaration (ODT) names: EPIServer, reCAPTCHA, Microsoft Application Insights, Visual Website Optimizer, Google Analytics, Confirmit, Sleeknote, HotJar, Adform, Bing, DoubleClick/Google Ads, Facebook, LinkedIn, Microsoft Ads, YouTube — declared
✓ Support chat is classified as «necessary» cookies — declared
✓ Supervisory authority — Andmekaitse Inspektsioon — declared
+ The chat platform Puzzel (sends persistent_state and tracking analytics) is not named in the cookie declaration — not declared
+ The Google Ads conversion tag fires before the choice is recorded in the banner (under the gcs=G100 denial) — not declared

Transfer timings

+367 ms cdn.cookielaw.org

otSDKStub.js; auto-blocking works, not 404.

+692 ms pagead2.googlesyndication.com

ccm/collect, gcs=G100; conversion tag at +1136 ms.

+1082 ms region1.google-analytics.com

GA4 page_view, gcs=G100.

+2239 ms app-statistics.puzzel.com

api/v1/tracking; Puzzel not named in the declaration.

Detected trackers

Indicators of GDPR non-compliance

Context

if.ee is the site of the insurer If P&C Insurance AS (Lõõtsa 8a, Tallinn), part of the Scandinavian insurance group If. Insurance is a sensitive area: the visitor chooses products relating to health, vehicles, home, travel, pets. The processing is described by a policy (data-subject rights, DPO@if.ee, dsar@if.ee) and a detailed cookie declaration; consent is managed by the OneTrust platform.

The capture is a single recording of the private-client page (/eraklient): 73 requests, 14 nodes. The infrastructure is Scandinavian: the design system on if.eu, images from imgi.no (Norway).

Who data goes to directly

Analytics — Google Analytics 4 and Google Ads (both under denial, gcs=G100, cookieless). Consent management — OneTrust. Monitoring — Microsoft Azure Application Insights. Chat platform — Puzzel (sends state and analytics). Functionally — reCAPTCHA, web-vitals, the design system, images. The first party is If’s infrastructure.

Declared versus actual

The site is built tidily, and the observations here are moderate — two points.

Consent works, Google’s mode is respected. The OneTrust platform runs normally: all cookielaw.org requests carry status 200 (the auto-block is not broken), the banner offers refusal on the first screen — the «Necessary only» button next to «Accept all». The GA4 events (page_view, PageLoad) and Google Ads carry status gcs=G100: both storages denied, pings cookieless. This is correct behaviour when consent has not been given.

But the Google Ads conversion tag fires before the choice. The pagead2.googlesyndication.com/ccm/collect requests (six of them) and the conversion tag /pagead/conversion/11312138045 (en=conversion, +1136 ms) go out at +692…+1269 ms — before the user made a choice in the banner (no decision POST is observed in this short capture; gcs=G100 is the default denied state). The actual transfer is held by consent mode — the data is under denial, cookieless — but the conversion tag itself initialises and sends requests before consent. For an insurance site the gating of advertising tags should be made strict: before the choice they should not fire even under denial.

And the chat platform is not disclosed. The cookie declaration is detailed — it names a dozen and a half recipients individually (EPIServer, reCAPTCHA, App Insights, VWO, Google Analytics, Confirmit, Sleeknote, HotJar, Adform, Bing, DoubleClick/Google Ads, Facebook, LinkedIn, Microsoft Ads, YouTube). But the chat platform Puzzel, which in the capture loads and sends persistent_state and tracking analytics (app-statistics.puzzel.com/api/v1/tracking), is not mentioned in the declaration by name. In the OneTrust settings panel the chat is classified as «necessary» («chatting with our customer-service specialists»), which explains its loading as a functional component. But its separate analytics and the recipient Puzzel itself remain undisclosed — and this is a Norwegian contact-centre platform, a separate recipient of data.

Proven: OneTrust runs normally. All cookielaw.org requests carry status 200; the banner with refusal on the first screen is recorded in the screenshots.

Proven: Google’s consent mode is respected. All GA4 and Google Ads requests carry gcs=G100, cookielessly.

Proven: the Google Ads conversion tag fires before the choice. /pagead/conversion/… at +1136 ms, ccm/collect at +692…+1269 ms — before the decision POST (which is absent from the capture).

Proven: Puzzel sends analytics and is not named in the declaration. app-statistics.puzzel.com/tracking at +2239 ms; a search of the declaration does not find the name Puzzel.

Not established: the consent decision. In this short capture no OneTrust decision POST is observed; gcs=G100 indicates the default denied state, the action itself is not visible in the recording.

Not proven: profile persistence. The GA cid was set in the same second as the capture — a fresh session; «a profile from previous visits» is not asserted.

Not proven: the content of the Puzzel and Google Ads requests. What tracking and ccm/collect carry beyond service fields cannot be read from the cleaned file.

Observation boundaries

The capture covers a single page (private client) and records browser behaviour, not server-side processing: what the parties do with the received (storage-denied) signals and how the GTM container is configured is not verified by a browser capture. The classification of the Puzzel chat as «necessary» is the site’s position from the settings panel; the chat’s functionality justifies it, but its separate analytics (tracking) and the disclosure of the recipient are a separate question. The images from imgi.no and the design system from if.eu are attributed to the If group’s infrastructure.

The file is published cleaned of personal data (63 redactions, self-check clean); the load order, the gcs=G100 status of the Google requests, the 200 statuses of OneTrust and the Puzzel requests can be verified directly against the published file and the screenshots. The banner and its buttons are from the screenshots (live UI).

The legal assessment is made by the competent authority — Andmekaitse Inspektsioon.

Conclusion

The insurance site is built tidily and is noticeably closer to the norm than many. The OneTrust consent platform runs normally, the banner offers refusal on the first screen («Necessary only»), and Google’s consent mode is respected: analytics and conversion measurement run under denial, gcs=G100, cookieless. The cookie declaration is detailed and names a dozen and a half recipients individually.

There are two observations, and both are moderate. The Google Ads conversion tag and the ccm/collect requests initialise and fire before the user made a choice in the banner — this time without a data leak, because consent mode held them; but for an insurance site the gating should be made strict, so that advertising tags do not fire before consent even under denial. And the chat platform Puzzel, which sends analytics, is not named in the otherwise detailed declaration — even though it is a separate Norwegian contact-centre platform and a separate recipient.

Remediation: condition the initialisation of the Google Ads conversion tag and the ccm/collect requests on actual consent, so that before the choice they do not fire; name the chat platform Puzzel in the cookie declaration as a recipient with its purpose stated (chat) and its separate analytics (tracking); otherwise the current configuration — a working OneTrust, refusal on the first screen, Google’s consent mode respected — can serve as a reference.

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/if-ee-2026-09-12.har
SHA-256: f9fe19fdce6ab9060eb4a15c63fd44e24555cb7afcd16da89acdbcfc50fb8b73
Screenshot
Скриншот интерфейса
Consent banner: «Necessary only» / «Accept all» — refusal on the first screen · 12.09.2026
Скриншот интерфейса
Settings: chat is classified as «necessary» cookies · 12.09.2026
Re-check snapshot
Awaiting changes
HAR files are stored on EU infrastructure (Proton Drive). SHA-256 is published for integrity verification.