Stale Opportunity Reviver
Find open HubSpot deals that have gone stale, verify contacts are still in their roles, research company news for fresh angles, and generate revival outreach to re-engage dormant pipeline.
Instructions
When a user wants to identify and revive stale opportunities, systematically pull deal data from HubSpot, enrich contacts, research companies, and produce a prioritized revival plan.
Steps
Gather revival parameters by asking the user:
(a) "How many days of inactivity makes a deal stale?" Offer defaults:
- 14 days (aggressive, for fast sales cycles)
- 30 days (standard, for mid-market deals)
- 60 days (conservative, for enterprise deals)
- Custom number of days
(b) "Which deal stages should I look at?" Common options:
- All open stages
- Specific stages (e.g., "Qualification", "Proposal Sent", "Negotiation")
- Exclude early-stage (e.g., skip "Appointment Scheduled")
(c) "Is there a minimum deal amount?" Accept a dollar threshold or "any amount".
(d) "Filter by deal owner?" Accept an owner name/email or "all owners".
Retrieve the current user's identity by calling mcp__claude_ai_HubSpot__get_user_details to get the authenticated user's name, email, and HubSpot user ID. This is needed if the user wants to filter by "my deals" or if you need to resolve owner references.
Discover relevant deal properties by calling mcp__claude_ai_HubSpot__search_properties with:
object_type: "deals"
query: "activity" or "last" to find date fields like notes_last_updated, hs_last_sales_activity_date, hs_lastmodifieddate
Also search for stage and amount properties to confirm their field names:
query: "stage" to confirm dealstage
query: "amount" to confirm amount
This ensures you use the correct property names for filtering and retrieval.
Search for stale deals by calling mcp__claude_ai_HubSpot__search_crm_objects with:
object_type: "deals"
filter_groups: Build filters combining:
- Deal pipeline stage is not "closedwon" and not "closedlost" (open deals only)
- Last activity date is before the staleness threshold (today minus X days)
- Amount is greater than or equal to the minimum (if specified)
- Owner ID matches the specified owner (if specified)
properties: ["dealname", "amount", "dealstage", "pipeline", "hubspot_owner_id", "hs_lastmodifieddate", "notes_last_updated", "hs_last_sales_activity_date", "closedate", "createdate"]
limit: 50
If the user specified deal stages, add a dealstage filter with operator: "IN" and the matching stage IDs.
Calculate staleness for each deal. For each returned deal:
- Determine the last activity date from whichever is most recent:
hs_last_sales_activity_date, notes_last_updated, or hs_lastmodifieddate
- Calculate days since last activity
- Sort deals by staleness (most stale first)
Retrieve associated contacts by calling mcp__claude_ai_HubSpot__get_crm_objects with:
object_type: "contacts"
object_ids: IDs of contacts associated with the stale deals
properties: ["firstname", "lastname", "email", "jobtitle", "company", "phone", "hs_lead_status"]
associations: ["deals"]
Alternatively, for each deal, call mcp__claude_ai_HubSpot__search_crm_objects with object_type: "contacts" and filter by associated deal ID to find related contacts.
Resolve deal owners by calling mcp__claude_ai_HubSpot__search_owners with the hubspot_owner_id values from the deals to get owner names and emails. This maps owner IDs to human-readable names for the output.
Enrich contacts to verify current status by calling mcp__claude_ai_Amplemarket__enrich_person for the primary contact on each stale deal (limit to top 10-15 deals to manage credit usage):
- Use
email or linkedin_url from the HubSpot contact record
- Set
reveal_email: true
- Compare the enriched current company and title against the HubSpot record
- Flag contacts who have left the company. These deals need a new contact strategy
Research company news for revival hooks by calling WebSearch for the top 10 stale deal companies:
- Query: "[Company Name] news [current year]" or "[Company Name] announcement [current quarter]"
- Look for trigger events: new funding, product launches, leadership changes, expansion, earnings reports
- These provide fresh conversation starters for re-engagement
Build the prioritized revival list. Score each stale deal on revival priority:
High Priority: Large deal + contact still there + recent company news (fresh hook available)
Medium Priority: Moderate deal + contact still there but no news, OR large deal but contact has left
Low Priority: Small deal + no news + contact may have left
Present the output with:
Executive summary (total stale deals, total pipeline value at risk, distribution by priority)
Priority-ordered deal table with all dynamic fields
Per-deal revival recommendations with suggested openers
Flagged deals where the contact has left (need new champion)
Important Notes
- Limit
enrich_person calls to the top 10-15 deals by amount to manage Amplemarket credit usage. For larger batches, warn the user: "I found X stale deals. Enriching all contacts would use X credits. Shall I focus on the top 10-15 by deal size?"
- If the HubSpot account uses custom deal stages, the stage names may not match standard labels. Use
search_properties to discover the actual stage values.
- Deals with no associated contacts should be flagged separately: "This deal has no contacts. It may need manual review in HubSpot."
- The staleness calculation depends on which activity date fields are populated. If
hs_last_sales_activity_date is empty, fall back to notes_last_updated, then hs_lastmodifieddate.
- When a contact has left the company, do not suggest re-engaging them at the old company. Instead, recommend finding a replacement contact or using the deal-contact-gap-analysis skill.
Dynamic Fields Generated
The following dynamic fields are populated for each stale deal and can be used in revival outreach templates:
| Field |
Description |
Example Value |
{{deal_name}} |
Name of the stale HubSpot deal |
"Acme Corp - Enterprise License" |
{{deal_amount}} |
Deal value in dollars |
"$125,000" |
{{deal_stage}} |
Current deal pipeline stage |
"Proposal Sent" |
{{deal_days_stale}} |
Number of days since last activity |
"47 days" |
{{deal_contact_name}} |
Primary contact name on the deal |
"Sarah Martinez" |
{{deal_contact_still_there}} |
Whether the contact is still at the company |
"Yes - same role" or "No - left company" |
{{deal_company_recent_news}} |
Recent company news or trigger events |
"Raised $40M Series C in Feb 2026" |
{{deal_revival_hook}} |
A relevant hook based on news or context |
"Post-funding scaling initiatives" |
{{deal_suggested_opener}} |
Personalized opening line for re-engagement |
"Hi Sarah, saw Acme just closed your Series C. Congrats!..." |
{{deal_owner}} |
Name of the deal owner in HubSpot |
"James Rodriguez" |
{{deal_last_activity_date}} |
Date of the last recorded activity |
"2026-01-21" |
{{deal_contact_current_title}} |
Contact's current verified title from enrichment |
"VP of Operations" |
{{deal_pipeline_value_at_risk}} |
Total value of stale pipeline for this owner |
"$485,000" |
Examples
Example 1: Standard 30-Day Stale Deal Review
User prompt: "Find my deals with no activity in the last 30 days. My email is jrodriguez@ourcompany.com"
What the skill does:
- Calls
mcp__claude_ai_HubSpot__get_user_details to confirm the user identity.
- Calls
mcp__claude_ai_HubSpot__search_properties with object_type: "deals", query: "activity" to find the correct last-activity date field.
- Calls
mcp__claude_ai_HubSpot__search_crm_objects with object_type: "deals", filtering for open deals owned by jrodriguez@ourcompany.com with last activity before 2026-02-07.
- Calls
mcp__claude_ai_HubSpot__get_crm_objects for associated contacts.
- Calls
mcp__claude_ai_HubSpot__search_owners to resolve owner names.
- Calls
mcp__claude_ai_Amplemarket__enrich_person for the primary contact on the top 10 deals.
- Calls
WebSearch for recent news on each deal's company.
- Produces the prioritized revival list.
Example output:
STALE OPPORTUNITY REPORT - James Rodriguez
Executive Summary
- Stale deals (30+ days no activity): 8
- Total pipeline at risk: $742,000
- High priority: 3 | Medium priority: 3 | Low priority: 2
- Contacts who left their company: 1 (needs new champion)
Priority Revival Table
| Priority |
Deal |
Amount |
Stage |
Days Stale |
Contact |
Still There? |
Revival Hook |
Suggested Opener |
| High |
Acme Corp - Enterprise |
$185,000 |
Negotiation |
34 days |
Sarah Martinez, VP Ops |
Yes |
Raised $40M Series C (Feb 2026) |
"Hi Sarah, congrats on the Series C. With the growth ahead, I'd love to revisit our conversation about scaling operations." |
| High |
TechFlow - Platform Deal |
$210,000 |
Proposal Sent |
41 days |
Kevin Park, CTO |
Yes |
Launched new API marketplace |
"Kevin, saw TechFlow just launched the API marketplace. That aligns perfectly with what we discussed. Worth revisiting?" |
| High |
DataSync - Annual License |
$125,000 |
Qualification |
38 days |
Maya Patel, Dir Eng |
Yes |
New CTO hired (Jan 2026) |
"Hi Maya, noticed DataSync brought on a new CTO. New leadership often means fresh priorities. Shall we reconnect?" |
| Medium |
CloudBase - Starter |
$92,000 |
Demo Scheduled |
45 days |
Tom Rivera, VP Sales |
Yes |
No recent news |
"Tom, we had a great demo conversation last month. Wanted to check if priorities have shifted or if there's a better time to reconnect." |
| Medium |
FinServ - Expansion |
$65,000 |
Proposal Sent |
52 days |
Rachel Kim, CFO |
No - left company |
N/A |
Flag: Contact has left. Find new champion via deal-contact-gap-analysis. |
| Medium |
NovaTech - Pilot |
$35,000 |
Qualification |
37 days |
Alex Wu, Head of IT |
Yes |
Office expansion to Austin |
"Alex, saw NovaTech is expanding to Austin. Scaling infrastructure across locations is exactly where we help." |
| Low |
SmallCo - Starter |
$15,000 |
Appointment Set |
60 days |
Jamie Lee, Founder |
Yes |
No recent news |
"Hi Jamie, wanted to follow up on our conversation. Is this still a priority for your team?" |
| Low |
MicroTech - Basic |
$15,000 |
Qualification |
55 days |
Chris Tan, CEO |
Yes |
No recent news |
"Chris, checking in on our earlier conversation. Has anything changed on your end?" |
Action Items:
- FinServ deal ($65K) needs a new contact. Rachel Kim has left the company. Use deal-contact-gap-analysis to find a replacement.
- Top 3 deals represent $520K in pipeline. Prioritize revival outreach this week.
- TechFlow and DataSync both have strong trigger events. They are the best candidates for immediate re-engagement.
Example 2: Enterprise Deals Over $100K Stale for 60+ Days
User prompt: "Which opportunities over $100K have been stuck for more than 60 days? Show me across all reps."
What the skill does:
- Calls
mcp__claude_ai_HubSpot__get_user_details to get authenticated user context.
- Calls
mcp__claude_ai_HubSpot__search_properties to discover activity date fields.
- Calls
mcp__claude_ai_HubSpot__search_crm_objects filtering for open deals with amount >= 100000 and last activity before 60 days ago, without owner filter.
- Resolves all deal owners via
mcp__claude_ai_HubSpot__search_owners.
- Enriches top contacts and searches for company news.
- Groups results by deal owner for management review.
Example output (abbreviated):
STALE ENTERPRISE DEALS - All Owners (60+ Days, $100K+)
Summary: 5 deals | $1.2M total pipeline at risk | 3 owners affected
| Owner |
Deal |
Amount |
Days Stale |
Contact Status |
Revival Hook |
| James Rodriguez |
Acme Corp - Enterprise |
$185,000 |
64 days |
Still there |
Series C funding |
| Lisa Chen |
MegaCorp - Platform |
$350,000 |
72 days |
Still there |
New VP of Engineering hired |
| Lisa Chen |
GlobalTech - Suite |
$280,000 |
88 days |
Left company |
Need new champion |
| David Park |
EnterpriseOne - License |
$245,000 |
69 days |
Still there |
Expansion to EMEA |
| David Park |
BigScale - Annual |
$140,000 |
91 days |
Still there |
No recent news |
Owner Breakdown:
- Lisa Chen: 2 stale deals ($630K). GlobalTech contact has left. Assign new champion immediately. MegaCorp has a strong hook with the new VP Eng hire.
- David Park: 2 stale deals ($385K). EnterpriseOne EMEA expansion is a timely hook. BigScale needs a creative re-approach.
- James Rodriguez: 1 stale deal ($185K). Series C funding provides a natural re-entry point.
Recommended Management Actions:
- Schedule pipeline review with Lisa Chen. $630K at risk across 2 deals, one with a departed contact.
- Prioritize MegaCorp and EnterpriseOne for immediate outreach. Both have strong trigger events.
- BigScale ($140K, 91 days stale) may need to be reclassified. Consider whether it is still a viable opportunity.
- Consider running a team-wide stale deal review weekly to catch deals before they exceed 60 days of inactivity.
Example 3: Stale Deals in Specific Stage
User prompt: "Find deals stuck in Proposal Sent stage for more than 14 days"
What the skill does:
- Calls
mcp__claude_ai_HubSpot__get_user_details.
- Calls
mcp__claude_ai_HubSpot__search_properties with query: "stage" to find the stage property and its options.
- Calls
mcp__claude_ai_HubSpot__search_crm_objects filtering for dealstage = "proposalpendingreview" (or equivalent ID) and last activity > 14 days ago.
- Enriches contacts and researches companies.
- Presents results focused on proposal follow-up strategies.
Example output (abbreviated):
STALE PROPOSALS - Deals in "Proposal Sent" (14+ Days)
Summary: 6 deals stuck in proposal stage | $430K total value
| Deal |
Amount |
Days Since Proposal |
Contact |
Suggested Follow-Up |
| Acme Corp |
$125,000 |
18 days |
Sarah Martinez |
Reference their Series C and offer a revised timeline aligned with growth plans |
| CloudBase |
$92,000 |
22 days |
Tom Rivera |
Ask if there are specific concerns or if a technical deep-dive would help |
| DataPipe |
$78,000 |
16 days |
Jordan Lee |
Share a relevant case study from their industry |
Troubleshooting
| Problem |
Solution |
| No stale deals found |
Fallback chain: 1) Verify the staleness threshold. 14 days may be too aggressive for enterprise cycles. Try extending to 30 or 60 days. 2) Check that hs_last_sales_activity_date is populated in HubSpot. Some accounts track activity differently. Try filtering on hs_lastmodifieddate instead. 3) Remove the deal amount filter to check if deals exist below the threshold. 4) Remove the owner filter to search across all reps. |
| Activity date fields are empty |
Some HubSpot configurations do not populate hs_last_sales_activity_date. Call mcp__claude_ai_HubSpot__search_properties with query: "date" or "modified" to discover alternative date fields. Fall back to hs_lastmodifieddate which is always populated but includes system updates, not just sales activity. |
| Deal stage IDs do not match expected names |
HubSpot uses internal stage IDs (e.g., "appointmentscheduled") rather than display names. Call mcp__claude_ai_HubSpot__search_properties with query: "dealstage" to retrieve the property definition including all stage options with their internal values and labels. Map user-provided stage names to internal IDs before filtering. |
| Contact enrichment shows different company |
This means the contact has left the deal company. Flag the deal as needing a new champion. Suggest the user find a replacement via the deal-contact-gap-analysis skill or manually update the HubSpot contact. Do not suggest re-engaging the contact at the old company. |
| Too many stale deals returned (50+) |
Apply stricter filters: increase the minimum amount, narrow to specific stages, or filter by owner. Offer to batch: "I found X stale deals. Shall I focus on the top 15 by deal value and enrich those first?" |
| Owner ID cannot be resolved |
If mcp__claude_ai_HubSpot__search_owners returns no results for an owner ID, display the raw ID and note: "Owner could not be resolved. This may be a deactivated user or an integration-created record." |
| WebSearch returns no company news |
This is common for smaller or private companies. Set {{deal_company_recent_news}} to "No recent public news found" and use a generic revival opener based on the deal context instead. Suggest the user check the company's LinkedIn page for recent posts. |
| Deal has no associated contacts |
Flag the deal separately: "This deal has no contacts in HubSpot. It cannot be revived without a contact. Consider adding a contact manually or searching for decision-makers via Amplemarket." |
1---2name: stale-opportunity-reviver3description: Find open HubSpot deals that have gone stale, verify contacts are still in their roles, research company news for fresh angles, and generate revival outreach to re-engage dormant pipeline.4---5
6# Stale Opportunity Reviver
7
8Find open HubSpot deals that have gone stale, verify contacts are still in their roles, research company news for fresh angles, and generate revival outreach to re-engage dormant pipeline.
9
10## Instructions
11
12When a user wants to identify and revive stale opportunities, systematically pull deal data from HubSpot, enrich contacts, research companies, and produce a prioritized revival plan.
13
14### Steps
15
161. **Gather revival parameters** by asking the user:
17
18 **(a) "How many days of inactivity makes a deal stale?"** Offer defaults:
19
20 - 14 days (aggressive, for fast sales cycles)
21 - 30 days (standard, for mid-market deals)
22 - 60 days (conservative, for enterprise deals)
23 - Custom number of days
24
25 **(b) "Which deal stages should I look at?"** Common options:
26
27 - All open stages
28 - Specific stages (e.g., "Qualification", "Proposal Sent", "Negotiation")
29 - Exclude early-stage (e.g., skip "Appointment Scheduled")
30
31 **(c) "Is there a minimum deal amount?"** Accept a dollar threshold or "any amount".
32
33 **(d) "Filter by deal owner?"** Accept an owner name/email or "all owners".
34
352. **Retrieve the current user's identity** by calling `mcp__claude_ai_HubSpot__get_user_details` to get the authenticated user's name, email, and HubSpot user ID. This is needed if the user wants to filter by "my deals" or if you need to resolve owner references.
363. **Discover relevant deal properties** by calling `mcp__claude_ai_HubSpot__search_properties` with:
37 - `object_type`: "deals"
38 - `query`: "activity" or "last" to find date fields like `notes_last_updated`, `hs_last_sales_activity_date`, `hs_lastmodifieddate`
39
40 Also search for stage and amount properties to confirm their field names:
41
42 - `query`: "stage" to confirm `dealstage`
43 - `query`: "amount" to confirm `amount`
44
45 This ensures you use the correct property names for filtering and retrieval.
46
474. **Search for stale deals** by calling `mcp__claude_ai_HubSpot__search_crm_objects` with:
48 - `object_type`: "deals"
49 - `filter_groups`: Build filters combining:
50 - Deal pipeline stage is not "closedwon" and not "closedlost" (open deals only)
51 - Last activity date is before the staleness threshold (today minus X days)
52 - Amount is greater than or equal to the minimum (if specified)
53 - Owner ID matches the specified owner (if specified)
54 - `properties`: ["dealname", "amount", "dealstage", "pipeline", "hubspot_owner_id", "hs_lastmodifieddate", "notes_last_updated", "hs_last_sales_activity_date", "closedate", "createdate"]
55 - `limit`: 50
56
57 If the user specified deal stages, add a `dealstage` filter with `operator`: "IN" and the matching stage IDs.
58
595. **Calculate staleness for each deal.** For each returned deal:
60 - Determine the last activity date from whichever is most recent: `hs_last_sales_activity_date`, `notes_last_updated`, or `hs_lastmodifieddate`
61 - Calculate days since last activity
62 - Sort deals by staleness (most stale first)
636. **Retrieve associated contacts** by calling `mcp__claude_ai_HubSpot__get_crm_objects` with:
64 - `object_type`: "contacts"
65 - `object_ids`: IDs of contacts associated with the stale deals
66 - `properties`: ["firstname", "lastname", "email", "jobtitle", "company", "phone", "hs_lead_status"]
67 - `associations`: ["deals"]
68
69 Alternatively, for each deal, call `mcp__claude_ai_HubSpot__search_crm_objects` with `object_type`: "contacts" and filter by associated deal ID to find related contacts.
70
717. **Resolve deal owners** by calling `mcp__claude_ai_HubSpot__search_owners` with the `hubspot_owner_id` values from the deals to get owner names and emails. This maps owner IDs to human-readable names for the output.
728. **Enrich contacts to verify current status** by calling `mcp__claude_ai_Amplemarket__enrich_person` for the primary contact on each stale deal (limit to top 10-15 deals to manage credit usage):
73 - Use `email` or `linkedin_url` from the HubSpot contact record
74 - Set `reveal_email`: true
75 - Compare the enriched current company and title against the HubSpot record
76 - Flag contacts who have left the company. These deals need a new contact strategy
779. **Research company news for revival hooks** by calling `WebSearch` for the top 10 stale deal companies:
78 - Query: "[Company Name] news [current year]" or "[Company Name] announcement [current quarter]"
79 - Look for trigger events: new funding, product launches, leadership changes, expansion, earnings reports
80 - These provide fresh conversation starters for re-engagement
8110. **Build the prioritized revival list.** Score each stale deal on revival priority:
82- **High Priority:** Large deal + contact still there + recent company news (fresh hook available)
83- **Medium Priority:** Moderate deal + contact still there but no news, OR large deal but contact has left
84- **Low Priority:** Small deal + no news + contact may have left
85
86 Present the output with:
87
88- Executive summary (total stale deals, total pipeline value at risk, distribution by priority)
89- Priority-ordered deal table with all dynamic fields
90- Per-deal revival recommendations with suggested openers
91- Flagged deals where the contact has left (need new champion)
92
93### Important Notes
94
95- Limit `enrich_person` calls to the top 10-15 deals by amount to manage Amplemarket credit usage. For larger batches, warn the user: "I found X stale deals. Enriching all contacts would use X credits. Shall I focus on the top 10-15 by deal size?"
96- If the HubSpot account uses custom deal stages, the stage names may not match standard labels. Use `search_properties` to discover the actual stage values.
97- Deals with no associated contacts should be flagged separately: "This deal has no contacts. It may need manual review in HubSpot."
98- The staleness calculation depends on which activity date fields are populated. If `hs_last_sales_activity_date` is empty, fall back to `notes_last_updated`, then `hs_lastmodifieddate`.
99- When a contact has left the company, do not suggest re-engaging them at the old company. Instead, recommend finding a replacement contact or using the deal-contact-gap-analysis skill.
100
101## Dynamic Fields Generated
102
103The following dynamic fields are populated for each stale deal and can be used in revival outreach templates:
104
105| Field | Description | Example Value |
106| --- | --- | --- |
107| `{{deal_name}}` | Name of the stale HubSpot deal | "Acme Corp - Enterprise License" |
108| `{{deal_amount}}` | Deal value in dollars | "$125,000" |
109| `{{deal_stage}}` | Current deal pipeline stage | "Proposal Sent" |
110| `{{deal_days_stale}}` | Number of days since last activity | "47 days" |
111| `{{deal_contact_name}}` | Primary contact name on the deal | "Sarah Martinez" |
112| `{{deal_contact_still_there}}` | Whether the contact is still at the company | "Yes - same role" or "No - left company" |
113| `{{deal_company_recent_news}}` | Recent company news or trigger events | "Raised $40M Series C in Feb 2026" |
114| `{{deal_revival_hook}}` | A relevant hook based on news or context | "Post-funding scaling initiatives" |
115| `{{deal_suggested_opener}}` | Personalized opening line for re-engagement | "Hi Sarah, saw Acme just closed your Series C. Congrats!..." |
116| `{{deal_owner}}` | Name of the deal owner in HubSpot | "James Rodriguez" |
117| `{{deal_last_activity_date}}` | Date of the last recorded activity | "2026-01-21" |
118| `{{deal_contact_current_title}}` | Contact's current verified title from enrichment | "VP of Operations" |
119| `{{deal_pipeline_value_at_risk}}` | Total value of stale pipeline for this owner | "$485,000" |
120
121## Examples
122
123### Example 1: Standard 30-Day Stale Deal Review
124
125**User prompt:** "Find my deals with no activity in the last 30 days. My email is jrodriguez@ourcompany.com"
126
127**What the skill does:**
1281. Calls `mcp__claude_ai_HubSpot__get_user_details` to confirm the user identity.
1292. Calls `mcp__claude_ai_HubSpot__search_properties` with `object_type`: "deals", `query`: "activity" to find the correct last-activity date field.
1303. Calls `mcp__claude_ai_HubSpot__search_crm_objects` with `object_type`: "deals", filtering for open deals owned by jrodriguez@ourcompany.com with last activity before 2026-02-07.
1314. Calls `mcp__claude_ai_HubSpot__get_crm_objects` for associated contacts.
1325. Calls `mcp__claude_ai_HubSpot__search_owners` to resolve owner names.
1336. Calls `mcp__claude_ai_Amplemarket__enrich_person` for the primary contact on the top 10 deals.
1347. Calls `WebSearch` for recent news on each deal's company.
1358. Produces the prioritized revival list.
136
137**Example output:**
138
139---
140
141**STALE OPPORTUNITY REPORT - James Rodriguez**
142
143**Executive Summary**
144- Stale deals (30+ days no activity): 8
145- Total pipeline at risk: $742,000
146- High priority: 3 | Medium priority: 3 | Low priority: 2
147- Contacts who left their company: 1 (needs new champion)
148
149**Priority Revival Table**
150
151| Priority | Deal | Amount | Stage | Days Stale | Contact | Still There? | Revival Hook | Suggested Opener |
152| --- | --- | --- | --- | --- | --- | --- | --- | --- |
153| High | Acme Corp - Enterprise | $185,000 | Negotiation | 34 days | Sarah Martinez, VP Ops | Yes | Raised $40M Series C (Feb 2026) | "Hi Sarah, congrats on the Series C. With the growth ahead, I'd love to revisit our conversation about scaling operations." |
154| High | TechFlow - Platform Deal | $210,000 | Proposal Sent | 41 days | Kevin Park, CTO | Yes | Launched new API marketplace | "Kevin, saw TechFlow just launched the API marketplace. That aligns perfectly with what we discussed. Worth revisiting?" |
155| High | DataSync - Annual License | $125,000 | Qualification | 38 days | Maya Patel, Dir Eng | Yes | New CTO hired (Jan 2026) | "Hi Maya, noticed DataSync brought on a new CTO. New leadership often means fresh priorities. Shall we reconnect?" |
156| Medium | CloudBase - Starter | $92,000 | Demo Scheduled | 45 days | Tom Rivera, VP Sales | Yes | No recent news | "Tom, we had a great demo conversation last month. Wanted to check if priorities have shifted or if there's a better time to reconnect." |
157| Medium | FinServ - Expansion | $65,000 | Proposal Sent | 52 days | Rachel Kim, CFO | No - left company | N/A | Flag: Contact has left. Find new champion via deal-contact-gap-analysis. |
158| Medium | NovaTech - Pilot | $35,000 | Qualification | 37 days | Alex Wu, Head of IT | Yes | Office expansion to Austin | "Alex, saw NovaTech is expanding to Austin. Scaling infrastructure across locations is exactly where we help." |
159| Low | SmallCo - Starter | $15,000 | Appointment Set | 60 days | Jamie Lee, Founder | Yes | No recent news | "Hi Jamie, wanted to follow up on our conversation. Is this still a priority for your team?" |
160| Low | MicroTech - Basic | $15,000 | Qualification | 55 days | Chris Tan, CEO | Yes | No recent news | "Chris, checking in on our earlier conversation. Has anything changed on your end?" |
161
162**Action Items:**
1631. FinServ deal ($65K) needs a new contact. Rachel Kim has left the company. Use deal-contact-gap-analysis to find a replacement.
1642. Top 3 deals represent $520K in pipeline. Prioritize revival outreach this week.
1653. TechFlow and DataSync both have strong trigger events. They are the best candidates for immediate re-engagement.
166
167---
168
169### Example 2: Enterprise Deals Over $100K Stale for 60+ Days
170
171**User prompt:** "Which opportunities over $100K have been stuck for more than 60 days? Show me across all reps."
172
173**What the skill does:**
1741. Calls `mcp__claude_ai_HubSpot__get_user_details` to get authenticated user context.
1752. Calls `mcp__claude_ai_HubSpot__search_properties` to discover activity date fields.
1763. Calls `mcp__claude_ai_HubSpot__search_crm_objects` filtering for open deals with amount >= 100000 and last activity before 60 days ago, without owner filter.
1774. Resolves all deal owners via `mcp__claude_ai_HubSpot__search_owners`.
1785. Enriches top contacts and searches for company news.
1796. Groups results by deal owner for management review.
180
181**Example output (abbreviated):**
182
183---
184
185**STALE ENTERPRISE DEALS - All Owners (60+ Days, $100K+)**
186
187Summary: 5 deals | $1.2M total pipeline at risk | 3 owners affected
188
189| Owner | Deal | Amount | Days Stale | Contact Status | Revival Hook |
190| --- | --- | --- | --- | --- | --- |
191| James Rodriguez | Acme Corp - Enterprise | $185,000 | 64 days | Still there | Series C funding |
192| Lisa Chen | MegaCorp - Platform | $350,000 | 72 days | Still there | New VP of Engineering hired |
193| Lisa Chen | GlobalTech - Suite | $280,000 | 88 days | Left company | Need new champion |
194| David Park | EnterpriseOne - License | $245,000 | 69 days | Still there | Expansion to EMEA |
195| David Park | BigScale - Annual | $140,000 | 91 days | Still there | No recent news |
196
197**Owner Breakdown:**
198- **Lisa Chen:** 2 stale deals ($630K). GlobalTech contact has left. Assign new champion immediately. MegaCorp has a strong hook with the new VP Eng hire.
199- **David Park:** 2 stale deals ($385K). EnterpriseOne EMEA expansion is a timely hook. BigScale needs a creative re-approach.
200- **James Rodriguez:** 1 stale deal ($185K). Series C funding provides a natural re-entry point.
201
202**Recommended Management Actions:**
2031. Schedule pipeline review with Lisa Chen. $630K at risk across 2 deals, one with a departed contact.
2042. Prioritize MegaCorp and EnterpriseOne for immediate outreach. Both have strong trigger events.
2053. BigScale ($140K, 91 days stale) may need to be reclassified. Consider whether it is still a viable opportunity.
2064. Consider running a team-wide stale deal review weekly to catch deals before they exceed 60 days of inactivity.
207
208---
209
210### Example 3: Stale Deals in Specific Stage
211
212**User prompt:** "Find deals stuck in Proposal Sent stage for more than 14 days"
213
214**What the skill does:**
2151. Calls `mcp__claude_ai_HubSpot__get_user_details`.
2162. Calls `mcp__claude_ai_HubSpot__search_properties` with `query`: "stage" to find the stage property and its options.
2173. Calls `mcp__claude_ai_HubSpot__search_crm_objects` filtering for `dealstage` = "proposalpendingreview" (or equivalent ID) and last activity > 14 days ago.
2184. Enriches contacts and researches companies.
2195. Presents results focused on proposal follow-up strategies.
220
221**Example output (abbreviated):**
222
223---
224
225**STALE PROPOSALS - Deals in "Proposal Sent" (14+ Days)**
226
227Summary: 6 deals stuck in proposal stage | $430K total value
228
229| Deal | Amount | Days Since Proposal | Contact | Suggested Follow-Up |
230| --- | --- | --- | --- | --- |
231| Acme Corp | $125,000 | 18 days | Sarah Martinez | Reference their Series C and offer a revised timeline aligned with growth plans |
232| CloudBase | $92,000 | 22 days | Tom Rivera | Ask if there are specific concerns or if a technical deep-dive would help |
233| DataPipe | $78,000 | 16 days | Jordan Lee | Share a relevant case study from their industry |
234
235---
236
237## Troubleshooting
238
239| Problem | Solution |
240| --- | --- |
241| No stale deals found | Fallback chain: 1) Verify the staleness threshold. 14 days may be too aggressive for enterprise cycles. Try extending to 30 or 60 days. 2) Check that `hs_last_sales_activity_date` is populated in HubSpot. Some accounts track activity differently. Try filtering on `hs_lastmodifieddate` instead. 3) Remove the deal amount filter to check if deals exist below the threshold. 4) Remove the owner filter to search across all reps. |
242| Activity date fields are empty | Some HubSpot configurations do not populate `hs_last_sales_activity_date`. Call `mcp__claude_ai_HubSpot__search_properties` with `query`: "date" or "modified" to discover alternative date fields. Fall back to `hs_lastmodifieddate` which is always populated but includes system updates, not just sales activity. |
243| Deal stage IDs do not match expected names | HubSpot uses internal stage IDs (e.g., "appointmentscheduled") rather than display names. Call `mcp__claude_ai_HubSpot__search_properties` with `query`: "dealstage" to retrieve the property definition including all stage options with their internal values and labels. Map user-provided stage names to internal IDs before filtering. |
244| Contact enrichment shows different company | This means the contact has left the deal company. Flag the deal as needing a new champion. Suggest the user find a replacement via the deal-contact-gap-analysis skill or manually update the HubSpot contact. Do not suggest re-engaging the contact at the old company. |
245| Too many stale deals returned (50+) | Apply stricter filters: increase the minimum amount, narrow to specific stages, or filter by owner. Offer to batch: "I found X stale deals. Shall I focus on the top 15 by deal value and enrich those first?" |
246| Owner ID cannot be resolved | If `mcp__claude_ai_HubSpot__search_owners` returns no results for an owner ID, display the raw ID and note: "Owner could not be resolved. This may be a deactivated user or an integration-created record." |
247| WebSearch returns no company news | This is common for smaller or private companies. Set `{{deal_company_recent_news}}` to "No recent public news found" and use a generic revival opener based on the deal context instead. Suggest the user check the company's LinkedIn page for recent posts. |
248| Deal has no associated contacts | Flag the deal separately: "This deal has no contacts in HubSpot. It cannot be revived without a contact. Consider adding a contact manually or searching for decision-makers via Amplemarket." |