Ackee

Self-hosted, privacy-focused analytics tool

Web Analytics ★ 4.7k stars Easy setup MIT

Ackee is a self-hosted, Node-based analytics tool that tracks website visitors while respecting privacy and avoiding cookies. It targets developers wanting minimal, ethical analytics. It is deployed via Docker.

Key features

  • Privacy-focused tracking
  • GraphQL API
  • Clean minimal dashboard
  • No cookies used

Pros & cons

Strengths

  • Lightweight and private
  • Easy to deploy
  • Nice minimal UI

Trade-offs

  • Limited reporting depth
  • Needs MongoDB

Ackee replaces

Last reviewed Sep 13, 2026 · 811 words

Ackee is the analytics tool for people who want to know that a page was viewed and roughly where the visitor came from, and who would rather not have the answer to any other question. It sets no cookies, stores no IP addresses, and its whole dashboard fits on one screen. That restraint is the product. If you need funnels, goals with revenue attached, or per-user paths, you will outgrow it in a week. If a Google Analytics property has been quietly collecting data on a personal site you feel slightly guilty about, Ackee is the smallest honest replacement I know of.

It runs on 256 MB, but the database is the odd part

Ackee itself is a Node process that idles under 100 MB. The catch is that it wants MongoDB, which is unusual in a self-hosted stack where nearly everything else speaks PostgreSQL or SQLite. MongoDB adds another container, another backup routine, and a memory floor that in practice lands around 200 to 300 MB once its cache warms. The 256 MB figure for Ackee is honest; budget about double that for the pair.

The compose file is short:

services:
  ackee:
    image: electerious/ackee
    ports:
      - "3000:3000"
    environment:
      - ACKEE_MONGODB=mongodb://mongo:27017/ackee
      - ACKEE_USERNAME=admin
      - ACKEE_PASSWORD=change-me
      - ACKEE_ALLOW_ORIGIN=https://example.com
    depends_on:
      - mongo
  mongo:
    image: mongo:6
    volumes:
      - ./mongo:/data/db

ACKEE_ALLOW_ORIGIN must list every site that will send events, comma-separated, or the browser's CORS check drops the requests and the dashboard stays blank. That one variable accounts for most of the "Ackee shows nothing" threads I have read. Put the whole thing behind your reverse proxy on a hostname like stats.example.com; the tracker endpoint has to be reachable from every visitor's browser, so this is one of the few analytics services that must be public even when the dashboard is for you alone. Ad blockers will block a path called tracker.js on a subdomain called stats, and renaming both roughly doubles the share of visitors you count, which tells you something about how much any of these numbers should be trusted.

The tracker is one script tag and one decision

Create a domain in the dashboard, copy the snippet, and paste it before </body>:

<script async src="https://stats.example.com/tracker.js"
  data-ackee-server="https://stats.example.com"
  data-ackee-domain-id="your-domain-id"></script>

The decision is detailed mode. Default tracking records only the page and the time. Switching detailed mode on (a data-ackee-opts='{"detailed": true}' attribute) adds referrer, language, screen size, browser and OS. Ackee's own documentation says the detailed fields may count as personal data in some jurisdictions, so the default is the safe one. I run detailed mode on my own sites and would not on a client's without asking them.

Ackee also supports events through ackeeTracker.action(...) in your own JavaScript, which gets you counts of newsletter signups or downloads. It does not get you funnels between them.

What the dashboard will never tell you

Views, unique visitors (worked out without cookies and without storing an IP), top pages, referrers, average duration, browsers, screen sizes, languages, devices. That is the full list. There is no realtime map, no country breakdown (no IP retention means no geolocation), no UTM campaign report beyond what shows up as a referrer, no annotations, no email digest.

The GraphQL API exposes everything the dashboard shows, and people do build their own reports on it, but if you find yourself doing that you have already chosen the wrong tool. Umami covers the same privacy ground with country data, UTM parsing and a far more active project, and the Plausible vs Umami comparison is where I would send anyone who wants more than counts.

Check the commit log before you commit

Ackee first shipped in 2018 and has reached about 4,700 stars, but development has been quiet for an extended stretch and the issue tracker reflects that. Nothing about it is broken; it simply is not gaining features, and the MongoDB version pin will eventually need a hand. For a personal blog that is fine. For anything where you will want an answer to a new question in 2027, pick a project with momentum; the analytics category lists the current options and their trade-offs.

What I'd do

Run Ackee for a personal site or two where the only question is "does anyone read this", with detailed mode off, behind a reverse proxy with TLS, and a weekly mongodump folded into your normal backup. If you are replacing Google Analytics on anything with a marketing budget, go straight to Umami and skip the MongoDB tax; the guide to leaving Google Analytics lays out that migration step by step.

Compare Ackee

19 head-to-head comparisons.

Similar web analytics apps