ALL SYSTEMS CAVE |
zero trackers · zero cookies open source · agplv3 + mit three devs · one cave hosted in the eu zero trackers · zero cookies open source · agplv3 + mit three devs · one cave hosted in the eu
zéro traceurs · zéro cookies open source · agplv3 + mit trois devs · une cave hébergé en europe zéro traceurs · zéro cookies open source · agplv3 + mit trois devs · une cave hébergé en europe
| PARIS · --:--
corploc CorpLoc
ship it
corploc / tools / becounted
// tool · alpha ·

track events,
not people.
track les events,
pas les gens.

Self-hosted event tracking platform. Fire HTTP events, stream them in real time, query time-series stats. Zero cookies, zero PII. Go API + React dashboard + TimescaleDB. Plateforme de tracking d'événements auto-hébergée. Envoie des événements HTTP, stream en temps réel, requête des stats time-series. Zéro cookies, zéro PII. API Go + dashboard React + TimescaleDB.

~/cave · becounted
$ curl -X POST https://count.example.com/api/v1/events \
  -H "Authorization: Bearer sk_live_..." \
  -d '{"trigger": "signup", "metadata": {"plan": "free"}}'
→ {"id": "evt_9f2a", "trigger": "signup", "ts": "2026-04-26T14:02:00Z"}

$ curl https://count.example.com/api/v1/triggers/signup/stats?bucket=1h
┌──────────────────┬───────┬─────────┐
│ bucket           │ count │ uniques │
├──────────────────┼───────┼─────────┤
│ 2026-04-26 12:00 │   247 │     182 │
│ 2026-04-26 13:00 │   312 │     201 │
│ 2026-04-26 14:00 │    34 │      28 │
└──────────────────┴───────┴─────────┘
→ no cookies set · no PII stored
$
stars
language
latest version
0
cookies
// 01

how it works

3 steps · no surprises
// 01

deploy.

docker compose up — Go API, React dashboard, TimescaleDB, and Redis. Or make dev for local development with hot-reload.

// 02

create triggers.

Triggers are named event buckets. Create them via the dashboard or API. Set visibility (private/public), tags, and event modes.

// 03

fire & query.

POST /api/v1/events with a trigger name and optional JSON metadata. Events stream in real time via SSE. Query time-bucketed stats via the API or dashboard.

// 02

use cases

3 scenarios

indie devs

Track signups, deploys, and feature usage on your side project without selling your users' data to a third-party analytics platform.

privacy-conscious SaaS

Need event tracking for your product but can't send data to external services? Self-host BeCounted, keep everything on your infra.

internal tooling

Track CI/CD events, deploy frequencies, internal tool usage. Fire events from scripts via curl — no SDK needed.

// 03

origin story

We needed event tracking for our own projects but every solution was either cloud-only, expensive, or harvested user data. Plausible is great for page views but we wanted event-level granularity. So we built BeCounted — zero cookies, zero PII, self-hosted first. The OSP auth model came from a question: what if logging in didn't require an identity at all? No email, no username — just a passphrase that rotates on every login.

On avait besoin de tracking d'événements pour nos propres projets mais chaque solution était soit cloud-only, soit chère, soit elle aspirait les données utilisateurs. Plausible c'est bien pour les page views mais on voulait de la granularité événementielle. Donc on a construit BeCounted — zéro cookies, zéro PII, self-hosted d'abord. Le modèle d'auth OSP est venu d'une question : et si se connecter ne nécessitait aucune identité ? Pas d'email, pas de username — juste une passphrase qui tourne à chaque login.

// 04

comparisons

honest positioning

Plausible / Umami

Page analytics tools — they count visitors and page views. BeCounted is event-level tracking: you define triggers and fire arbitrary events with JSON metadata via API.

Segment / Mixpanel

Same category (event tracking) but cloud-hosted, expensive, and your data leaves your servers. BeCounted is self-hosted, open source, and your data stays with you.

// 05

threat model

Zero cookies, zero PII by default. All data stays on your TimescaleDB instance. Zéro cookies, zéro PII par défaut. Toutes les données restent sur ton instance TimescaleDB.

  • No client-side tracking script — events are server-to-server HTTP calls
  • OSP auth model: no email, no username stored. Passphrase hashed with Argon2id
  • Optional GeoIP enrichment can be fully disabled
  • API keys are scoped — grant only the permissions you need
  • Data retention enforced per plan tier — old events are automatically purged
// 06

roadmap

what's next
// 07

faq

5 questions
how is this different from plausible?
BeCounted is not page analytics — it's event tracking. You define triggers and fire events via API. Think self-hosted Segment or Mixpanel, not Plausible.
does it use cookies?
No. Zero cookies, zero localStorage on the tracked side. Events are HTTP POST calls with optional JSON metadata — no client-side persistence.
what's the OSP auth model?
One Single Password. Register gives you a random passphrase. Each login rotates it — you get a new one every time. No email, no username. Privacy by design.
can i use it for free?
Yes. Self-host it — the free tier gives 5 triggers, 7-day retention, 300 events/min. Premium and Enterprise tiers unlock more.
what about GDPR?
No PII is collected by default. Optional GeoIP enrichment (country/city from IP) can be disabled. No consent banner needed without it.
> ESC
↑↓ navigate select esc close