Champion move outreach

End-to-end champion/buyer/user job change signal composite.

How to use it

  1. Hit Copy the whole skill.
  2. Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
    ChatGPT: make a Project and paste it into Instructions.
    Neither? Paste it at the top of a new chat — it works for that chat.
  3. Describe your job in plain words. The AI follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit gooseworks-ai/goose-skills/skills/outreach/composites/champion-move-outreach#main ~/.claude/skills/champion-move-outreach

For one project only, change the path to .claude/skills/champion-move-outreach.

Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Show the full text644 lines
champion-move-outreach/SKILL.md644 lines26.0 KBpushed 96d agoRawView on GitHub

Champion Move Outreach

Tracks known buyers, champions, and power users for job changes. When someone who already knows your product moves to a new company, that's the highest-conversion outbound signal in B2B — they already trust you, they're in a new role trying to make an impact, and they have firsthand experience with what your product delivers.

Why this is the #1 signal: Every other signal (funding, hiring, leadership change) targets strangers. This targets people who already know, like, and trust your product. Conversion rates on champion-move outreach are 3-5x higher than cold outreach because:

  • They don't need to be educated on what you do
  • They have a positive experience to anchor on
  • They want quick wins at the new company (bringing in a tool they trust IS a quick win)
  • They can internally champion the deal because they have firsthand results to cite

When to Auto-Load

Load this composite when:

  • User says "track my champions", "check for job changes", "who moved from our customer accounts", "champion tracking"
  • User has a list of past buyers/users and wants to know if anyone changed jobs
  • An upstream workflow (TAM Pulse) triggers a champion change check

Step 0: Configuration (One-Time Setup)

On first run for a client/user, collect and store these preferences. Skip on subsequent runs.

People to Track

Question Purpose Stored As
Where does your list of people to track come from? Defines the input source people_source
What categories of people are you tracking? Determines outreach tone per person tracked_categories

People source options:

  • CRM export (Salesforce, HubSpot) — pull closed-won contacts, active users, power users
  • CSV file — manually curated list
  • Supabase people table — filter by lead_status = 'customer' or similar
  • Manual list — names + LinkedIn URLs

Tracked categories:

Category Who They Are Why They Matter Stored As
Past buyers Signed the contract at their previous company Can sign again. Know the ROI. Can articulate value to new leadership. past_buyers
Past champions Advocated for your product internally, drove adoption Will champion again. Often have stronger conviction than the original buyer. past_champions
Power users Used your product daily, know it deeply Can demonstrate value hands-on. Often become the internal expert at the new company. power_users
Lost deal contacts Evaluated your product but chose a competitor or no decision Weaker signal but still valid — they know you exist. New company = fresh start. lost_deal_contacts

ICP Definition (for qualifying the new company)

Question Purpose Stored As
What industries do you sell to? Filter out non-ICP companies target_industries
What company sizes? (employee count ranges) Filter out too-small or too-large target_company_size
What geographies? Filter if relevant target_geographies
Any disqualifiers? (e.g., government, non-profit, specific verticals) Hard no's disqualifiers
What's the minimum viable deal? Don't chase companies too small to pay minimum_deal_size

Signal Detection Config

Question Options Stored As
How should we detect job changes? LinkedIn profile monitoring / Apollo job change data / Web search / Manual check detection_tool
How often should we check? Weekly / Biweekly / Monthly check_frequency

Outreach Config

Question Options Stored As
Where do you want outreach sent? Smartlead / Instantly / Outreach.io / CSV export outreach_tool
Email or multi-channel? Email only / Email + LinkedIn outreach_channels

Your Company Context

Question Purpose Stored As
What does your company do? (1-2 sentences) New company research context company_description
What results did customers typically see? Proof points for outreach customer_results
Any specific results from the tracked person's previous company? Strongest possible proof specific_results

Store config in: clients/<client-name>/config/signal-outreach.json or equivalent.


Step 1: Detect Job Changes

Purpose: For each person in the tracking list, determine if they've moved to a new company.

Input Contract

tracked_people: [
  {
    full_name: string             # Required
    linkedin_url: string          # Strongly recommended (most reliable for matching)
    email: string | null          # Previous email (will be outdated after move)
    last_known_company: string    # The company they were at when you knew them
    last_known_title: string      # Their title when you knew them
    category: "past_buyer" | "past_champion" | "power_user" | "lost_deal_contact"
    relationship_context: string | null  # e.g. "Signed $50K deal in 2025", "Led implementation"
  }
]

Process

For each person, use the configured detection_tool:

  1. Check current position against last_known_company:

    • LinkedIn: Visit profile (or use scraping tool) → compare current company to last_known_company
    • Apollo: People search by name + LinkedIn URL → check current employer
    • Web search: "{full_name}" AND ("{last_known_company}" OR "joined" OR "new role") — look for announcements
    • Any other tool: Must return the same output contract
  2. For each person, determine:

    • Are they still at the same company? → No signal, skip.
    • Have they moved? → Signal detected. Capture new company + new title.
    • Has their profile gone dark (no updates, no activity)? → Flag for manual check.
  3. For each mover, extract:

    • New company name
    • New title
    • Approximate start date at new company
    • New company domain (for research in Step 2)
    • Was this a promotion (higher title) or lateral move?

Output Contract

movers: [
  {
    person: {
      full_name: string
      linkedin_url: string
      category: string                # "past_buyer", "past_champion", etc.
      relationship_context: string
      previous_company: string
      previous_title: string
    }
    move: {
      new_company: string
      new_company_domain: string
      new_title: string
      start_date: string              # ISO date or approximate
      days_in_new_role: integer
      is_promotion: boolean           # Higher title than before?
    }
  }
]
no_change: [
  { full_name: string, still_at: string }
]
unable_to_verify: [
  { full_name: string, reason: string }  # Profile private, no data, etc.
]

Human Checkpoint

## Job Change Detection Results

Tracked: X people
Moved: Y people
No change: Z people
Unable to verify: W people

### People Who Moved
| Name | Category | Was At | Now At | New Title | Days In |
|------|----------|--------|--------|-----------|---------|
| Jane Doe | Past buyer | Acme Corp | NewCo Inc | VP Sales | 45 days |
| Bob Lee | Power user | Beta LLC | StartupX | Sales Manager | 12 days |
| ...  | ...      | ...    | ...    | ...       | ...     |

### Unable to Verify
| Name | Reason |
|------|--------|
| Sam Chen | LinkedIn profile set to private |

Proceed to research their new companies? (Y/n)

Step 2: Research New Company & Qualify Against ICP

Purpose: For each mover, research their new company and determine if it's a fit for your product. This is the critical gate — just because someone you know moved doesn't mean their new company is a prospect.

Input Contract

movers: [...]                         # From Step 1 output
icp_criteria: {
  target_industries: string[]
  target_company_size: string         # e.g. "50-500 employees"
  target_geographies: string[]
  disqualifiers: string[]
  minimum_deal_size: string
}
your_company: {
  description: string
}

Process

For each mover's new company:

  1. Research the new company using web search (tool-agnostic — always available):

    • What does the company do? (1-2 sentence summary)
    • What industry are they in?
    • Approximate company size (employees)
    • Location/HQ
    • Funding stage (if applicable)
    • Any recent news (funding, product launches, leadership changes)
  2. Qualify against ICP:

    Criterion Check Pass/Fail
    Industry Is new_company.industry in target_industries? Hard filter
    Size Is employee count within target_company_size range? Hard filter
    Geography Is location in target_geographies? (Skip if no geo filter) Soft filter
    Disqualifiers Does the company match any disqualifiers? Hard filter
    Deal viability Could this company afford minimum_deal_size? Judgment call
  3. Assess the person's position at the new company:

    Factor What to Check Why It Matters
    Authority level Is their new title at or above their old title? Higher = more budget authority
    Department fit Are they in a department that buys/uses your product? Must be in the right department
    Influence trajectory Promoted into a leadership role? More influence = stronger champion
    Seniority mismatch Were they a user before, now they're a VP? Adjust outreach — they're a buyer now, not a user
  4. Determine outreach approach based on category + new position:

    Category at Old Company New Position Level Approach
    Past buyer → Buyer-level title Re-sell: "You bought us before, bring us to [new company]"
    Past buyer → Higher title Executive re-sell: "Now that you run [department], [product] scales with you"
    Past champion → Buyer-level title Upgrade: "You championed us internally — now you own the budget"
    Past champion → Same level Lateral champion: "Bring what worked at [old company] to [new company]"
    Power user → Any level Bottom-up: "You know the product inside out — want to bring it to your new team?"
    Lost deal contact → Any Fresh start: "Different company, different needs. Worth a second look?"

Output Contract

qualified_movers: [
  {
    person: {
      full_name: string
      linkedin_url: string
      category: string
      relationship_context: string
      previous_company: string
      previous_title: string
    }
    move: {
      new_company: string
      new_company_domain: string
      new_title: string
      start_date: string
      days_in_new_role: integer
      is_promotion: boolean
    }
    new_company_research: {
      description: string             # What the company does
      industry: string
      employee_count: string          # Approximate
      location: string
      funding_stage: string | null
      recent_news: string[]           # 2-3 relevant items
    }
    qualification: {
      icp_fit: "strong" | "moderate" | "weak"
      icp_reasoning: string           # Why it's a fit or not
      authority_level: "buyer" | "influencer" | "user"
      outreach_approach: string       # "re-sell", "upgrade", "lateral champion", "bottom-up", "fresh start"
    }
    priority_tier: "tier_1" | "tier_2" | "tier_3"
  }
]
disqualified_movers: [
  {
    full_name: string
    new_company: string
    disqualification_reason: string   # "Industry not in ICP", "Company too small", etc.
  }
]

Tier Assignment

  • Tier 1 (Act Today): Past buyer or champion + strong ICP fit + <30 days in new role. This is the warmest possible lead.
  • Tier 2 (Act This Week): Past buyer/champion + moderate ICP fit, OR power user + strong ICP fit, OR any category + strong fit but 30-60 days in.
  • Tier 3 (Queue): Lost deal contacts + strong fit, OR any category with moderate fit and 60+ days in.
  • Disqualify: New company doesn't pass ICP hard filters.

Human Checkpoint

## New Company Research & Qualification

### Tier 1 — Act Today (X movers)
| Name | Category | New Company | ICP Fit | Approach | Days In |
|------|----------|-------------|---------|----------|---------|
| Jane Doe | Past buyer | NewCo Inc (Series B, 120 employees, SaaS) | Strong | Re-sell | 45 days |

  Research: NewCo Inc is a logistics SaaS platform. 120 employees, Series B,
  HQ in Austin. Recently launched an enterprise tier. Strong fit — same
  industry, right size, Jane has budget authority as VP Sales.

### Tier 2 — Act This Week (X movers)
| ... |

### Disqualified (X movers)
| Name | New Company | Reason |
|------|-------------|--------|
| Sam Lee | TinyStartup | 8 employees, pre-revenue — below minimum deal size |

Approve before we draft outreach?

Step 3: Find New Contact Details

Purpose: Get the mover's new email address and any additional context at the new company.

Input Contract

qualified_movers: [...]               # From Step 2 output
contact_tool: string                  # From config

Process

  1. Find new work email — their old email is outdated. Use the configured contact_tool:

    • Apollo: Search by name + new company domain → email
    • Clearbit: Prospector lookup by name + domain
    • Web search: "{full_name}" AND "@{new_company_domain}" or company contact patterns
    • LinkedIn: InMail or connection request (flag for manual if no email found)
  2. Verify the email is at the new company — don't accidentally email their old address.

  3. Flag contacts without email — these should be routed to LinkedIn outreach instead.

Output Contract

contactable_movers: [
  {
    ...qualified_mover_fields,
    new_email: string
    email_confidence: "verified" | "likely" | "pattern_guess"
    preferred_channel: "email" | "linkedin" | "both"
  }
]
email_not_found: [
  {
    ...qualified_mover_fields,
    linkedin_url: string              # Fall back to LinkedIn
    preferred_channel: "linkedin"
  }
]

Human Checkpoint

## Contact Details

| Name | New Company | Email | Confidence | Channel |
|------|-------------|-------|------------|---------|
| Jane Doe | NewCo Inc | [email protected] | Verified | Email |
| Bob Lee | StartupX | — | Not found | LinkedIn |

X contacts with email, Y LinkedIn-only

Approve before we draft outreach?

Step 4: Draft Personalized Outreach

Purpose: Draft outreach that leverages the existing relationship. This is NOT cold email — these people know you. The tone, length, and approach are fundamentally different from the other signal composites. Pure LLM reasoning — inherently tool-agnostic.

Input Contract

contactable_movers: [...]             # From Step 3 output
your_company: {
  description: string
  customer_results: string[]          # General results customers see
  specific_results: {                 # Results at their specific previous company (if available)
    [company_name]: string            # e.g. "Acme Corp: reduced call handling time by 40%"
  }
}
sequence_config: {
  touches: integer                    # Default: 3
  timing: integer[]                   # Default: [1, 7, 14] (more spaced — less urgency, warmer relationship)
  tone: string                       # Default: "casual-direct" (you know this person)
  cta: string                        # Default: "quick catch-up call"
}

Process

  1. Tone is fundamentally different from cold outreach:

    Cold Outreach Champion Move Outreach
    Formal introduction Casual reconnection
    Prove you're legitimate They already trust you
    Signal-Proof-Ask framework Relationship-Context-Ask framework
    "I noticed..." "Hey — congrats on the move!"
    50-90 words Touch 1 Can be shorter — no education needed
    Professional-sharp tone Casual-direct tone (you know each other)
  2. Build the email around the relationship, not the product:

    Element Source How to Use
    Relationship anchor relationship_context "You were one of our first champions at [old company]"
    Their results specific_results or customer_results "The 40% improvement your team saw at [old company]..."
    New role congratulations move.new_title + move.new_company "Congrats on VP Sales at NewCo"
    New company relevance new_company_research "NewCo's push into enterprise makes this a natural fit"
    Category-specific angle category + qualification.outreach_approach See table below
  3. Email angle by outreach approach:

    Approach Touch 1 Template Shape Example
    Re-sell Congrats + "remember the results?" + "bring it to [new company]" "Hey Jane — congrats on the VP Sales gig at NewCo. You saw what [product] did at Acme (40% faster call handling). NewCo's sales team could see the same lift. Worth a quick catch-up?"
    Upgrade Congrats + "you championed this" + "now you own the budget" "Congrats on the promotion. You pushed for [product] at [old company] — now you actually control the budget. Want to talk about bringing it to NewCo?"
    Lateral champion Congrats + "you know what works" + "replicate it" "Hey — saw you landed at NewCo. You know firsthand what [product] does. If the team there has the same [pain], happy to help you set it up."
    Bottom-up Congrats + "you were a power user" + "your new team will love it" "Congrats on the move. You were one of our best users at [old company]. If you want [product] on your desk at NewCo, I can get you set up quickly."
    Fresh start Congrats + acknowledge the past + "different situation, worth a second look" "Hey — congrats on the move to NewCo. I know the timing wasn't right when we spoke at [old company]. Different company, different needs — open to a fresh conversation?"
  4. Sequence design (warmer, more spaced):

    Touch Day Purpose Length Notes
    Touch 1 1 Reconnect + congrats + soft ask 40-70 words Shorter than cold — they know you
    Touch 2 7 Share a relevant result or update 30-50 words New feature, new customer in their industry, case study
    Touch 3 14 Low-pressure check-in 20-30 words "No rush — whenever the timing is right"

    Key difference from cold sequences: More spacing between touches (they're not a stranger you'll lose if you wait), warmer tone, and Touch 3 is a check-in not a breakup.

  5. Follow email-drafting hard rules with one exception: Rule 6 ("never lie about how you found them") is flipped — you SHOULD reference exactly how you know them. That's the whole point.

Output Contract

email_sequences: [
  {
    contact: {
      full_name: string
      new_email: string
      new_title: string
      new_company: string
      category: string
      relationship_context: string
      outreach_approach: string
    }
    sequence: [
      {
        touch_number: integer
        send_day: integer
        subject: string
        body: string
        personalization_elements: {
          relationship_anchor: string     # How the relationship was referenced
          their_results: string | null    # Specific results referenced
          new_role_reference: string      # How the new role was acknowledged
          new_company_relevance: string   # Why new company is a fit
        }
        word_count: integer
      }
    ]
    channel: "email" | "linkedin"
  }
]

Human Checkpoint

Present samples covering different outreach approaches:

## Sample Outreach for Review

### Jane Doe — VP Sales @ NewCo Inc
Category: Past buyer | Approach: Re-sell | 45 days in new role

**Touch 1 — Day 1**
Subject: Congrats on NewCo — quick thought
> Hey Jane — congrats on the VP Sales move to NewCo. Your team at Acme
> saw a 40% improvement in call handling after going live with [product].
> NewCo's enterprise push could see the same lift.
>
> Worth a 15-minute catch-up?

**Touch 2 — Day 7**
Subject: NewCo + [product] — a few ideas
> Quick follow-up — we just launched [new feature] that would've
> been perfect for the workflow your team ran at Acme. Happy to
> walk you through it.

**Touch 3 — Day 14**
Subject: Whenever the timing is right
> No rush on this. If [product] makes sense for what you're building
> at NewCo, I'm a quick call away. Either way, congrats again on the role.

---

### Bob Lee — Sales Manager @ StartupX (LinkedIn only)
Category: Power user | Approach: Bottom-up | 12 days in new role

**LinkedIn Message:**
> Hey Bob — congrats on StartupX! You were one of our most active users
> at Beta LLC. If you want [product] set up for your new team, happy
> to fast-track it. Let me know.

---

Approve these samples? I'll generate the rest in the same style.

Step 5: Handoff to Outreach

Identical to funding-signal-outreach Step 5. Package contacts + email sequences for the configured outreach tool. Route LinkedIn-only contacts to linkedin-outreach skill.

Additional Note for This Composite

Some contacts will be email, some will be LinkedIn-only. Split the output:

  • Email contacts → outreach tool (Smartlead, Instantly, CSV, etc.)
  • LinkedIn contacts → LinkedIn automation tool (Dripify, Expandi) or manual LinkedIn queue

Output Contract

campaign_package: {
  email_campaign: {
    tool: string
    file_path: string
    contact_count: integer
  }
  linkedin_campaign: {
    file_path: string              # CSV for LinkedIn tool or manual queue
    contact_count: integer
  }
  total_contacts: integer
  sequence_touches: integer
  next_action: string
}

Human Checkpoint

## Campaign Ready

Signal type: Champion/buyer/user job change
Email contacts: X people → [outreach tool]
LinkedIn contacts: Y people → LinkedIn message queue
Total: Z people across W companies
Sequence: 3 touches over 14 days

Ready to launch?

Execution Summary

Step Tool Dependency Human Checkpoint Typical Time
0. Config None First run only 5 min (once)
1. Detect job changes Configurable (LinkedIn, Apollo, web search) Review movers list 2-5 min
2. Research + qualify Web search (always available) Approve qualified movers 3-5 min
3. Find new email Configurable (Apollo, Clearbit, etc.) Review contact details 1-2 min
4. Draft outreach None (LLM reasoning) Review samples, iterate 5-10 min
5. Handoff Configurable (Smartlead, CSV, etc.) Final launch approval 1 min

Total human review time: ~15-25 minutes


Key Differences from Other Signal Composites

Dimension Funding / Hiring / Leadership Champion Move
Relationship Cold — they don't know you Warm — they know and (hopefully) like you
Input List of companies List of people
Signal about The company The person
Qualification Is the company relevant? Is the NEW company relevant? (Person is already qualified)
Tone Professional, prove credibility Casual, reference shared history
Conversion rate 2-5% reply rate 10-25% reply rate
Sequence spacing Tight (Day 1/5/12) Relaxed (Day 1/7/14)
Touch 3 Breakup Check-in (leave door open)

Tips

  • Run this check monthly, not daily. Job changes don't happen overnight. Monthly cadence catches moves within the first 30 days, which is the optimal outreach window.
  • Keep your tracking list fresh. Add new champions, buyers, and power users as deals close. Remove people who've left the industry entirely.
  • Specific results beat generic proof. "Your team saw 40% improvement" is 10x better than "our customers see great results." If you have specific data from their previous company, use it.
  • Don't be pushy. These are warm contacts. A desperate tone ("We need your business!") destroys the relationship advantage. Casual and helpful wins.
  • Promotions are the best sub-signal. Someone who was a champion and is now a VP is the warmest possible lead — they already believe in your product AND now control budget.
  • Lost deal contacts are worth tracking too. "Different company, different needs" is a legitimate re-engagement angle. Their objection at the old company may not apply at the new one.
  • LinkedIn is often better than email for this signal. The relationship is personal, not company-to-company. A LinkedIn message feels more natural than a cold-looking email from a sales tool.
  • If the person was a VERY close contact (executive sponsor, etc.), skip the automated sequence. Pick up the phone or send a personal email from the founder/AE. Don't automate relationships that deserve a personal touch.
1---
2name: champion-move-outreach
3version: 1.0.0
4description: >
5 End-to-end champion/buyer/user job change signal composite. Takes a set of
6 known people (past buyers, champions, power users), detects when they move
7 to a new company, researches the new company for ICP fit, and drafts
8 personalized outreach leveraging the existing relationship. Tool-agnostic —
9 works with any people source, detection method, and outreach platform.
10tags: [outreach]
11 
12graph:
13 provides:
14 - movers-with-icp-fit # People who moved to ICP-fit companies
15 - new-company-research # Research on the new companies
16 - personalized-email-sequences # Outreach drafts leveraging existing relationship
17 requires:
18 - people-list # Known buyers, champions, users to track
19 - your-company-context # What you sell, ICP definition
20 connects_to:
21 - skill: cold-email-outreach
22 when: "User wants to launch the campaign via their outreach tool"
23 passes: movers-with-icp-fit, personalized-email-sequences
24 - skill: linkedin-outreach
25 when: "User wants LinkedIn outreach instead of or alongside email"
26 passes: movers-with-icp-fit
27 capabilities: [web-search, contact-finding, email-drafting]
28---
29 
30# Champion Move Outreach
31 
32Tracks known buyers, champions, and power users for job changes. When someone who already knows your product moves to a new company, that's the highest-conversion outbound signal in B2B — they already trust you, they're in a new role trying to make an impact, and they have firsthand experience with what your product delivers.
33 
34**Why this is the #1 signal:** Every other signal (funding, hiring, leadership change) targets strangers. This targets people who already know, like, and trust your product. Conversion rates on champion-move outreach are 3-5x higher than cold outreach because:
35- They don't need to be educated on what you do
36- They have a positive experience to anchor on
37- They want quick wins at the new company (bringing in a tool they trust IS a quick win)
38- They can internally champion the deal because they have firsthand results to cite
39 
40## When to Auto-Load
41 
42Load this composite when:
43- User says "track my champions", "check for job changes", "who moved from our customer accounts", "champion tracking"
44- User has a list of past buyers/users and wants to know if anyone changed jobs
45- An upstream workflow (TAM Pulse) triggers a champion change check
46 
47---
48 
49## Step 0: Configuration (One-Time Setup)
50 
51On first run for a client/user, collect and store these preferences. Skip on subsequent runs.
52 
53### People to Track
54 
55| Question | Purpose | Stored As |
56|----------|---------|-----------|
57| Where does your list of people to track come from? | Defines the input source | `people_source` |
58| What categories of people are you tracking? | Determines outreach tone per person | `tracked_categories` |
59 
60**People source options:**
61- CRM export (Salesforce, HubSpot) — pull closed-won contacts, active users, power users
62- CSV file — manually curated list
63- Supabase `people` table — filter by `lead_status = 'customer'` or similar
64- Manual list — names + LinkedIn URLs
65 
66**Tracked categories:**
67 
68| Category | Who They Are | Why They Matter | Stored As |
69|----------|-------------|-----------------|-----------|
70| **Past buyers** | Signed the contract at their previous company | Can sign again. Know the ROI. Can articulate value to new leadership. | `past_buyers` |
71| **Past champions** | Advocated for your product internally, drove adoption | Will champion again. Often have stronger conviction than the original buyer. | `past_champions` |
72| **Power users** | Used your product daily, know it deeply | Can demonstrate value hands-on. Often become the internal expert at the new company. | `power_users` |
73| **Lost deal contacts** | Evaluated your product but chose a competitor or no decision | Weaker signal but still valid — they know you exist. New company = fresh start. | `lost_deal_contacts` |
74 
75### ICP Definition (for qualifying the new company)
76 
77| Question | Purpose | Stored As |
78|----------|---------|-----------|
79| What industries do you sell to? | Filter out non-ICP companies | `target_industries` |
80| What company sizes? (employee count ranges) | Filter out too-small or too-large | `target_company_size` |
81| What geographies? | Filter if relevant | `target_geographies` |
82| Any disqualifiers? (e.g., government, non-profit, specific verticals) | Hard no's | `disqualifiers` |
83| What's the minimum viable deal? | Don't chase companies too small to pay | `minimum_deal_size` |
84 
85### Signal Detection Config
86| Question | Options | Stored As |
87|----------|---------|-----------|
88| How should we detect job changes? | LinkedIn profile monitoring / Apollo job change data / Web search / Manual check | `detection_tool` |
89| How often should we check? | Weekly / Biweekly / Monthly | `check_frequency` |
90 
91### Outreach Config
92| Question | Options | Stored As |
93|----------|---------|-----------|
94| Where do you want outreach sent? | Smartlead / Instantly / Outreach.io / CSV export | `outreach_tool` |
95| Email or multi-channel? | Email only / Email + LinkedIn | `outreach_channels` |
96 
97### Your Company Context
98| Question | Purpose | Stored As |
99|----------|---------|-----------|
100| What does your company do? (1-2 sentences) | New company research context | `company_description` |
101| What results did customers typically see? | Proof points for outreach | `customer_results` |
102| Any specific results from the tracked person's previous company? | Strongest possible proof | `specific_results` |
103 
104**Store config in:** `clients/<client-name>/config/signal-outreach.json` or equivalent.
105 
106---
107 
108## Step 1: Detect Job Changes
109 
110**Purpose:** For each person in the tracking list, determine if they've moved to a new company.
111 
112### Input Contract
113 
114```
115tracked_people: [
116 {
117 full_name: string # Required
118 linkedin_url: string # Strongly recommended (most reliable for matching)
119 email: string | null # Previous email (will be outdated after move)
120 last_known_company: string # The company they were at when you knew them
121 last_known_title: string # Their title when you knew them
122 category: "past_buyer" | "past_champion" | "power_user" | "lost_deal_contact"
123 relationship_context: string | null # e.g. "Signed $50K deal in 2025", "Led implementation"
124 }
125]
126```
127 
128### Process
129 
130For each person, use the configured `detection_tool`:
131 
1321. **Check current position** against `last_known_company`:
133 - **LinkedIn:** Visit profile (or use scraping tool) → compare current company to `last_known_company`
134 - **Apollo:** People search by name + LinkedIn URL → check current employer
135 - **Web search:** `"{full_name}" AND ("{last_known_company}" OR "joined" OR "new role")` — look for announcements
136 - **Any other tool:** Must return the same output contract
137 
1382. **For each person, determine:**
139 - Are they still at the same company? → No signal, skip.
140 - Have they moved? → Signal detected. Capture new company + new title.
141 - Has their profile gone dark (no updates, no activity)? → Flag for manual check.
142 
1433. **For each mover, extract:**
144 - New company name
145 - New title
146 - Approximate start date at new company
147 - New company domain (for research in Step 2)
148 - Was this a promotion (higher title) or lateral move?
149 
150### Output Contract
151 
152```
153movers: [
154 {
155 person: {
156 full_name: string
157 linkedin_url: string
158 category: string # "past_buyer", "past_champion", etc.
159 relationship_context: string
160 previous_company: string
161 previous_title: string
162 }
163 move: {
164 new_company: string
165 new_company_domain: string
166 new_title: string
167 start_date: string # ISO date or approximate
168 days_in_new_role: integer
169 is_promotion: boolean # Higher title than before?
170 }
171 }
172]
173no_change: [
174 { full_name: string, still_at: string }
175]
176unable_to_verify: [
177 { full_name: string, reason: string } # Profile private, no data, etc.
178]
179```
180 
181### Human Checkpoint
182 
183```
184## Job Change Detection Results
185 
186Tracked: X people
187Moved: Y people
188No change: Z people
189Unable to verify: W people
190 
191### People Who Moved
192| Name | Category | Was At | Now At | New Title | Days In |
193|------|----------|--------|--------|-----------|---------|
194| Jane Doe | Past buyer | Acme Corp | NewCo Inc | VP Sales | 45 days |
195| Bob Lee | Power user | Beta LLC | StartupX | Sales Manager | 12 days |
196| ... | ... | ... | ... | ... | ... |
197 
198### Unable to Verify
199| Name | Reason |
200|------|--------|
201| Sam Chen | LinkedIn profile set to private |
202 
203Proceed to research their new companies? (Y/n)
204```
205 
206---
207 
208## Step 2: Research New Company & Qualify Against ICP
209 
210**Purpose:** For each mover, research their new company and determine if it's a fit for your product. This is the critical gate — just because someone you know moved doesn't mean their new company is a prospect.
211 
212### Input Contract
213 
214```
215movers: [...] # From Step 1 output
216icp_criteria: {
217 target_industries: string[]
218 target_company_size: string # e.g. "50-500 employees"
219 target_geographies: string[]
220 disqualifiers: string[]
221 minimum_deal_size: string
222}
223your_company: {
224 description: string
225}
226```
227 
228### Process
229 
230For each mover's new company:
231 
2321. **Research the new company** using web search (tool-agnostic — always available):
233 - What does the company do? (1-2 sentence summary)
234 - What industry are they in?
235 - Approximate company size (employees)
236 - Location/HQ
237 - Funding stage (if applicable)
238 - Any recent news (funding, product launches, leadership changes)
239 
2402. **Qualify against ICP:**
241 
242 | Criterion | Check | Pass/Fail |
243 |-----------|-------|-----------|
244 | Industry | Is `new_company.industry` in `target_industries`? | Hard filter |
245 | Size | Is employee count within `target_company_size` range? | Hard filter |
246 | Geography | Is location in `target_geographies`? (Skip if no geo filter) | Soft filter |
247 | Disqualifiers | Does the company match any `disqualifiers`? | Hard filter |
248 | Deal viability | Could this company afford `minimum_deal_size`? | Judgment call |
249 
2503. **Assess the person's position at the new company:**
251 
252 | Factor | What to Check | Why It Matters |
253 |--------|--------------|----------------|
254 | **Authority level** | Is their new title at or above their old title? | Higher = more budget authority |
255 | **Department fit** | Are they in a department that buys/uses your product? | Must be in the right department |
256 | **Influence trajectory** | Promoted into a leadership role? | More influence = stronger champion |
257 | **Seniority mismatch** | Were they a user before, now they're a VP? | Adjust outreach — they're a buyer now, not a user |
258 
2594. **Determine outreach approach based on category + new position:**
260 
261 | Category at Old Company | New Position Level | Approach |
262 |------------------------|--------------------|----------|
263 | Past buyer → Buyer-level title | **Re-sell:** "You bought us before, bring us to [new company]" |
264 | Past buyer → Higher title | **Executive re-sell:** "Now that you run [department], [product] scales with you" |
265 | Past champion → Buyer-level title | **Upgrade:** "You championed us internally — now you own the budget" |
266 | Past champion → Same level | **Lateral champion:** "Bring what worked at [old company] to [new company]" |
267 | Power user → Any level | **Bottom-up:** "You know the product inside out — want to bring it to your new team?" |
268 | Lost deal contact → Any | **Fresh start:** "Different company, different needs. Worth a second look?" |
269 
270### Output Contract
271 
272```
273qualified_movers: [
274 {
275 person: {
276 full_name: string
277 linkedin_url: string
278 category: string
279 relationship_context: string
280 previous_company: string
281 previous_title: string
282 }
283 move: {
284 new_company: string
285 new_company_domain: string
286 new_title: string
287 start_date: string
288 days_in_new_role: integer
289 is_promotion: boolean
290 }
291 new_company_research: {
292 description: string # What the company does
293 industry: string
294 employee_count: string # Approximate
295 location: string
296 funding_stage: string | null
297 recent_news: string[] # 2-3 relevant items
298 }
299 qualification: {
300 icp_fit: "strong" | "moderate" | "weak"
301 icp_reasoning: string # Why it's a fit or not
302 authority_level: "buyer" | "influencer" | "user"
303 outreach_approach: string # "re-sell", "upgrade", "lateral champion", "bottom-up", "fresh start"
304 }
305 priority_tier: "tier_1" | "tier_2" | "tier_3"
306 }
307]
308disqualified_movers: [
309 {
310 full_name: string
311 new_company: string
312 disqualification_reason: string # "Industry not in ICP", "Company too small", etc.
313 }
314]
315```
316 
317### Tier Assignment
318 
319- **Tier 1 (Act Today):** Past buyer or champion + strong ICP fit + <30 days in new role. This is the warmest possible lead.
320- **Tier 2 (Act This Week):** Past buyer/champion + moderate ICP fit, OR power user + strong ICP fit, OR any category + strong fit but 30-60 days in.
321- **Tier 3 (Queue):** Lost deal contacts + strong fit, OR any category with moderate fit and 60+ days in.
322- **Disqualify:** New company doesn't pass ICP hard filters.
323 
324### Human Checkpoint
325 
326```
327## New Company Research & Qualification
328 
329### Tier 1 — Act Today (X movers)
330| Name | Category | New Company | ICP Fit | Approach | Days In |
331|------|----------|-------------|---------|----------|---------|
332| Jane Doe | Past buyer | NewCo Inc (Series B, 120 employees, SaaS) | Strong | Re-sell | 45 days |
333 
334 Research: NewCo Inc is a logistics SaaS platform. 120 employees, Series B,
335 HQ in Austin. Recently launched an enterprise tier. Strong fit — same
336 industry, right size, Jane has budget authority as VP Sales.
337 
338### Tier 2 — Act This Week (X movers)
339| ... |
340 
341### Disqualified (X movers)
342| Name | New Company | Reason |
343|------|-------------|--------|
344| Sam Lee | TinyStartup | 8 employees, pre-revenue — below minimum deal size |
345 
346Approve before we draft outreach?
347```
348 
349---
350 
351## Step 3: Find New Contact Details
352 
353**Purpose:** Get the mover's new email address and any additional context at the new company.
354 
355### Input Contract
356 
357```
358qualified_movers: [...] # From Step 2 output
359contact_tool: string # From config
360```
361 
362### Process
363 
3641. **Find new work email** — their old email is outdated. Use the configured `contact_tool`:
365 - **Apollo:** Search by name + new company domain → email
366 - **Clearbit:** Prospector lookup by name + domain
367 - **Web search:** `"{full_name}" AND "@{new_company_domain}"` or company contact patterns
368 - **LinkedIn:** InMail or connection request (flag for manual if no email found)
369 
3702. **Verify the email is at the new company** — don't accidentally email their old address.
371 
3723. **Flag contacts without email** — these should be routed to LinkedIn outreach instead.
373 
374### Output Contract
375 
376```
377contactable_movers: [
378 {
379 ...qualified_mover_fields,
380 new_email: string
381 email_confidence: "verified" | "likely" | "pattern_guess"
382 preferred_channel: "email" | "linkedin" | "both"
383 }
384]
385email_not_found: [
386 {
387 ...qualified_mover_fields,
388 linkedin_url: string # Fall back to LinkedIn
389 preferred_channel: "linkedin"
390 }
391]
392```
393 
394### Human Checkpoint
395 
396```
397## Contact Details
398 
399| Name | New Company | Email | Confidence | Channel |
400|------|-------------|-------|------------|---------|
401| Jane Doe | NewCo Inc | [email protected] | Verified | Email |
402| Bob Lee | StartupX | — | Not found | LinkedIn |
403 
404X contacts with email, Y LinkedIn-only
405 
406Approve before we draft outreach?
407```
408 
409---
410 
411## Step 4: Draft Personalized Outreach
412 
413**Purpose:** Draft outreach that leverages the existing relationship. This is NOT cold email — these people know you. The tone, length, and approach are fundamentally different from the other signal composites. Pure LLM reasoning — inherently tool-agnostic.
414 
415### Input Contract
416 
417```
418contactable_movers: [...] # From Step 3 output
419your_company: {
420 description: string
421 customer_results: string[] # General results customers see
422 specific_results: { # Results at their specific previous company (if available)
423 [company_name]: string # e.g. "Acme Corp: reduced call handling time by 40%"
424 }
425}
426sequence_config: {
427 touches: integer # Default: 3
428 timing: integer[] # Default: [1, 7, 14] (more spaced — less urgency, warmer relationship)
429 tone: string # Default: "casual-direct" (you know this person)
430 cta: string # Default: "quick catch-up call"
431}
432```
433 
434### Process
435 
4361. **Tone is fundamentally different from cold outreach:**
437 
438 | Cold Outreach | Champion Move Outreach |
439 |---------------|----------------------|
440 | Formal introduction | Casual reconnection |
441 | Prove you're legitimate | They already trust you |
442 | Signal-Proof-Ask framework | Relationship-Context-Ask framework |
443 | "I noticed..." | "Hey — congrats on the move!" |
444 | 50-90 words Touch 1 | Can be shorter — no education needed |
445 | Professional-sharp tone | Casual-direct tone (you know each other) |
446 
4472. **Build the email around the relationship, not the product:**
448 
449 | Element | Source | How to Use |
450 |---------|--------|-----------|
451 | Relationship anchor | `relationship_context` | "You were one of our first champions at [old company]" |
452 | Their results | `specific_results` or `customer_results` | "The 40% improvement your team saw at [old company]..." |
453 | New role congratulations | `move.new_title` + `move.new_company` | "Congrats on VP Sales at NewCo" |
454 | New company relevance | `new_company_research` | "NewCo's push into enterprise makes this a natural fit" |
455 | Category-specific angle | `category` + `qualification.outreach_approach` | See table below |
456 
4573. **Email angle by outreach approach:**
458 
459 | Approach | Touch 1 Template Shape | Example |
460 |----------|----------------------|---------|
461 | **Re-sell** | Congrats + "remember the results?" + "bring it to [new company]" | "Hey Jane — congrats on the VP Sales gig at NewCo. You saw what [product] did at Acme (40% faster call handling). NewCo's sales team could see the same lift. Worth a quick catch-up?" |
462 | **Upgrade** | Congrats + "you championed this" + "now you own the budget" | "Congrats on the promotion. You pushed for [product] at [old company] — now you actually control the budget. Want to talk about bringing it to NewCo?" |
463 | **Lateral champion** | Congrats + "you know what works" + "replicate it" | "Hey — saw you landed at NewCo. You know firsthand what [product] does. If the team there has the same [pain], happy to help you set it up." |
464 | **Bottom-up** | Congrats + "you were a power user" + "your new team will love it" | "Congrats on the move. You were one of our best users at [old company]. If you want [product] on your desk at NewCo, I can get you set up quickly." |
465 | **Fresh start** | Congrats + acknowledge the past + "different situation, worth a second look" | "Hey — congrats on the move to NewCo. I know the timing wasn't right when we spoke at [old company]. Different company, different needs — open to a fresh conversation?" |
466 
4674. **Sequence design (warmer, more spaced):**
468 
469 | Touch | Day | Purpose | Length | Notes |
470 |-------|-----|---------|--------|-------|
471 | Touch 1 | 1 | Reconnect + congrats + soft ask | 40-70 words | Shorter than cold — they know you |
472 | Touch 2 | 7 | Share a relevant result or update | 30-50 words | New feature, new customer in their industry, case study |
473 | Touch 3 | 14 | Low-pressure check-in | 20-30 words | "No rush — whenever the timing is right" |
474 
475 **Key difference from cold sequences:** More spacing between touches (they're not a stranger you'll lose if you wait), warmer tone, and Touch 3 is a check-in not a breakup.
476 
4775. **Follow `email-drafting` hard rules** with one exception: Rule 6 ("never lie about how you found them") is flipped — you SHOULD reference exactly how you know them. That's the whole point.
478 
479### Output Contract
480 
481```
482email_sequences: [
483 {
484 contact: {
485 full_name: string
486 new_email: string
487 new_title: string
488 new_company: string
489 category: string
490 relationship_context: string
491 outreach_approach: string
492 }
493 sequence: [
494 {
495 touch_number: integer
496 send_day: integer
497 subject: string
498 body: string
499 personalization_elements: {
500 relationship_anchor: string # How the relationship was referenced
501 their_results: string | null # Specific results referenced
502 new_role_reference: string # How the new role was acknowledged
503 new_company_relevance: string # Why new company is a fit
504 }
505 word_count: integer
506 }
507 ]
508 channel: "email" | "linkedin"
509 }
510]
511```
512 
513### Human Checkpoint
514 
515Present samples covering different outreach approaches:
516 
517```
518## Sample Outreach for Review
519 
520### Jane Doe — VP Sales @ NewCo Inc
521Category: Past buyer | Approach: Re-sell | 45 days in new role
522 
523**Touch 1 — Day 1**
524Subject: Congrats on NewCo — quick thought
525> Hey Jane — congrats on the VP Sales move to NewCo. Your team at Acme
526> saw a 40% improvement in call handling after going live with [product].
527> NewCo's enterprise push could see the same lift.
528>
529> Worth a 15-minute catch-up?
530 
531**Touch 2 — Day 7**
532Subject: NewCo + [product] — a few ideas
533> Quick follow-up — we just launched [new feature] that would've
534> been perfect for the workflow your team ran at Acme. Happy to
535> walk you through it.
536 
537**Touch 3 — Day 14**
538Subject: Whenever the timing is right
539> No rush on this. If [product] makes sense for what you're building
540> at NewCo, I'm a quick call away. Either way, congrats again on the role.
541 
542---
543 
544### Bob Lee — Sales Manager @ StartupX (LinkedIn only)
545Category: Power user | Approach: Bottom-up | 12 days in new role
546 
547**LinkedIn Message:**
548> Hey Bob — congrats on StartupX! You were one of our most active users
549> at Beta LLC. If you want [product] set up for your new team, happy
550> to fast-track it. Let me know.
551 
552---
553 
554Approve these samples? I'll generate the rest in the same style.
555```
556 
557---
558 
559## Step 5: Handoff to Outreach
560 
561Identical to `funding-signal-outreach` Step 5. Package contacts + email sequences for the configured outreach tool. Route LinkedIn-only contacts to `linkedin-outreach` skill.
562 
563### Additional Note for This Composite
564 
565Some contacts will be email, some will be LinkedIn-only. Split the output:
566- **Email contacts** → outreach tool (Smartlead, Instantly, CSV, etc.)
567- **LinkedIn contacts** → LinkedIn automation tool (Dripify, Expandi) or manual LinkedIn queue
568 
569### Output Contract
570 
571```
572campaign_package: {
573 email_campaign: {
574 tool: string
575 file_path: string
576 contact_count: integer
577 }
578 linkedin_campaign: {
579 file_path: string # CSV for LinkedIn tool or manual queue
580 contact_count: integer
581 }
582 total_contacts: integer
583 sequence_touches: integer
584 next_action: string
585}
586```
587 
588### Human Checkpoint
589 
590```
591## Campaign Ready
592 
593Signal type: Champion/buyer/user job change
594Email contacts: X people → [outreach tool]
595LinkedIn contacts: Y people → LinkedIn message queue
596Total: Z people across W companies
597Sequence: 3 touches over 14 days
598 
599Ready to launch?
600```
601 
602---
603 
604## Execution Summary
605 
606| Step | Tool Dependency | Human Checkpoint | Typical Time |
607|------|----------------|-----------------|--------------|
608| 0. Config | None | First run only | 5 min (once) |
609| 1. Detect job changes | Configurable (LinkedIn, Apollo, web search) | Review movers list | 2-5 min |
610| 2. Research + qualify | Web search (always available) | Approve qualified movers | 3-5 min |
611| 3. Find new email | Configurable (Apollo, Clearbit, etc.) | Review contact details | 1-2 min |
612| 4. Draft outreach | None (LLM reasoning) | Review samples, iterate | 5-10 min |
613| 5. Handoff | Configurable (Smartlead, CSV, etc.) | Final launch approval | 1 min |
614 
615**Total human review time: ~15-25 minutes**
616 
617---
618 
619## Key Differences from Other Signal Composites
620 
621| Dimension | Funding / Hiring / Leadership | Champion Move |
622|-----------|------------------------------|---------------|
623| **Relationship** | Cold — they don't know you | Warm — they know and (hopefully) like you |
624| **Input** | List of companies | List of people |
625| **Signal about** | The company | The person |
626| **Qualification** | Is the company relevant? | Is the NEW company relevant? (Person is already qualified) |
627| **Tone** | Professional, prove credibility | Casual, reference shared history |
628| **Conversion rate** | 2-5% reply rate | 10-25% reply rate |
629| **Sequence spacing** | Tight (Day 1/5/12) | Relaxed (Day 1/7/14) |
630| **Touch 3** | Breakup | Check-in (leave door open) |
631 
632---
633 
634## Tips
635 
636- **Run this check monthly, not daily.** Job changes don't happen overnight. Monthly cadence catches moves within the first 30 days, which is the optimal outreach window.
637- **Keep your tracking list fresh.** Add new champions, buyers, and power users as deals close. Remove people who've left the industry entirely.
638- **Specific results beat generic proof.** "Your team saw 40% improvement" is 10x better than "our customers see great results." If you have specific data from their previous company, use it.
639- **Don't be pushy.** These are warm contacts. A desperate tone ("We need your business!") destroys the relationship advantage. Casual and helpful wins.
640- **Promotions are the best sub-signal.** Someone who was a champion and is now a VP is the warmest possible lead — they already believe in your product AND now control budget.
641- **Lost deal contacts are worth tracking too.** "Different company, different needs" is a legitimate re-engagement angle. Their objection at the old company may not apply at the new one.
642- **LinkedIn is often better than email for this signal.** The relationship is personal, not company-to-company. A LinkedIn message feels more natural than a cold-looking email from a sales tool.
643- **If the person was a VERY close contact (executive sponsor, etc.), skip the automated sequence.** Pick up the phone or send a personal email from the founder/AE. Don't automate relationships that deserve a personal touch.
644 

Discussion

Alternatives

Also in Buying signals