> Scan support tickets, Slack channels, NPS scores, and usage patterns to flag accounts showing early churn indicators. Produces a weekly risk scorecard with severity tiers, root cause hypotheses, and suggested save plays per account. Designed for seed/Series A teams where the founder or a single CSM manages all accounts manually.
npx skills add https://github.com/gooseworks-ai/goose-skills --skill 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.
10. Known churn reasons — Why have customers churned in the past? (helps weight signals)
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 |
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) |
| 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) |
| 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 |
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
| 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 |
For each Red and Orange account, generate a specific save play:
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].
# 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.
Run weekly:
0 8 * * 1 python3 run_skill.py churn-risk-detector --client <client-name>
| Component | Cost |
|-----------|------|
| All signal analysis | Free (LLM reasoning) |
| Slack/email parsing | Free |
| Total | Free |
Analyzes meeting transcripts and recordings to uncover behavioral patterns, communication insights, and actionable feedback. Identifies when you avoid conflict, use filler words, dominate conversations, or miss opportunities to listen. Perfect for professionals seeking to improve their communication and leadership skills.
Toolkit for creating animated GIFs optimized for Slack, with validators for size constraints and composable animation primitives. This skill applies when users request animated GIFs or emoji animations for Slack from descriptions like "make me a GIF for Slack of X doing Y".
Analyzes your recent Claude Code chat history to identify coding patterns, development gaps, and areas for improvement, curates relevant learning resources from HackerNews, and automatically sends a personalized growth report to your Slack DMs.
Knowledge and utilities for creating animated GIFs optimized for Slack. Provides constraints, validation tools, and animation concepts. Use when users request animated GIFs for Slack like "make me a GIF of X doing Y for Slack.
A skill that creates new Claude skills and automatically shares them on Slack using Rube for seamless team collaboration and skill discovery.
Automate Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify, etc.) using agent-browser via Chrome DevTools Protocol. Use when the user needs to interact with an Electron app, automate a desktop app, connect to a running app, control a native app, or test an Electron application. Triggers include "automate Slack app", "control VS Code", "interact with Discord app", "test this Electron app", "connect to desktop app", or any task requiring automation of a native Electron application.
Prepare meeting materials with Notion context and Codex research; use when gathering context, drafting agendas/pre-reads, and tailoring materials to attendees.
Interactive daily standup/meeting update generator. Use when user says 'daily', 'standup', 'scrum update', 'status update', 'what did I do yesterday', 'prepare for meeting', 'morning update', or 'team sync'. Pulls activity from GitHub, Jira, and Claude Code session history. Conducts 4-question interview (yesterday, today, blockers, discussion topics) and generates formatted Markdown update.
Take gooseworks-ai/churn-risk-detector from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.