Framework

·

Retention

Churn you can see coming

Churn you can see coming: a funnel of five slabs with the retention segment lit.

The short answer

Churn announces itself weeks before the cancel: fewer sessions, a skipped invoice, a support ticket that goes quiet. The signals to watch, how to score them without a data team, and the three messages that bring people back when the score drops.

By

Rohan

·

10 min read

Published

Oct 2, 2026

·

Updated

Oct 2, 2026

What has to be settled before you look at a single signal?

Two definitions, and getting the second one wrong is the mistake that costs six weeks.

What counts as churn. For a subscription with seats, it is usually a contract not renewed, or seats falling to zero. For a consumer subscription it is a cancelation that is not reversed within 30 days. Write it down and make the billing system the source, not a spreadsheet anyone edits.

When the churn happened. Not the date service ended. The date the customer decided. In a company with annual contracts, those are often 60 to 90 days apart, and a quarterly contract still runs for weeks after the decision. If you line your signals up against the service end date, you will be reading the behavior of an account that quietly checked out a quarter earlier, and the signals will look like noise. Use the earliest hard evidence you have: the non-renewal notice, the downgrade request, the support thread where somebody mentions the other vendor. Where you have none, subtract the notice period from the end date and use that.

Everything below depends on those two lines existing. Teams skip them because they feel like admin, then spend a month building a score against the wrong date.

Which signals actually fire early?

Seven, in rough order of how early they appear and how cheaply you can collect them. Every one comes from a system you already pay for.

#

Signal

Where it comes from

Points

1

A failed charge in the last 60 days, or a card expiring within 30 days

billing

3

2

Renewal within 60 days and no login in the last 30

billing plus product events

3

3

The named champion has not logged in for 21 days, while other people in the account have

product events plus the CRM owner field

3

4

The core action count over the last 28 days is below half this account's own median for the three months before that

product events

3

5

Weekly active users inside the account down three weeks running

product events

2

6

Seats reduced, or a downgrade asked about, in the last 90 days

billing or the CRM

2

7

A support thread in the last 30 days where your last message got no reply

helpdesk

2

Signal 4 is the one worth building carefully. Comparing an account to other accounts tells you about your customer mix. Comparing an account to its own recent normal tells you about that account. A law firm that logs in twice a month is not at risk; a law firm that used to log in twice a week and now logs in twice a month is.

Signal 3 is the strongest in anything sold to a team, and the most often missed, because account-level activity stays flat while the one person who chose you disengages. It needs a champion field in the CRM that somebody keeps current. That is a people problem, not a data problem, and it is worth solving.

For a consumer subscription, swap signals 3, 5 and 6 for: days since last session greater than twice this person's own median gap; push or email notifications turned off; and the feature they signed up for not used in 28 days.

How do you score it without a data team?

Add the points. That is the whole method, and a simple additive score beats a model you cannot explain, because the output has to be acted on by a human being who will ask why an account is on the list.

Maximum is 18. Act at 5. Treat 8 and above as this week's work. Run it weekly, not daily, because the signals are weekly in nature and a daily list trains everyone to ignore it.

Where it lives depends on what you have. A CRM property updated by a scheduled job is cleanest. A spreadsheet refreshed from a weekly export is entirely adequate for the first quarter and gets you acting a month earlier than building it properly would.

How do you know the score catches anything?

Calibrate it backwards, and do this before you ask a single person to work the list. This is the step almost everyone skips and the one that makes the difference between an alert people trust and an alert people mute.

Take every account that churned in the last two quarters. For each, reconstruct the seven signals as of 60 days before its decision date, and score it. Then score a random sample of accounts that did not churn, as of 60 days before the same calendar dates. Now you have two numbers you can compute by hand.

  • Catch rate: of the churned accounts, what share scored 5 or more. Below about half, your threshold is too high or you are missing a signal that matters in your business.

  • Noise ratio: how many accounts your threshold flags for every one that actually churned. Past about three to one, the team stops answering the alert, and an alert nobody answers is worse than no alert, because it provides the feeling of coverage.

Move the threshold until both numbers are tolerable. If you cannot get there, the problem is usually that one signal is doing nothing in your business and one you have not instrumented is doing everything. Drop and add rather than adding weights.

Redo the calibration once a quarter. Signals decay as the product changes.

What do you send when the score drops?

Three messages, and the order matters more than the copy.

One, from a person, with one question and no links. Sent by whoever owns the account, from their own address, asking something specific and answerable: whether the thing they set up in month one is still what they need. No campaign, no template that looks like a campaign, no offer. The reply rate on this is the reason it goes first, and the replies tell you which of your other two messages to send.

Two, the specific one. It names what stopped. "You were exporting the weekly report every Monday until the middle of August." Then one concrete path back, usually the shortest one rather than the best one. Generic re-engagement copy at this point reads as automated, because it is.

Three, the exit you choose. A pause, a smaller plan, or a move to a lower tier, offered while they are still deciding rather than inside the cancellation flow. A customer who pauses for three months is worth far more than one who cancels, and a customer who downgrades is still a customer who refers. Offering this in the cancel flow is too late: by then they have told someone they are leaving, and people do not like reversing that.

What goes wrong once the list exists?

  • Scoring on logins alone. Logins are the signal that moves last. People keep opening a product for weeks after they have stopped getting anything from it.

  • No owner on the alert. A list with no name next to each row is a report. Assign rows the same morning they are generated.

  • Chasing accounts that were never a fit. Some churn is acquisition's bill arriving. Tag those rather than working them, then take the tag to the Acquisition stage and fix what qualified means.

  • Ignoring the cheapest fix. Recurly's analysis of 25 million subscription transactions from 2015, published in July 2016, found about a fifth of churn in its sample was involuntary, mostly stale card details. A retry schedule and a card-expiry warning take a week and win back customers who never decided to go.

How I use it

A D2C skincare brand I worked with had a subscription product with monthly churn that nobody could explain, and a plan to fix it with a loyalty program. The dashboard showed one blended number that mixed first-month cancellations with people who had been subscribed for a year.

I started with billing rather than behavior, because it was a day's work. About a quarter of their cancellations in the prior quarter had a failed payment inside the 30 days before. They had no retry logic beyond their payment provider's default and no card-expiry email at all. Adding a three-step retry on a schedule and a warning email 14 days before expiry was shipped in a week.

Then we built the score, which for a consumer product came down to five signals: a failed charge, days since last order against that subscriber's own cadence, a skipped delivery, notifications turned off, and a support contact with no reply. Calibrating it against the previous two quarters, a threshold of 4 caught a bit over half of cancellations with a noise ratio of about two and a half to one, which the small customer team could work through on a Tuesday morning.

The first message, a plain note from a real person asking whether the routine was still working for them, got replies from roughly one in six. Most of those replies were about a product problem, not a price problem, which changed what the brand shipped next quarter.

What did not work: a save offer of a discount on the next box, sent automatically at score 4. It saved the month and the same people canceled two cycles later, and the discounted cohort's lifetime value came out lower than the people we let go. We stopped sending it.

Takeaways

Write down what churn is and the date each churn was decided, before you touch a single signal.

Build the seven-line score in a spreadsheet this week, then calibrate it against last quarter's churned accounts before anybody works the list.

Ship the card-expiry warning and a retry schedule first; it is the cheapest retention work in any subscription business.

Related

Questions

Do we need a machine learning model to predict churn?

Not until an additive score has been running for a few quarters and somebody is acting on it every week. A model that nobody can explain produces a list nobody works, and the list is the point.

How far ahead can you see churn?

What about accounts that go quiet and renew anyway?

Sources

  • Recurly analysis of 25 million subscription transactions from 2015, reported July 14, 2016, link

  • ChartMogul, SaaS Retention Report 2023, published November 1, 2023, report

If you’d like to talk through how this applies to your company, I’d be glad to.