Free tool · no sign-up
MRR and churn from a CSV, in your browser
This MRR calculator reads a subscriptions export from Stripe, Polar or Lemon Squeezy (or our simple template) and shows your MRR, paying subscribers, ARPU, new and churned MRR and churn rates. The file never leaves your browser.
- 3exports read, plus a template
- 30 MBfiles, read on your device
- Nothinguploaded, to anyone

Drop your subscriptions CSV hereor choose it from your computer. Stripe, Polar, Lemon Squeezy or the template.
Your file stays in your browser. Nothing is uploaded, to BugOtter or anyone.
Three rules that change your MRR
Yearly plans ÷ 12
A $290 yearly plan adds $24.17 to MRR, not $290. Quarterly ÷ 3, weekly × 4.35.Trials aren't MRR
They haven't paid yet. They're shown on their own and count once they convert.Cancelled counts until it ends
A scheduled cancellation has paid for its period. It becomes churn on the day it ends.
How this calculator counts
MRR has a few judgment calls. These are ours, and they match how BugOtter counts when it's connected.
- MRRThe sum of each paying subscription's price × quantity, turned into a monthly amount. Yearly ÷ 12, quarterly ÷ 3, weekly × 4.35 (30.44 days ÷ 7), daily × 30.44.
- PayingActive or past due. Unpaid, paused and incomplete subscriptions are left out.
- TrialsExcluded from MRR and shown on their own. They count once they convert.
- Scheduled cancellationsStill count until their end date. They become churn on the day they end.
- CurrenciesEach currency is counted on its own, never converted.
- New MRRThe MRR of paying subscriptions created in the last 30 days. A trial that started and converted in that window counts as new.
- Churned MRRThe MRR of subscriptions that ended in the last 30 days after paying. A trial that ran out without paying isn't churn.
- Logo and revenue churnLogo churn is subscriptions that ended ÷ paying subscriptions 30 days ago. Revenue churn is churned MRR ÷ MRR 30 days ago. “30 days ago” is rebuilt from the file: today, minus what's new, plus what ended. An export is a snapshot, so upgrades and downgrades in the window can't be seen.
Which exports work
The calculator recognises the export from its header row. If yours isn't recognised, the generic template always works.
- Stripe WorksBilling → Subscriptions → Export. You pick the columns when exporting; keep
Status,Amount,Interval,Quantity,Currency,Created (UTC),Current Period End (UTC),Canceled At (UTC)andEnded At (UTC). Amounts are in dollars (29.00), not cents. - Polar WorksSubscriptions → Export. The default columns are
Email,Started At,Product,Amount,Currency,StatusandBilling Interval(likemonthor3 months). AddCancels At Period End,Ends At,Ended AtandTrial Endfor churn and trials. - Lemon Squeezy Best effortStore → Subscriptions → Export (sent by email). Lemon Squeezy doesn't publish this file's columns, so we read its API names:
status,price,renewal_interval_unit,created_at,ends_at,trial_ends_at, with amounts in cents. If your file has no price or interval column, use the template. - Creem Use the templateWe couldn't find a subscriptions CSV export in Creem's dashboard or docs. Copy your subscriptions into the template, or connect Creem to BugOtter, which reads them over the API.
The generic template has one row per subscription and six columns: status (active, trialing, past_due, canceled), amount (the price per billing period, like 29.00), interval (month, year, week, day, or “3 months”), currency, created and canceled (the date it ended or will end, empty if it hasn't been cancelled). Dates as 2026-11-04. Optional: quantity, interval_count, trial_end. Use the “Download the template” button above.
Export formats checked Nov 4, 2026: Polar's columns from its open-source export code (github.com/polarsource/polar); Stripe's from real exports, since Stripe doesn't publish a list; Lemon Squeezy's export from its announcement and API docs; Creem from docs.creem.io. Providers change exports; if yours stops working, the template still does.
What MRR is
MRR, monthly recurring revenue, is how much your subscriptions bring in per month, if nothing changed.
It's the number subscription businesses steer by, because it moves for exactly the reasons you care about: people starting, upgrading, downgrading and leaving.
It isn't your income this month. A yearly customer who paid $290 in March brings in $290 of cash that month and nothing for the next eleven. MRR smooths that out, so you can see the trend without the lumps.
$24.17
of MRR every month from a $290 yearly plan
The same amount each month, not $290 once. For a plain-words tour of MRR, churn, ARPU and the rest, read SaaS metrics in plain words.
How to calculate MRR
Take every paying subscription, turn its price into a monthly amount, and add them up.
MRR = Σ (price × quantity ÷ months in the billing period)
Say you have 40 customers on $12 a month, 10 on $29 a month, 6 on $290 a year, and 3 in a free trial:
- $48040 × $12
- $29010 × $29
- $1456 × $290 ÷ 12
- $03 trials
$915
MRR, from 56 paying customers
ARPU (average revenue per user) is $915 ÷ 56 = $16.34 a month.
Churn, in the same example
Over the last 30 days, 2 customers on $29 left and 5 new ones joined on $12. Thirty days ago you had 56 − 5 + 2 = 53 paying customers and $915 − $60 + $58 = $913 of MRR.
- Logo churn = customers lost ÷ customers at the start = 2 ÷ 53 = 3.8%
- Revenue churn = MRR lost ÷ MRR at the start = $58 ÷ $913 = 6.4%
Revenue churn is higher here because the people who left paid more than average. That's worth knowing: it means your best customers are the ones leaving.
Common mistakes
Counting one-off payments
A lifetime deal, a setup fee or a one-time template sale is revenue, but it isn't recurring. Adding it to MRR makes a good month look like a new baseline. Keep it out; track it as revenue.
Counting annual plans in full
A $290 yearly plan is $24.17 of MRR, not $290. Counting it in full makes MRR jump in the month it was sold and crash the month after. Divide by 12.
Including tax
VAT and sales tax collected on a subscription belong to the government. If your provider is a merchant of record (Polar, Lemon Squeezy, Creem, Paddle), the price a customer sees may include tax that never reaches you. MRR should be what you keep before fees, without tax.
Counting trials
A free trial is a hope, not revenue. Counting trials inflates MRR and then shows their failure to convert as churn, which makes both numbers wrong. Count them separately, and count them as new MRR when they pay.
Dropping cancellations too early
A customer who cancels today with 20 days left has paid for those 20 days. Removing them from MRR immediately makes churn look earlier than it is. Keep them until the period ends.
Adding up currencies
$100 plus €100 isn't 200 of anything. Convert at one fixed rate if you must, or watch each currency on its own.
Ignoring discounts
A 50% coupon forever means the customer pays half. If your numbers come from list prices, as most exports do, MRR is a little higher than what you actually collect.
How BugOtter computes MRR automatically
Exporting a CSV every month gets old. Connected, BugOtter does the same sums on every sync, from the provider's API.

- MRR, with its change and the yearly run rate.
- How MRR moved: new, upgrades, downgrades and cancellations, as a waterfall.
- Subscribers and trials, with what the trials are worth if they pay.
You paste a read-only key for Stripe, Polar, Lemon Squeezy or Creem. BugOtter only reads: it never charges, refunds or emails your customers. Then, for each provider:
- Stripe: active, trialing and past-due subscriptions are read; each item's price × quantity is turned into a month with the same formula as this page. Trials are kept apart.
- Polar: each subscription's amount and billing interval (including counts like every 3 months), with scheduled cancellations kept until they end.
- Lemon Squeezy: the variant's price × quantity per renewal interval. A “cancelled” subscription still in its paid period counts until
ends_at. - Creem: what each subscription last actually paid, minus the tax Creem collected as merchant of record, so tax never inflates MRR. Scheduled cancellations count until they end.
MRR counts active and past-due subscriptions only. One-off payments go to revenue, never to MRR. Refunds are taken off revenue on the day of the refund where the provider says when (Creem doesn't, so its refunds stay on the payment's day).
History, without exports
Providers only say what subscriptions look like now, so BugOtter writes history down as it goes. Every change between syncs is recorded as new, expansion, contraction, churn or reactivation, with the reason the customer gave when there is one, plus one MRR snapshot per app and currency each day.
That's how you get an MRR chart and a waterfall without exporting anything, and it's what your coding agent reads over MCP when you ask “why did MRR drop?”. Coming from a metrics tool? BugOtter vs Baremetrics compares the two honestly.
Questions
Is my CSV uploaded anywhere?
No. The file is read by your browser with the File API and the numbers are worked out on your device. Nothing is sent to BugOtter or anyone else, and nothing is kept when you close the tab.
Do trials count toward MRR?
No. A subscription in trial hasn't paid yet, so it isn't recurring revenue. The calculator shows trials as their own number. When a trial converts, it counts from then on.
Does a subscription that's been cancelled still count?
Yes, until it actually ends. A customer who cancelled to stop at the end of the period has paid for that period, so they stay in MRR until the end date. After that they count as churn on the day it ends. The calculator shows how many are cancelling.
How are yearly plans counted?
Divided by 12. A $290 yearly plan adds $24.17 to MRR, not $290. Quarterly plans are divided by 3, weekly plans multiplied by about 4.35 (an average month of 30.44 days ÷ 7), and daily plans by 30.44.
What about different currencies?
Each currency gets its own MRR, subscribers and churn. We don't convert, because the exchange rate would change your number every day even when nothing happened in your business.
Are past-due subscriptions included?
Yes. A past-due subscription is one where a renewal payment failed and the provider is still retrying. It's usually recovered, so like Stripe and most tools, it stays in MRR. Unpaid, paused and incomplete subscriptions are left out.
Why is my MRR different from my Stripe dashboard?
Usually discounts, taxes or timing. This calculator uses the amount in the export, which for Stripe is the plan price, so a 50% coupon isn't taken off. Stripe's own MRR also handles discounts and some statuses differently. Small differences are normal; large ones usually mean a column was read as the wrong thing.
Can I get this without exporting a CSV every month?
Yes. BugOtter connects to Stripe, Polar, Lemon Squeezy and Creem with a read-only key and works out MRR, new, expansion, contraction and churned MRR on every sync, with daily history. It's on every plan, with a 14-day trial.
Your MRR, every morning, without the CSV.
14 days of everything, no card needed. Plans from $10 a month, billed yearly.