How to run a churn analysis with ChatGPT: prompts, checks and the mistakes to avoid
Published October 15, 2026 · By Sergio Palmero · 12 min read
- Customer Retention
- Customer data
- CX Operations

Quick summary
ChatGPT can run a full churn analysis from three exports joined by account ID: billing, product usage, and the customer's conversations with sales, support and customer success. The maths takes minutes. The questions decide whether the answer is useful.
Every churn signal gets two numbers: its share of past churn, and its churn risk, meaning how often accounts with that signal cancel when nobody acts. The second one is the baseline every retention experiment gets measured against.
The most common slip is calculating churn risk over cancelled accounts instead of over every account that showed the signal. It makes almost any signal look dangerous.
ChatGPT has no idea how your billing system records an upgrade. In one analysis it read expansions as churn "with no reason" until someone explained how the system worked.
In one SaaS client's month of 5,465 cancellations, half went through a failed payment and a third through a downgrade.
Upload three exports to ChatGPT, keyed by account ID: cancellations from billing, product events, and conversations with sales, support and customer success.
Ask it to calculate, for each signal, its share of past churn and how often accounts with that signal cancel when nobody acts. That second number is the baseline your retention experiments get measured against.
The method behind those two numbers is in our guide on how to reduce and prevent churn with Claude. Look back at what churn is made of, look forward at which signals predict it, then test an intervention against the baseline.
This article is the hands-on version for ChatGPT, with the data, the prompts, the outputs and the checks.
ChatGPT does the maths in minutes. Knowing which maths to ask for takes longer.
What data does ChatGPT need for a churn analysis?
ChatGPT needs billing events, recent usage and what the customer said, all linked to the same account ID. Three CSV (comma-separated values) exports cover it: billing, product usage, and conversations.
Account IDs replace customer names. The patterns live in the events, so the analysis loses nothing when names and emails stay out of the file. In conversations, that also means stripping names, emails and signatures from the text.
Column | What it holds | Why the analysis needs it |
|---|---|---|
Account ID | Internal identifier, no names or emails | Joins billing and product data |
Plan | Current plan, or the plan at cancellation | Separates churn by tier |
Revenue | Monthly revenue per account | Turns account counts into money |
Cancellation date | Empty while the account is active | Defines who churned and when |
Downgrade date | Last move to a cheaper plan | One of the earliest warning signals |
Failed payments | Count, plus the date of the last one | Separates involuntary churn (cancellations caused by a payment that failed) |
Usage, last 8 weeks | One column per week: logins or key actions | Shows the drop before the cancellation |
Conversations | One row per ticket, chat, email or call note, with date, team (sales, support or customer success) and text | Shows what the customer said before leaving |
Eight weeks of usage is long enough to show a decline and short enough that last year's habits don't blur it.
Conversations add what usage numbers can't: the reason. A pricing question to sales, a complaint about a missing feature to support, a competitor named on a call with customer success. ChatGPT reads each one, tags it, and the tag becomes one more warning sign.
Before any calculation, ChatGPT needs to know how your billing system records events. One prompt covers it, and it runs first:
How do you find what your churn is made of?
The backward analysis takes every account that cancelled in a period and counts which signals it showed beforehand. The result reads like an X-ray of churn: how much came after a downgrade, how much after a failed payment, how much after usage fell.
When we ran this for one SaaS client, the month had 5,465 cancelled accounts. A third had downgraded before cancelling. Half had gone through a failed payment first.
The table below shows the kind of output ChatGPT returns. The first two rows use those real shares; the other rows are illustrative numbers that show the format.
Signal before cancelling | Cancelled accounts with the signal | Share of churn |
|---|---|---|
Failed payment | about 2,730 | about 50% (Zentesimal analysis) |
Downgrade | about 1,820 | about 33% (Zentesimal analysis) |
Usage down more than 50% | 1,420 | 26% (illustrative) |
No activity in the last 2 weeks | 870 | 16% (illustrative) |
Pricing or competitor mentioned in a conversation | 980 | 18% (illustrative) |
Support ticket in the last 30 days | 440 | 8% (illustrative) |
The shares add up to more than 100%. One account can downgrade, miss a payment and go quiet in the same quarter.
The last line of the prompt does more work than it seems. Accounts that don't match between files are the first sign that the join went wrong, and every number after it inherits the problem.
How do you calculate churn risk for each signal?
Churn risk is the share of accounts that showed a signal and then cancelled within a set window, with nobody stepping in.
The forward analysis starts from every account that showed the warning sign, cancelled or not, and follows it for 90 days. That percentage is the baseline.
An example of the output for the same month of cancellations, with illustrative totals per signal:
Signal | Accounts with the signal | Cancelled within 90 days | Churn risk |
|---|---|---|---|
Downgrade | 6,070 | 1,820 | 30% |
Failed payment | 9,750 | 2,730 | 28% |
Usage down more than 50% | 9,470 | 1,420 | 15% |
No activity in the last 2 weeks | 2,490 | 870 | 35% |
Pricing or competitor mentioned in a conversation | 3,770 | 980 | 26% |
Support ticket in the last 30 days | 7,330 | 440 | 6% |
The usual slip sits in the denominator. Divide the 1,820 cancelled downgrades by the 5,465 accounts that cancelled and you get 33%, the share of churn: the backward number.
Divide them by the 6,070 accounts that downgraded and you get 30%, the churn risk. Mixing the two is a classic confusion of the inverse, and it makes almost every signal look alarming.

A signal can sit behind a big share of cancellations and still carry a low risk. What matters is how many accounts with it stay.
Small segments change the picture. With 40 accounts showing a warning sign, two extra cancellations move its churn risk by 5 points, so a striking percentage on a tiny group says very little yet.
Which signal should you test first?
The first warning sign to test is the one with a large share of churn and a high churn risk at the same time. A 4-box matrix with share of churn on one axis and churn risk on the other shows it at a glance.
Box | What it means | Signal from the example (illustrative) |
|---|---|---|
Act first | Large share, high risk | Downgrade (33%, 30%), failed payment (50%, 28%) |
Investigate | Small share, high risk | No activity in the last 2 weeks (16%, 35%), pricing or competitor mentioned in a conversation (18%, 26%) |
Monitor | Large share, low risk | Usage down more than 50% (26%, 15%) |
Ignore | Small share, low risk | Support ticket in the last 30 days (8%, 6%) |
When two warning signs land in Act first, the tie usually goes to the one with the clearest action. Failed payments often have a billing fix, such as automatic retries and card reminders.
A downgrade calls for a conversation about why the customer is paying less, which makes it the better test of what a customer success manager (CSM) adds.
How do you turn the numbers into a business case?
A business case turns the baseline into a bet the finance team can check: a hypothesis, the size of the prize and a control group. ChatGPT drafts all three from the tables it has already built.
The target in the example comes from a real result. With one SaaS client, contacting every downgrade within 24 hours lifted retention 20% above the baseline, and the customer satisfaction score (CSAT) of downgrading customers rose 32% (Zentesimal client data).
What the output looks like
With the illustrative numbers above, ChatGPT returns something close to this:
- Hypothesis. Because a downgrade usually signals a plan that stopped fitting while the customer still wants the product, if a CSM contacts every downgrading account within 24 hours, 90-day retention for downgrades moves from 70% to 84%.
- Size of the prize. About 6,070 downgrades a month. At 70% retention, 4,249 stay. At 84%, 5,099 stay. The 850 extra accounts at €50 a month keep €42,500 of monthly revenue, about €510,000 of annual recurring revenue (ARR). All illustrative.
- Control group. Holding back 10% means about 607 accounts a month with no contact. Holding back 20% means about 1,214. The smaller group leaves more accounts in the intervention; the larger one reaches a result a chief financial officer (CFO) trusts sooner.
The prize is only the accounts kept beyond the baseline. The rest were going to stay anyway.
The cost side helps too. A 2014 Harvard Business Review article puts the cost of acquiring a new customer at 5 to 25 times the cost of keeping one.
Turning kept accounts into money follows the same logic we use to measure AI ROI in customer support.
Where does ChatGPT get churn analysis wrong?
ChatGPT gets churn analysis wrong when it has to guess how your systems record events. It calculates exactly what it's asked, on the rows it's given, and nothing in a CSV says that a "cancelled" subscription might belong to a customer who just paid more.
The expansion that looked like churn
In one analysis, the AI concluded that a large share of churn came from accounts that cancelled "with no reason". It looked like a big, unexplained leak.
Reading those accounts one by one told a different story. They had expanded. When a customer upgraded, the billing system opened a new subscription and left the old one recorded as cancelled, with no reason attached.

Growth showed up in the report as churn. The numbers were precise and completely wrong.
The fix is the context step from the start of this guide. A few lines on how the billing system records an upgrade, a downgrade, a plan change and a cancellation let ChatGPT tell an expansion from a real loss.
Four checks before trusting the numbers
- Joins that duplicate rows. An account with three subscriptions becomes three rows after the join, and its cancellation counts three times. The check: unique account IDs before and after the join should match.
- Wrong date windows. A signal recorded after the cancellation gets counted as a warning sign. The check: every signal date sits before the cancellation date.
- Accounts that no longer exist. Deleted or merged accounts appear in one export and not the other. The check: the list of unmatched IDs from the backward analysis prompt.
- Events that look like churn but aren't. Expansions recorded as cancellations, trials that end, accounts moved between workspaces. The check: someone who knows the billing system reads 10 to 20 "cancelled" accounts by hand.
What comes after the analysis?
The analysis says which signal to test and which number to beat. The next step is the experiment: the intervention running on hundreds of accounts while the control group shows what would have happened anyway.
The guide on reducing churn with Claude covers how to design it and when to scale, adjust or stop.
In short: three exports joined by account ID, two numbers per warning sign, a matrix to choose the first test, and a context step so ChatGPT reads your billing system the way it really works.
Running that experiment on every downgrading account, including the long tail (the many smaller accounts no CSM covers), is the part Zentesimal's retention Workers take on.
FAQ
Can ChatGPT analyze churn data?
Yes. With billing, product usage and conversation exports joined by account ID, ChatGPT can calculate each signal's share of past churn and its churn risk, place the signals in a prioritization matrix and draft a business case. Its numbers are only as good as the description of how the billing system records upgrades, downgrades and cancellations.
Is it safe to upload customer data to ChatGPT?
Churn analysis works without personal data. Account IDs can replace names and emails, conversation text can go in with names and signatures removed, and the rest of the files only need plan, revenue, billing dates and usage. Company policies on AI tools differ, so the data policy and the security team set the limits before any upload.
How accurate is ChatGPT with churn numbers?
When ChatGPT runs the calculation as code on the uploaded file, the arithmetic is rarely the weak point. Errors come from the data and the definitions: rows duplicated by a join, signals dated after the cancellation, and expansions recorded as cancellations. A manual read of a sample of accounts catches them.
What's the difference between this and a churn prediction tool?
A churn prediction tool scores every account's risk continuously, usually with a trained model. A ChatGPT analysis is a one-off look at past data that explains what churn is made of and sets a baseline for an experiment. It's a quick way to decide what to act on before investing in a tool.
How much data does a churn analysis need?
Enough cancellations for each signal to have dozens of cases. With 40 accounts showing a signal, two more cancellations move its churn risk by 5 points, so small groups produce unstable percentages. A longer window, such as a full quarter, adds cases.