At-Risk MRRPast-Due & Unpaid
Revenue that hasn't churned yet, but is one failed retry away from it.
The slice of MRR sitting in Stripe's past_due or unpaid states — payment has failed at least once but the subscription hasn't been cancelled yet. It's not churn (recoverable), but it's not healthy revenue either: it's revenue in limbo, and the aging bucket it sits in tells you how urgent the recovery is.
Formula
At-Risk MRR = MRR on subscriptions currently past_due or unpaid in StripeWorked example
$60,000 total MRR, $2,400 past-due (0–7 days), $1,500 unpaid (8+ days, next retry pending) → $3,900 at-risk (6.5% of MRR) that dunning should be actively working.
Benchmark
At-risk share of MRRWhy it matters
At-risk MRR is a leading indicator, not a lagging one — it tells you today what involuntary churn will look like in a week if nothing is done. Segmenting by aging bucket (0–7 / 8–14 / 15+ days) tells you exactly where to focus: fresh past-due accounts respond to automated retries, older unpaid accounts need a human outreach before the next retry exhausts.
Common mistakes
- Treating all at-risk MRR the same regardless of aging — a day-2 past-due and a day-25 unpaid need very different playbooks.
- Waiting for Stripe's default retry schedule instead of prioritising manual outreach on your highest-value at-risk accounts.
- Not reporting at-risk MRR to the board — it's a truer picture of near-term revenue health than the churn number reported last month.
Tracked in FlowMRR
Recovery → at-risk MRR donut split into past-due and unpaid, with day-based aging buckets.
