AI SkillScore RiskSales

Churn Risk Detector — find at-risk accounts before they leave — Claude Skill

A Claude Skill for Claude Code by Gooseworks — run /churn-risk-detector in Claude·Updated

Compatible withClaude·ChatGPT·OpenClaw

Score customer accounts for churn risk from support and usage signals

  • Scans support tickets, Slack history, NPS, usage, and billing for risk signals
  • Scores every account 0-100 across critical/high/medium/low signals
  • Tiers accounts as Red, Orange, Yellow, Green
  • Generates root-cause hypothesis and save play per Red and Orange account
  • Tracks week-over-week tier movement

Who this is for

What it does

Weekly customer health review

Replace gut-feel CSM rounds with a scored risk list and concrete save plays.

Pre-renewal triage

60 days before renewal, find every account that's drifting and intervene before the conversation gets harder.

Founder-managed CS

For early-stage teams without a CS platform, turn raw data into an actionable risk list every week.

How it works

1

Take customer list, support data, usage data, and comms history as input

2

Extract risk signals across support, communication, usage, and commercial dimensions

3

Score every account on a weighted model

4

Generate save plays for Red and Orange tiers

5

Output a weekly health report with trend deltas

Metrics this improves

Churn Rate
Lower churn rate by intervening on Red and Orange accounts before renewal
Sales

Works with

Want to use Churn Risk Detector?

Choose how to get started.

Run in Claude Code
Free. Open source.

Install and run this skill locally on your computer.

1
Install Claude Code

Open a terminal on your computer and paste this command:

2
Install the skill

This downloads the skill with all its files to your computer:

Add -g at the end to make it available in all your projects.

3
Run it

Start Claude Code, then type the command:

then
View source on GitHub
Use on ElasticFlow
Team and collaboration features

Run skills from your browser. Share results, manage access, collaborate with your team. No terminal needed.

Free 14-day trial. Cancel anytime.

Churn Risk Detector

Surface accounts at risk of churning before it's too late. Aggregates signals from support, communication, and usage patterns into a scored risk report with specific save actions.

Built for: Early-stage teams with no CS platform (no Gainsight, no ChurnZero). You have a spreadsheet of customers, a Slack channel, and a support inbox. This skill turns those raw signals into an actionable churn risk list.

When to Use

  • "Which customers are at risk of churning?"
  • "Run the weekly churn risk scan"
  • "Flag accounts I should worry about"
  • "Who haven't we heard from in a while?"
  • "Produce a customer health report"

Phase 0: Intake

Account Data

  1. Customer list — CSV or sheet with: company name, primary contact email, contract value (MRR/ARR), contract start date, renewal date (if known)
  2. Product/service type — What are they paying for? (Helps calibrate expected engagement)

Signal Sources (provide what you have)

  1. Support tickets — Export from Intercom, Zendesk, or email (CSV with: customer, date, subject, status, resolution time)
  2. Slack channel history — Customer Slack channel or shared channel messages
  3. NPS/CSAT scores — Recent survey results with scores and comments
  4. Usage data — Any metrics you track: logins, API calls, features used, active users (CSV export)
  5. Email/communication log — Last touchpoints per account (dates + context)
  6. Billing data — Payment failures, downgrades, discount requests

Calibration

  1. What does "healthy" look like? — Describe a healthy customer (e.g., "logs in daily, uses 3+ features, responds to emails within 24h")
  2. Known churn reasons — Why have customers churned in the past? (helps weight signals)

Phase 1: Signal Extraction

1A: Support Signal Analysis

From support ticket data, calculate per account:

SignalCalculationRisk Weight
Ticket volume spike>2x their average in last 30 daysHigh
Unresolved ticketsOpen tickets older than 7 daysHigh
Escalation languageKeywords: "cancel", "frustrated", "alternative", "not working", "disappointed"Critical
Response time degradationYour avg response time to this customer trending upMedium
Repeat issuesSame problem reported 2+ timesHigh

1B: Communication Signal Analysis

From Slack/email history:

SignalCalculationRisk Weight
Gone silentNo messages in 30+ days (was previously active)High
Decreasing frequencyMessage frequency dropped >50% vs prior 90 daysMedium
Negative sentiment shiftTone changed from positive to neutral/negativeMedium
Champion disengagementPrimary contact stopped respondingCritical
New stakeholder questionsNew person asking basic "what does this do?" questionsMedium (potential reorg)

1C: Usage Signal Analysis (if data available)

SignalCalculationRisk Weight
Login dropActive users down >30% vs prior monthHigh
Feature abandonmentStopped using a key feature they previously used regularlyHigh
Shallow usageOnly using 1 feature when they're paying for manyMedium
No growthSame number of seats/users for 6+ monthsLow
Export spikeSudden increase in data exportsCritical (may be migrating)

1D: Commercial Signal Analysis

SignalCalculationRisk Weight
Discount requestAsked for pricing reductionHigh
Downgrade inquiryAsked about lower tierCritical
Payment failureFailed payment not resolved in 7+ daysHigh
Contract approaching renewal<60 days to renewal with no renewal discussionMedium
Competitor mentionMentioned a competitor in any channelHigh

Phase 2: Risk Scoring

Scoring Model

Each account gets a composite risk score (0-100):

Risk Score = Σ (signal_weight × signal_present)

Weights:
  Critical signal = 25 points each
  High signal     = 15 points each
  Medium signal   = 8 points each
  Low signal      = 3 points each

Score cap: 100

Risk Tiers

TierScoreLabelAction Urgency
Red70-100Critical risk — likely to churnThis week
Orange40-69Elevated risk — needs attentionWithin 2 weeks
Yellow20-39Early warning — monitor closelyWithin 30 days
Green0-19Healthy — no action neededRoutine check-in

Phase 3: Save Play Generation

For each Red and Orange account, generate a specific save play:

Save Play Template

ACCOUNT: [Company Name]
RISK TIER: [Red/Orange]
RISK SCORE: [X/100]
MRR/ARR: $[X]

SIGNALS DETECTED:
- [Signal 1] — [Evidence: specific data point]
- [Signal 2] — [Evidence]
- [Signal 3] — [Evidence]

ROOT CAUSE HYPOTHESIS:
[1-2 sentences: What do you think is actually going wrong?
 E.g., "Champion left the company and new stakeholder hasn't been onboarded"
 or "They hit a technical limitation with [feature] that's blocking their primary use case"]

RECOMMENDED SAVE PLAY:
1. [Immediate action — e.g., "Schedule a call with [contact] this week"]
2. [Follow-up — e.g., "Send a personalized Loom showing how to solve [specific issue]"]
3. [Structural fix — e.g., "Assign a dedicated onboarding session for new stakeholder"]

TALK TRACK:
"[2-3 sentences the CSM/founder can use to open the conversation naturally,
 without saying 'we noticed you might be churning']"

ESCALATION TRIGGER:
If [specific condition] by [date], escalate to [founder/CEO call].

Phase 4: Output Format

# Churn Risk Report — Week of [DATE]
Total accounts scanned: [N]
Data sources: [list what was available]

---

## Risk Summary

| Tier | Count | Total MRR at Risk |
|------|-------|-------------------|
| 🔴 Red (Critical) | [N] | $[X] |
| 🟠 Orange (Elevated) | [N] | $[X] |
| 🟡 Yellow (Early Warning) | [N] | $[X] |
| 🟢 Green (Healthy) | [N] | $[X] |

**Total MRR at risk (Red + Orange):** $[X] ([Y]% of total MRR)

---

## 🔴 Critical Risk Accounts

### [Company Name 1] — Score: [X]/100 | MRR: $[X]
**Signals:** [bullet list]
**Root cause:** [hypothesis]
**Save play:** [specific actions]
**Owner:** [who should act]
**Deadline:** [date]

### [Company Name 2] — ...

---

## 🟠 Elevated Risk Accounts

### [Company Name] — Score: [X]/100 | MRR: $[X]
**Signals:** [bullet list]
**Recommended action:** [1-2 sentences]

---

## 🟡 Early Warning Accounts

| Account | Score | Key Signal | Suggested Action |
|---------|-------|------------|-----------------|
| [Name] | [X] | [Signal] | [Action] |
| [Name] | [X] | [Signal] | [Action] |

---

## Trends vs Last Week

- Accounts moved Red → Green: [list — wins!]
- Accounts moved Green → Yellow/Orange: [list — new risks]
- Accounts churned since last report: [list]

---

## Signal Distribution

| Signal Type | Accounts Affected |
|------------|-------------------|
| Support ticket spike | [N] |
| Gone silent | [N] |
| Usage decline | [N] |
| Competitor mention | [N] |
| Payment issue | [N] |
| Champion disengagement | [N] |

---

## Recommended Focus This Week

1. **[Account]** — [Why + what to do]
2. **[Account]** — [Why + what to do]
3. **[Account]** — [Why + what to do]

Save to clients/<client-name>/customer-success/churn-risk/risk-report-[YYYY-MM-DD].md.

Scheduling

Run weekly:

0 8 * * 1 python3 run_skill.py churn-risk-detector --client <client-name>

Cost

ComponentCost
All signal analysisFree (LLM reasoning)
Slack/email parsingFree
TotalFree

Tools Required

  • Input data from CSV/sheets (support tickets, usage, NPS)
  • Optional: Slack channel reading for communication signals
  • No external API costs — pure analysis

Trigger Phrases

  • "Which customers are at risk?"
  • "Run the churn risk scan"
  • "Weekly customer health report"
  • "Flag at-risk accounts"