Live Stripe MRR in Google Sheets (in under 5 minutes)

Use caseMay 14, 2026 · 8 min read

Stripe shows you MRR. Stripe does not let you slice MRR by plan, by cohort, or by anything you wish you could. The Dashboard's "MRR" tile is read-only, not reportable, and missing half the breakdowns finance teams actually need.

The usual fixes are bad:

The fast lane is BYOK: a $199 lifetime add-on with a Stripe connector that hits your dashboard's API directly, no proxy, no markup. Here's how the whole thing fits together.

What you'll be able to do

The 5-minute setup

Step 1: install gptsheet

Open any Google Sheet → Extensions → Get add-ons → search "gptsheet" → install. Activate your Pro license (the Stripe connector is in the Pro tier).

Step 2: create a Stripe restricted key

Stripe Dashboard → Developers → API keys → "Create restricted key". Name it something like gptsheet-reader. Grant read-only permissions for:

Copy the resulting rk_live_... key. (Or rk_test_... for test mode.) Restricted keys are revocable and least-privilege — much safer than a full secret key.

Step 3: wire it up

In the gptsheet sidebar → Menu → Connectors → Stripe → paste the key → Connect. The connector verifies by making a single GET /balance call. If you see ✓ Connected, you're in.

Pulling the first numbers

Each connector ships with a set of canned actions. Click "▶ Run now" to write rows into the active cell. Some examples:

ActionReturns
List active subscriptionsOne row per subscription, with customer email, plan, MRR contribution, status.
List customers (last 100)Customer ID, email, created date, default payment method.
Search charges by dateAll charges since a given date. Set the date as a parameter.
List invoices status=openOutstanding invoices. The set you'll chase next week.
Balance summaryAvailable, pending, in-transit. Useful for cash-flow modelling.

Computing MRR from the data

Stripe doesn't return MRR as a number — it returns subscriptions. You compute MRR by summing the normalized monthly value of each active sub. If you've imported List active subscriptions into rows starting at A2:

# Assuming columns: A=id, B=customer, C=plan, D=amount_cents,
#                   E=interval, F=interval_count, G=status

=SUMPRODUCT(
  (G2:G1000="active") *
  (D2:D1000 / 100) /
  IFS(E2:E1000="month", F2:F1000,
      E2:E1000="year",  F2:F1000 * 12,
      E2:E1000="week",  F2:F1000 / 4.345)
)

Yearly subs get divided by 12. Monthly subs are kept as-is. Weekly subs (rare in SaaS) get scaled to monthly equivalent. The result: live MRR in one cell.

Slicing the same data

The whole point of Stripe-in-a-sheet is the pivot. With the active-subs data dumped into a range, every slice becomes a pivot table:

Auto-refresh

Click "▶ Run now" once, then look at Menu → Imports. The action is saved as an Import. Set its schedule to Hourly / 6h / Daily / Weekly. A single hourly time-trigger drives the refresh. Your MRR cell updates on the schedule with no further action.

Imports re-execute the saved request against the same target range, so your formulas don't break — they recompute against fresh data.

What about real-time?

If you genuinely need second-level freshness (e.g., live "money received today" tickers on a TV in the office), Stripe's webhook → Supabase → live-sheet approach is better. For 95% of finance ops — MRR, churn, top customers, cohort analysis — hourly refresh is more than enough and far cheaper to operate than a streaming pipeline.

Privacy note

gptsheet is BYOK. Your Stripe key is stored in your browser's localStorage, never uploaded to our servers. Every API call goes from your sheet to api.stripe.com directly. We see your license key when we verify it, and nothing else.

Going further

The same connector pattern works for:

Anywhere your data lives, you can have it in a Sheet within 5 minutes.

Get Stripe (and 30+ more) in your sheet

Stripe connector is in the Pro tier — $199 lifetime. Includes PostHog, Amplitude, GA4, Search Console, Ghost.

Get gptsheet Pro