Re-engage Stale Deal
Help write a re-engagement email for a stale deal or cold contact. First gather all context, then suggest angles, then draft.
Inputs
The user provides one or more of:
- A contact name, email, or company name
- A deal name or Attio deal ID
- Specific context on why they want to re-engage
If not provided, ask for the contact or deal reference.
Workflow
Step 1: Build full context
1a. Attio — Person + Deal records
Resolve the contact in Attio:
- Use
search-records with object = "people" and the contact's name or email as query.
From the person record, extract:
- Name, job title, company
- Origin, registration date
- Subscription status, plan, LTV (if any)
- Last interaction date
- Associated deal IDs
For each associated deal:
- Use
get-records-by-ids with object = "deals" and the deal record IDs.
- Extract: deal name, stage, value, created date, last activity
- Calculate how long the deal has been stale
Check pending tasks:
- Use
list-tasks with is_completed = false.
- Filter for tasks linked to this person or their deals
1b. Gmail — Full email history
Call gmail_search_messages with:
from:{contact_email} OR to:{contact_email}
Limit to 20 messages to get the full arc.
Call gmail_read_thread on the 2-3 most substantive threads.
Extract:
- The full relationship timeline (first contact → last contact)
- What was proposed or discussed
- Any pricing, offers, or commitments made
- Where the conversation dropped off and why (if apparent)
- The tone and style of the relationship
1c. Granola — Past meetings
- Call
query_granola_meetings with "meetings with {contact_name}"
- If found, call
get_meetings for full details
- If transcript needed, call
get_meeting_transcript
Extract:
- What was discussed in meetings
- Action items that were or weren't completed
- Pain points the contact expressed
- Objections or hesitations raised
Step 2: Diagnose the stall
Before drafting, analyze why the deal went cold. Common patterns:
- Timing: they weren't ready, budget cycle, other priorities
- Fit: product didn't match their immediate needs
- Champion left: the contact changed roles or companies
- Dropped ball: follow-up was missed on our side
- Price: proposal was too high or unclear value
- Competitor: they went with someone else
State the diagnosis explicitly to the user.
Step 3: Suggest 2-3 re-engagement angles
Based on the context, propose 2-3 distinct angles. Each angle should include:
- Hook: what makes this relevant now (new feature, time passed, market change)
- Value prop: why it's worth reconnecting
- Ask: specific low-friction CTA
Example angle types:
- Value-first: share something useful (insight, data, resource) without asking for anything
- Trigger-based: reference a change (new role, funding, product update, industry shift)
- Direct check-in: honest, low-pressure "how are things going"
- New offer: revised pricing, new capability, different packaging
- Social proof: similar company succeeded with your product
Present angles to the user and let them pick one (or combine).
Step 4: Draft the re-engagement email
Based on the chosen angle:
Structure:
- Opening — personal, reference something specific from history (1 sentence)
- Bridge — why you're reaching out now (1-2 sentences)
- Value — what's new or different (1-2 sentences)
- Ask — specific, low-friction CTA (1 sentence)
Tone rules:
- Match the existing relationship tone from email history
- Never apologize for the gap ("sorry for the silence")
- Never guilt trip ("I haven't heard back")
- Confident but not pushy
- Reference specific things from your history, not generic filler
Constraints:
- Under 150 words (shorter than a regular follow-up — stale deals need brevity)
- No emojis unless the contact uses them
- Subject line should NOT be a reply to the old thread (fresh start)
Step 5: Save artifacts locally
After gathering context, persist to revops/customers/{company-slug}/:
- Read first: Check for existing
context.md and past meeting notes — use as input.
- Save meeting notes: If Granola data was fetched, persist to
meetings/YYYY-MM-DD_{title-slug}.md.
- Save key emails: If the email thread contains commercial significance (proposals, pricing),
snapshot to
emails/YYYY-MM-DD_{subject-slug}.md.
- Update context.md: Update deal history and current status.
Granola data can be deleted — the local copy is the source of truth.
See revops/customers/README.md for templates and naming rules.
Step 6: Present and act
Show the draft with:
- To: address
- Subject: line (new thread, not a reply)
- Body
- Angle used: which re-engagement angle was chosen
- Context: brief note on sources used
Ask the user if they want to:
- Edit the draft
- Try a different angle
- Create a Gmail draft via
gmail_create_draft
Attio MCP Tool Reference
Use these MCP tools (NOT raw API calls):
| Task |
Tool |
Key parameters |
| Search people or companies |
search-records |
object, query |
| Get specific records |
get-records-by-ids |
object, record_ids |
| Get pending tasks |
list-tasks |
is_completed=false |
Environment
| Variable |
Source |
Purpose |
| Attio |
MCP (Attio connector) |
CRM — people, deals, tasks |
| Gmail |
MCP (claude.ai Gmail) |
Email history and drafting |
| Granola |
MCP (Granola) |
Meeting notes and transcripts |
Reference
- CRM enrichment context:
revops/CRM_ENRICHMENT.md
- Customer artifacts:
revops/customers/ (see README.md for structure and templates)
1---2name: deal-reengagement3description: Re-engage a stale deal or cold contact. Reads all relevant context (Attio deal, Gmail threads, Granola meetings), then suggests 2-3 angles to reactivate and drafts a re-engagement email. Triggers on: "re-engage", "reactivate deal", "stale deal", "cold deal", "win back", "re-engagement email", "revive deal".4---56# Re-engage Stale Deal78Help write a re-engagement email for a stale deal or cold contact. First gather all context, then suggest angles, then draft.910## Inputs1112The user provides one or more of:13- A contact name, email, or company name14- A deal name or Attio deal ID15- Specific context on why they want to re-engage1617If not provided, ask for the contact or deal reference.1819## Workflow2021### Step 1: Build full context2223#### 1a. Attio — Person + Deal records2425Resolve the contact in Attio:26- Use `search-records` with `object = "people"` and the contact's name or email as query.2728From the person record, extract:29- Name, job title, company30- Origin, registration date31- Subscription status, plan, LTV (if any)32- Last interaction date33- Associated deal IDs3435For each associated deal:36- Use `get-records-by-ids` with `object = "deals"` and the deal record IDs.37- Extract: deal name, stage, value, created date, last activity38- Calculate how long the deal has been stale3940Check pending tasks:41- Use `list-tasks` with `is_completed = false`.42- Filter for tasks linked to this person or their deals4344#### 1b. Gmail — Full email history45461. Call `gmail_search_messages` with:47 `from:{contact_email} OR to:{contact_email}`48 Limit to 20 messages to get the full arc.49502. Call `gmail_read_thread` on the 2-3 most substantive threads.5152Extract:53- The full relationship timeline (first contact → last contact)54- What was proposed or discussed55- Any pricing, offers, or commitments made56- Where the conversation dropped off and why (if apparent)57- The tone and style of the relationship5859#### 1c. Granola — Past meetings60611. Call `query_granola_meetings` with "meetings with {contact_name}"622. If found, call `get_meetings` for full details633. If transcript needed, call `get_meeting_transcript`6465Extract:66- What was discussed in meetings67- Action items that were or weren't completed68- Pain points the contact expressed69- Objections or hesitations raised7071### Step 2: Diagnose the stall7273Before drafting, analyze why the deal went cold. Common patterns:74- **Timing:** they weren't ready, budget cycle, other priorities75- **Fit:** product didn't match their immediate needs76- **Champion left:** the contact changed roles or companies77- **Dropped ball:** follow-up was missed on our side78- **Price:** proposal was too high or unclear value79- **Competitor:** they went with someone else8081State the diagnosis explicitly to the user.8283### Step 3: Suggest 2-3 re-engagement angles8485Based on the context, propose 2-3 distinct angles. Each angle should include:86- **Hook:** what makes this relevant now (new feature, time passed, market change)87- **Value prop:** why it's worth reconnecting88- **Ask:** specific low-friction CTA8990Example angle types:91- **Value-first:** share something useful (insight, data, resource) without asking for anything92- **Trigger-based:** reference a change (new role, funding, product update, industry shift)93- **Direct check-in:** honest, low-pressure "how are things going"94- **New offer:** revised pricing, new capability, different packaging95- **Social proof:** similar company succeeded with your product9697Present angles to the user and let them pick one (or combine).9899### Step 4: Draft the re-engagement email100101Based on the chosen angle:102103**Structure:**1041. Opening — personal, reference something specific from history (1 sentence)1052. Bridge — why you're reaching out now (1-2 sentences)1063. Value — what's new or different (1-2 sentences)1074. Ask — specific, low-friction CTA (1 sentence)108109**Tone rules:**110- Match the existing relationship tone from email history111- Never apologize for the gap ("sorry for the silence")112- Never guilt trip ("I haven't heard back")113- Confident but not pushy114- Reference specific things from your history, not generic filler115116**Constraints:**117- Under 150 words (shorter than a regular follow-up — stale deals need brevity)118- No emojis unless the contact uses them119- Subject line should NOT be a reply to the old thread (fresh start)120121### Step 5: Save artifacts locally122123After gathering context, persist to `revops/customers/{company-slug}/`:1241251. **Read first:** Check for existing `context.md` and past meeting notes — use as input.1262. **Save meeting notes:** If Granola data was fetched, persist to `meetings/YYYY-MM-DD_{title-slug}.md`.1273. **Save key emails:** If the email thread contains commercial significance (proposals, pricing),128 snapshot to `emails/YYYY-MM-DD_{subject-slug}.md`.1294. **Update context.md:** Update deal history and current status.130131Granola data can be deleted — the local copy is the source of truth.132See `revops/customers/README.md` for templates and naming rules.133134### Step 6: Present and act135136Show the draft with:137- **To:** address138- **Subject:** line (new thread, not a reply)139- **Body**140- **Angle used:** which re-engagement angle was chosen141- **Context:** brief note on sources used142143Ask the user if they want to:1441. Edit the draft1452. Try a different angle1463. Create a Gmail draft via `gmail_create_draft`147148## Attio MCP Tool Reference149150Use these MCP tools (NOT raw API calls):151152| Task | Tool | Key parameters |153|------|------|---------------|154| Search people or companies | `search-records` | `object`, `query` |155| Get specific records | `get-records-by-ids` | `object`, `record_ids` |156| Get pending tasks | `list-tasks` | `is_completed=false` |157158## Environment159160| Variable | Source | Purpose |161|----------|--------|---------|162| Attio | MCP (Attio connector) | CRM — people, deals, tasks |163| Gmail | MCP (`claude.ai Gmail`) | Email history and drafting |164| Granola | MCP (`Granola`) | Meeting notes and transcripts |165166## Reference167168- CRM enrichment context: `revops/CRM_ENRICHMENT.md`169- Customer artifacts: `revops/customers/` (see README.md for structure and templates)