Close & Expand Customer Success Customer SuccessSales LeadershipAERevOps

Churn Risk, Scored on Evidence: A Weekly Claude Agent for Renewals 90 Days Out

Most churn is visible ninety days out, in a support thread nobody in sales read, a champion who quietly changed titles, or a usage line that has been falling since spring. This play makes a Claude agent read all of it every week: every renewal due in the next 90-120 days gets scored against a scorecard you set, on evidence with sources, and every at-risk account gets a one-page brief with the signals, the quotes, and a proposed save plan, routed to its CSM. The renewal that surprised everyone stops happening.

StageClose & Expand
Time to buildA day
DifficultyIntermediate
Best forCustomer Success, Sales Leadership, AE, RevOps
THE SCORECARD

The churn risk scorecard

Four signal families, the evidence threshold that fires each one, and the weights I start from. Rewrite the weights against your own lost renewals, save it as scorecard/churn-risk.md, and the agent scores every account in the window against it each Monday, citing the evidence per signal.

Signals, evidence thresholds, and starting weights (100 points)
Usage (35 points)
  • weekly active users down > 30% over 8+ weeks, account-wide: 20 (one team only: 10)
  • seats purchased vs active < 50%: 8
  • a purchased module or integration unused for 60+ days: 7
Relationship (30 points)
  • sponsor or champion attended 0 of the last 3 calls after attending regularly: 12
  • champion changed role or company (verified), or a new decision-maker with no relationship: 10
  • no expansion or new use-case mention in 90 days of calls, where there were mentions before: 8
Support (20 points)
  • a data-export, API-dump, or 'cancel' ticket, regardless of how it was resolved: 10
  • ticket tone shift from 'how do I' to 'why does it', or 2+ tickets tagged bug in a quarter: 6
  • any ticket open > 14 days, or a CSAT below your floor: 4
Commercial (15 points)
  • a consolidation, budget review, or competitor named on a call or in a ticket: 8
  • invoice disputed or paid late twice: 4
  • renewal owner on our side changed in the last 90 days: 3
Scoring rules
  • a signal scores only if its evidence threshold is met, with the source cited; otherwise 0
  • no single family can push an account over the at-risk threshold alone
  • tiers: >= 60 at risk (gets a brief) · 40-59 watch (on the board) · < 40 healthy (a count)
  • re-score weekly; calibrate weights quarterly against closed renewals

The export ticket at 10 points is the weight I would defend hardest. It is the signal that gets resolved helpfully in four hours and never reaches the person who owns the renewal.

The stack

The stack

How the tools connect
What a run costs
Per week
one run over 30-40 accounts and a quarter of calls each, a few dollars on a mid-tier model
CRM + call recorder + Slack
free over MCP; usage and tickets as CSV exports
Setup
a day: the scorecard with the CS lead, the brief, and a manual first run
The saving
the renewal you would have lost at 90 days, plus the manager's weekly hour of 'how do your renewals feel'
The problem

The problem

The renewal that surprised everyone was not a surprise. Six weeks before the date, the account's admin had opened a ticket titled 'export all our data', and support had resolved it in four hours with a helpful how-to. Nobody in customer success saw it. The champion had changed her title on LinkedIn to a new company in March. Weekly active users had dropped from 38 to 11 across the quarter. Every signal was in a system we paid for. None of them were in the same place, and none of them were in front of the person who owned the renewal.

This is how most churn works. The customer decides slowly and tells you in fragments: a ticket here, a skipped call there, a usage line that bends down and stays down. Each fragment is individually explainable, and the person who sees it is rarely the person who owns the account. By the time the renewal conversation starts, the decision has been made somewhere else, and the CSM is negotiating with a ghost.

The standard fix is a health score, and health scores mostly fail for two reasons. They are a single number with no evidence behind it, so a CSM looking at '42, red' has nothing to act on and no reason to trust it over their own read. And they are built once, in a dashboard, and stop being looked at by the second quarter, the same fate as every dashboard.

A Claude agent does the reading a great CS leader would do every Monday if they had the time: every account renewing in the next 90-120 days, every source, scored against a written scorecard with the evidence cited per signal. Falling usage with the numbers and the weeks. The 'export all our data' ticket by number and date. The champion's title change with the source. The last three calls the sponsor skipped. Then, for anything over the risk threshold, a one-page brief with a proposed save plan, delivered to the CSM's Slack, and a board for the manager. The score is the summary; the evidence is the product.

How it works

How it works

The workflow, end to end
  1. 01 Fire Monday 7am Claude Code (scheduled)renewals 90-120 days out
  2. 02 Read the accounts HubSpot (MCP)ARR, dates, contacts, activity
  3. 03 Read usage + tickets CSV exportstrend, tone, the export request
  4. 04 Read the calls Fireflies / Gong (MCP)who stopped showing up
  5. 05 Score Claudescorecard, evidence per signal
  6. 06 Brief + plan Claudeone page per at-risk account
  7. 07 Route Slack (MCP)CSM gets the brief, manager gets the board
  • A scheduled Claude Code job runs every Monday and pulls every account with a renewal date 90 to 120 days out from the CRM over MCP
  • For each account it reads usage (weekly active users, feature use), the ticket history, the call recorder (attendance, sentiment, who stopped showing up), and CRM contacts and activity
  • It scores each account against your scorecard: usage trend, support signals, relationship signals, commercial signals, each with a weight and a cited piece of evidence
  • Anything over the risk threshold gets a one-page brief: the score with its components, the evidence per signal with sources, the customer's own words where they exist, and a proposed save plan with owners and dates
  • It routes each brief to the owning CSM in Slack and posts a renewal board for the CS manager: every account in the window, score, trend, days to renewal
  • Each week it re-scores, so the board shows movement, and the save plan's actions get checked against the activity log
See it run

See it run

zsh
$# Monday 7am: score the 90-120 day renewal window, brief the at-risk accounts, post the board (read-only sources)
$claude -p "$(cat briefs/churn-risk.md)" --allowedTools mcp__hubspot__search_companies,mcp__hubspot__get_company,mcp__hubspot__search_contacts,mcp__hubspot__get_activities,mcp__fireflies__search_meetings,mcp__fireflies__get_transcript,mcp__slack__post_message,Read,Write
Window: 27 accounts renewing 2026-12-03 to 2027-01-02 ($1.84M ARR) + 6 carried from inside 90 days
Read usage.csv (33 accounts x 16 weeks) · tickets.csv (412 tickets) · 91 calls (Fireflies)
Scored 33. At risk (>= 60): 5 ($388k) · Watch (40-59): 8 · Healthy: 20
Wrote 5 briefs to briefs/2026-09-07/. Top: Corvid Analytics 74 (+9): WAU 38 -> 11 over 10 wks, ticket #4620 'export all data' Aug 28, sponsor absent last 3 calls
Board written: board/2026-09-07.md. Posted 5 briefs to owners, board to #cs-renewals
$
The playbook

The playbook

Write the scorecard: signals, weights, and what counts as evidence

Start with the churn you already had. Pull the last ten lost renewals and, for each, write down what was visible ninety days out. The list is usually short and repetitive: usage fell, a champion left or went quiet, tickets shifted from 'how do I' to 'why does it', the sponsor stopped attending, the customer asked about data export or a competitor's integration, the invoice was disputed. Those are your signals, and your own churn tells you how to weight them.

Group them into four families, usage, relationship, support, commercial, and give each signal a weight and a definition of the evidence that triggers it. 'Usage down' is a feeling; 'weekly active users down more than 30% over 8 weeks' is a signal the agent can compute and cite. The scorecard below is the one I start from, and the weights are the part every team tunes against its own losses.

Set the threshold and the tiers. A score above 60 is at risk and gets a brief; 40 to 60 is watch, listed on the board with its top signal; below 40 is healthy and appears only as a count. The threshold decides how many briefs a CSM gets a week, and a CSM who gets twelve briefs reads none of them.

💡

TipWeight the scorecard against your own lost renewals, not against a generic health-score template. The signal that predicted your last ten churns is worth more than the one a vendor's blog says matters.

Connect the sources and pull the renewal window

Connect HubSpot or Salesforce over MCP and confirm the agent can read renewal dates, ARR, the account team, contacts with roles and titles, and the activity log. The window is 90 to 120 days out, which is early enough to change an outcome and late enough that the signals are real. Accounts inside 90 days stay on the board with their last score; the save plan should already be running.

Connect Gong or Fireflies so it can read the last 90 days of calls per account: who attended, who used to attend and stopped, and the tone. Export usage and tickets as CSVs by account and week, the way the QBR prep play does, and drop them in the run's folder.

For champion changes, give the agent the contacts and titles from the CRM and let it compare to the call recorder's attendee lists; a sponsor who was on every call in Q1 and none in Q3 is a relationship signal with a source. Where you have an enrichment source that tracks job changes, add it; where you do not, the agent should say 'not verified' rather than guess.

  • Reads: accounts renewing in 90-120 days: ARR, renewal date, owner, contacts (role, title), activity log
  • Reads: usage export by account and week; ticket export by account (subject, priority, opened, resolved)
  • Reads: last 90 days of calls per account: attendees, dates, transcript
  • Writes: one brief per at-risk account, one renewal board, Slack posts. Never a CRM record

Write the brief so the score explains itself

The brief is the scorecard turned into a run plus one rule that makes it trustworthy: every scored signal cites the evidence that fired it, and a signal without evidence scores zero. The output for an at-risk account is one page: the score and its four components, the signals in order of weight with the source for each, the customer's own words where a call or ticket has them, and a save plan of three to five actions with an owner and a date. The CSM should be able to check every line in one click and disagree with the weight, never with the fact.

Make the agent conservative about interpretation. Falling usage over the summer at a school district is a calendar, not a churn signal, and the brief should surface that the agent noticed the pattern. One angry ticket is a ticket. The scorecard should require a trend, or a corroborating signal, before a single family pushes an account over the threshold, and the brief should show its reasoning so the CSM can see when the agent is wrong.

The save plan is a draft. The agent knows the signals and can propose the obvious responses: an exec-to-exec call when the sponsor went quiet, an enablement session when usage fell in one team, a call with the admin who asked about export. The CSM chooses, edits, and owns it. Tag the plan 'CSM to confirm' the way the QBR play does, so the boundary between assembly and judgment is visible on the page.

The weekly churn risk brief
Every Monday at 7:00am {{TIMEZONE}}, run the renewal risk review.

Read from {{CRM}}: every account with a renewal date between 90 and 120 days from today. For each: ARR, renewal date, owner, contacts (name, title, role), activity log for the last 90 days. Also re-score accounts inside 90 days that were on last week's board.

For each account read: files/usage.csv (weekly active users and feature use by week), files/tickets.csv (subject, priority, opened, resolved, requester), and the last 90 days of calls via {{CALL_RECORDER}} (attendees, date, transcript).

Score each account against scorecard/churn-risk.md. Rules:
- A signal scores only if its evidence threshold is met; cite the evidence (usage weeks and numbers, ticket #, call date and speaker, CRM field). A signal without evidence scores 0.
- Note seasonal or structural explanations you can see (e.g. summer, a reorg the customer mentioned) beside the signal.
- No single family may push an account over the threshold alone; require a corroborating signal from a second family.

For each account scoring >= {{RISK_THRESHOLD}}, write briefs/{{DATE}}/{{ACCOUNT}}.md, one page:
1. Header: account, ARR, renewal date, days remaining, owner, score (and last week's).
2. Score breakdown: usage / relationship / support / commercial, with points.
3. Signals, highest weight first: the signal, the evidence with its source, the customer's words if any.
4. What might explain it: any benign explanation the data supports.
5. Save plan [CSM to confirm]: 3-5 actions, each with an owner and a date, matched to the signals.

Write board/{{DATE}}.md: every account in the window, sorted by score: account, ARR, days to renewal, score, change vs last week, top signal in six words.

Rules:
- Read only. Write nothing to the CRM, the call recorder, or the ticket system.
- Fields and quotes, never adjectives. 'WAU 38 -> 11 over 10 weeks' beats 'usage is declining'.
- Post each brief to its owner in Slack (DM or the account channel). Post the board to #{{CS_CHANNEL}}.
💡

TipRequire a second family before an account crosses the threshold. Usage alone is seasonal, a ticket alone is a Tuesday. Usage down plus the sponsor missing three calls is a renewal conversation you need to start this week.

Run it Monday, brief the CSM, board the manager

Schedule the job for Monday 7am as a scheduled Claude Code job, so the CSM opens Slack to the briefs and the manager to the board. Each brief goes to the owning CSM directly, with the score, the top signal, and days to renewal in the first line. The board goes to the CS channel: every account in the window, sorted by score, with the week-over-week change, so the manager sees movement without opening thirty briefs.

Run the first one by hand with the CS lead and read every brief against their gut. Where the agent flagged an account the CSM knows is fine, look at the evidence: usually a seasonal pattern the scorecard needs to allow for, or a weight that is too high. Where the CSM names an account they are worried about that scored low, find the signal the scorecard lacks. Both fixes are lines in a file, and the second one is the more valuable, because that account is the one the old health score would have missed too.

Keep the play read-only. The agent reads renewal data and writes documents; the save plan is executed by people, logged in the CRM by people, and checked by next week's run against the activity log. An agent that starts 'reaching out' to a wobbling customer on its own is a churn signal in itself.

Check the save plan against what actually happened

The re-score each week is where the play earns its place. An account that was at 68 with a silent sponsor should, two weeks after the exec-to-exec call in the save plan, show the sponsor back on a call and the relationship score down. If it does not, the brief says so, and the CSM knows the plan is not working while there is still time to change it. The agent reads the activity log for the plan's actions and reports which happened and which did not.

The board's week-over-week column is the manager's view of the whole book. Accounts moving up in score get attention; accounts moving down confirm that the plan worked; accounts that sit high for four weeks with no movement are the escalation list. The manager spends ten minutes on the board instead of an hour asking each CSM how their renewals feel.

Post the outcomes back. When a renewal in the window closes, won or lost, the run notes it on the board with the score it carried eight weeks out. That is the calibration data for the next step.

💡

TipRead the board for the accounts that stay high with no movement for four weeks. Those are the ones where the save plan is a document and the escalation is overdue.

Calibrate the scorecard against real outcomes every quarter

Every quarter, pull the renewals that closed and lay their scores at 90 days beside the outcome. A good scorecard puts most of the lost renewals above the threshold at 90 days and most of the retained ones below it. Where it missed, find the signal that was visible and not scored, and add it. Where it cried wolf, find the weight to lower or the benign explanation to encode. The scorecard is a file, and the calibration is a one-hour meeting with the data on the table.

Watch for the signal that predicts your churn and nobody expected. In one book it was the 'export our data' ticket; in another it was the invoice dispute; in another it was the champion's calendar going quiet six months before the title changed. Your own losses are the training data, and the agent reads all of them the same way every week, which is more than any human on the team can promise.

Then share the calibration with the CS team. A scorecard that has been tuned against ten quarters of real renewals is a credibility asset: the CSM trusts the brief because they watched it get right the account they had a bad feeling about, and that trust is what makes them open the brief on the Monday when it matters.

Inside the prompt

Inside the prompt

The scoring prompt is short, but every line is there for a reason. Here is what each one is doing and why.

Why each line is in the churn risk brief
The 90-120 day window"renewal date between 90 and 120 days from today"
Early enough to change the outcome, late enough that the signals are real. Inside 90 days the account stays on the board with its plan running.
Evidence or zero"A signal without evidence scores 0"
The rule that makes the score trustworthy. A CSM can argue with a weight; they cannot argue with a ticket number.
Two families to cross"require a corroborating signal from a second family"
Usage alone is seasonal, a ticket alone is a Tuesday. Two families together is a renewal conversation.
Benign explanations"Note seasonal or structural explanations you can see"
The agent shows its reasoning and its doubts. That is what stops the brief from reading like an alarm every week.
Save plan, CSM to confirm"3-5 actions, each with an owner and a date"
The agent proposes the obvious responses to the signals; the CSM chooses and owns them. Next week's run checks the activity log.
Read only"Write nothing to the CRM, the call recorder, or the ticket system"
It reads and writes documents. People run the save plan. An agent that contacts a wobbling customer is a churn signal itself.
What you get

What you get

One at-risk brief as it lands in the CSM's Slack. The score explains itself: every signal cites its evidence, the benign explanations are listed, and the save plan is a draft for the CSM to own.

Example output
RENEWAL RISK · Corvid Analytics · $84k ARR · renews Dec 9 (93 days) · owner: Priya · score 74 (was 65)

BREAKDOWN  usage 28/35 · relationship 24/30 · support 17/20 · commercial 5/15

SIGNALS
1. Usage down 71%: weekly active users 38 -> 11 over 10 weeks (usage, wk 26-35). The drop is across all teams, not one.
2. Sponsor absent: VP Analytics (J. Marsh) attended 6 of 6 calls Feb-May, 0 of the last 3 (Fireflies, Jul 15, Aug 12, Sep 2). Title unchanged in CRM; not verified externally.
3. Export request: ticket #4620 'export all our data as CSV', Aug 28, opened by the admin, resolved in 4h with a how-to. No follow-up from CS logged.
4. Ticket tone shift: Q2 tickets were 'how do I' (9); Q3 tickets are 'why does it' (6), two tagged bug, one open 12 days (#4655).
5. No expansion talk: 0 mentions of new use cases or teams in the last 90 days of calls (was 3 in Q1).

CUSTOMER'S WORDS
"We're consolidating tools this year and I need to justify each one" (Head of Ops, Aug 12 call).

WHAT MIGHT EXPLAIN IT
- A reorg was mentioned on Jul 15 ("analytics is moving under finance"). That could explain the sponsor's absence; it does not explain the usage drop across all teams.

SAVE PLAN [CSM to confirm]
- [ ] Priya: call the admin who opened #4620 this week; ask what the export is for. (by Sep 11)
- [ ] Exec sponsor (ours) -> J. Marsh or the new finance owner: 20-minute call on the consolidation criteria. (by Sep 18)
- [ ] Priya: enablement session for the two teams with the steepest usage drop; bring the Q1 use cases they described. (by Sep 25)
- [ ] RevOps: confirm the renewal terms and any multi-year option before the Oct conversation. (by Sep 30)

Re-scored weekly. Next check: did the sponsor or the finance owner attend a call by Sep 18.
Anatomy of one scored signal
Corvid Analytics · signal 1 of 5 · usage down 71% · 28 of 35 usage points
definitionWAU down > 30% over 8+ weeks
From the scorecard file. A threshold the agent can compute, and a CSM can disagree with in the calibration meeting, never in the brief.
evidence38 -> 11 over 10 weeks (usage, wk 26-35)
Numbers and weeks from the export. 'Usage is declining' would have been an adjective; this is a fact with a source.
spreadall teams, not one
The agent checked whether the drop was one team or the account. One team is an enablement problem; the whole account is a decision being made.
benign checkreorg mentioned Jul 15 does not explain a cross-team drop
The brief lists what might explain the signal and says why it does not. The CSM sees the reasoning, not just the verdict.
corroborationsponsor absent 3 calls + export ticket #4620
Usage alone would not cross the threshold. Two more families fired, so this account got a brief.
matched actionenablement for the two steepest-drop teams, by Sep 25
Every signal maps to a proposed action with an owner and a date. Next week's run checks whether it happened.
Pitfalls to avoid

Pitfalls to avoid

⚠️

A single number with no evidence'42, red' gives the CSM nothing to act on and no reason to trust it over their gut. Every signal cites its source, or it scores zero.

⚠️

One family crossing the threshold aloneUsage alone is seasonal; one ticket is a Tuesday. Require a corroborating signal from a second family before an account gets a brief.

⚠️

Too many briefsA CSM who gets twelve briefs on Monday reads none. Set the threshold so the at-risk list is the handful that need a conversation this week, and put the rest on the board.

⚠️

Letting the agent reach outThis play reads and writes documents. A customer who gets an unprompted 'we noticed your usage dropped' message from a bot has a new reason to leave.

⚠️

Never calibratingLay each quarter's closed renewals beside their 90-day scores. The misses tell you which signal to add; the false alarms tell you which weight to lower.

⚠️

Ignoring the boring signalThe 'export all our data' ticket was resolved helpfully in four hours and nobody in CS saw it. The scorecard's job is to make the boring signal visible to the person who owns the renewal.

FAQ

Questions people ask

What are the signals of churn risk?
Four families, and your own lost renewals tell you the weights. Usage: weekly active users falling over eight or more weeks, purchased features unused. Relationship: a champion who changed roles or went quiet, a sponsor who stopped attending calls, no expansion talk. Support: ticket tone shifting from 'how do I' to 'why does it', tickets open past two weeks, a data-export request. Commercial: an invoice dispute, a consolidation or budget-review mention, a competitor named on a call. The scorecard on this page is the set I start from.
How is this different from a health score?
The evidence. A health score is a single number in a dashboard, and by the second quarter nobody trusts it or opens it. This brief shows every signal with its source, a ticket number, a usage figure and week, a call date and speaker, so the CSM can check each line and argue with the weight instead of the fact. It also arrives in Slack every Monday instead of waiting to be looked at.
Why 90 to 120 days out?
Because that is when the signals are real and the outcome is still changeable. Earlier, the noise is high. Later, the customer has decided. Accounts inside 90 days stay on the board with their last score and their save plan, and get re-scored weekly so the CSM can see whether the plan is working.
Does it need usage data?
Usage is the strongest early signal for most products, so yes, get it, even as a weekly CSV export from your product analytics. If you genuinely have none, the relationship and support families still work, and the scorecard should say so by re-weighting. Do not let the agent estimate usage.
Will it contact customers?
No. It reads the CRM, the call recorder, and the exports, and writes a brief, a board, and Slack posts. The save plan is executed by the CSM and the account team. An automated 'we noticed your usage dropped' message is the fastest way to confirm a customer's decision to leave.
How do we know the scorecard is right?
Calibrate it quarterly. Lay every renewal that closed beside its score at 90 days. Most of the lost ones should have been above the threshold and most of the retained ones below. The misses tell you which signal to add; the false alarms tell you which weight to lower or which benign explanation to encode. The scorecard is a file, and the fix is a line.
How long does it take to build?
A day. A morning with the CS lead writing the scorecard against your last ten lost renewals, an afternoon connecting the sources and writing the brief, and a manual first run read against the CSMs' gut. The first Monday it posts on its own is the finish line.
Related

Related plays

Want playbooks like this in your inbox?

A new AI use case, prompt, or teardown every couple of weeks.

Subscribe →