Hubspot pipeline cleanup
4-quadrant CRM deal classifier — kills stale deals destroying your forecast. Agent skill.
npx -y skills add fengyiqicoder/hubspot-pipeline-cleanupAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when the user wants to clean up HubSpot (or any CRM — Salesforce, Pipedrive, Close) pipeline, identify stale deals, fix deal stages, or audit pipeline health. Triggers on "my pipeline is a mess", "find stale deals", "clean up HubSpot", "review my deals", "what should I close out", "pipeline review before forecast", "deals stuck in stage X", or running quarterly pipeline hygiene. Also triggers when the user mentions forecast accuracy problems or sales velocity metrics.
SKILL.md
5.7 KB, ~1.3k tokens by cl100k_base, as published. Nobody here has run it
HubSpot Pipeline Cleanup
Overview
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.
The 4-quadrant deal classification
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:
- "Recent activity" = email logged, call logged, meeting completed, or stage change
- "Avg time in stage" = your historical average for that pipeline stage. If unknown, default: Qualification 14d, Demo 21d, Proposal 14d, Negotiation 21d
Workflow
Step 1: Ask the user for context
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.
Step 2: Pull the deal list
Ask user to export from HubSpot:
- All open deals
- Columns: Deal Name, Stage, Amount, Close Date, Last Modified Date, Last Contacted Date, Owner, Stage Entry Date
Save as CSV. If user pastes the list, parse it directly.
Step 3: Classify each deal
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: DEAD
Step 4: Surface the cleanup actions
For 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:
- "3 deals stuck in 'Proposal' for owner X" → maybe rep struggles closing
- "5 deals stuck in 'Demo' across pipeline" → maybe demo doesn't convert; root-cause it
🔴 DEAD — Recommend close-lost with reason. Ask user to confirm before bulk-closing.
Step 5: Forecast clean-up impact
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 deals
The "close-lost reason" trap
HubSpot's default close-lost reasons are too generic ("No decision", "Went with competitor"). They tell you nothing.
Push for specifics:
- ❌ "Lost to competitor" → ✅ "Lost to [Competitor] — they had [specific feature/price]"
- ❌ "Budget" → ✅ "Budget — wanted to stay <$X, our floor was $Y"
- ❌ "Timing" → ✅ "Timing — wanted to wait for [event/quarter]"
See references/close-lost-taxonomy.md for the actionable taxonomy.
Quarterly cleanup ritual
This skill should run every quarter at minimum. Suggest the user calendar:
- Week 1 of quarter: cleanup (this skill)
- Week 2: rep 1:1s on stuck deals
- Week 12: forecast finalization (informed by clean pipeline)
Red flags
- >40% of pipeline is "DEAD" → systemic issue: leads-quality, qualification process, or rep behavior
- Average deal age > 2x sales cycle → forecast is fiction; pipeline coverage ratio meaningless
- One owner has 3x the dead-deal rate → coaching opportunity, not a "lazy rep" judgment
- Recent activity = "task created" only → activity theater, not real engagement
- Deals reopening multiple times → poor qualification at top of funnel
Quick reference
| 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 |
What NOT to do
- Don't mass-close-lost without rep review — you might kill a real deal
- Don't change ownership during cleanup — does more harm than good mid-quarter
- Don't add new mandatory fields during cleanup — pile-on; do it next quarter
- Don't use AI to write the rep coaching message — the rep needs to own the relationship
Gives 0 of the 12 instructions most sales crm skills give in ~1.3k tokens
Counted across 361 of the 361 authors here whose files we hold, read 2026-08-06
- Read product marketing context before writing if it existsin 22 of 361, across 14 files
- keep the ask low-frictionin 16 of 361, across 7 files
- Call RUBE_SEARCH_TOOLS firstin 15 of 361, across 5 files
- personalize every outbound messagein 13 of 361, across 4 files
- confirm connection status is activein 13 of 361, across 4 files
- Keep forwardable blurbs under 100 wordsin 13 of 361, across 4 files
- State if personalization context is missingin 13 of 361, across 4 files
- Cut any sentence that does not drive a replyin 13 of 361, across 4 files
- Use proof instead of adjectivesin 12 of 361, across 3 files
- Use a single, low-friction call to actionin 12 of 361, across 4 files
- Calibrate tone to the specific audiencein 12 of 361, across 3 files
- Make each follow-up email add new valuein 12 of 361, across 6 files
Said here and by no other author read
- ask for pipeline type, sales cycle, known dead deals, and last review date
- use benchmark defaults if sales cycle is unknown
- require an export of all open deals with specified columns
- calculate stage health and days since activity per deal
- classify each open deal as healthy, nudge, stuck, or dead
- recommend specific cleanup actions based on deal classifications
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.