Integrations · Stripe

Stripe MRR dashboard: churn, LTV & cohorts

Connect Stripe and Honest MRR builds monthly recurring revenue (MRR), movements, churn, lifetime value (LTV) and cohort reports from your Stripe customers, subscriptions, invoices and charges, with every MRR movement open to inspection — so you can show an investor where a number came from.

Today you connect with a restricted key: six Read permissions, created in your Stripe dashboard and pasted once. A one-click Stripe App is coming soon. Honest MRR uses that access only to read — it never moves money, issues refunds, or changes anything in your Stripe account.

How is Stripe MRR calculated?

  • Each subscription item's price is amortized to a monthly amount — annual plans divided by 12, weekly and daily plans scaled up — and multiplied by its quantity: a $1,200 annual plan adds $100 a month.
  • Active and past-due subscriptions count; past-due ones are flagged at-risk until they pay or cancel. Trialing, paused (including paused collection) and never-paid incomplete subscriptions add nothing.
  • A canceled or unpaid subscription leaves MRR as churn. One set to cancel at the end of its period keeps counting until that period ends.
  • Coupons and discounts are not subtracted — a discounted customer counts at the full price of their plan — and a price you have marked tax-inclusive counts as set, tax included.
  • Metered usage and one-time charges are reported separately, never as committed MRR.

Every rule is written out on how we calculate MRR.

How this differs from Stripe's own Billing analytics

Stripe's Billing analytics, in your Stripe Dashboard, already charts MRR, churn, lifetime value and retention by cohort for your Stripe subscriptions, with drill-downs and a CSV log of every MRR change (Stripe's docs, checked October 4, 2026). Honest MRR reads the same Stripe records and adds:

  • One ledger across billing providers — Stripe next to Paddle, RevenueCat or any of the nine we support.
  • An audit trail an investor can follow: every MRR movement opens to its ledger entry, the Stripe event when a webhook recorded it, and the current Stripe object, and every version we receive is fingerprinted in a tamper-evident hash chain.
  • Share links and monthly statements you can save as PDF, plus ad spend for CAC and payback, and costs for burn and runway.

The two MRR figures can differ for the same account. Stripe's MRR excludes tax and always subtracts permanent discounts (Stripe's docs); Honest MRR counts prices before discounts, and a tax-inclusive price with its tax. If Stripe is your only billing provider and you don't need an audit trail or investor statements, Stripe's own dashboard may be all you need.

Connect with a restricted key — step by step

Six Read permissions and about three minutes: create a restricted key in Stripe, paste it once, and the backfill starts. These are the same steps the in-app guide shows on Settings → Connect, where “the field below” and “your connection card above” refer to that page.

Show all 12 steps
  1. Open the Stripe API keys page and sign in ↗

    That's Developers → API keys in the Stripe dashboard. Connecting a test account instead? Stripe now uses Sandboxes: pick the sandbox from the account switcher top-left (a "You're testing in a sandbox" banner confirms it) — the page looks identical.

  2. Click "Create restricted key"

    It's the button at the right of the "Restricted keys" section — the first section on the page, above Standard keys. (A restricted key is safer than your full secret key — it can only do what you allow.)

  3. Choose "Powering an integration you built"

    Stripe asks how you'll use the key. Pick the first option — Honest MRR is your own app calling Stripe's API. Not "third-party application" (if Stripe asks you for a URL, you're on that path — go back), and not "AI agent".

  4. Skip the templates: click "Choose your own"

    Stripe may first offer permission templates ("One-time payments", "Reporting, analytics, and accounting", …). None of them is the six-read set below — scroll past the list and click "Choose your own →" to get the full permissions table.

  5. Name it "Honest MRR"

    The name is just for you, so you can recognize and revoke it later.

  6. Set six permissions to "Read"

    In the permissions list, find Customers, Subscriptions, Invoices, Charges ("Charges and Refunds"), Products, and Prices — set each one to Read. Leave everything else on None: nothing needs Write, and nothing else needs Read — not Accounts, not Payment Intents. The filter box at the top of the table finds each row quickly.

  7. Click "Create key", then copy it

    The new key appears in the Restricted keys table — click the rk_live_ (or rk_test_) token to copy the whole thing. If Stripe shows it once in a dialog instead, copy it there: it can't be revealed again later, only rolled.

  8. Paste it in the field below and click "Connect Stripe"

    The key is checked against Stripe, encrypted, and only its last 4 characters are ever shown again.

  9. Wait for the backfill to finish

    A connection card appears above with status Queued → Backfilling → Synced. Every subscription imports automatically, dated from when it started; the Overview fills in within a couple of minutes.

  10. Live sync, part 1: add a webhook endpoint ↗

    Recommended, so MRR updates the moment something changes. (We try to register the endpoint for you, but a read-only key can't create webhooks, so this manual step is the normal path.) Copy the webhook URL from your connection card above, then on Stripe's Webhooks page click "Add endpoint" (or "Add destination") and paste that URL.

  11. Live sync, part 2: choose events

    Select the customer, subscription, invoice, and charge event families (selecting all events also works — extra ones are ignored). Save the endpoint.

  12. Live sync, part 3: paste the signing secret

    On the endpoint you just created, reveal the "Signing secret" (starts with whsec_) and paste it into the webhook field on your connection card above.

You can revoke the key in Stripe at any time — the connection then simply stops syncing. Nothing here can move money or change your Stripe account.

Start free and connect Stripe

What the key can read — and why

  • Customers (read) — to attribute subscriptions and compute churn and lifetime value.
  • Subscriptions (read) — to compute auditable MRR from every subscription item.
  • Invoices (read) — for realized revenue.
  • Charges (read) — for realized cash, including refunds.
  • Products (read) — to label plans in reports.
  • Prices (read) — to amortize billing intervals into a monthly run-rate.

Nothing needs Write, and nothing else needs Read. The one thing Honest MRR may create — only if the key you paste permits it — is a webhook endpoint pointing back at Honest MRR; a key with just these six Read permissions can't, which is why the guide adds the webhook by hand.

What happens to the data

Honest MRR keeps the latest verbatim copy of every Stripe object it reads and fingerprints every version in your organization's append-only hash chain, so the MRR you show investors traces back to the records it came from — and a later edit to any of them is detectable. Credentials are encrypted at rest with AES-256-GCM and used only to read. Details are on the Security and Privacy pages.

Revoking access

Delete or roll the restricted key in Stripe → Developers → API keys whenever you like — the connection then simply stops syncing. The data already imported stays in your workspace until you delete it.

Questions

Something not covered here? Email us and a person answers.