Privacy-first web analytics
Cookieless site analytics that counts unique visitors without being able to follow any one of them, reported in the business’s own time zone.
The problem
Site owners want to know which pages people read and where they came from, without cookie banners or handing visitor data to an ad company. It reports pages, referrers, countries and devices with exact counts, and is built so that even someone holding the database cannot reconstruct who visited.
Challenges
Counting visitors without tracking them
Unique visitors normally mean a cookie or a fingerprint. Instead, a visitor is a truncated one-way hash of the site, the address and the browser, salted with a random value that lives only in memory and rolls over every day. The same person produces a different identifier tomorrow, and no raw address is ever stored, so there is nothing to link across days, even from a full copy of the table.
Keeping fake traffic out
An open collection endpoint invites spam. The collector only accepts hits for the registered domain and its subdomains, rate-limits each address, and classifies bots with the same parser the rest of the platform uses, so bot traffic is labelled consistently everywhere.
Days that match the business
A report that splits days at midnight UTC is wrong for a shop in Dhaka. Every report buckets by the organisation’s own time zone, and range limits keep a single query bounded.
Implementation
Tenant isolation in the database
Sites, hits and shared dashboards sit behind row-level security keyed on the signed-in account, so a missing filter in application code returns nothing rather than someone else’s data.
A tiny, respectful script
The embeddable script is small and inline-friendly, honours Do Not Track and ignores local development, so installing it costs nothing measurable and never counts the site’s own developers.
Why this stack
- Go
- A fast, concurrent collector in the same binary as the dashboard API and the rest of the platform.
- PostgreSQL
- Exact counts, row-level tenant isolation and per-site retention without running a second datastore.
- Vanilla JavaScript
- The tracker has no dependencies, so it stays small enough to never be the reason a page is slow.
What it does
- Cookieless tracking script of about 680 bytes, with bot filtering and de-duplication
- Visitors, sources, pages, places, devices and custom events, compared with the previous period
- Goals, funnels, revenue and visitor paths
- Plain-language insights, why-it-changed breakdowns and anomaly alerts by email or webhook
- A realtime view, landing and exit pages, scroll depth and chart notes
- Organisations with roles, usage metering, plans and online payments in taka
- Read-only share links, personal API keys, and full export and import
- Analytics for video and mobile apps