Quasa
Use QUASA App
Join the pioneer of Web3 crypto freelancing today!
Open
Business

How to Calculate SaaS Churn Without Mixing Customers, Revenue or Time Periods

|Author: Viacheslav Vasipenok|9 min read| 1
How to Calculate SaaS Churn Without Mixing Customers, Revenue or Time Periods

Calculate SaaS churn by dividing losses from an opening customer or recurring-revenue base by that same opening base. Customer churn uses accounts, while revenue churn uses MRR or ARR; the numerator, denominator and measurement period must always describe the same unit and population.

The core formulas are customer churn = churned opening customers ÷ starting customers, gross revenue churn = (cancellation revenue + contraction revenue) ÷ starting recurring revenue, and net revenue churn = (cancellation revenue + contraction revenue − expansion revenue) ÷ starting recurring revenue. This separation matters because Amplitude’s churn guide distinguishes customer, user and revenue churn and recommends matching the measurement period to the business cadence.

Define the metric before extracting data

Write down the unit, population, recognition rule and period before calculating anything. A usable definition could be: “Monthly customer churn among paying production accounts, measured between fixed opening and closing timestamps, with churn recognized when paid service ends.”

  • Customer churn measures the share of opening accounts that cease to be paying customers.
  • Gross revenue churn measures recurring revenue lost through cancellations and contractions without an offset for expansion.
  • Net revenue churn deducts expansion generated by the opening customer base from those losses.
  • Cohort churn restricts the calculation to a group sharing an acquisition period, renewal window or other starting condition.

Decide whether “customer” means an account, legal entity or subscription. Account-level reporting is often easier to reconcile when one customer can hold several subscriptions: ChartMogul’s customer-churn documentation keeps a customer active after a partial subscription cancellation and classifies the associated MRR loss as contraction.

Also document the treatment of trials, free plans, delinquency, pauses, grace periods, migrations and scheduled cancellations. These are policy choices, not details to decide after seeing the result.

Freeze the opening population and period boundaries

Create an immutable opening snapshot. Every account in the customer denominator must satisfy the written active-customer definition at the opening timestamp, and every currency unit in the revenue denominator must belong to the corresponding opening population.

Do not add customers acquired during the period to a standard opening-base denominator. They were not members of that opening population, and including them makes acquisition volume alter a retention metric; RetentionCheck’s opening-base method likewise divides customers lost by customers present at the start of the period.

Choose one recognition event, such as paid service ending or the subscription entering a defined inactive state. A cancellation request and the end of access may fall in different periods, so switching between those events will move churn across reporting boundaries.

Use completed periods for reported churn. A projected partial-period value can be useful operationally, but label it as a forecast instead of comparing it directly with closed-period results.

Build a calculation table that can be audited

Subscription movements classified before opening and closing recurring revenue are reconciled

Use one account-period row when each account has a single net movement, or separate movement rows when an account can change several times. The following copyable header can be saved as a CSV file and used as a calculation-table template:

period_start, period_end, account_id, opening_status, opening_mrr, movement_timestamp, movement_type, movement_mrr, closing_status, closing_mrr, segment, currency, source_record_id

Restrict movement_type to controlled values so that each amount has one role:

  • new: recurring revenue from an account outside the opening base;
  • reactivation: recurring revenue restored after a previously recognized churn event;
  • expansion: an increase generated by an opening customer;
  • contraction: a decrease from an opening customer that remains active;
  • churn: the remaining recurring revenue removed when an opening customer becomes inactive;
  • adjustment: foreign-exchange effects, corrections, taxes, credits or non-recurring charges kept outside churn.

Stripe’s billing analytics documentation separates new, reactivation, expansion, contraction, churn and foreign-exchange movements in its MRR bridge. The same documentation defines MRR as a monthly-normalized value and illustrates that an annual subscription priced at $600 contributes $50 to MRR.

Store both the source amount and the normalized movement. This lets reviewers trace a result back to a contract or billing record rather than reverse-engineering the dashboard’s classifications.

Calculate customer churn from opening accounts

For a closing-status method, use customer churn rate = opening customers inactive at close ÷ customers active at start, then format the result as a percentage. Customers acquired during the period are excluded because they were not in the denominator.

This method also avoids treating an opening customer as lost if the customer cancels and reactivates before the closing timestamp. If your policy counts every cancellation event instead, label the result as event-based churn because it may not reconcile to closing customer status.

For a sourced worked example, ChartMogul starts with 100 customers, records 12 churn events, removes one intraperiod acquisition and one reactivation, and calculates 10% customer churn. The example demonstrates why churned-and-reactivated customers and customers acquired-and-lost inside the period should not be silently mixed into an opening-base rate.

Your customer reconciliation is opening active accounts + new accounts + reactivations − churned opening accounts = closing active accounts. If the bridge does not reproduce the billing system’s closing total, investigate duplicate identifiers, status rules and timestamp boundaries before publishing the percentage.

Keep gross and net revenue churn separate

Gross revenue churn isolates erosion from the opening recurring-revenue base: gross MRR churn = (churn MRR + contraction MRR) ÷ opening MRR. Expansion, reactivation and new business do not offset this metric.

ChartMogul’s standard gross MRR formula places net churn and net contraction over starting MRR, while its settings can change how contractions and plan-segment movements are classified. This is why a metric exported from a vendor should retain the vendor configuration alongside the result.

In ChartMogul’s worked example, $10 of churn plus $10 of contraction against $100 of starting MRR produces 20% gross MRR churn. The arithmetic contains no expansion offset.

Net revenue churn answers a different question: net MRR churn = (churn MRR + contraction MRR − expansion MRR) ÷ opening MRR. Only expansion from members of the opening base belongs in the offset; new-customer revenue does not.

Chargebee’s net MRR example applies the same principle: $10,000 of contraction minus $15,000 of expansion against $200,000 of starting MRR produces negative 2.5% net MRR churn. A negative result means expansion exceeded losses in the existing base; it does not mean no customer cancelled.

Reconcile revenue separately with closing MRR = opening MRR + new MRR + reactivation MRR + expansion MRR − contraction MRR − churn MRR ± adjustments. Stripe documents this MRR roll-forward structure, including a separate foreign-exchange adjustment.

Measure annual contracts at the renewal exposure point

Compounded monthly retention compared with an annual-contract renewal cohort

For revenue churn, either normalize every contract into MRR or keep all balances and movements in ARR. Never divide an ARR loss by opening MRR, and do not treat the full value of a prepaid annual invoice as recurring revenue for its collection month.

Customer churn for annual contracts often needs an eligible-renewal cohort in addition to a company-wide rate. A monthly denominator containing every active annual customer includes contracts that cannot make a renewal decision during that month.

Use annual-contract non-renewal rate = eligible contracts not renewed ÷ contracts eligible to renew. RetentionCheck recommends measuring annual contracts at renewal and assigning non-renewals to their contract-end period.

Applying that renewal-cohort formula, an illustrative cohort with 120 eligible contracts and nine non-renewals produces a 7.5% non-renewal rate. This is a conditional calculation, not a benchmark, and should remain labeled as a renewal-cohort measure.

Run the matching ARR calculation on the same exposed cohort: gross ARR churn = cancellation ARR plus contraction ARR, divided by opening cohort ARR. Net ARR churn deducts expansion ARR generated by that same opening cohort.

Customer and revenue results may legitimately differ because contract values differ. A small number of large non-renewals can produce low customer churn and high revenue churn without any contradiction.

Convert monthly churn by compounding retention

Do not multiply a monthly churn rate by the number of months in a year. Each assumed monthly loss applies to the retained base left after earlier periods.

The correct modeled conversion is annualized churn = one minus monthly retention compounded across the year; in algebraic form, RetentionCheck gives the formula as 1 − (1 − monthly churn)^12. The reverse calculation takes the annual retention root and subtracts the result from one.

Its worked example shows that 2% monthly churn compounds to approximately 21.5% annual churn rather than 24%. This is a modeled equivalent, not an observed annual result, because it assumes a constant rate and comparable exposure across periods.

Do not use the conversion to disguise cadence differences. If annual contracts churn only at renewal while monthly subscriptions can leave each month, report the observed cohorts separately and use the compounded equivalent only for a clearly labeled comparison or forecast.

Select the metric that matches the decision

  1. Use customer churn for decisions about account retention, onboarding and customer-success workload.
  2. Use gross revenue churn to measure recurring-revenue leakage before upsells and expansion.
  3. Use net revenue churn to determine whether expansion in the opening base offsets cancellations and contractions.
  4. Use an acquisition or eligible-renewal cohort when customer age or contract anniversary determines exposure.
  5. Use compounded retention for a modeled annual equivalent, while keeping an observed full-year cohort as a separate result.

Maintain customer, gross revenue and net revenue churn rather than publishing one unlabeled percentage. Attach the unit, population and period to every output—for example, monthly customer churn for paying accounts or annual renewal-cohort ARR churn.

Reconcile the ledger before publishing

Build separate bridges from opening to closing customer count and from opening to closing recurring revenue. The customer bridge must reproduce the closing active-account total, while the revenue bridge must reproduce closing MRR or ARR after separately identified adjustments.

  • Confirm that every numerator contains only members of its denominator population.
  • Keep new business outside opening denominators and churn numerators.
  • Allow expansion to offset net revenue churn only.
  • Normalize annual contracts consistently across opening balances and movements.
  • Check that time zone, churn recognition and delinquency policies did not change.
  • Reconcile the company-wide ledger before segmenting by plan, geography or customer size.

Save the written definition with the calculation, version every policy change and retain source-record identifiers. The practical next step is to close one account-level period, reconcile both bridges and only then automate the formulas in a warehouse, spreadsheet or billing dashboard.

Also read:

Share:

Subscribe to our newsletter

Get the latest Web3, AI, and crypto news delivered straight to your inbox.

0