Churn Risk

The Churn Risk tab scores every active, on-hold and pending-cancellation subscription from 0 to 100 and shows you the signals behind each score, so you can act on the subscribers most likely to leave before they do.

This video also covers the Cancellations tab.
Churn scoring is not an AI feature. It is a deterministic weighted sum of signals your store already has, it runs entirely on your own server, and it makes no external requests — whether or not AI Insights is enabled. Available from version 1.1.9.

Summary cards

CardWhat it means
High riskSubscriptions scoring 70 or above — the strongest combination of risk signals: failed payments, on-hold status, or an already-scheduled cancellation.
Medium riskSubscriptions scoring 40 to 69. Worth watching: usually a combination of signals, such as an on-hold subscription with an overdue payment.
Low riskSubscriptions scoring below 40. At most minor signals, such as a manual-renewal subscriber.
MRR at riskCombined monthly recurring revenue of every high-risk subscription — what you stand to lose if none of them recover.

MRR at risk uses the same monthly recurring value as the Overview tab — each subscription’s recurring total normalised to a year by its billing period, divided by its interval, then divided by 12. See Metric Definitions.

The subscriber table

The Subscribers by risk score table lists one subscription per row, highest score first, with the Subscription number, Customer, Product, Status (Active, On hold or Pending cancellation), its MRR, the Risk score and band, and Why — the specific signals that produced the score.

Use the Show filter above the table to narrow it to All, High, Medium or Low.

The signals and their weights

The weights are published deliberately: a score you can inspect is a score you can trust and argue with.

Signal shown in WhyPointsWhen it applies
Cancellation already scheduled95 — replaces the scoreThe subscription is pending cancellation. This is not a prediction — it has already happened. See the note below.
Subscription on hold25The subscription status is on-hold, usually after a failed payment.
N failed renewal payments15 each, capped at 35A renewal payment failed within the last 90 days. One failure scores 15, two score 30, three or more score 35.
Payment overdue by N days20 — flatThe scheduled payment date passed more than 3 days ago. The grace period stops a gateway retrying overnight from being flagged.
No successful renewal yet15The first renewal was due and never landed.
Still within its first billing cycle10Too early to have renewed yet — mild early-life risk.
Manual renewal, no saved payment method10The subscriber has to pay manually each cycle, which many never do.
Two things that are easy to misread on this table.

1. "Cancellation already scheduled" replaces the score rather than adding to it. A pending-cancellation subscription scores exactly 95, whatever else is true of it — the other signals are not evaluated. So a subscriber with a scheduled cancellation and three failed payments still shows 95, not 130.

2. "Payment overdue by N days" does not scale with N. It is a flat 20 points once the payment is more than 3 days late. The number of days is shown because it is useful to know, not because it changes the score.

Why scores never exceed 100

Adding every signal at its maximum gives 115, so the final score is clamped to the range 0–100. In practice a subscription carrying almost every signal lands at 100 rather than 115, and the difference between two such subscriptions is not visible. Both are as high-risk as the model can express.

Early-life risk keys off whether the subscriber has proven they will renew, not off raw age. One successful renewal clears both early-life signals — so a 400-day-old annual subscription is not treated as new just because two cycles of a yearly plan is 730 days.

Tuning the weights

The weights can be adjusted with the zorem_subs_churn_signal_weights filter, which receives an array with exactly these keys and defaults:

KeyDefaultControls
on_hold25Subscription on hold
failed_renewal15Points per failed renewal
failed_renewal_max35Ceiling for failed renewals however many there are
payment_overdue20Payment more than 3 days overdue
no_renewal_yet15First renewal due and never landed
manual_renewal10Manual renewal, no saved payment method
first_cycles10Still within the first billing cycle

Return the whole array with the values you want; anything you leave out keeps its default. Band thresholds (70 and 40) and the fixed pending-cancellation score of 95 are not filterable. Scores are recalculated on the next run — use Recalculate to see the effect immediately.

When scores are calculated

  • Nightly — every open subscription is rescored as part of the plugin’s daily job (the zorem_subscription_daily_snapshot event).
  • About 5 minutes after a state change — when a subscription’s status changes, a renewal payment fails, or a renewal payment completes, a rescore is queued. It is debounced, so a burst of events triggers one recompute rather than many.
  • On demand — the Recalculate button at the top of the tab rescores everything immediately, without waiting for the scheduler.

The first time you open the tab you will see No risk scores yet with a Calculate risk scores button. Click it rather than waiting for the nightly run.

The nightly and post-change rescores both run through WP-Cron. On a site where cron is disabled or unreliable, scores will go stale — the Recalculate button always works regardless, because it runs immediately.

Using the report

  • Failed payments and overdue subscriptions are the most recoverable — a dunning email or a request to update the card often saves them.
  • Manual-renewal subscribers are worth converting to automatic payment; that single change removes a standing 10-point risk.
  • Pending cancellations at 95 are not predictions — they are decisions already made. Treat them as a win-back list, not a prevention list.
  • MRR at risk is the figure to take to a revenue meeting. It is the concrete cost of not acting.

Troubleshooting

ProblemWhat to check
No scores appear after clicking CalculateThe store may have no open subscriptions in the scored statuses (active, on-hold, pending-cancel). Check that subscriptions exist in those states.
Scores look stale and never update on their ownThe nightly and debounced rescores use WP-Cron. If DISABLE_WP_CRON is set without a real server cron, only the Recalculate button will refresh them.
MRR at risk is 0 but there are high-risk subscriptionsMRR excludes subscriptions on a free trial and lifetime subscriptions, and counts only active ones. A high-risk list made up of on-hold or pending-cancellation subscriptions can legitimately carry no MRR.
A subscription scores 95 and the Why column shows only one signalExpected — a scheduled cancellation replaces the score, so the other signals are not evaluated or listed.
Recalculate times out on a large storeScores are written in chunks, but a very large subscriber base can exceed the request limit. Let the nightly job handle it, or raise the PHP time limit temporarily.
The counts here disagree with the Upcoming Revenue tabExpected — this tab scores pending-cancellation subscriptions; the forecast excludes them.