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 athina-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 |
content-media
Takes an existing screen recording or demo video and adds professional zoom/pan effects synchronized to the narration. Uses transcript-driven zoom targeting and Remotion for rendering. Optionally replaces audio with a soundtrack.
tools
Repurposes long-form video (podcasts, interviews, talks) into short-form vertical clips for Instagram Reels, TikTok, and YouTube Shorts. Handles transcription, moment selection, clip extraction, speaker-tracked reframing (16:9 to 9:16), and animated captions.
development
Creates talking head videos from any source material (docs, changelogs, blog posts, notes, transcripts). Produces multi-scene videos with avatar narration over screenshots/images using HeyGen v2 API. Supports Quick Shot and Full Producer modes.
tools
Generates Instagram-ready product reels from any e-commerce product page URL. Scrapes product images, classifies by type, generates AI-animated clips via Higgsfield API, creates text overlays with style presets, and composes a 15-20 second reel with music. Supports model-based and product-only reels.