Baremetrics
Replaceable in one session with an AI coding agent.
Subscription analytics that read your payment processor: recurring revenue, churn, expansion and lifetime value, computed and charted without anybody writing SQL.
Build me subscription analytics that replace Baremetrics: recurring revenue, churn and expansion, computed from my payment processor's own data. STACK - Node 20+ with Fastify, server-rendered HTML - SQLite through better-sqlite3, WAL mode - The processor's API and webhooks as the source - Charts as inline SVG drawn by hand. No charting library - Caddy in front THE DATA MODEL - customers: id, provider_ref, email_hash, created_at, country, currency - subscriptions: id, customer_id, provider_ref, plan_ref, status, interval, amount_cents, currency, started_at, current_period_end, cancelled_at, ended_at - subscription_events: id, subscription_id, kind, from_amount_cents, to_amount_cents, at — created, upgraded, downgraded, paused, cancelled, reactivated. **Append-only, and every number below is computed from it** - charges: id, customer_id, subscription_id, provider_ref, amount_cents, currency, status, paid_at, refunded_at, refunded_cents - provider_events: id, event_id, kind, payload_json, processed_at — idempotency lives here - daily_snapshots are forbidden. Everything is computed from the event stream at query time, or a definition change orphans a year of history GETTING THE DATA IN - Backfill everything from the processor's API on first run, paginating, with a cursor so it can resume - Then webhooks, with signature verification, idempotency by event id, and out-of-order delivery handled — the subscription-updated event routinely arrives before checkout-completed - Reconcile nightly against the processor's own totals and alert on any disagreement. The local copy is a mirror and must be treated as one - Currencies: store the charge in its own currency and the converted amount with the rate and its date, both. Reporting a mixed-currency business in one number without recording the rate makes last quarter unreproducible THE DEFINITIONS, WHICH ARE THE PRODUCT - **Write each one down beside the number, in plain words.** Everybody computes these differently, and a metric without a definition is decoration - Monthly recurring revenue: the normalised monthly value of active subscriptions on a date. Annual plans divided by twelve, not counted in the month they were paid - The movement broken into new, expansion, contraction, churned and reactivated. **The total alone tells you nothing** — a flat month can be heavy churn covered by heavy acquisition, and only the breakdown shows it - Churn as revenue and as customers, separately, because they answer different questions - Involuntary churn — a failed payment — reported apart from voluntary. Different problem, different fix - Lifetime value stated with its formula and its assumption about survival, and treated as an estimate with a wide margin rather than a fact - A trial that never converts is not churn. Decide where trials enter the numbers and say so WHAT TO SHOW - Recurring revenue over time with the movement stacked beneath it - Churn by cohort — of the customers who joined in a month, what share are still paying — which is the honest view and the one that takes a year to become useful - Revenue by plan, by country, by acquisition month - Failed payments now, and how much of last month's involuntary churn was recovered - Everything computed at query time from events OPERATIONS - .env: DATABASE_PATH, BASE_URL, PROVIDER_KEY, PROVIDER_WEBHOOK_SECRET, SESSION_SECRET, HASH_SALT - Migrations on boot, each once; nightly backup off the machine - Health endpoint reporting webhook lag and the last successful reconciliation WHAT MATTERS MOST The event table and the written definitions. Backfill, then recompute last quarter and check it against what the processor says — if the two disagree and you cannot explain why, the definitions are wrong rather than the code.
What you lose
- Metric definitions worked out once and applied consistently, which is most of what makes the numbers comparable
- Failed-payment recovery and cancellation surveys attached to the same data
- A dashboard somebody who does not write SQL can read
- Forecasting and benchmarks against other companies, which needs other companies
If you would rather not build
- The payment processor's own dashboard, which covers the basics for nothing
- A SQL query over a nightly export, which is where most companies actually start
The escape hatch
open source · no votes, no paid placement
Metabase
$0Self-hosted business intelligence with a query builder non-engineers can use.
metabase/metabasefree · open source
Why this verdict
our own opinion · changed only by a person
79/100
Verdict yes at 79: the processor holds every fact already, and the work is an event table and a set of definitions applied consistently. The prompt spends its length on the definitions because that is where the value and the mistakes both are.
History
tracked since 14 Aug 2026 · nothing is ever overwritten
Nothing recorded yet. This chart fills in once the page has visitors, votes or prompt copies — it will not draw a flat line to look busy.
Questions about Baremetrics
answered from the record above
Is Baremetrics free?
No — the plan we track is $129 a month. From around $129/month billed monthly, priced on tracked revenue.
Can you replace Baremetrics by building your own?
YES. Replaceable in one session with an AI coding agent. Replacement score 79 out of 100, build time one session. Read what you lose before you decide.
How much does Baremetrics cost?
$129 a month on Metrics — $1,548 a year. Recorded 14 Aug 2026.
What do you lose by replacing Baremetrics?
Metric definitions worked out once and applied consistently, which is most of what makes the numbers comparable; Failed-payment recovery and cancellation surveys attached to the same data; A dashboard somebody who does not write SQL can read; Forecasting and benchmarks against other companies, which needs other companies. If any of those carry weight for you, keep paying.
Is there an open-source alternative to Baremetrics?
Yes: Metabase, Lago. The prompt on this page is for when you want it your way instead.
Related entries
same category first, most replaced first
Every week, something stops being worth paying for.
New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.
free forever · no tracking pixel · stored here, never passed to anyone

