Privacy

This page describes the product's behaviour. It is not a substitute for your own privacy policy.

What is never stored

IP addresses and user agent strings are inputs to a hash and are discarded immediately after it is computed. Neither is written to any table. There is no cookie, no localStorage entry, and no durable identifier of any kind handed to a visitor.

That is also why sites running it do not carry a cookie banner. Consent notices exist to cover storing or reading something on a visitor's device, and this stores and reads nothing. Whether your site needs one for other reasons is a question for your own counsel.

How a visitor is counted

visitor_id = base64url(sha256(daily_salt || site_id || ip || user_agent))[:22]

The salt is per site and rotates every UTC midnight, so the same person is a different visitor id tomorrow. Salts older than the configured retention are deleted. After that deletion a historical visitor id cannot be recomputed even by someone holding the entire database plus a suspect's IP address.

A visit in progress across midnight is stitched into one session by also checking the previous day's salt. That lookback reaches exactly one salt period, and only for a session still inside its timeout. A salt that has already been deleted stays deleted.

What is stored

Signals the tracker obeys

Do Not Track and Global Privacy Control both stop it recording. It skips localhost unless explicitly told otherwise, so a development server never pollutes real numbers.

Where the data goes

It stays on one service and one Postgres database, with no third party in the request path. Raw events are kept for a retention period you set per site or per organisation, and deleted once it passes.