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 outreach leveraging the existing relationship. Tool-agnostic — works with any people source, detection method, and outreach platform.

381 stars

Best use case

champion-move-outreach is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

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.

Teams using champion-move-outreach should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/champion-move-outreach/SKILL.md --create-dirs "https://raw.githubusercontent.com/gooseworks-ai/goose-skills/main/skills/composites/champion-move-outreach/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/champion-move-outreach/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How champion-move-outreach Compares

Feature / Agentchampion-move-outreachStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

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.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

Related Guides

SKILL.md Source

# 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 | jane.doe@newco.com | 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.

Related Skills

news-signal-outreach

381
from gooseworks-ai/goose-skills

End-to-end news-triggered signal composite. Takes any piece of news — an article, LinkedIn post, tweet, announcement, event, trend, regulation, product launch, acquisition, layoff, expansion, or any other public event — and evaluates whether the companies or people mentioned are ICP fits. If yes, identifies the connection between the news and your product, finds the right people to contact, and drafts personalized outreach using the news as the hook. Tool-agnostic. Accepts both company-level and person-level news triggers. AUTO-TRIGGER: Load this composite whenever a user shares a URL (LinkedIn post, article, tweet, blog post) or mentions a company/person they "came across", "saw", or "found" from any external source and asks about relevance, fit, ICP match, or whether to reach out. The user does NOT need to explicitly say "outreach" — any signal evaluation request from an external source triggers this.

leadership-change-outreach

381
from gooseworks-ai/goose-skills

End-to-end leadership change signal composite. Takes any set of companies, detects recent leadership changes (new VP+, C-suite hires and promotions), evaluates relevance to your product, and drafts personalized outreach. Uses Apollo People Search (free) for fast detection + Apollo Enrichment (1 credit/person) for employment history, start dates, LinkedIn URLs, and verified emails.

hiring-signal-outreach

381
from gooseworks-ai/goose-skills

End-to-end hiring signal composite. Takes any set of companies, detects job postings that your product augments or replaces, finds relevant people (the hiring manager, buyers, champions, users), and drafts personalized outreach using the job role as the hook. Tool-agnostic — works with any company source, job board, contact finder, and outreach platform.

funding-signal-outreach

381
from gooseworks-ai/goose-skills

End-to-end funding signal composite. Takes any set of companies, detects recent funding events, qualifies against your company context, finds relevant people (buyers, champions, users), and drafts personalized outreach. Tool-agnostic — works with any company source, contact finder, and outreach platform.

setup-outreach-campaign

381
from gooseworks-ai/goose-skills

Set up a complete outbound email campaign in Smartlead. Asks the user for campaign goal, audience, messaging, schedule, and mailbox allocation. Creates the campaign, adds leads, saves email sequences, sets schedule, and assigns available mailboxes. Use when a user wants to launch email outreach via Smartlead.

linkedin-outreach

380
from gooseworks-ai/goose-skills

End-to-end LinkedIn outreach campaign builder. Takes leads from Supabase, upstream skills, or CSV. Aligns on campaign goal and tone, writes personalized LinkedIn message sequences (connection request + follow-ups + optional InMail), presents for review, and exports for the user's outreach tool (Dripify, Botdog, Expandi, or manual CSV). Logs to Supabase outreach_log.

cold-email-outreach

380
from gooseworks-ai/goose-skills

End-to-end cold email outreach orchestration. Handles goal alignment, lead ingestion from any source (CSV, paste, CRM export, database), sequence design, email generation, campaign setup in the user's chosen outreach tool, and launch. Tool-agnostic — supports Smartlead (full MCP automation), Instantly, Lemlist, Apollo, or manual CSV export.

champion-tracker

380
from gooseworks-ai/goose-skills

Track product champions for job changes and qualify their new companies against ICP. Takes a CSV of known champions (with LinkedIn URLs), creates a baseline snapshot via Apify enrichment, then detects when champions move to new companies. Scores new companies on a 0-4 ICP fit scale. Outputs a downloadable CSV of movers with qualification verdicts.

signal-detection-pipeline

381
from gooseworks-ai/goose-skills

Detect buying signals from multiple sources, qualify leads, and generate outreach context

seo-content-engine

381
from gooseworks-ai/goose-skills

Build and run an SEO content engine: audit current state, identify gaps, build keyword architecture, generate content calendar, draft content.

outbound-prospecting-engine

381
from gooseworks-ai/goose-skills

End-to-end outbound prospecting: detect intent signals, research companies, find decision-maker contacts, personalize messaging, launch campaign.

event-prospecting-pipeline

381
from gooseworks-ai/goose-skills

Find attendees at conferences/events, research their companies, qualify against ICP, and launch outreach