Skip to content

7 min read

How to calculate MRR: annual plans, coupons, trials and tax

How to normalize annual, weekly and discounted plans, and what to do with tax, trials, one-time payments, past-due and paused subscriptions. With a worked example.

MRR is the monthly value of the subscriptions that are paying you right now, with every plan expressed as if it billed once a month. That sentence is the whole definition. Knowing how to calculate MRR properly is mostly about the dozen small decisions hiding inside it: what to do with an annual plan, a coupon, VAT, a trial, a card that failed yesterday.

None of these decisions is hard. The trouble is that each tool makes them slightly differently, and if you never write yours down, your number drifts every time you rebuild the spreadsheet. Below is a set of rules that hold up, and a worked example at the end that applies all of them at once.

What is the basic MRR formula?

Take every active, paid subscription. Convert its price to a monthly amount. Add them up. The work is in "active", "paid" and "convert".

How do you normalize annual, quarterly and weekly plans?

Divide or multiply the price by the length of the billing period so that every subscription contributes a monthly amount:

Billing periodContribution to MRR
MonthlyThe price
QuarterlyPrice ÷ 3
AnnualPrice ÷ 12
WeeklyPrice × 52 ÷ 12

Weekly plans are where hand-built spreadsheets usually go wrong. A month is not four weeks. Multiplying a weekly price by 4 understates it by about 8%, because 52 weeks spread over 12 months is about 4.33 weeks a month. If you sell weekly plans in an app, that error is large enough to change what you think your growth rate is.

Annual plans are the other trap, in the opposite direction. A €290 annual renewal brings €290 of cash this month and €24.17 of MRR. Recording the full €290 in the month it was paid makes that month look excellent and the next eleven look like a slump.

Do discounts count?

Use what the customer actually pays, after discounts. If someone is on a €49 plan with a 20% coupon, they contribute €39.20.

The list price is tempting because it is bigger, but MRR is supposed to describe money that arrives.

The same logic covers annual plans sold at a discount to monthly. If your monthly plan is €29 and your annual plan is €290, an annual customer contributes €24.17, not €29.

What happens when a coupon ends?

A coupon that lasts three months will expire on its own, and the customer's MRR rises to the full price with nothing else changing. If you compute movements per customer, that shows up as expansion.

That is correct, but read it for what it is. Expansion from coupons expiring is predictable and says nothing about whether customers like the product more. If you ran a big launch discount, expect a wave of it a few months later and don't mistake it for upsell. A coupon that lasts forever is a permanent price cut and should be treated as one.

Should MRR include tax?

No. VAT and sales tax pass through you to a government. Exclude them.

If your prices are tax-exclusive, the subscription amount before tax is your number. If your prices are tax-inclusive, strip the tax portion out. A €29 plan billed as €35.09 with 21% VAT on top contributes €29.

Do free trials count towards MRR?

Not until they convert. A trial is a customer who might pay. Counting it inflates MRR on the way in and creates fake churn on the way out when the trial ends without a payment.

Track trials separately, and track how many of them become paid. When a trial converts, the subscription enters MRR on the day it starts paying.

What about one-time payments?

Leave them out. Setup fees, lifetime deals, credit packs and one-off consulting invoices are real revenue, but they are not recurring. Adding them to MRR makes the number jump in the month they happen and fall the month after, which is exactly the noise MRR exists to remove.

How do you treat past-due subscriptions?

A subscription whose last payment failed is not yet lost. Billing systems retry failed payments for a while, and customers update their cards.

The rule we use: keep a past-due subscription in MRR until it actually cancels, and report its value separately as at-risk MRR. That way MRR doesn't flicker every time a card expires, and you can still see how much revenue is hanging on a payment retry. If you remove past-due subscriptions immediately, you get a churn spike followed by a reactivation spike for customers who simply fixed their card a few days later.

And paused subscriptions?

A paused subscription isn't billing, so it isn't recurring revenue at the moment. Count it at zero while it's paused. It will show as a loss when it pauses and come back as a reactivation if it resumes.

You could argue for keeping paused subscriptions in MRR because the customer intends to come back. Some do. But a pause with no end date is often a cancellation that hasn't been admitted yet, and MRR is more useful when it is a little conservative. Whatever you choose, apply it the same way every month.

Which currency?

If you bill in more than one currency, convert each subscription into one reporting currency at a rate that doesn't change every time you look. Fixing the rate per billing period keeps last month's MRR stable when exchange rates move this month. The details, including how to avoid double counting when you sell through both Stripe and RevenueCat, are in combined MRR for Stripe and RevenueCat.

A worked example

Say you have ten subscriptions on the books in March, all priced in euros. Here is what each one billed this month, and what it contributes to MRR:

CustomerSituationCharged in MarchMRR
AMonthly, €29€29.00€29.00
BAnnual, €290, renewed this month€290.00€24.17
CQuarterly, €75, billed in February€0.00€25.00
DWeekly app plan, €4.99, four charges€19.96€21.62
EMonthly, €49, 20% coupon for 3 months€39.20€39.20
FMonthly, €29 plus 21% VAT€35.09€29.00
GTrial of the €29 plan, day 6 of 14€0.00€0.00
HMonthly, €79, payment failed, retrying€0.00€79.00
IMonthly, €29, paused€0.00€0.00
JOne-time setup fee, €150€150.00€0.00
Total€563.25€246.99

Cash collected in March is more than twice the MRR. That gap is normal and it is why you can't read MRR off your bank statement or your Stripe balance. The annual renewal and the setup fee inflate cash; the quarterly plan billed last month and the failed payment deflate it.

Of the €246.99, €79 is at risk because customer H's payment is failing. If H cancels, MRR drops to €167.99. If H updates their card, nothing changes. Reporting both numbers tells you which outcome you are waiting on.

And in May, when customer E's coupon expires, their contribution goes from €39.20 to €49 without anyone doing anything.

Write the definition down

The most useful thing you can do with all of this is put it in one paragraph and keep it somewhere you'll see it. Ours is on the metric definitions page: monthly normalization, after discounts, excluding tax, trials and one-time payments, gross before fees, converted at a fixed rate per billing period.

Once MRR is stable, the next useful number is how it changed, broken into new, expansion, reactivation, contraction and churn. That is net new MRR, and it explains far more about a month than the total does. If you also need to report a yearly figure, MRR vs ARR covers what that number does and doesn't mean.

Updated

See what makes you money.

Connect Stripe or RevenueCat and Search Console, and you see combined MRR and 16 months of search history on day one. Page and keyword revenue follow as the snippet collects first touches.

No card required. The trial clock starts when your first revenue source connects.