Churn risk detector

Scan support tickets, Slack channels, NPS scores, and usage patterns to flag accounts showing early churn indicators.

How to use it

  1. Hit Copy SKILL.md — or use the Claude Code line below to get every file.
  2. Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
    ChatGPT: make a Project and paste it into Instructions.
    Neither? Paste it at the top of a new chat — it works for that chat.
  3. Describe your job in plain words. The AI follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit gooseworks-ai/goose-skills/skills/research/composites/churn-risk-detector#main ~/.claude/skills/churn-risk-detector

For one project only, change the path to .claude/skills/churn-risk-detector. This skill also uses run_skill.py — copying SKILL.md alone won't be enough. See the folder on GitHub.

Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Show the full text261 lines
churn-risk-detector/SKILL.md261 lines8.4 KBpushed 96d agoRawView on GitHub

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:

Signal Calculation Risk Weight
Ticket volume spike >2x their average in last 30 days High
Unresolved tickets Open tickets older than 7 days High
Escalation language Keywords: "cancel", "frustrated", "alternative", "not working", "disappointed" Critical
Response time degradation Your avg response time to this customer trending up Medium
Repeat issues Same problem reported 2+ times High

1B: Communication Signal Analysis

From Slack/email history:

Signal Calculation Risk Weight
Gone silent No messages in 30+ days (was previously active) High
Decreasing frequency Message frequency dropped >50% vs prior 90 days Medium
Negative sentiment shift Tone changed from positive to neutral/negative Medium
Champion disengagement Primary contact stopped responding Critical
New stakeholder questions New person asking basic "what does this do?" questions Medium (potential reorg)

1C: Usage Signal Analysis (if data available)

Signal Calculation Risk Weight
Login drop Active users down >30% vs prior month High
Feature abandonment Stopped using a key feature they previously used regularly High
Shallow usage Only using 1 feature when they're paying for many Medium
No growth Same number of seats/users for 6+ months Low
Export spike Sudden increase in data exports Critical (may be migrating)

1D: Commercial Signal Analysis

Signal Calculation Risk Weight
Discount request Asked for pricing reduction High
Downgrade inquiry Asked about lower tier Critical
Payment failure Failed payment not resolved in 7+ days High
Contract approaching renewal <60 days to renewal with no renewal discussion Medium
Competitor mention Mentioned a competitor in any channel High

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

Tier Score Label Action Urgency
Red 70-100 Critical risk — likely to churn This week
Orange 40-69 Elevated risk — needs attention Within 2 weeks
Yellow 20-39 Early warning — monitor closely Within 30 days
Green 0-19 Healthy — no action needed Routine 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 risk-report-[YYYY-MM-DD].md in the current working directory.

Scheduling

Run weekly:

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

Cost

Component Cost
All signal analysis Free (LLM reasoning)
Slack/email parsing Free
Total Free

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"
1---
2name: churn-risk-detector
3description: >
4 Scan support tickets, Slack channels, NPS scores, and usage patterns to flag accounts
5 showing early churn indicators. Produces a weekly risk scorecard with severity tiers,
6 root cause hypotheses, and suggested save plays per account. Designed for seed/Series A
7 teams where the founder or a single CSM manages all accounts manually.
8tags: [research]
9---
10 
11# Churn Risk Detector
12 
13Surface 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.
14 
15**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.
16 
17## When to Use
18 
19- "Which customers are at risk of churning?"
20- "Run the weekly churn risk scan"
21- "Flag accounts I should worry about"
22- "Who haven't we heard from in a while?"
23- "Produce a customer health report"
24 
25## Phase 0: Intake
26 
27### Account Data
281. **Customer list** — CSV or sheet with: company name, primary contact email, contract value (MRR/ARR), contract start date, renewal date (if known)
292. **Product/service type** — What are they paying for? (Helps calibrate expected engagement)
30 
31### Signal Sources (provide what you have)
323. **Support tickets** — Export from Intercom, Zendesk, or email (CSV with: customer, date, subject, status, resolution time)
334. **Slack channel history** — Customer Slack channel or shared channel messages
345. **NPS/CSAT scores** — Recent survey results with scores and comments
356. **Usage data** — Any metrics you track: logins, API calls, features used, active users (CSV export)
367. **Email/communication log** — Last touchpoints per account (dates + context)
378. **Billing data** — Payment failures, downgrades, discount requests
38 
39### Calibration
409. **What does "healthy" look like?** — Describe a healthy customer (e.g., "logs in daily, uses 3+ features, responds to emails within 24h")
4110. **Known churn reasons** — Why have customers churned in the past? (helps weight signals)
42 
43## Phase 1: Signal Extraction
44 
45### 1A: Support Signal Analysis
46 
47From support ticket data, calculate per account:
48 
49| Signal | Calculation | Risk Weight |
50|--------|-------------|-------------|
51| **Ticket volume spike** | >2x their average in last 30 days | High |
52| **Unresolved tickets** | Open tickets older than 7 days | High |
53| **Escalation language** | Keywords: "cancel", "frustrated", "alternative", "not working", "disappointed" | Critical |
54| **Response time degradation** | Your avg response time to this customer trending up | Medium |
55| **Repeat issues** | Same problem reported 2+ times | High |
56 
57### 1B: Communication Signal Analysis
58 
59From Slack/email history:
60 
61| Signal | Calculation | Risk Weight |
62|--------|-------------|-------------|
63| **Gone silent** | No messages in 30+ days (was previously active) | High |
64| **Decreasing frequency** | Message frequency dropped >50% vs prior 90 days | Medium |
65| **Negative sentiment shift** | Tone changed from positive to neutral/negative | Medium |
66| **Champion disengagement** | Primary contact stopped responding | Critical |
67| **New stakeholder questions** | New person asking basic "what does this do?" questions | Medium (potential reorg) |
68 
69### 1C: Usage Signal Analysis (if data available)
70 
71| Signal | Calculation | Risk Weight |
72|--------|-------------|-------------|
73| **Login drop** | Active users down >30% vs prior month | High |
74| **Feature abandonment** | Stopped using a key feature they previously used regularly | High |
75| **Shallow usage** | Only using 1 feature when they're paying for many | Medium |
76| **No growth** | Same number of seats/users for 6+ months | Low |
77| **Export spike** | Sudden increase in data exports | Critical (may be migrating) |
78 
79### 1D: Commercial Signal Analysis
80 
81| Signal | Calculation | Risk Weight |
82|--------|-------------|-------------|
83| **Discount request** | Asked for pricing reduction | High |
84| **Downgrade inquiry** | Asked about lower tier | Critical |
85| **Payment failure** | Failed payment not resolved in 7+ days | High |
86| **Contract approaching renewal** | <60 days to renewal with no renewal discussion | Medium |
87| **Competitor mention** | Mentioned a competitor in any channel | High |
88 
89## Phase 2: Risk Scoring
90 
91### Scoring Model
92 
93Each account gets a composite risk score (0-100):
94 
95```
96Risk Score = Σ (signal_weight × signal_present)
97 
98Weights:
99 Critical signal = 25 points each
100 High signal = 15 points each
101 Medium signal = 8 points each
102 Low signal = 3 points each
103 
104Score cap: 100
105```
106 
107### Risk Tiers
108 
109| Tier | Score | Label | Action Urgency |
110|------|-------|-------|---------------|
111| **Red** | 70-100 | Critical risk — likely to churn | This week |
112| **Orange** | 40-69 | Elevated risk — needs attention | Within 2 weeks |
113| **Yellow** | 20-39 | Early warning — monitor closely | Within 30 days |
114| **Green** | 0-19 | Healthy — no action needed | Routine check-in |
115 
116## Phase 3: Save Play Generation
117 
118For each Red and Orange account, generate a specific save play:
119 
120### Save Play Template
121 
122```
123ACCOUNT: [Company Name]
124RISK TIER: [Red/Orange]
125RISK SCORE: [X/100]
126MRR/ARR: $[X]
127 
128SIGNALS DETECTED:
129- [Signal 1] — [Evidence: specific data point]
130- [Signal 2] — [Evidence]
131- [Signal 3] — [Evidence]
132 
133ROOT CAUSE HYPOTHESIS:
134[1-2 sentences: What do you think is actually going wrong?
135 E.g., "Champion left the company and new stakeholder hasn't been onboarded"
136 or "They hit a technical limitation with [feature] that's blocking their primary use case"]
137 
138RECOMMENDED SAVE PLAY:
1391. [Immediate action — e.g., "Schedule a call with [contact] this week"]
1402. [Follow-up — e.g., "Send a personalized Loom showing how to solve [specific issue]"]
1413. [Structural fix — e.g., "Assign a dedicated onboarding session for new stakeholder"]
142 
143TALK TRACK:
144"[2-3 sentences the CSM/founder can use to open the conversation naturally,
145 without saying 'we noticed you might be churning']"
146 
147ESCALATION TRIGGER:
148If [specific condition] by [date], escalate to [founder/CEO call].
149```
150 
151## Phase 4: Output Format
152 
153```markdown
154# Churn Risk Report — Week of [DATE]
155Total accounts scanned: [N]
156Data sources: [list what was available]
157 
158---
159 
160## Risk Summary
161 
162| Tier | Count | Total MRR at Risk |
163|------|-------|-------------------|
164| 🔴 Red (Critical) | [N] | $[X] |
165| 🟠 Orange (Elevated) | [N] | $[X] |
166| 🟡 Yellow (Early Warning) | [N] | $[X] |
167| 🟢 Green (Healthy) | [N] | $[X] |
168 
169**Total MRR at risk (Red + Orange):** $[X] ([Y]% of total MRR)
170 
171---
172 
173## 🔴 Critical Risk Accounts
174 
175### [Company Name 1] — Score: [X]/100 | MRR: $[X]
176**Signals:** [bullet list]
177**Root cause:** [hypothesis]
178**Save play:** [specific actions]
179**Owner:** [who should act]
180**Deadline:** [date]
181 
182### [Company Name 2] — ...
183 
184---
185 
186## 🟠 Elevated Risk Accounts
187 
188### [Company Name] — Score: [X]/100 | MRR: $[X]
189**Signals:** [bullet list]
190**Recommended action:** [1-2 sentences]
191 
192---
193 
194## 🟡 Early Warning Accounts
195 
196| Account | Score | Key Signal | Suggested Action |
197|---------|-------|------------|-----------------|
198| [Name] | [X] | [Signal] | [Action] |
199| [Name] | [X] | [Signal] | [Action] |
200 
201---
202 
203## Trends vs Last Week
204 
205- Accounts moved Red → Green: [list — wins!]
206- Accounts moved Green → Yellow/Orange: [list — new risks]
207- Accounts churned since last report: [list]
208 
209---
210 
211## Signal Distribution
212 
213| Signal Type | Accounts Affected |
214|------------|-------------------|
215| Support ticket spike | [N] |
216| Gone silent | [N] |
217| Usage decline | [N] |
218| Competitor mention | [N] |
219| Payment issue | [N] |
220| Champion disengagement | [N] |
221 
222---
223 
224## Recommended Focus This Week
225 
2261. **[Account]** — [Why + what to do]
2272. **[Account]** — [Why + what to do]
2283. **[Account]** — [Why + what to do]
229```
230 
231Save to `risk-report-[YYYY-MM-DD].md` in the current working directory.
232 
233## Scheduling
234 
235Run weekly:
236 
237```bash
2380 8 * * 1 python3 run_skill.py churn-risk-detector --client <client-name>
239```
240 
241## Cost
242 
243| Component | Cost |
244|-----------|------|
245| All signal analysis | Free (LLM reasoning) |
246| Slack/email parsing | Free |
247| **Total** | **Free** |
248 
249## Tools Required
250 
251- Input data from CSV/sheets (support tickets, usage, NPS)
252- **Optional:** Slack channel reading for communication signals
253- No external API costs — pure analysis
254 
255## Trigger Phrases
256 
257- "Which customers are at risk?"
258- "Run the churn risk scan"
259- "Weekly customer health report"
260- "Flag at-risk accounts"
261 

Discussion

Alternatives

Also in Churn & renewals
Win back customers before they cancelTell us about your subscription business and why people quit. Get back a ready-to-use plan to keep more customers and recover failed payments.Business & ops · MITGrow an AppGuided journey from an app people sign up for and then quietly abandon to a sealed retention engine with a habit loop, an activated first run, and one metric the whole team trusts. Orchestrates eight skills phase by phase - hooked-ux, improve-retention, continuous-discovery, lean-ux, inspired-product, lean-analytics, microinteractions, drive-motivation - asking the user questions at every decision point and recording results in the project docs/ folder (PRODUCT.md, METRICS.md, GROW-APP-PLAN.md) so the journey resumes across sessions. Use when the user wants to lift activation and retention, design a habit loop, fix a leaky onboarding funnel, or says ''users sign up then disappear''. Do not use to fix broken UX or performance that no engagement mechanic can paper over - run improve-app first; if there is no app yet, use create-app. For one framework in isolation, invoke that skill directly.Business & ops · MITCustomer win back sequencerFor churned accounts, research what has changed since they left — new funding, team growth, competitor dissatisfaction, product updates that address their pain — then assess re-engagement potential and generate a personalized win-back email sequence with timing recommendations. Chains web research and LinkedIn monitoring with email sequence generation.Business & ops · MITOnboarding CROWhen the user wants to optimize post-signup onboarding, user activation, first-run experience, or time-to-value. Also use when the user mentions "onboarding flow," "activation rate," "user activation," "first-run experience," "empty states," "onboarding checklCoding · MIT