How Honest MRR calculates MRR, churn and LTV

Every number in Honest MRR follows written rules. The ones every provider shares are all here; each provider's own rules — how RevenueCat's per-period prices are estimated, for example — are on its integration page. They are the same rules the in-app glossary describes, and the ones the calculation engine applies — if a figure ever disagrees with this page, that is a bug.

Rules last changed October 5, 2026. Want to try the arithmetic on your own plans? Use the MRR calculator.

What is MRR?

Committed monthly recurring run-rate: every paying subscription — active or past due — amortized to monthly (annual ÷ 12). Trials are excluded until they convert, and metered usage is tracked separately — so this number only moves when commitments change.

Monthly recurring revenue (MRR) in Honest MRR is the sum of every counted subscription item's monthly amount: its price, normalized to one month, multiplied by its quantity. With one plan, that is paying customers × the plan's monthly price — 40 customers on a $49 plan is $1,960 of MRR; the MRR calculator works it out for a mix of plans.

How are annual, weekly and daily plans counted?

Every price is converted to a monthly amount. An annual plan is divided by 12, a plan billed every N months is divided by N, a weekly plan is multiplied by 52 ÷ 12, and a daily plan by 365 ÷ 12. The result is multiplied by the item's quantity, so a $1,200 annual plan adds $100 to MRR and a $30 seat on a ten-seat plan adds $300. Each subscription's monthly amount is rounded to the cent when its movement is recorded.

Do free trials count toward MRR?

No. A subscription that is trialing, or whose trial end is still in the future, contributes zero until it converts to a paid subscription. The conversion then shows up as new MRR, so trials never inflate the run-rate. One exception: Patreon's API doesn't mark free trials, so a Patreon patron on a free trial counts at their pledge until the trial lapses.

Does a past-due subscription still count?

Yes — past-due is flagged as at-risk, not churned. A subscription whose latest payment failed is still entitled and still expected to pay, so it stays in MRR until it actually cancels. Only then does its MRR leave as churn.

Are coupons and discounts subtracted from MRR?

Not for Stripe, Paddle, Lemon Squeezy or Whop: MRR is computed from each subscription's price, so a customer with a coupon counts at the full price of their plan. Stripe's own dashboard (Stripe's docs), Baremetrics (help center) and ChartMogul (help center) subtract discounts, so for an account with active coupons their MRR can be lower than ours. Polar reports one amount per subscription and Honest MRR counts it as reported.

For RevenueCat, Superwall and Qonversion, MRR comes from what the store actually charged, so introductory and promotional prices are already in it; Patreon counts each pledge as Patreon reports it. Realized revenue — the cash you actually collected — is always after discounts.

What about metered usage and one-time charges?

Neither is committed MRR. One-time prices have no billing interval, and metered usage changes with consumption rather than commitment, so both contribute zero. Metered usage is reported separately as a usage run-rate — the average of up to the last three complete months — and one-time payments appear in realized revenue.

How do refunds affect MRR?

They don't. MRR is a run-rate computed from what subscriptions are committed to pay; a refund returns money already collected. Refunds reduce realized revenue — the cash you actually received — and leave the run-rate alone.

What counts as realized revenue?

Realized revenue is the cash you actually collected: paid invoices' pre-tax amounts minus the refunds on them, plus — for RevenueCat, Superwall, Qonversion and Patreon, which send no invoices — their charges, each converted at its own day's exchange rate. It sits beside MRR and never changes it. Connected Apple and Google reports are compared with the store part of that cash, month by month.

Three providers' cash is incomplete. RevenueCat's API lists one-time purchases but not subscription renewals, so RevenueCat renewals are missing from realized revenue, and the store comparison shows that gap. Superwall's payments arrive only through its webhook, so payments from before the webhook was set up are missing. Patreon reports only each patron's most recent charge, so of the charges from before you connected, only each patron's latest one is counted. The RevenueCat, Superwall and Patreon pages say how each one's cash is counted.

What are MRR movements?

Every change to a subscription's monthly amount is recorded as one movement in the ledger: new (zero to paying, for a customer who never churned), expansion (an upgrade), contraction (a downgrade), churn (paying to zero) and reactivation (zero to paying for a customer who had churned before). Upgrades and downgrades change MRR the moment they happen; proration only affects realized cash. A webhook records a change as it happens; without one, the daily resync records it on the day it finds it.

Can past months' numbers change?

Syncing never edits a recorded movement — not a daily resync, not a Resync you click, not connecting another provider. A change we only find later is recorded as a new movement on the day we find it, so the months before it keep their value.

Four things can still move a past month. A subscription your provider reports late is added from its real start date. Changing your reporting currency restates every amount in the new currency, each at its own date's exchange rate, while the movements themselves stay as they were. A web subscription that reaches us twice — from your Stripe or Paddle connection and from RevenueCat, Superwall or Qonversion, under the same subscription ID — keeps only the Stripe or Paddle copy: the other copy's movements and charges are deleted, so it never counts twice. And choosing “Disconnect and delete data” removes that provider's history. Rebuilding an organization's history from scratch is a repair we would only run deliberately — never part of a sync.

What do months before I connected show?

When you connect a provider, Honest MRR imports every subscription it reports and dates each one from when it started paying — the end of its trial, if it had one. Those earlier months are built from where each subscription stands today: it counts at its current price from that date until it ended, so an upgrade or downgrade before you connected doesn't appear as a movement, and a subscription that is paused when you connect isn't counted in those months at all. NRR, cohorts and statements for those months use the same figures, and every statement and investor update that covers them names the provider and the day its figures stop being rebuilt.

From the day you connect, every change is recorded as it happens. Realized revenue works differently: it is read from the invoices and charges themselves, so past months' cash is what was actually collected — with the gaps listed under what counts as realized revenue.

How is churn calculated?

Logo churn: Customers who had MRR 30 days ago and lost all of it since ÷ customers active 30 days ago. Counted per customer, not per subscription — cancelling one of two plans is a contraction, not a lost customer — and replayed from the ledger, so a customer who churned and came back still counts as having churned.

Gross revenue churn is the MRR lost to cancellations and downgrades in a month, divided by MRR at the start of that month. Net revenue churn subtracts the month's expansion from that loss first, so it turns negative when upgrades outgrow what churned.

Example: a month starts at $10,000 of MRR. Cancellations take $400 and downgrades $100, while upgrades add $300. Gross revenue churn is ($400 + $100) ÷ $10,000 = 5%; net revenue churn is ($400 + $100 − $300) ÷ $10,000 = 2%. If 6 of the 200 customers paying 30 days ago have since lost all their MRR, logo churn is 6 ÷ 200 = 3%.

What is net revenue retention (NRR)?

Net revenue retention follows one group of customers: of the MRR they paid when they started, how much do they pay now? Honest MRR measures it per signup-month cohort — the cohort's MRR at each later month-end divided by its MRR at the end of its first month. Upgrades push it above 100%; downgrades and cancellations pull it below; a customer who cancels and comes back counts again once they pay. Example: customers who started in March paid $2,000 at the end of March and pay $2,300 in September, so their September NRR is 115%.

How is lifetime value (LTV) calculated?

Predicted LTV = ARPA (current MRR ÷ paying customers) ÷ monthly logo churn, averaged over the last three complete months — what a customer is worth if current churn holds. Realized = money actually collected (paid − refunded) ÷ every customer who has ever had a paying subscription. When the two disagree, predicted is the forecast and realized is the history.

Example: $5,000 of MRR across 100 paying customers is a $50 ARPA; with monthly logo churn averaging 2%, predicted LTV is $50 ÷ 0.02 = $2,500. With no churn in those months there is nothing to divide by, so Honest MRR shows no predicted LTV rather than an infinite one.

How are merchant-of-record and app-store subscriptions counted?

MRR leaves out money that was never yours. Merchants of record — Paddle, Polar and Lemon Squeezy — collect sales tax on your behalf, so MRR uses their net pre-tax amounts. App Store and Google Play subscriptions reported through RevenueCat, Superwall or Qonversion count proceeds, after Apple's or Google's 15–30% cut. Payment-processing fees are not deducted, and where a platform doesn't expose its own fee — Patreon and Whop — MRR shows the price the buyer pays; each integration page says so.

How are multiple currencies handled?

Every entry is converted to your reporting currency at the exchange rate as of its own date, so exchange-rate moves never rewrite past months. Movements are classified in the subscription's original currency, so an exchange-rate swing can never show up as a phantom upgrade or downgrade. A currency with no published rate (the European Central Bank's reference rates cover about 30) can't be converted, so its amounts are left out rather than counted one-to-one, and a warning names the currency.

What never counts as MRR?

Ad spend feeds customer acquisition cost (CAC) and payback, affiliate and creator payouts are realized revenue on their own line, app-store reports are compared with your store cash, and web traffic is context. None of them is ever added to MRR, churn or LTV. Billing providers can overlap: RevenueCat, Superwall and Qonversion can report the same store purchases, and they can also track web subscriptions billed through Stripe or Paddle. Connect any one subscription through one provider only — each provider's page says where the overlaps are.

Where do the numbers come from?

Honest MRR keeps the latest verbatim copy of every object your provider sends, and commits a fingerprint of every version it receives to your organization's append-only, tamper-evident hash chain. The ledger of movements is built from those records, and the MRR, churn, cohort and LTV reports are recomputed by replaying it — so those figures can be traced, movement by movement, to the provider records behind them. Realized revenue is read from the same invoices and charges; ad spend, costs and traffic come from their own sources. How the chain works is on the security page.

See it on your own data

Connect a billing provider and every one of these rules is applied to your real subscriptions, with every MRR movement open to inspection.

Start free