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.
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:
Load this composite when:
On first run for a client/user, collect and store these preferences. Skip on subsequent runs.
| 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:
people table — filter by lead_status = 'customer' or similarTracked 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 |
| 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 |
| 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 |
| 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 |
| 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.
Purpose: For each person in the tracking list, determine if they've moved to a new company.
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"
}
]
For each person, use the configured detection_tool:
Check current position against last_known_company:
last_known_company"{full_name}" AND ("{last_known_company}" OR "joined" OR "new role") — look for announcementsFor each person, determine:
For each mover, extract: