How to Calculate Monthly Recurring Revenue—and Reconcile Every Change

Monthly recurring revenue (MRR) is the normalized monthly value of active recurring subscriptions at a specific point in time. For a B2B subscription company, the useful calculation is not merely a total. It is a bridge that explains exactly how opening MRR became ending MRR.

Ending MRR
= Opening MRR
+ New Business MRR
+ Expansion MRR
+ Reactivation MRR
− Contraction MRR
− Churn MRR

That bridge answers two operating questions at once: how much recurring revenue the business currently has, and which customer events changed it during the month.

MRR is not GAAP revenue, cash collected, or the value of invoices issued. Stripe describes it as a forward-looking subscription metric and notes that invoice totals are an unsuitable shortcut because they can include one-off amounts and cash timing that do not represent recurring monthly value (Stripe Support). Use MRR to analyze the subscription run rate; use the finance team’s accounting records for recognized revenue.

Stripe distinguishes MRR from GAAP revenue and warns that invoice totals can include one-off amounts and cash timing that do not represent recurring monthly value. [S1]

Normalize each active subscription first

For a fixed-price subscription, convert the recurring charge to one monthly amount:

Subscription MRR = recurring contract amount ÷ months in the service period
Company MRR = sum of subscription MRR for all active customers

A $1,200 annual subscription therefore contributes $100 of MRR while it is active. A $300 quarterly subscription also contributes $100. A $100 monthly subscription contributes $100. Stripe’s billing documentation uses this monthly-normalization approach for active and past-due subscriptions (Stripe Billing documentation).

Stripe Billing normalizes eligible active and past-due subscription values to a monthly amount for its MRR reporting. [S2]

The formula is simple; the inclusion policy is not. Before publishing MRR, decide in writing:

  • which products and charge types are recurring;
  • whether discounts reduce MRR and when temporary discounts begin and expire;
  • whether usage-based charges, taxes, credits, refunds, and services are included;
  • when a subscription becomes active and when a cancellation becomes churn;
  • how foreign-currency subscriptions are converted; and
  • how backdated changes and corrected billing events restate prior periods.

These choices can change the reported number. For example, Stripe excludes trials, taxes, free plans, and metered products from its MRR calculation, while allowing some discount and subscriber-status settings to be configured. ChartMogul documents its own treatment of discounts, refunds, transaction fees, and one-time line items (Stripe Billing documentation, ChartMogul MRR documentation). Neither vendor’s implementation is a universal accounting rule. The control that matters is a consistent, versioned policy applied to every period.

Stripe and ChartMogul document different product-specific treatments for subscription states, discounts, taxes, metered charges, refunds, fees, and one-time items; neither supplies a universal MRR policy. [S2], [S3]

Classify each change by the customer’s lifecycle

Once every subscription has a normalized balance, compare each customer’s prior MRR with the new balance. Use five value-changing categories:

MovementWhen to use itSigned effect
New businessA customer becomes a paying subscriber for the first timePositive
ExpansionAn active customer’s total MRR increasesPositive
ReactivationA previously churned customer returns to a paid planPositive
ContractionAn active customer’s total MRR decreases but remains above zeroNegative
ChurnA customer’s total MRR falls to zeroNegative

ChartMogul documents these lifecycle distinctions and also records a sixth, neutral movement when a subscription changes without changing MRR (ChartMogul movement definitions). Neutral events can be useful operationally, but their signed contribution to an MRR bridge is zero.

ChartMogul distinguishes five value-changing MRR movements—new business, expansion, reactivation, contraction, and churn—from a neutral subscription change with zero MRR effect. [S4]

Classify the economic transition, not the wording on an invoice. If an active account falls from $1,000 to $700 MRR, the $300 loss is contraction. If it then falls from $700 to zero, the $700 loss is churn. If that same customer later returns at $500, the increase is reactivation.

Customer identity is therefore part of the calculation. A billing migration that creates a second customer record can turn one continuing relationship into apparent churn on the old record and new business on the new one. Keep a durable business-customer ID even when subscription or billing-system IDs change.

Build a movement ledger that proves the total

Do not calculate the bridge from five manually maintained spreadsheet totals. Create one row for every effective change, with enough detail to trace it back to the source:

Effective dateCustomer IDSubscription IDPrior MRRNew MRRMovementSigned deltaSource eventPolicy version
2026-08-06C-1042S-881$800$1,000Expansion+$200E-45018MRR-v3

For each row:

Signed delta = New MRR − Prior MRR

First reconcile every customer’s opening balance, movements, and ending balance. Then sum those customer results and reconcile the company total. This two-level check catches duplicated customers, missing events, incorrect effective dates, and migrations that a top-line comparison can conceal.

Reconcile the month

Consider this illustrative month; the amounts are hypothetical, not company results:

Bridge lineMRR movement
Opening MRR$80,000
New business+$6,000
Expansion+$4,500
Reactivation+$500
Contraction−$2,000
Churn−$3,000
Ending MRR$86,000
Net MRR movement
= 6,000 + 4,500 + 500 − 2,000 − 3,000
= 6,000

Ending MRR
= 80,000 + 6,000
= 86,000

MRR growth rate
= Net MRR movement ÷ Opening MRR × 100
= 6,000 ÷ 80,000 × 100
= 7.5%

The growth rate is meaningful only after the bridge balances. Calculate a residual as the final control:

Reconciliation residual
= Ending MRR − Opening MRR − signed movement sum
= 86,000 − 80,000 − 6,000
= 0

A nonzero residual is not miscellaneous growth. It means the balance snapshots and movement ledger disagree. Trace the difference to timing, currency conversion, customer identity, missing events, duplicate events, or a policy change before anyone uses the bridge to judge acquisition or retention.

The finished monthly report should publish the opening balance, all five value-changing movements, ending balance, residual, and policy version together. When both customer-level and company-level residuals equal zero, the business has an MRR number it can explain—not merely one it can display.

Sources

  1. Stripe Support, “Understanding monthly recurring revenue (MRR) and annual recurring revenue (ARR)Supports: MRR is a forward-looking subscription metric rather than GAAP revenue; Invoice totals are not an appropriate shortcut for MRR because invoices can contain one-off charges and reflect cash timing. Checked 2026-09-09.Limitation: This documents Stripe metrics and does not replace a company's accounting policy, recurring-charge definitions, or source-of-truth controls.
  2. Stripe Documentation, “Billing analyticsSupports: Stripe normalizes active and past-due subscription values to a monthly MRR amount; Stripe excludes trials, taxes, free plans, and metered products from its MRR calculation; Some discount and subscriber-status treatments can be configured. Checked 2026-09-09.Limitation: The calculation and configuration describe Stripe Billing and are not a universal MRR policy or accounting standard.
  3. ChartMogul Help Center, “Monthly Recurring Revenue (MRR)Supports: ChartMogul documents how discounts, refunds, transaction fees, and one-time line items affect its MRR calculation; MRR treatment depends on an explicit recurring-revenue policy rather than invoice totals alone. Checked 2026-09-09.Limitation: This is ChartMogul product documentation and does not establish a universal inclusion, timing, discount, refund, or fee policy.
  4. ChartMogul Help Center, “Understanding MRR movementsSupports: ChartMogul distinguishes new business, expansion, reactivation, contraction, and churn MRR movements; A subscription change with no MRR effect is classified as a neutral movement. Checked 2026-09-09.Limitation: These lifecycle categories and event semantics describe ChartMogul's model; organizations must define identity, timing, and movement rules for their own data.

Continue the evidence path

Run your growth team from one screen.

Invite only