Skip to content
Back to blog

How to Analyze Stripe Revenue Without SQL

guides
stripe
saas
revenue

Stripe's dashboard is good at one thing: telling you what your MRR is right now.

It is bad at almost everything else. New vs expansion vs contraction. Net revenue retention by cohort. Why churn jumped in March. Whether your annual plan is actually saving you money or quietly cannibalising your monthly revenue.

The standard answer to those questions is "pull it from the database." Which means SQL. Which means either a data engineer or a long Saturday with the Stripe API docs and ChatGPT open in another tab.

There is a faster path.

The questions Stripe won't answer for you

Open your Stripe dashboard. Look at the revenue page. You will see MRR, ARR, customer count, churn rate. All single numbers. All point-in-time.

Here is what you cannot see from that page:

  • What did MRR do this month, decomposed? New business, expansion, contraction, churn — four numbers, one chart, none of which Stripe shows you natively.
  • How are last quarter's customers retaining vs the quarter before? Cohort retention is the single most important SaaS metric. Stripe does not display it.
  • Which plan is actually driving growth? You can sort customers by plan. You cannot see net revenue movement by plan over time.
  • What is your real annualised churn rate, controlled for plan tenure? Stripe shows a churn rate. It is rarely the one your investors are asking about.

The data exists. It sits in your charges, subscriptions, and invoices objects. Pulling it into shape is the work.

Connect Stripe. Skip the export.

Anna connects directly to Stripe via OAuth. Read-only. You approve the scopes. About 30 seconds end to end.

Once she has access, she reads your subscription history, invoice history, and charge data on demand. No CSVs. No Stripe API key floating around in a Python script. No "let me re-export, the numbers changed."

This matters because revenue analysis is not a one-shot question. You ask "what drove March MRR?", you get the answer, then your CFO asks "OK, but is that pattern holding into April?" — and now you would have to re-export everything. With Anna, you ask the follow-up. She pulls the new data and re-runs.

A real prompt: MRR movement, decomposed

Once Stripe is connected, paste this:

"Decompose last month's MRR change into new, expansion, contraction, and churn. Compare it to the previous three months and tell me what's unusual."

Anna pulls the subscription events for the period, classifies each one (new sub, plan upgrade, plan downgrade, cancellation), sums the MRR delta in each bucket, and lays out the four numbers next to last quarter's averages.

Last month might look like this:

New MRR
+$8,400
+12% vs avg
Expansion
+$2,100
-38% vs avg
Churn
-$5,900
+47% vs avg

The total movement might still look fine. Net MRR up. But the composition is the story. New business is healthy. Expansion is collapsing. Churn is climbing. Three different problems, three different owners, none of which the headline number reveals.

Cohort retention, without writing the query

The second prompt every SaaS founder should know:

"Show me net revenue retention by monthly cohort for the last 12 months. Flag any cohort that dropped below 90% NRR."

Anna groups every customer by the month they first paid, tracks their MRR forward through time, and computes net revenue retention at 1, 3, 6, and 12 months. She runs the math in Python — real cohort tables, not a Stripe approximation.

If the November cohort retains at 78% while the October cohort sits at 102%, that is a finding. Anna will surface it, run a quick test on whether the gap is statistically meaningful given the cohort sizes, and tell you which plan or acquisition source is dragging the number down.

The most useful follow-up after a cohort answer is "split this by acquisition channel" or "split this by plan." Same dataset, sharper question. Anna remembers the cohort definitions you just used so the second pull is two seconds, not two minutes.

The annual-plan question

A specific one worth calling out, because most founders get it wrong.

You launched annual plans last year. You assume they are working — annual customers churn less, after all. But are they actually growing the business, or are they just shifting revenue forward?

Ask Anna:

"Compare 12-month revenue from customers who took the annual plan vs customers on monthly. Control for plan size and acquisition month."

The answer is rarely the one founders expect. Annual customers do retain better. But the discount you offered to convert them often eats more than the retention gain over the period. Anna shows you the net effect with a confidence interval, not a vibe.

What about Stripe's native reports?

Stripe has been adding more analytics. Revenue Recognition. Sigma (which is SQL on your Stripe data). The new revenue dashboard.

These are useful. They do not replace what Anna does, for two reasons.

First, Sigma is SQL. The whole premise of this post is that you do not want to write SQL.

Second, Stripe's native reports are bounded by what Stripe knows. They cannot cross-reference your Stripe data with HubSpot deals, Shopify orders, GA4 acquisition data, or your warehouse. Anna can. Connect HubSpot alongside Stripe and you can ask "what is the MRR contribution of customers acquired through outbound vs inbound?" — a question that requires both systems and that no single dashboard answers.

Memory matters more than you think

You are going to ask the same questions next month. And the month after.

When you ask Anna "decompose MRR" again in April, she does not need re-briefing. She remembers your plan structure, your cohort definitions, your "this counts as expansion, this counts as upsell" rules. The second analysis is faster than the first. The third is faster still.

Compare that to the SQL workflow: rewrite the query, re-validate the numbers, re-explain to your CFO why the contraction figure is different from last time. Memory is not a feature. It is the thing that makes recurring analysis sustainable.

What you stop doing

If you connect Stripe to Anna and run these prompts on a recurring schedule, you stop:

  • Exporting customer CSVs and reconciling them in Sheets
  • Asking your engineer to "just pull this one number from the database"
  • Sending board-prep weekends to building the same MRR waterfall by hand
  • Guessing at NRR because the proper calculation is too tedious to run

You start sending links. The same way you would forward an analyst's report.

One question to start

Pick the question that has been bothering you. Most likely it is one of these:

  • Why did MRR move the way it did last month?
  • Are recent cohorts retaining as well as older ones?
  • Is our pricing change working, or did we just sell more discounts?
  • Which plan is actually carrying the business?

Connect Stripe. Paste the question. Read the answer. Try it at heyanna.studio.