PostgresStripe MRR

How to Track Stripe MRR in Postgres — Without Writing SQL

Your Stripe data lands in Postgres — via webhooks, a sync tool, or your own billing tables — but turning subscription rows into an MRR chart still means somebody writing SQL. Stripe's own dashboard shows headline numbers, yet it can't join revenue to your product usage or answer follow-ups, and as a founder without a data team you need those answers weekly, not quarterly. These five questions turn your synced billing tables into a live MRR view.

Question 1

What is our current MRR and how has it changed month over month for the last 12 months?

This is the chart on every board slide. Building it from raw Stripe subscription data in Postgres means normalizing annual plans to monthly amounts, handling proration rows, and being careful with timestamptz boundaries so a subscription created at 11pm UTC doesn't land in the wrong month. Ask it instead of building it.

You get: A 12-month MRR trend with month-over-month growth percentages and the current MRR figure.

Ask this free
Question 2

How much of last month’s MRR change came from new customers versus expansion versus churn?

Two companies with identical net growth can be in wildly different shape — one adding customers on top of a leaky bucket, the other quietly expanding existing accounts. Decomposing MRR movement tells you which levers are actually working and which number to panic about.

You get: A breakdown of new, expansion, contraction, and churned MRR for the month, netting to the total change.

Ask this free
Question 3

Which plan generates the most MRR, and which is growing fastest?

Where revenue sits today and where it's heading are different questions, and pricing decisions need both. If your cheapest plan is your fastest-growing, you're either onboarding a future upgrade wave or building a low-margin trap — the trend line tells you which.

You get: A table of MRR by plan with each plan’s share of total and its three-month growth rate.

Ask this free
Question 4

Which customers upgraded or downgraded in the last 90 days?

Plan changes are the loudest signal customers send about value. Upgraders show you what's working — go learn why. Downgraders are churn in slow motion, and catching them within days rather than at renewal gives your outreach a real chance.

You get: A list of customers with previous plan, new plan, MRR delta, and the change date.

Ask this free
Question 5

What is our average revenue per account, and how does it differ by signup cohort?

If newer cohorts arrive at higher ARPA, your positioning and pricing are compounding; if it's sliding, growth is coming from smaller and smaller customers. This cohort view joins billing and signup dates — a classic two-table Postgres query you shouldn't have to write yourself.

You get: An ARPA figure overall plus a table of ARPA by monthly signup cohort.

Ask this free

Stop reading. Ask.

Connect Postgres or start with sample data — first answers in under 2 minutes.

Ask this on your data — free

Free plan available · No credit card required

Frequently asked questions

Do I need to write SQL for any of this?

No. Every question above is asked exactly as written, in plain English. The AI generates the SQL against your Postgres billing tables, runs it read-only, and returns tables and charts you can drill into with follow-up questions.

Is it safe to connect the Postgres database that holds our billing data?

Yes — connections are read-only by default, so billing records can never be changed. Many teams create a dedicated SELECT-only Postgres role scoped to just the billing tables and connect with that.

My Stripe data is synced with amounts in cents and annual plans mixed in. Will MRR be computed correctly?

Yes — mention it once (or let the AI infer it from the schema) and it will divide cents into dollars and normalize annual and quarterly plans to a monthly figure before summing. You can always open the generated SQL to verify the normalization.