Privacy

Privacy as architecture, not as a setting

Most privacy claims in analytics describe a configuration you could switch off. These describe how the system is built: the raw IP address is gone before the request handler returns, and there is no code path that could restore it.

No raw IP storedCookieless modeDNT & GPCGDPR export & erasure
At collection

What happens to a request before anything is written

The collector is the only component that ever sees an IP address, and it is written so that seeing one is transient.

  • The IP is hashed with a daily-rotating salt and the original is discarded in the same function. Nothing downstream, not ClickHouse, not Postgres, not a log line, receives it.
  • Salts are scoped per project and per day, so two hashes cannot be joined to prove the same person visited two tenants, or the same site on two days.
  • Geography is resolved in-process from a local MaxMind database. No lookup leaves your network, and it degrades gracefully to no geography rather than falling back to a hosted service.
  • Company identification uses the autonomous system the request arrived on, not personal data. Consumer ISPs and hosting providers are filtered out, so a visitor at home is never labelled with their broadband provider.
  • PII masking is applied at ingest to the URL, path, referrer, title and both the parsed and verbatim property payloads, under per-project rules.
  • Consent is enforced server-side. An opt-in batch arriving without consent is refused by the collector, and the explicit decision is logged.
Falorb property settings showing per-property domain, timezone, identity scope and retention configuration.Falorb property settings showing per-property domain, timezone, identity scope and retention configuration.
In the browser

A tracker that collects less than it could

Several of these are decisions to not collect something that would have been useful.

Form values
Never captured, at any setting. The tracker records that a form was submitted and which form it was, never what was typed into it.
Cookieless mode
A session-scoped identifier held in memory. Nothing is persisted to the device, so there is no storage to disclose or consent to.
Do Not Track & GPC
Both respected, and configurable. A visitor signalling either is not collected from.
Session replay
Deliberately not implemented. Recording somebody's screen is a far larger commitment than counting their clicks; the extension point is left open for deployments that decide otherwise.
Third-party requests
None. The script is served from your own subdomain and posts to your own collector.
Size
2,943 bytes gzipped, zero dependencies, small enough to read the whole thing before you put it on your site.
Subject rights

Export and erasure that are jobs, not promises

A GDPR feature that exists as a support email is not a feature. Falorb models data requests as rows and processes them with a worker that runs every two minutes.

ExportThe complete profile and event history for one person, produced as a background job rather than a query somebody runs by hand.
ErasureCascades through both stores and tombstones the profile, so a later event from the same device cannot quietly recreate the person you just deleted.
RetentionPer-project retention is enforced by a job, not declared in a settings page. Events carry a 25-month table-level TTL as a backstop.

The dashboard also generates a privacy disclosure for each property from its real configuration (the retention window, the identity scope and the consent mode actually in force) rather than from a template somebody filled in once.

The boundary

What Falorb will not do

Stated in the repository, not just on a marketing page.

Cross-site tracking of sites you do not own is not implemented and will not be. It requires third-party cookies, dead in modern browsers, persistent fingerprinting, or purchased data-broker profiles, and it is unlawful under GDPR and ePrivacy without a consent that this kind of collection never genuinely obtains.

Everything Falorb knows derives from first-party activity on properties you operate. Anonymous visitors are never joined across domains. Identity unifies only on a deterministic signal: the same identify() id on both properties, or a click through a decorated link between two of your own domains.

The integrations design carries the same boundary forward: nothing that ships personal data to an ad network for cross-site retargeting is planned, because it would reintroduce through a side door exactly the tracking the platform deliberately does not do.

How identity actually resolves
Questions

Privacy, in practice

Do I need a cookie banner to use Falorb?

That depends on your jurisdiction and your configuration, and a software vendor is the wrong party to give you a legal answer. What is true technically: in cookieless mode nothing is persisted on the visitor's device at all, which removes the storage-access basis for a consent requirement in most readings of the ePrivacy Directive. In its default mode Falorb uses a first-party identifier, no third-party cookies, and stores no IP address. Many self-hosted deployments run cookieless and drop the banner; that decision is still yours to take with your own advice.

Where does the data physically live?

On the machines you run. Falorb has no cloud component, no telemetry back to a vendor and no outbound connection other than the ones you configure yourself: an email provider for alerts, a Slack webhook if you add one. If you deploy it on a server in Frankfurt, the personal data stays in Frankfurt, which is a materially simpler transfer story than any hosted analytics product can offer.

What exactly is stored about a visitor?

The events they generated, a daily-rotating hash of their IP scoped to that project, a device identifier, coarse geography from a local GeoIP database, parsed user-agent facts, and whatever you deliberately attach with identify() or track(). Not stored: the raw IP, form field values, anything from a third-party cookie, and anything about their activity on sites you do not operate.

How does erasure work?

A data request creates a job. Erasure cascades through both ClickHouse and Postgres and tombstones the profile so a later event cannot silently resurrect the person. Export produces the full profile and its event history. Both run in the background rather than blocking a request, and the worker that processes them runs every two minutes.

Why is cross-site tracking refused rather than optional?

Because there is no lawful, durable way to build it. It requires third-party cookies, which modern browsers have removed, persistent fingerprinting, or purchased data-broker profiles, and under GDPR and ePrivacy it needs consent that this kind of collection never actually obtains. Shipping it as an option would mean shipping a feature whose honest documentation is a warning. It is documented in the repository as permanently out of scope.

This page describes how the software behaves. It is not legal advice, and no analytics tool can make you compliant on its own: that depends on what you collect, why, and what you tell your visitors. The quickstart covers the settings referred to here.

Analytics that does not need a data-processing agreement

Because there is no processor. It runs on your machines, and the personal data never leaves them.