Champion Job Change Tracker
Champion move outreach

End-to-end champion/buyer/user job change signal composite. Takes a set of known people (past buyers, champions, power users), detects when they move to a new company, researches the new company for ICP fit, and drafts personalized…
---
name: champion-move-outreach
version: 1.0.0
description: >
End-to-end champion/buyer/user job change signal composite. Takes a set of
known people (past buyers, champions, power users), detects when they move
to a new company, researches the new company for ICP fit, and drafts
personalized outreach leveraging the existing relationship. Tool-agnostic —
works with any people source, detection method, and outreach platform.
tags: [outreach]
graph:
provides:
- movers-with-icp-fit # People who moved to ICP-fit companies
- new-company-research # Research on the new companies
- personalized-email-sequences # Outreach drafts leveraging existing relationship
requires:
- people-list # Known buyers, champions, users to trackOverview
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.
Manual install (npx, ZIP)
npx skills add gooseworks-ai/goose-skills --skill champion-move-outreach -g -a claude-codemkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/gooseworks-ai/goose-skills/tar.gz/615c685f34f8 \
| tar -xz -C ~/.claude/skills --strip-components=4 goose-skills-615c685f34f8/skills/outreach/composites/champion-move-outreachNew-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/6b0bd2b5f4e6edd43173/champion-move-outreach.zip" -OutFile "$env:TEMP\champion-move-outreach.zip"; Expand-Archive "$env:TEMP\champion-move-outreach.zip" -DestinationPath "$HOME\.claude\skills" -ForceConnects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md26.0 KBskill.meta.json366 B
Read the files here
gooseworks-ai/
Show the full text644 lines
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.
| 1 | |
| 2 | name champion-move-outreach |
| 3 | version 1.0.0 |
| 4 | description > |
| 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. |
| 10 | tags [outreach] |
| 11 | |
| 12 | graph |
| 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 | |
| 32 | 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. |
| 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 | |
| 42 | Load 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 | |
| 51 | On 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 | |
| 115 | tracked_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 | |
| 130 | For each person, use the configured `detection_tool`: |
| 131 | |
| 132 | **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 | |
| 138 | **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 | |
| 143 | **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 | |
| 153 | movers: [ |
| 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 | ] |
| 173 | no_change: [ |
| 174 | { full_name: string, still_at: string } |
| 175 | ] |
| 176 | unable_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 | |
| 186 | Tracked: X people |
| 187 | Moved: Y people |
| 188 | No change: Z people |
| 189 | Unable 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 | |
| 203 | Proceed 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 | |
| 215 | movers: [...] # From Step 1 output |
| 216 | icp_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 | } |
| 223 | your_company: { |
| 224 | description: string |
| 225 | } |
| 226 | |
| 227 | |
| 228 | ### Process |
| 229 | |
| 230 | For each mover's new company: |
| 231 | |
| 232 | **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 | |
| 240 | **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 | |
| 250 | **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 | |
| 259 | **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 | |
| 273 | qualified_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 | ] |
| 308 | disqualified_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 | |
| 346 | Approve 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 | |
| 358 | qualified_movers: [...] # From Step 2 output |
| 359 | contact_tool: string # From config |
| 360 | |
| 361 | |
| 362 | ### Process |
| 363 | |
| 364 | **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 | |
| 370 | **Verify the email is at the new company** — don't accidentally email their old address. |
| 371 | |
| 372 | **Flag contacts without email** — these should be routed to LinkedIn outreach instead. |
| 373 | |
| 374 | ### Output Contract |
| 375 | |
| 376 | |
| 377 | contactable_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 | ] |
| 385 | email_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 | |
| 404 | X contacts with email, Y LinkedIn-only |
| 405 | |
| 406 | Approve 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 | |
| 418 | contactable_movers: [...] # From Step 3 output |
| 419 | your_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 | } |
| 426 | sequence_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 | |
| 436 | **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 | |
| 447 | **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 | |
| 457 | **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 | |
| 467 | **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 | |
| 477 | **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 | |
| 482 | email_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 | |
| 515 | Present samples covering different outreach approaches: |
| 516 | |
| 517 | |
| 518 | ## Sample Outreach for Review |
| 519 | |
| 520 | ### Jane Doe — VP Sales @ NewCo Inc |
| 521 | Category: Past buyer | Approach: Re-sell | 45 days in new role |
| 522 | |
| 523 | **Touch 1 — Day 1** |
| 524 | Subject: 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** |
| 532 | Subject: 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** |
| 538 | Subject: 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) |
| 545 | Category: 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 | |
| 554 | Approve these samples? I'll generate the rest in the same style. |
| 555 | |
| 556 | |
| 557 | |
| 558 | |
| 559 | ## Step 5: Handoff to Outreach |
| 560 | |
| 561 | Identical 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 | |
| 565 | Some 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 | |
| 572 | campaign_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 | |
| 593 | Signal type: Champion/buyer/user job change |
| 594 | Email contacts: X people → [outreach tool] |
| 595 | LinkedIn contacts: Y people → LinkedIn message queue |
| 596 | Total: Z people across W companies |
| 597 | Sequence: 3 touches over 14 days |
| 598 | |
| 599 | Ready 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 |
Details
- Version
- 1.0.0
- Updated
- Sep 21, 2026
- License
- MIT
- Stars on the repo
- ★ 1,220
- Checked
- Source
- gooseworks-ai/goose-skills ↗
- Creator
- gooseworks-ai · 205 listings
Similar skills
See all →
SkillExpansion Opportunity Detector
SkillSeries A-C Signal Tracker
SkillFunded Company Outreach
SkillJob Posting Intent Detection
SkillBuying Signal Detector
SkillBuying Signal ScannerMore from gooseworks-ai
SkillAd Angle Miner
SkillAd Campaign Analyzer
SkillLead Quality Analyzer
SkillMessage Match Auditor
SkillAI Search Visibility
SkillAmazon Product Search