Signals and the risk score
Last updated 1 November 2026
Churnahead scores every paying customer with a small set of rules. Each rule checks one fact in your billing data and adds points when it holds. The points add up to a score capped at 100. A score of 50 or more is high risk, 25 or more is medium, and below that is low. Every rule that fires appears on the account as a reason in plain English, so nobody has to trust a number they can’t explain.
The billing signals
These need nothing but your billing provider.
| Signal | Points | Fires when |
|---|---|---|
| Cancellation scheduled | 50 | The subscription is set to cancel at the end of the period. If the customer gave a reason or feedback in the Stripe Customer Portal, the reason quotes it. |
| Payment failed | 40 | An open invoice has failed attempts in the last 60 days, the subscription is past due, or Stripe marks the customer delinquent. |
| Card expiring | 30 or 20 | The card on a subscription that will renew has expired (30), or expires within 45 days (20). |
| Downgrade | 25 | The last renewal invoice was more than 10% lower than the one before, within the last 60 days. |
| Refund or dispute | 45 or 25 | The customer disputed a charge in the last 180 days (45), or was refunded in the last 90 (25). |
| Trial ending | 35 | The trial ends within 7 days and there is no payment method on the subscription or the customer. |
| Discount ending | 25 or 15 | A recurring coupon ends within 45 days and takes 25% or more off the price (25), or less (15). |
| Renewal soon | 15 or 8 | An annual plan renews within 30 days (15) or 60 days (8). |
| New customer | 10 | Less than 90 days since the first subscription. |
| Tenure cliff | 15 | A monthly plan is within 30 days of, or inside, the month of tenure when most of this workspace’s customers have cancelled. Learned from your own history after each sync, and off until there is a clear cliff. |
The usage signals
These need product usage events. They wait for four weeks of events per account before they score anything.
| Signal | Points | Fires when |
|---|---|---|
| Usage stopped | 30 | No product event for 21 days or more. |
| Usage drop | 20 | Events in the last 14 days are half or less of the 14 days before, from at least 20. |
| Feature dropped | 15 | An event used in at least 3 of the 4 weeks before the last 14 days has not happened once since. |
Why these rules
Each one is a thing that, in the history of real subscription businesses, precedes a cancellation often enough to be worth a look, and each one is already recorded by your billing provider. There is no model to train, no black box, and nothing to install in your product. The trade-off is that a rule can only see what billing sees: a customer who stops logging in but keeps paying is invisible to the billing rules, which is why the usage signals exist.
Checking the rules on your own data
After every sync the rules are replayed over your last twelve months of churn. For each rule you see how many of the customers who left it flagged, and how early. See the backtest. Card expiry history isn’t in Stripe, so that rule is reported as not measurable rather than as a miss.
Changing the rules
- Mute any built-in rule that doesn’t fit your business, under Settings.
- Write your own in the Rule lab. A rule has a name, 5 to 50 points and up to six conditions on what the account pays per month, seats, months as a customer, discount as a share of list price, failed invoices in the last 90 days, the plan, or the billing period. While you edit, it is replayed on your last twelve months: the churns it would have caught and how early, the accounts it flagged that were still paying 90 days later, and the accounts it matches today. A workspace keeps up to 20 rules.
Where the score goes
The score, level and firing rules are recorded once a day per account and kept for 400 days, so the account page can chart the last 90 days against the medium and high lines and list the day each rule started or stopped. The at-risk list’s Getting worse view sorts accounts by how much the score rose since a week ago. An account that moves from low or medium to high gets its own alert.