SaaS Metrics Dashboard from PostgreSQL: MRR, Churn and ARPA

Build a SaaS metrics dashboard from your PostgreSQL subscriptions table: MRR, new and churned MRR, logo churn and ARPA by month.

Summary

A SaaS metrics dashboard built on your production PostgreSQL database shows MRR, its movements (new, expansion, contraction, churn), customer churn and ARPA by month, from the same subscriptions table your app uses. Connect a read-only user to Better Analyst, describe the metrics, and check the SQL it generates against your billing logic.

On this page
  1. Who this report is for
  2. What the report includes
  3. How to build it in Better Analyst from PostgreSQL
  4. Questions to ask
  5. Sample output
  6. Charts to use
  7. Keep it up to date
  8. Further reading
  9. FAQ

Who this report is for

Founders and early finance or ops hires at SaaS companies whose subscription data lives in the app's Postgres database, before a warehouse or dedicated billing analytics tool exists.

What the report includes

Metrics and dimensions in this report
MetricSource fieldWhy it matters
MRRsubscriptions.mrr_cents or plan price (example schema)Monthly recurring revenue from active subscriptions, the headline metric.
Subscription startsubscriptions.started_at (example schema)Identifies new MRR and new customers each month.
Cancellationsubscriptions.canceled_at (example schema)Identifies churned MRR and churned customers.
Plan changessubscription_events.event_type, previous and new MRR (example schema)Splits expansion from contraction.
Logo churn rateCalculated: customers churned ÷ customers at start of monthShare of customers lost each month.
ARPACalculated: MRR ÷ active customersAverage revenue per account; rising ARPA means growth from bigger customers.

How to build it in Better Analyst from PostgreSQL

  1. Create a read-only PostgreSQL user, and if your database restricts inbound traffic, allowlist the Better Analyst IP ranges listed in the PostgreSQL connector docs.
  2. In Better Analyst, open Connectors, choose Add Connector, then PostgreSQL, and enter host, port (5432 by default), database, username, password and SSL mode (require is recommended).
  3. Test the connection and save.
  4. Describe your billing tables in Data Context: what counts as an active subscription, how trials and discounts are stored, and whether amounts are in cents.
  5. Ask for monthly MRR, new, expansion, contraction and churned MRR, logo churn and ARPA for the last 12 months, then turn it into a dashboard.

Questions to ask

  • “Show MRR, new MRR, churned MRR and logo churn by month for the last 12 months.”
  • “Build an MRR bridge for last month: starting MRR, new, expansion, contraction, churn, ending MRR.”
  • “What's ARPA by plan, and how has it changed this year?”
  • “What is the churn rate by signup cohort?”

Sample output

Sample data for illustration, not real account data.

Sample data: monthly SaaS metrics (illustrative)
MonthStarting MRRNew MRRExpansionChurned + contractionEnding MRR
Jul 2026$182,400$14,200$3,900-$7,300$193,200
Aug 2026$193,200$12,800$4,600-$9,100$201,500
Sep 2026$201,500$15,900$3,200-$8,400$212,200

Charts to use

  • MRR bridge (Waterfall chart): How starting MRR becomes ending MRR through new, expansion, contraction and churn.
  • MRR and ARPA trend (Combo chart): Monthly MRR as columns with ARPA as a line.
  • Logo churn by month (Line chart): Customer churn rate with a reference line at your target.

Keep it up to date

Schedule the metrics summary for the 1st of each month to the founders' Slack channel, and set an alert when monthly churned MRR exceeds a threshold you choose.

Further reading

Try Better Analyst free

Frequently asked questions

Is it safe to connect a production database?
Use a dedicated read-only user, ideally on a read replica, and restrict which tables and columns the AI can read with data access controls. Connections are read-only by default.
Why doesn't my MRR match my billing tool?
Differences usually come from how trials, discounts, annual plans (divide by 12), refunds and currency are handled. Write your rules into Data Context and ask Better Analyst to reconcile a single month line by line.
Can I compute MRR from a Stripe export instead?
Yes, if the export is in a connected source such as Google Sheets or a database table; Better Analyst has no direct Stripe connector.