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.
| Metric | Formula | Use it for |
|---|---|---|
| Customer churn rate | customers lost in period / customers at start of period | Retention of the base, onboarding and product fit |
| Gross revenue churn | (churned + contracted recurring revenue) / recurring revenue at start | How much revenue the base loses before any upsell |
| Net revenue churn | (churned + contracted - expansion) / recurring revenue at start | Whether the existing base grows or shrinks in dollars; can go negative |
| Average customer lifetime | 1 / 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.
| Item | Value | Result |
|---|---|---|
| Customer churn | 40 lost / 1,000 at start | 4.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,000 | 5.0% |
| Net revenue churn | ($1,800 + $700 - $900) / $50,000 | 3.2% |
| Implied customer lifetime | 1 / 0.04 | 25 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.