How to calculate MRR properly

Updated 2026-08-04

Monthly recurring revenue is the amount you can reasonably expect to receive every month from active subscriptions, without doing anything new.

Every word in that sentence is doing work. Recurring excludes one-off sales. Active excludes cancelled and past-due. Expect to receive excludes trials. And monthly means every subscription has to be converted to a monthly basis before you add anything up.

The method

  1. List every active subscription. Not trialling, not past due, not cancelled. Active and paying.
  2. Resolve each to its price and billing interval.
  3. Normalise to monthly:
Interval Conversion
Monthly as-is
Annual ÷ 12
Quarterly ÷ 3
Semi-annual ÷ 6
Weekly × 4.333
  1. Sum the normalised values. That's your MRR.
  2. ARR is MRR × 12. Nothing more complicated.

Do this automatically with the MRR calculator.

The three mistakes

1. Counting annual payments in full

The most common and most damaging. A customer pays $490 for a year. If you book $490 of MRR in that month, your chart spikes and then appears to collapse the next month. Nothing happened — the arithmetic was wrong.

$490/year is $40.83 of MRR, every month, for twelve months.

More on annual plans.

2. Including one-off revenue

A template sale, a consulting invoice, a lifetime deal. None of these recur, so none belong in MRR. Including them makes the number unforecastable, which defeats its purpose entirely.

More on one-off revenue.

3. Using gross payment volume as a proxy

Your Stripe dashboard's headline number is usually volume for a period — every payment that arrived, including annual charges at full value, one-off sales, and sometimes refunds not yet netted. It is a useful number. It is not MRR.

What to include and exclude

Include Exclude
Active paid subscriptions Free trials
Recurring discounts (at discounted value) One-off sales
Annual plans, normalised Cancelled subscriptions
Multiple subscriptions per customer Past-due / failed payments
Lifetime deals
Refunds already issued

Discounts count at the amount actually charged. A customer on a permanent 50% discount paying $15 contributes $15, not $30.

Lifetime deals are the awkward case. They're neither one-off nor recurring in the usual sense. The common convention is to exclude them from MRR and treat the cash separately — otherwise a lifetime sale inflates a metric that is meant to be predictive.

Gross or net?

By convention, MRR is gross — before payment processing fees. That's what makes it comparable across businesses using different processors.

Track fees separately. Knowing you're at $6,180 MRR and paying roughly 3% in processing is more useful than a single blended figure that hides both.

More on gross vs net.

Multiple currencies

If you bill in more than one currency you have to pick a reporting currency and convert at a consistent rate. Summing raw amounts across currencies produces a number that means nothing.

This is genuinely hard to do well, and worth knowing that many tools — including FRGMNT today — sum multi-currency amounts without conversion. If that applies to you, treat combined totals as indicative.

Doing it across platforms

The method above is simple for one platform. It gets tedious when your subscriptions are split across Stripe and Lemon Squeezy, with one-off Gumroad sales that must be kept out, and App Store subscriptions on a different reporting basis entirely.

That's the problem FRGMNT exists to solve.

Frequently asked

What is the MRR formula?

Sum every active subscription's price normalised to a monthly interval. Annual plans divide by twelve, quarterly by three, weekly multiply by 4.333. One-off sales, trials and cancelled subscriptions are excluded.

Should trials count towards MRR?

No. A trial is not paying you. Count a subscription when it converts to paid, otherwise your MRR includes revenue that may never arrive.

Is MRR gross or net of fees?

MRR is conventionally gross, before payment processing fees. Track fees separately so you can see both without corrupting the recurring figure.

Read next