Build a Stripe MRR Report in Google Sheets

Stripe's dashboard shows current MRR as a single number. A spreadsheet is where you see how it got there.

MRR is a normalized figure, not a raw total

Monthly recurring revenue means every active subscription's price converted to what it's worth per month, then summed. An annual plan divides by twelve. A weekly plan multiplies by roughly 4.33. Summing raw subscription amounts without that normalization mixes incompatible units and produces a number that looks like MRR but isn't one.

What the calculation needs, per subscription

  • Status: only subscriptions that are active (and usually trialing, depending on how you treat trials) count toward current MRR. Canceled, incomplete, and past-due subscriptions don't.
  • The price and billing interval on each subscription item: amount, currency, and whether it bills weekly, monthly, or yearly.
  • Quantity, for subscriptions billed per seat or per unit rather than a flat price.
  • Currency, if your customer base isn't billed in a single currency and you need to convert before summing.

Building the sheet

  1. Export subscriptions with status, currency, and period columns, plus the underlying subscription items, which carry the price and quantity.
  2. Add a normalized monthly-value column: divide annual amounts by 12, multiply weekly amounts by 4.33, leave monthly amounts as-is.
  3. Filter to active (and, if you count them, trialing) subscriptions only, then sum the normalized column for total MRR.
  4. Keep a snapshot date on each pull so you can track MRR over time by re-running the export and appending, rather than overwriting the previous number.

The edge cases that break a naive version

A subscription that changed price mid-cycle, a customer with two active subscriptions instead of one, and a plan billed in a currency other than your reporting currency all need explicit handling, not an assumption that every row is a simple flat monthly charge. Decide upfront whether upgrades and downgrades should show as expansion and contraction MRR or just net out, since that decision changes what the trend line means to whoever reads the report.

Other Stripe reports worth building alongside this one

See how to build a Stripe accounts receivable aging report in Google Sheets for the collections side of the same subscription business, or how to create a restricted read-only Stripe API key for reporting to set up the connection safely first.

Get the subscription data on a schedule

Stripe Exporter saves a subscriptions report with status, currency, and period data, refreshed manually, hourly, daily, or weekly, so an MRR sheet built on top of it stays current without a manual re-export. It's built by Cody Labs and is not affiliated with Stripe.

See Stripe Exporter