The churn dashboard: which metrics to track and how to compute them
The dozen metrics a subscription churn dashboard needs, with formulas, a worked example on hypothetical numbers, and the definition choices to write down.
A churn dashboard should answer three questions every month: how much revenue did we lose, why, and is it getting better? Most dashboards answer the first one and stop. This guide lists the metrics that answer all three, gives a formula for each, and works through one month of hypothetical numbers.
For the basics of customer, gross and net churn, see how to calculate churn rate. This article is about assembling them into one page you can trust.
The dashboard in four rows
| Row | Metrics | Question it answers |
|---|---|---|
| 1. Revenue base | MRR, MRR movements | How big is the base and how did it move? |
| 2. Headline churn | Customer churn, gross revenue churn, NRR, GRR | How much did we lose? |
| 3. Churn by cause | Voluntary vs involuntary, cancel reasons | Why did we lose it? |
| 4. Levers | Recovery rate, save rate, win-back rate, cohort retention | Is what we do working? |
Keep it to one screen. If a metric does not lead to a decision, move it to a secondary report.
Row 1: the revenue base
MRR
Monthly recurring revenue is the sum of every active subscription’s monthly value. Normalize other intervals: an annual plan counts as one twelfth of its price, a quarterly plan as one third.
Decide and document three things before you compute it:
- Discounts. Is MRR before or after recurring discounts? Stripe’s Billing analytics let you choose whether to exclude discounts (Stripe analytics docs, accessed November 2026).
- Past-due subscriptions. Stripe counts past-due subscribers as active. That is defensible, but it means MRR includes revenue you have not collected.
- Usage-based charges. Either exclude variable usage from MRR or use a trailing average, and say which.
MRR movements
Break the month’s change into categories. Stripe’s MRR roll-forward uses new, reactivation, expansion, contraction, churn and FX adjustment; you can use the same list.
ending MRR = starting MRR
+ new + reactivation + expansion
− contraction − churned
± FX adjustment
If this equation does not balance in your data, a category is missing or double counted. Fix that before reading any other metric.
Row 2: headline churn
customer churn = customers lost ÷ customers at start
gross rev churn = (churned MRR + contraction) ÷ starting MRR
GRR = 1 − gross rev churn
NRR = (starting MRR − churned − contraction + expansion) ÷ starting MRR
Reactivations and new customers stay out of all four. A deeper look at the last two is in NRR vs GRR.
Stripe’s subscriber churn is a different number
Stripe’s subscriber churn rate uses a rolling 30-day window, and its denominator includes subscribers active at the start plus new subscribers added during the window. A start-of-period denominator gives a higher figure for the same losses. Neither is wrong; just do not put them side by side as if they were the same metric.
Row 3: churn by cause
Voluntary vs involuntary
involuntary churned MRR = MRR of subscriptions that ended on a failed payment
voluntary churned MRR = MRR of subscriptions the customer cancelled
On Stripe, cancellation_details.reason on the subscription tells you which it was (cancellation_requested, payment_failed, payment_disputed) per the cancel API reference. The split matters because the fixes differ completely; see involuntary churn.
Cancel reasons
Show voluntary churned MRR by cancel reason, not just counts. Ten small customers saying “too expensive” and one large customer saying “missing feature” lead to different roadmaps.
At-risk MRR
at-risk MRR = MRR of subscriptions currently past due
+ MRR of subscriptions scheduled to cancel at period end
This is the only row that looks forward. It tells you what next month’s churn will be if nobody acts.
Row 4: the levers
Failed payment recovery rate
recovery rate = failed invoices later paid ÷ invoices that failed at least once
Measure it per cohort of failed invoices (for example, all invoices that first failed in March), and only after the retry window has closed. Otherwise this month’s rate looks low because many invoices are still in progress.
Cancel flow save rate
save rate (N days) = customers who started a cancellation and are still
subscribed N days later ÷ cancellation starts
Use 30, 60 and 90 days. Stripe’s retention performance counts a save if the customer stays at least 7 days after accepting an offer, which is a short window for monthly plans.
Win-back rate
win-back rate (N days) = churned customers who resubscribed within N days
÷ customers who churned in the cohort
Cohort retention
A small table of logo or revenue retention by signup month. It is the best check that changes to onboarding or pricing actually worked. Step by step in cohort retention analysis.
Worked example (hypothetical numbers)
A fictional company starts April with 500 customers and $50,000 MRR.
| Movement | Customers | MRR |
|---|---|---|
| New | +40 | +$4,000 |
| Reactivation | +5 | +$400 |
| Expansion | +$1,500 | |
| Contraction | −$700 | |
| Churned (voluntary) | −15 | −$1,600 |
| Churned (failed payment) | −10 | −$900 |
| Ending | 520 | $52,700 |
Check the balance: 50,000 + 4,000 + 400 + 1,500 − 700 − 1,600 − 900 = 52,700. It balances.
customer churn = 25 ÷ 500 = 5.0%
gross rev churn = (2,500 + 700) ÷ 50,000 = 6.4%
GRR = 93.6%
NRR = (50,000 − 2,500 − 700 + 1,500) ÷ 50,000 = 96.6%
involuntary share of churned MRR = 900 ÷ 2,500 = 36%
Reading it: a third of lost MRR came from failed payments, which is usually the cheapest churn to reduce. Churned customers paid $100 on average, the same as the base, so the gap between 5.0% customer churn and 6.4% gross revenue churn comes entirely from downgrades. That is worth a look at the contraction list.
Definitions to write down
Put these at the top of the dashboard, or in a linked note:
- When a cancellation counts as churn: on request or at period end. Stripe lets you choose either for its analytics.
- When a failed payment counts as churn: when the subscription is cancelled, or a fixed number of days after the last retry.
- How pauses count: active, churned or excluded.
- Whether trials and free plans are in the customer count (Stripe excludes them from active subscribers).
- Whether MRR is before or after discounts.
- Which currency and exchange rate date you use.
A metric whose definition changes silently is worse than no metric.
Common mistakes
- Mixing new-customer revenue into NRR. It inflates retention.
- Reading one month. Small bases swing. Show a 3-month trailing average next to the monthly value.
- No segment split. Monthly consumer plans and annual B2B contracts behave differently; one blended number hides both.
- Counting accepted offers as saves. Count only customers still subscribed later.
- Dashboards with numbers nobody owns. Each row should have a person who acts when it moves.
Doing this with NoChurn
NoChurn reads your billing events (Stripe in one click; Chargebee, Recurly, Maxio, Zuora, Paddle, Lemon Squeezy, Polar, Braintree, Mollie, GoCardless, Razorpay, the App Store, Google Play, or any billing by REST API) and acts on the levers in row 4: smart retries and AI-written recovery emails for failed payments, cancel flows with an offer per reason and one-click cancel always visible, and win-back emails at day 30, 60 and 90 by cancel reason. Each customer gets a churn score from 0 to 100, and your own data sent by API shows churn drivers (correlation, not causation). Every feature is on every plan; the price depends only on MRR (pricing).