# Churn prediction: what it measures, and how an open-source scan runs

> Churn prediction ranks your accounts by how likely each one is to leave, using evidence that already sits in three systems: product usage, support and billing. The ranking is a short list for a person to act on. Kortix is the open-source CompanyOS, and it can read those systems on a schedule.

URL: https://churnpredictionguide.com/what-is-churn-prediction

## The schedule that starts a scan

`kortix.yaml`

```yaml
triggers:
  - slug: daily-churn-scan
    name: Daily churn-risk scan
    on:
      cron: "0 0 6 * * *"
    run:
      agent: churn-risk
      prompt: Load the churn-signals skill and run one complete churn-risk scan.
```

Source: https://kortix.com/markdown/use-cases/churn-risk.md

This block sits in the project's kortix.yaml, and the cron starts the churn-risk agent every day at 06:00 UTC.

## What churn, churn rate and churn prediction each mean

Churn is the event: an account that paid for the product or used it stops doing either. A churn rate is history: the record of those events. Divide the accounts or the recurring revenue you lost in a period by what you had at the start. The result describes what already happened.

Churn prediction is a ranking. Every account gets a place in an ordered list, scored by how likely it is to leave inside the window you care about. Each entry carries the evidence that put it there. The output is a short list for a person to work through this week. It is not a forecast of next quarter's revenue, and it makes no sure statement about any single account.

A health score is a proxy. It compresses one tool's data into a number, which sorts a book of accounts well and rarely explains itself. Teams call that number a prediction often enough that the words blur. It measures the present state of what one system can see.

Three objects, three jobs. A rate tells you how bad last quarter was. A score sorts the present. A prediction orders the next thirty days and should carry a reason for every account it puts near the top.

## The three systems that already know something is wrong

The evidence that a customer is leaving is rarely missing. It sits in systems the company already runs, each owned by a different team, each keeping its own record in its own shape. Most of the work in a working scan is the schedule and the join across the three. The model is the smallest part of it.

Product usage lives in the product database: logins, seats provisioned, the core action the customer bought the product to do. Support friction lives in the helpdesk: how many threads an account opened, how long they stayed unresolved, how the tone changed. Billing lives in the payment provider: failed charges, dunning attempts, the date the contract renews.

A scan reads all three on a schedule and scores each account against rules written down in advance. The [Kortix](https://kortix.com/use-cases/churn-risk) churn-signals skill is a worked example of what those rules look like in practice. Three of its five lines:

- Usage is declining when core activity drops 20% or more against the prior 30 days, and dormant after 14 days with almost no activity.
- Support friction is rising when thread volume climbs above the account's history or threads stay unresolved. Cancellation language counts as escalated.
- Billing is at risk after a missed or failed payment. A renewal is imminent within 30 days.

Four thresholds across those three lines, all readable, all arguable. A team will look at the 20% and decide it should be 30% for its largest accounts, and the rule has to be a file somebody can edit and review, not a setting buried in a vendor's admin panel.

## One signal alone misleads

Every signal fires falsely some of the time. A usage drop of 20% is normal when a team migrates a workflow or pauses a seasonal contract. A support spike follows an outage the vendor caused. A failed payment is often an expired card that clears the next morning.

Read one at a time, each of those looks like a fire, and the team spends the week on defensive calls that end with "we're fine, thanks". Read together in the same month, they say something else: usage down, support rising, renewal close. The skill treats a single signal as insufficient on its own. It ranks accounts first when declining usage, rising support friction and an imminent renewal or failed payment line up.

That combination is the product, and a usage dashboard cannot produce it, because the dashboard only reads its own system. The helpdesk cannot produce it either, and neither can the finance report. Somebody has to hold all three at once, on a schedule, and put the result where a person will see it.

## An example scan, and the message it posts

The Kortix churn-risk use case is one way to run this. Its stack is an example rather than a requirement: Postgres for usage, Plain for support, Stripe for billing, Slack for the output. A cron fires at 06:00 UTC and starts a session. The agent reads the three systems, scores every account, and posts one message to the customer-success channel. Its access to all three is read-only, and it writes nothing except that post.

A run ends with a message like this one. These figures are the example run's output, not a benchmark and not a customer result:

> Flagged 8 accounts. 2 are highest risk: usage down 34% in 30 days, an escalated support thread, and a renewal in the next 30 days. For both, the suggested next step is a renewal conversation this week.

Read the message as a piece of work rather than a score. Eight accounts are named, which is small enough for one person to handle in a morning. Two of them carry three signals at once, so they lead. Each one arrives with a reason and a next step, so the account owner does not have to reconstruct the case before making the call. The 34% is worth keeping for the postmortem. What matters on the morning it arrives is that a specific person knows which two conversations to have this week, and why.

## What a prediction is good for, and what it is not

A ranking is good for four things: ordering a week's outreach, finding a renewal window while there is still time to act, and handing an account owner a reason and a starting point. The fourth is a review after the fact of which signals fired before accounts actually left. That last use is how the rules get better, and it needs the history of who churned and when.

It is not good for deciding that a named account will leave. A ranking is a probability spread over a group; the eighth account on the list may stay for three years while the first one renews without complaint. It is also not a replacement for the call. A customer-success team should not be measured on it either, because a team scored on a risk list learns to argue with the list.

There is also a size below which none of this pays. With forty accounts, a person who speaks to each one every quarter knows more than any ranking does. The scan earns its place at the size where nobody can hold the whole book in their head.

## Running the scan as a habit

The value comes from repetition rather than from any single run. The same rules, the same three systems, the same time each morning, and one person who reads the list and decides. False positives get written back into the rules the following month, and the thresholds move toward what the team actually believes.

On Kortix the run happens on its own machine. One isolated sandbox per session. Each session has its own isolated machine and branch. The pattern generalises past churn. Hand it an outcome; agents plan the work, run it on their own computers at any hour, get it checked by a separate agent and a change request, and learn from it.

The scoring rules live in the repository as a skill. The next change to the 20% threshold is a diff somebody reviews, and the run that follows uses the reviewed version.

## Churn questions, answered

### What does churn mean in simple terms?

Churn is customers leaving: the accounts that cancel, stop paying or stop using the product during a period. The churn rate is the share of the starting base that left, so it describes what has already happened.

### What does churn mean in corporate speak?

In corporate speak, churn is the accounts lost (logo churn) or the recurring revenue lost (revenue churn), reported monthly or annually. Both describe what already happened, and neither says who leaves next.

### What's a good churn rate?

There is no universal figure. A rate is good when it holds or falls against your own prior quarters in the same segment, because enterprise contracts and monthly self-serve plans turn over at very different speeds.

### What does 10% churn mean?

Ten percent churn means one account in ten left during the period measured. The period decides the effect: 10% a month compounds to about 72% of the base gone within a year, while 10% a year leaves most of it in place.
