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
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
| Metric | Source field | Why it matters |
|---|---|---|
| MRR | subscriptions.mrr_cents or plan price (example schema) | Monthly recurring revenue from active subscriptions, the headline metric. |
| Subscription start | subscriptions.started_at (example schema) | Identifies new MRR and new customers each month. |
| Cancellation | subscriptions.canceled_at (example schema) | Identifies churned MRR and churned customers. |
| Plan changes | subscription_events.event_type, previous and new MRR (example schema) | Splits expansion from contraction. |
| Logo churn rate | Calculated: customers churned ÷ customers at start of month | Share of customers lost each month. |
| ARPA | Calculated: MRR ÷ active customers | Average revenue per account; rising ARPA means growth from bigger customers. |
How to build it in Better Analyst from PostgreSQL
- 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.
- 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).
- Test the connection and save.
- 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.
- 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.
| Month | Starting MRR | New MRR | Expansion | Churned + contraction | Ending 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
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.