Champion Move Outreach — the warmest signal in B2B — Claude Skill
A Claude Skill for Claude Code by Gooseworks — run /champion-move-outreach in Claude·Updated
Outbound to champions and buyers when they change companies
- Tracks past buyers, champions, power users, and lost-deal contacts for job changes
- Qualifies the new company against your ICP
- Tiers contacts by warmth and time-since-move
- Drafts personalized reconnect sequences leveraging existing relationships
- Routes contacts to email or LinkedIn based on what's available
Who this is for
What it does
When a buyer who bought from you moves to a new company, the conversion rate is 3-5x higher than cold outbound.
Track power users so when they move teams you can re-introduce the product without a sales cycle.
Run periodically to catch every job change in the optimal first-30-days outreach window.
How it works
Take a list of past buyers, champions, and power users as input
Detect job changes via LinkedIn, Apollo, or web search
Research and qualify the new company against ICP
Find new email addresses and assign outreach approach
Draft a 3-touch sequence per contact with relationship anchors
Metrics this improves
Works with
Want to use Champion Move Outreach?
Choose how to get started.
Install and run this skill locally on your computer.
Open a terminal on your computer and paste this command:
This downloads the skill with all its files to your computer:
Add -g at the end to make it available in all your projects.
Start Claude Code, then type the command:
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
peopletable — filter bylead_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:
-
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
- LinkedIn: Visit profile (or use scraping tool) → compare current company to
-
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.
-
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:
-
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)
-
Qualify against ICP:
Criterion Check Pass/Fail Industry Is new_company.industryintarget_industries?Hard filter Size Is employee count within target_company_sizerange?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 -
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 -
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
-
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)
-
Verify the email is at the new company — don't accidentally email their old address.
-
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
-
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) -
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_resultsorcustomer_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_approachSee table below -
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?" -
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.
-
Follow
email-draftinghard 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.