A one-person version of Plausible is a small collector: a script posts the page and referrer, an endpoint writes a row, and a dashboard counts rows. Visitors are told apart by a hash that changes daily instead of a cookie, so nothing is stored in the browser. An agent can finish that on SQLite in one session, the way GoatCounter and Umami did. What a prompt won't give you is the hardening of a service others rely on: bot and spam filtering that keeps up, fast queries on millions of events, funnels, revenue attribution and the Search Console link. If you run several sites or share reports with clients, self-hosting Plausible's own Community Edition is the shorter road.
Before you buildPlausible has no free hosted plan, but GoatCounter and the Community Edition cost nothing in licences; look at them before building.
Build me a small web analytics server to replace Plausible. Requirements: - Node.js 22 + TypeScript: a Fastify server. `npm start` serves the dashboard and the collector on http://localhost:4700. - Storage: better-sqlite3 in ./data/stats.db. An events table (site, ts, path, referrer host, utm_source, utm_campaign, country, browser, os, device, visitor_hash, event name) plus daily rollup tables so the dashboard stays fast. - Script: GET /s.js returns a script under 2 KB that POSTs the page URL and document.referrer to /api/event on load and on history.pushState changes. It sets no cookies, uses no localStorage, honours Do Not Track and exposes window.track(name, props). - Visitors: visitor_hash = SHA-256 of a daily random salt + site + IP + user agent. Rotate the salt at midnight UTC and delete old ones. Never store IPs. Country from a DB-IP Lite or GeoLite2 .mmdb file (path in .env) via `maxmind`; browser and OS from `ua-parser-js`. - Filtering: drop bots with `isbot`, drop IPs listed in EXCLUDE_IPS, accept events only for the domains listed in SITES (all in .env). - Dashboard: server-rendered pages (Eta) with uPlot charts. A site picker, date ranges (today, 7d, 30d, 12 months, custom), a visitors and pageviews line chart, and top pages, entry pages, sources, UTM campaigns, countries, browsers and devices. Clicking a row filters every other panel. A goal is a path or a custom event name, shown with its conversion rate. - A read-only public share link per site, using a random token. - A nightly job rolls up raw events older than RETENTION_DAYS (default 730) and deletes them. - Single owner: one password in .env and a signed cookie. The collector stays open but is rate-limited per IP. No accounts, no telemetry, local-first. - Out of scope: funnels, revenue attribution, Search Console, email reports, teams. - README: the script tag to paste into a site, running behind Caddy for HTTPS, and a note that the collector must be reachable from your visitors' browsers.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Plausible.
Add a Plausible import to the analytics server in this folder. Requirements: - Take the path of the unzipped CSV export from Plausible (Site Settings > Imports & Exports). Read the files first and print which ones hold daily totals and which hold top-lists. - Store the imported rows in separate tables marked imported, never mixed with raw events. - In the dashboard, show imported days before the first local event with an "imported" badge, and leave out panels the export does not cover. - Make the import idempotent: running it twice must not double the numbers. - Update the README.
Add a weekly email report to the analytics server in this folder. Requirements: - Every Monday 07:00 in the timezone from .env, send a plain HTML email through nodemailer with SMTP settings from .env. - Content per site: visitors and pageviews vs the previous week, top 5 pages, top 5 sources, and any goal that moved by more than 20 percent. - A --preview flag writes the email to ./out/report.html instead of sending it. - Update the README with the SMTP setup.
Add funnels to the analytics server in this folder. Requirements: - A funnel is 2 to 4 ordered steps; each step is a path or a custom event name. - Count a visitor_hash for a step only if it completed the previous steps the same day, and show counts and step-to-step conversion as horizontal bars. - Save funnels per site in SQLite; add a page to create, edit and delete them. - Add tests with a fixture of events that covers a visitor skipping a step. - Update the README and explain why funnels only work within one day.
Nine dollars buys not having to run anything: no ClickHouse upgrades, no spam lists to maintain, EU hosting and a vendor to ask when numbers look wrong. Agencies add teammates and client links, and the subscription-funded, no-ads model is part of why people trust the numbers.
Estimate · Free if you already have a server, about $5 a month for a small VPS otherwise. The build itself is token usage on your agent plan.
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Community Edition (self-hosted) | $0 | $0 | AGPL software you run yourself on Postgres and ClickHouse (2 GB of RAM recommended). No funnels, ecommerce revenue goals, SSO or sites API; releases come twice a year. |
| Starter (up to 10k pageviews and events) | $9 | $7.50 | 1 site, 3 years of data retention, goals, custom events, saved segments, Google Analytics import. |
| Growth (up to 10k pageviews and events) | $14 | $11.67 | Up to 3 sites and 3 team members, shared links and embedded dashboards. |
| Business (up to 10k pageviews and events) | $19 | $15.83 | Up to 10 sites and 10 team members, 5 years of retention, custom properties, funnels, ecommerce revenue, Stats API at 600 requests an hour. |
| Enterprise | custom | — | More than 10 sites and members, SSO, sites API, scheduled raw event exports, managed proxy. |
No free plan. A 30-day trial without a card; the Community Edition is free to self-host.
Yes. An AI coding agent such as Claude Code, Codex or Cursor can build a usable personal version in one session with the prompt on this page, running on your own machine.
About $9 a month on the Starter, up to 10k pageviews and events a month plan, $108 a year (checked 2026-10-14).
Funnels, custom properties and revenue attribution; Search Console keywords inside the dashboard; Teammates with their own logins, shared links and embedded dashboards; A bot and data-centre filter that someone keeps current; Fast queries once traffic grows past what one SQLite file handles comfortably. If any of those matter to you, keep paying.
Yes: Plausible Community Edition (open source), Umami (open source), GoatCounter (open source).