4-quadrant CRM deal classifier — kills stale deals destroying your forecast. Agent skill.
SaferSkills independently audited hubspot-pipeline-cleanup (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A messy CRM pipeline destroys forecast accuracy, demoralizes reps ("everything looks stuck"), and hides real opportunities. This skill walks the user through a systematic pipeline audit that identifies which deals to close, push, or escalate — based on objective rules, not gut feel.
Core principle: A deal that hasn't moved stages in 2x the average sales cycle for that stage is either dead or being neglected. Treat it as dead until proven otherwise.
For every open deal, classify into one quadrant:
| Recent activity (≤14d) | No recent activity (>14d) | |
|---|---|---|
| In stage <2x avg time | 🟢 Healthy — leave alone | 🟡 Nudge — needs activity |
| In stage ≥2x avg time | 🟠 Stuck — coach the rep | 🔴 Dead — close-lost it |
Definitions:
1. Which pipeline are we cleaning? (Sales / Customer Success / Partnerships / Other)
2. What's your typical sales cycle (in days)?
3. Any deals you already know are dead?
4. Date of last formal pipeline review?If user says "I don't know my sales cycle" → use defaults from references/sales-velocity-benchmarks.md.
Ask user to export from HubSpot:
Save as CSV. If user pastes the list, parse it directly.
For each deal, compute:
days_in_current_stage = today - stage_entry_date
days_since_activity = today - last_contacted_date
stage_health = days_in_current_stage / avg_time_for_stage
if stage_health < 2 and days_since_activity ≤ 14: HEALTHY
if stage_health < 2 and days_since_activity > 14: NUDGE
if stage_health ≥ 2 and days_since_activity ≤ 14: STUCK
if stage_health ≥ 2 and days_since_activity > 14: DEADFor each category, recommend specific actions:
🟢 HEALTHY — No action. List them only.
🟡 NUDGE — One-liner per deal: "Email [Contact] re: [last context]". Group by owner.
🟠 STUCK — These need a coach-the-rep conversation. Surface the pattern:
🔴 DEAD — Recommend close-lost with reason. Ask user to confirm before bulk-closing.
After classification, show:
Pipeline before cleanup: $X across N deals
After removing DEAD: $Y across M deals (more accurate forecast)
Recovered hours: estimated X hours/month rep time wasted on dead dealsHubSpot's default close-lost reasons are too generic ("No decision", "Went with competitor"). They tell you nothing.
Push for specifics:
See references/close-lost-taxonomy.md for the actionable taxonomy.
This skill should run every quarter at minimum. Suggest the user calendar:
| Symptom | Likely cause | First action |
|---|---|---|
| Forecast keeps slipping | Stale deals inflating coverage | Run this cleanup |
| Reps say "pipeline is full" but no closes | Quality vs. quantity issue | Filter by deal age |
| Same deal name appears 3x | Duplicate / re-entry | HubSpot dedupe tool |
| All deals close-date = end of quarter | Wishful thinking | Force per-deal date based on actual stage |
| Win rate dropping | Stuck deals diluting wins | Cleanup + qualification refresh |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.