# Deal Reengagement

> 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".

- Skill: `extruct-ai/deal-reengagement` (Agent Skill)
- Install (CLI): `npx skillmds@latest add extruct-ai/deal-reengagement`
- Raw SKILL.md: https://api.skillmd.com/api/skills/extruct-ai/deal-reengagement/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Productivity
- Author: extruct-ai (https://skillmd.com/u/extruct-ai)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/extruct-ai/deal-reengagement

---


# 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

1. Call `gmail_search_messages` with:
   `from:{contact_email} OR to:{contact_email}`
   Limit to 20 messages to get the full arc.

2. 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

1. Call `query_granola_meetings` with "meetings with {contact_name}"
2. If found, call `get_meetings` for full details
3. 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:**
1. Opening — personal, reference something specific from history (1 sentence)
2. Bridge — why you're reaching out now (1-2 sentences)
3. Value — what's new or different (1-2 sentences)
4. 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}/`:

1. **Read first:** Check for existing `context.md` and past meeting notes — use as input.
2. **Save meeting notes:** If Granola data was fetched, persist to `meetings/YYYY-MM-DD_{title-slug}.md`.
3. **Save key emails:** If the email thread contains commercial significance (proposals, pricing),
   snapshot to `emails/YYYY-MM-DD_{subject-slug}.md`.
4. **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:
1. Edit the draft
2. Try a different angle
3. 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)

