Churn & retentionMetric 32 of 35

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 Stripe

Worked 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 MRR
Healthy
< 3%
Normal churn friction
3–6%
Dunning falling behind
> 8%

Why 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.

Recovery → at-risk MRR donut split into past-due and unpaid, with day-based aging buckets.