skills/composites/churn-risk-detector/SKILL.md
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 skillsauth add gooseworks-ai/goose-skills churn-risk-detectorInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
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 |
development
End-to-end skill that turns a single reference image into a fully-installed, example-rendered style preset for the goose-graphics composite. Analyzes the image, writes the slim style spec, registers it in styles/index.json, generates all 7 format examples using the standard brief, renders PNGs via Playwright, and updates examples/manifest.json. Invoke with /goose-graphics-create-style.
development
Evaluate YC batch companies for investment — scrapes the YC directory, researches each company and its founders (work history, LinkedIn, website), assesses founder-company fit, and exports to Google Sheets with priority rankings. Use when asked to evaluate YC companies, research a YC batch, screen startups, or do due diligence on YC companies.
tools
Take screenshots of any website using Notte browser automation. Use when asked to screenshot, capture, or snap a webpage.
development
Search the web, platforms, and datasets. Use when asked to search, find, look up, research, or discover information from the web, YouTube, Amazon, eBay, news, academic sources, or any online platform.