v1.0 · privacy-first

Web analytics that respects your visitors.

One line of code, zero cookies, GDPR-clean by default. See where your traffic comes from without compromising the people who give it to you.

html

Trusted by teams at

Everything you need, nothing you don't

Modern analytics shouldn't require a privacy compromise or a cookie banner. Tally is the smallest possible thing that gives you the answers.

  • 🍪

    No cookies, no banners

    Visitors are counted by hashing IP + user-agent into a daily-rotated salt. Nothing persists across days, nothing identifies a person.

  • Less than 1 KB

    The tracker script is gzipped to under 900 bytes. No frameworks, no bundlers, no third-party requests after the initial pixel.

  • 🛣️

    SPA-aware

    Detects History API navigation automatically. React Router, SvelteKit, Next.js — virtual page views just work, no manual instrumentation.

  • 📊

    Real-time dashboard

    Live visitor count + page-view stream that updates as people land. No 24-hour delay, no aggregation lag.

  • 📁

    Exportable everything

    Download raw events as CSV any time. Your data, your laptop, no vendor lock-in. Pipe it into DuckDB and slice however you like.

  • 🐳

    Self-hostable

    Single Docker container, SQLite by default, Postgres if you outgrow it. Same code as the cloud product. MIT licensed.

Track what matters, not who's clicking

Custom events are one function call. No SDK, no schema, no consent dance — just a name and an optional dict of properties.

  • First-party only — events POST to your own /tally endpoint
  • Properties are aggregated server-side; no per-user history
  • Same API in the browser, in service workers, in Node
javascript
tally('signup', {
  plan: 'pro',
  source: 'docs',
})

tally('export.csv', {
  rows: 12_400,
})

A dashboard you can read at a glance

Today's visitors, top pages, top referrers, conversion funnel — the things you actually look at every day, on one page. No drilldowns required, no time spent learning a query language.

Tally dashboard showing today's visitors, top pages, top referrers, and a conversion funnel
The dashboard. No, there isn't a second tab.

Simple pricing, honest defaults

The free tier stays free, the cloud tiers are flat-rate, and the source code is the same across all three. Cancel any time.

  • Self-hosted

    Free forever, MIT-licensed

    Run it on a $5 VPS.

    • Unlimited sites
    • Unlimited events
    • Forever retention (you control the DB)
    • Community support on GitHub
    Get the source
  • Agency

    $49 / month, billed monthly

    Multi-tenant dashboards for client work.

    • Unlimited sites
    • Up to 10M events / month
    • Per-client subdomains + branding
    • Single sign-on
    • Priority support, 4h response
    Talk to sales

What devs are saying

Early users put it nicely:

  • Replaced GA4 + Cookiebot with Tally in an afternoon. Bundle dropped 38 KB, page-view counts went UP because nobody opted out, and I deleted three privacy-policy paragraphs.
  • I host my own. The Docker compose file is 11 lines. The dashboard answers every question I had about my side project's traffic in five minutes flat.
  • We use Tally for client sites because we don't have to renegotiate consent flows for every project. Drop the script in, go.

Frequently asked

If you have a question that isn't here, mail hi@tally.dev — we like the long ones.

  • Is Tally really GDPR-compliant out of the box?
    Yes. We don't set cookies, we don't fingerprint, and we don't retain anything that would let us re-identify a visitor across days. The salt that hashes IP+UA into a daily visitor ID is rotated every 24h and never persisted. The European Data Protection Board's 2024 guidance on cookie-less analytics covers exactly this design.
  • How does Tally handle single-page apps?
    It listens for History API navigations (pushState / replaceState / popstate) and emits a virtual page view automatically. React Router, SvelteKit, Next.js App Router, Vue Router, Astro view transitions — anything that uses History API works without configuration.
  • Can I self-host?
    Yes — that's the free tier. Single Docker container, SQLite by default, Postgres if you scale past a few sites. Same image as the cloud product, MIT licensed. The full source is on GitHub.
  • How long is data retained?
    Forever on self-hosted (your database, your call). 5 years on Cloud and Agency. Raw events expire after 90 days; everything older is rolled up into daily aggregates so you can keep dashboards meaningful without holding visitor-resolution data.
  • How does Tally compare to Google Analytics 4?
    GA4 is a 280 KB tag, requires a consent banner in most jurisdictions, and ships your visitors' data through Google's ads stack. Tally is under 1 KB, requires no consent banner because it doesn't process personal data, and never leaves your domain. The trade-off is that GA4 has more dimensions to slice by — Tally is intentionally a small set of the questions most projects need answers to.
  • Will it slow my site down?
    The script is async and defer-loaded, so it never blocks rendering. The single POST per page-view fires after the load event. Typical Lighthouse score impact: zero.
  • What about ad-blockers?
    If you serve the script from your own domain (the recommended setup — we provide a /docs/proxy guide), uBlock Origin and AdBlock Plus do not block it. The default tally.dev-hosted script is on most blocklists; first-party hosting solves it.
  • Can I export my data?
    Yes, any time, no charge. Raw events as CSV from the dashboard, full database snapshot via the API. We mean it about no lock-in.

Stop spying on your users.

Two minutes to install. Free forever for self-hosted. No credit card to try the cloud.