
Lead Triage
- 1k installs
- 23.3k repo stars
- Updated August 5, 2026
- anthropics/knowledge-work-plugins
Lead-triage is a Claude skill that scores inbound HubSpot leads by engagement, fit, and urgency to produce a ranked call list with talking points and draft follow-ups.
About
Lead-triage pulls inbound HubSpot leads and scores each one on engagement, company fit, urgency, and recency to produce a ranked 'call these today' list with talking points. A developer or SMB owner uses it to decide who to call first instead of manually reading the pipeline. It also drafts follow-up emails and proposes calendar slots, but never sends mail or books events without approval.
- Scores inbound HubSpot leads across engagement, company fit, urgency and recency into a ranked call list
- Drafts follow-up emails and proposes calendar slots but never sends or books without owner approval
- Adapts list size to lead volume (all / top 5 / top 8)
Lead Triage by the numbers
- 1,033 all-time installs (skills.sh)
- +84 installs in the week ending Aug 5, 2026 (Skillselion tracking)
- Ranked #79 of 853 Sales & Marketing skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
lead-triage capabilities & compatibility
- Capabilities
- sales brief · run campaign
- Works with
- gmail
- Use cases
- marketing · email
What lead-triage says it does
Pull inbound leads from HubSpot, score them, and surface a ranked call list with talking points.
Never send an email.** Draft only; owner sends from their inbox.
npx skills add https://github.com/anthropics/knowledge-work-plugins --skill lead-triageAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 1k |
|---|---|
| repo stars | ★ 23.3k |
| Last updated | August 5, 2026 |
| Repository | anthropics/knowledge-work-plugins ↗ |
What it does
Prioritize inbound HubSpot leads into a ranked call list with talking points and draft follow-ups.
Who is it for?
Owners using HubSpot who need to prioritize which inbound leads to contact today.
Skip if: Teams that want the skill to auto-send emails or auto-book meetings.
When should I use this skill?
The user asks to prioritize leads, who to call first, or about their pipeline.
What you get
A ranked call list with per-lead talking points, optional draft follow-ups, and proposed calendar slots.
- ranked lead call list
- draft follow-up emails
- proposed calendar slots
By the numbers
- four-dimension scoring model
- top 8 shown when >30 leads
Files
Lead Triage
Quick start
Pull inbound leads from HubSpot, score them, and surface a ranked call list with talking points. Drafts follow-ups and proposes calendar slots — never sends or books without owner approval.
User: "prioritize my leads"
→ Pull contacts: lifecycle stage Lead or MQL, status ≠ Unqualified
→ Score each across engagement, company fit, urgency, recency
→ Return ranked list (size adapts to volume) with talking points
→ Offer to draft follow-ups and propose calendar slotsWorkflow
1. Pull leads from HubSpot. Fetch contacts with lifecyclestage = Lead or MQL and hs_lead_status ≠ Unqualified. Use the field list in reference/hubspot-scoring.md. If HubSpot is unavailable, stop: "HubSpot is disconnected — connect it and try again."
2. Clarify if trigger is ambiguous. If the user said only "pipeline" without a qualifier, ask: "Quick pipeline overview (deal stages + total value) or prioritized call list?" — then route accordingly. Do not score leads on a bare "pipeline."
3. Score each lead. Apply the four-dimension model in reference/hubspot-scoring.md:
- Engagement — email replies, opens, site visits in HubSpot (last 30 days only)
- Company fit — industry and employee count vs. owner's ICP (default: any industry, 1–50 employees)
- Urgency — lead age, stage duration, notes containing "urgent / ASAP / deadline / budget approved"
- Recency penalty — subtract points if last activity was <24 hours ago (already touched today)
4. Build the ranked list. Sort descending by composite score. Adapt list size to volume:
- ≤10 leads → show all
- 11–30 leads → show top 5
- >30 leads → show top 8
For each lead: name, company, score, one-paragraph talking point, last activity summary. If engagement signals are all >30 days old, flag: "Engagement signals are stale — approach as cold outreach."
5. Offer follow-up drafts. Ask: "Draft follow-ups for any of these?" If yes, write one email per selected lead, matching the tone of their last outbound thread in Mail. Show draft; do not send.
6. Offer calendar slots. Ask: "Propose call slots for any of these?" If yes, check Calendar for open 30-minute windows in the next two business days (avoid slots with existing events ±15 min). Propose two options per lead. Do not create events — the owner books.
Approval gates
- Never send an email. Draft only; owner sends from their inbox.
- Never create calendar events. Propose times; owner books.
- Never change lifecycle stage or mark a lead Unqualified unless the owner explicitly asks.
- Never include `Customer` or `Evangelist` lifecycle contacts in the lead list.
- If zero leads match the filter, explain why and offer to check what lifecycle stages are in use — do not fabricate a list.
Reference
- reference/hubspot-scoring.md — HubSpot field names, scoring weights, ICP defaults
- reference/gotchas.md — edge cases: stale data, zero leads, pipeline disambiguation, customer contamination
- reference/examples/happy-path-triage.md — worked output for a 7-lead list with draft and slot proposal
Example: Happy-path triage — 7-lead list
7 leads → show all (≤10 rule). Owner ICP: SaaS, 10–50 employees.
---
Ranked output
Here are your 7 leads, ranked by priority:
─────────────────────────────────────
1. Sarah Chen · Acme SaaS · Score: 78
Last activity: 2 days ago (email reply)
Sarah replied asking about API limits — evaluating for a 22-person team.
Strong ICP fit. Lead is 12 days old (prime window). Open with her API
question; offer a 20-min demo to walk through limits live.
2. Marcus Webb · Loop Analytics · Score: 64
Last activity: 5 days ago (site visit)
Visited pricing page twice this week, no reply to outreach. 31 employees,
SaaS — good fit. Try a softer touch: share a case study instead of another
demo ask.
3. Priya Nair · BuildFast · Score: 51
Last activity: 9 days ago (email open)
Opened the intro email, no reply. 18 days old — approaching stale. One
more value-add touch (ROI one-pager) before deprioritizing.
[4–7 follow same format, scores 30–45]
─────────────────────────────────────
Draft follow-ups for any of these? (e.g., "draft for 1 and 2")
Propose call slots? (e.g., "find times for Sarah and Marcus")---
Follow-up draft — Sarah Chen
Subject: Re: API limits question
Hi Sarah,
Happy to answer the API limits question properly on a short call rather
than over email.
[Owner adds availability after booking]
Would that work?
[Owner name]Draft shown. Not sent.
---
Calendar proposal — Sarah Chen
Open 30-min slots (next 2 business days):
• Thu Apr 25 · 10:00–10:30 AM
• Thu Apr 25 · 2:00–2:30 PM
• Fri Apr 26 · 9:00–9:30 AM
No events created — pick one and book it directly.Gotchas — lead-triage
---
Gotcha: "Pipeline" bare trigger runs full scoring when user just wants a status check
Why it matters: "Pipeline" alone is ambiguous — the owner may want deal-stage totals, not a scored call list.
✗ Bad
User: "how's my pipeline?"
Claude: [runs full scoring, returns 12-lead ranked list]✓ Good
User: "how's my pipeline?"
Claude: "Quick pipeline overview (deal stages + total value) or prioritized
call list for today?"---
Gotcha: Stale engagement data inflates scores
Why it matters: hs_email_open is cumulative — opens from a year-old campaign make a cold lead look hot.
✗ Bad
Lead has 20 opens (all 11 months ago). Scores 25/25 on engagement.
Appears as #1. Owner calls; lead has no memory of the brand.✓ Good
Cap engagement signals at 30 days. If all signals are older than 30 days,
engagement score = 0 and talking point notes:
"Engagement signals are stale (last: [date]) — approach as cold outreach."---
Gotcha: Customers appear in the lead list
Why it matters: Calling a Customer or Evangelist as a lead prospect is embarrassing.
✗ Bad
Lifecycle filter not applied → existing customer appears as #2 on the list.✓ Good
Filter strictly: lifecyclestage = Lead or MQL only.
If a contact has a blank lifecycle stage, include with a warning flag:
"⚠ Lifecycle stage not set — confirm this is a lead before calling."---
Gotcha: Proposing calendar slots that conflict with existing events
Why it matters: Proposing a time the owner is already booked erodes trust immediately.
✗ Bad
Claude proposes "Tuesday 2–2:30 PM" without checking Calendar.
Owner already has a client call in that slot.✓ Good
Fetch Calendar for next two business days before proposing any slot.
Only propose windows with no existing events ±15 minutes buffer.
If no free window exists, say so and offer to look further out.HubSpot Scoring — lead-triage
Field names, scoring weights, and ICP defaults.
---
Fields to pull
| HubSpot field | Used for |
|---|---|
firstname, lastname | Display |
company | Display + ICP match |
email | Follow-up draft recipient |
lifecyclestage | Filter (keep Lead, MQL) |
hs_lead_status | Filter (exclude Unqualified) |
industry | Company fit |
numemployees | Company fit — employee count on contact record. Often null; if null, treat as unknown and score accordingly. |
createdate | Urgency — lead age |
hs_last_activity_date | Recency penalty |
notes_last_updated | Urgency — note recency |
hs_sales_email_last_replied | Engagement — reply signal |
hs_email_open | Engagement — open count (use only if within 30 days) |
hs_analytics_last_visit_timestamp | Engagement — site visit |
num_contacted_notes | Engagement — outreach volume |
---
Scoring model (0–100 composite)
Four dimensions, each 0–25. Sum for composite.
Engagement (0–25)
Only count signals from the last 30 days. Older signals score 0.
| Signal | Points |
|---|---|
| Email reply in last 14 days | +15 |
| Email open in last 7 days (no reply) | +8 |
| Site visit in last 7 days | +5 |
| >3 outreach attempts, no reply | −5 |
Company fit (0–25)
Default ICP if owner hasn't stated one: any industry, 1–50 employees.
| Match | Points |
|---|---|
| Industry + size both match ICP | 25 |
| Size matches, industry unknown | 15 |
| Industry matches, size unknown | 12 |
| Neither matches or both unknown | 5 |
Urgency (0–25)
| Signal | Points |
|---|---|
| Note contains "urgent," "ASAP," "deadline," "budget approved" | +15 |
| Lead age 7–21 days (prime follow-up window) | +10 |
| Lead age <7 days | +5 |
| Lead age >60 days | −5 |
Recency penalty (subtracted from composite)
| Last activity | Subtract |
|---|---|
| <24 hours ago | −25 |
| 1–3 days ago | −10 |
| 4–7 days ago | −5 |
| >7 days ago | 0 |
---
Custom ICP (runtime override)
If the owner states an ICP at runtime ("focus on SaaS, 10–100 employees"), apply it for that session only.
Related skills
How it compares
Use lead-triage for inbound prioritization; use crm-maintenance when logging activities to existing deals instead of ranking new leads.
FAQ
Does lead-triage send the follow-up emails for me?
No. It drafts follow-ups and shows them, but the owner sends from their own inbox; it also proposes calendar slots without booking.
What data does it use to score leads?
HubSpot engagement (replies, opens, visits in last 30 days), company fit vs ICP, urgency markers, and a recency penalty for leads touched in the last 24 hours.