Quick answer

Churn rate = customers lost during the period / customers at the start of the period. If you start the month with 1,000 customers and 40 cancel, monthly churn is 40 / 1,000 = 4.0%. New customers who join during the month do not go in the denominator, and customers who join and leave inside the same month are tracked separately.

For subscription revenue use the same shape with money: lost recurring revenue / recurring revenue at the start. Gross churn counts losses only; net churn subtracts expansion from the customers who stayed.

The Formulas

Pick the version that matches the decision. Customer churn tells you how many relationships end. Revenue churn tells you how much money walks out, and the two can disagree badly when small accounts leave and large ones stay.

MetricFormulaUse it for
Customer churn ratecustomers lost in period / customers at start of periodRetention of the base, onboarding and product fit
Gross revenue churn(churned + contracted recurring revenue) / recurring revenue at startHow much revenue the base loses before any upsell
Net revenue churn(churned + contracted - expansion) / recurring revenue at startWhether the existing base grows or shrinks in dollars; can go negative
Average customer lifetime1 / churn rate (same period unit)Rough lifetime for LTV math, assumes churn stays constant

Worked Example

An illustrative subscription business starts a month with 1,000 customers and $50,000 of monthly recurring revenue (MRR). During the month 40 customers cancel, 60 new customers join, and the revenue movements are below.

ItemValueResult
Customer churn40 lost / 1,000 at start4.0% per month
Revenue lost to cancellations$1,800
Revenue lost to downgrades$700
Expansion from existing customers$900
Gross revenue churn($1,800 + $700) / $50,0005.0%
Net revenue churn($1,800 + $700 - $900) / $50,0003.2%
Implied customer lifetime1 / 0.0425 months

Notice that revenue churn (5.0%) is higher than customer churn (4.0%) here: the customers who left or downgraded were worth more than the average account. Reporting only the customer number would have hidden that.

Monthly Churn vs Annual Churn

Do not multiply a monthly rate by 12. Churn compounds on a shrinking base, so the yearly figure is 1 - (1 - monthly)^12. A steady 4.0% monthly churn means 1 - 0.96^12 = 38.7% of the starting customers are gone after a year, not 48%. Going the other way, annual churn of 20% is about 1.8% a month (1 - 0.80^(1/12)). Always label the period next to the number.

Six Mistakes That Skew the Number

  • Counting new customers in the denominator. Use the start-of-period base, or the cohort that started the period.
  • Mixing periods. A monthly rate beside an annual rate looks like an improvement that never happened.
  • Treating a failed payment as a cancellation (or the reverse). Split involuntary churn (cards that fail) from voluntary churn; the fixes are different.
  • Blending cohorts. Early-tenure customers leave faster than long-tenure ones, so a company that is growing quickly will show a worse blended rate than its steady state. Read churn by signup cohort as well; see cohort analysis.
  • Ignoring segment mix. A single company-wide rate averages across plans and customer sizes that behave very differently.
  • Using lifetime = 1 / churn on a young base. The formula assumes a constant rate, which short histories cannot support.

What Is a Good Churn Rate?

There is no honest single answer, because it depends on whether customers are consumers or businesses, monthly or annual contracts, and the price point. A more useful test is your own history: is the rate for the latest signup cohort lower than the cohort before it? If you need to know which customers are likely to leave next, that is a prediction problem rather than a measurement one; see how to spot at-risk customers and churn prediction.

Calculating It in Code

import pandas as pd

# one row per customer: start_date, end_date (NaT while active)
df = pd.read_csv("customers.csv", parse_dates=["start_date", "end_date"])

period_start = pd.Timestamp("2026-09-01")
period_end   = pd.Timestamp("2026-10-01")

# active at the start of the period
base = df[(df.start_date < period_start) &
          (df.end_date.isna() | (df.end_date >= period_start))]

# of those, who left during the period
lost = base[base.end_date.notna() & (base.end_date < period_end)]

churn = len(lost) / len(base)
print(f"monthly churn: {churn:.1%}")
print(f"annualized:    {1 - (1 - churn) ** 12:.1%}")

The key line is the first filter: the base is everyone active on the first day, so customers who joined mid-month cannot appear in either the numerator or the denominator.

Frequently Asked Questions

How do you calculate churn rate?

Divide the number of customers lost during a period by the number of customers at the start of that period. For example, 40 customers lost out of 1,000 at the start of the month is a monthly churn rate of 4.0%.

What is the difference between customer churn and revenue churn?

Customer churn counts accounts that leave. Revenue churn measures the recurring revenue lost to cancellations and downgrades, as a share of recurring revenue at the start of the period. They differ whenever the customers who leave are larger or smaller than average.

How do I convert monthly churn to annual churn?

Use annual churn = 1 - (1 - monthly churn)^12. A steady 4% monthly churn is about 38.7% annual churn, not 48%, because each month's losses come from a smaller remaining base.

Can churn rate be negative?

Customer churn cannot be negative, but net revenue churn can be. If expansion revenue from existing customers is larger than the revenue lost to cancellations and downgrades, net revenue churn is below zero.

Should new customers be included in the churn denominator?

No. Use the customers active at the start of the period. Customers acquired during the period belong to the next period's base, and customers who join and leave inside one period are best reported separately.