Funding signal outreach

End-to-end funding signal composite.

How to use it

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

For one project only, change the path to .claude/skills/funding-signal-outreach.

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

Paste into Claude, ChatGPT or Cursor.

Show the full text548 lines
funding-signal-outreach/SKILL.md548 lines19.2 KBpushed 96d agoRawView on GitHub

Funding Signal Outreach

Detects recent funding events across a set of companies, qualifies them against your company's context, finds the right people to reach out to, and drafts personalized emails. The full chain from signal to outreach-ready.

When to Auto-Load

Load this composite when:

  • User says "check if any of these companies raised funding", "funding signal outreach", "reach out to recently funded companies"
  • User has a list of companies and wants to act on funding signals
  • An upstream workflow (TAM Pulse, company monitoring) triggers a funding signal check

Architecture

This composite is tool-agnostic. Each step defines a data contract (what goes in, what comes out). The specific tools that fulfill each step are configured once per client/user, not asked every run.

┌─────────────────────────────────────────────────────────────────┐
│                  FUNDING SIGNAL OUTREACH                        │
│                                                                 │
│  ┌──────────┐   ┌──────────┐   ┌──────────┐   ┌──────────┐    │
│  │  DETECT  │──▶│ QUALIFY  │──▶│  FIND    │──▶│  DRAFT   │    │
│  │ Funding  │   │ & Rank   │   │  People  │   │  Emails  │    │
│  └──────────┘   └──────────┘   └──────────┘   └──────────┘    │
│       │              │              │              │            │
│  Input: companies  + your company  + buyer       + signal      │
│  Tool: web search    context        personas      context      │
│    or apollo         (LLM)         Tool: apollo   (LLM)       │
│    or crunchbase                     or linkedin              │
│    or any                            or clearbit              │
│                                      or any                   │
└─────────────────────────────────────────────────────────────────┘

Step 0: Configuration (One-Time Setup)

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

Company Source Config

Question Options Stored As
Where does your company list come from? CSV file / Salesforce / HubSpot / Supabase / Manual list company_source
What fields identify a company? At minimum: company name + domain. Optional: industry, size, location company_fields

Signal Detection Config

Question Options Stored As
How should we detect funding signals? Web search (free) / Apollo / Crunchbase API / PitchBook signal_tool
How far back should we look? 7 / 14 / 30 / 60 / 90 days lookback_days

Contact Finding Config

Question Options Stored As
How should we find contacts at these companies? Apollo / LinkedIn Sales Nav / Clearbit / Web search / Manual contact_tool
Do you have API access? Yes (provide key) / No (use free tier or web search) contact_api_access

Outreach Config

Question Options Stored As
Where do you want outreach sent? Smartlead / Instantly / Outreach.io / Lemlist / Apollo / 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) Qualification + email personalization company_description
What problem do you solve? Email hook pain_point
Who are your ideal buyers? (titles, departments) Contact finding filters buyer_personas
Name 2-3 proof points (customers, metrics, results) Email credibility proof_points
What's your product's price range? (SMB / Mid-Market / Enterprise) Funding stage qualification price_tier

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


Step 1: Detect Funding Signals

Purpose: For each company in the input list, determine if they have raised funding within the lookback window.

Input Contract

companies: [
  {
    name: string          # Required
    domain: string        # Required
    industry?: string     # Optional, helps qualification
    size?: string         # Optional
    location?: string     # Optional
  }
]
lookback_days: integer    # From config (default: 30)

Process

For each company (or in batches):

  1. Search for funding announcements using the configured signal_tool:

    • Web search: Query "{company_name}" AND ("raised" OR "funding" OR "Series") AND "2026" for each company
    • Apollo: Use company enrichment endpoint to pull funding data
    • Crunchbase: Query funding rounds API filtered by date
    • Any other tool: Must return the same output contract
  2. Extract funding details from results:

    • Did they raise? (yes/no)
    • How much?
    • What stage? (Seed, A, B, C, D+)
    • When? (exact date or approximate)
    • Who led the round? (investors)
    • Source URL (for verification)
  3. Filter: Drop companies with no funding signal detected.

Output Contract

funded_companies: [
  {
    name: string
    domain: string
    industry: string
    funding_amount: string        # e.g. "$15M"
    funding_stage: string         # e.g. "Series A"
    funding_date: string          # ISO date or "March 2026"
    lead_investors: string[]      # e.g. ["Sequoia", "a16z"]
    source_url: string            # Link to announcement
    confidence: "high" | "medium" # High = multiple sources or official PR
    original_company_data: object # Pass through all original fields
  }
]

Human Checkpoint

Present results as a table:

Found funding signals for X of Y companies:

| Company | Amount | Stage | Date | Investors | Confidence |
|---------|--------|-------|------|-----------|------------|
| Acme    | $15M   | Series A | 2026-02-15 | Sequoia | High |
| ...     | ...    | ...   | ...  | ...       | ...        |

Proceed with qualification? (Y/n)

Step 2: Qualify & Prioritize

Purpose: Given funded companies + your company context, rank them by outreach priority. This step is pure LLM reasoning — inherently tool-agnostic.

Input Contract

funded_companies: [...]           # From Step 1 output
your_company: {
  description: string             # From config
  pain_point: string              # From config
  buyer_personas: string[]        # From config
  proof_points: string[]          # From config
  price_tier: string              # From config
}

Process

For each funded company, evaluate:

Criterion Weight How to Assess
Stage fit High Does the funding stage match your price tier? Series A → SMB/mid-market tools. Series C → enterprise.
Industry relevance High Is their industry one where your product solves a real problem?
Timing urgency Medium How recent is the funding? <14 days = urgent window. 30-60 days = still viable. 60+ = cooling.
Size signal Medium Post-raise team size estimate. Do they have enough people to need your product?
Round size Low Larger rounds = more budget for tooling. But even small rounds trigger vendor evaluation.

Scoring

Assign each company a priority tier:

  • Tier 1 (Act Today): Stage fit + industry relevance + funded within 14 days
  • Tier 2 (Act This Week): Two of three criteria met, or funded 15-30 days ago with strong fit
  • Tier 3 (Queue): Marginal fit or funding 30+ days old. Worth reaching out but not urgent.
  • Drop: No relevance to your product/market. Remove from pipeline.

For each qualified company, generate:

  • Relevance reasoning: 1-2 sentences on why this company would care about your product right now
  • Outreach angle: The specific hook connecting their funding to your product's value
  • Recommended approach: Direct pain-point, aspirational growth, or operational efficiency framing

Output Contract

qualified_companies: [
  {
    ...funded_company_fields,
    priority_tier: "tier_1" | "tier_2" | "tier_3"
    relevance_reasoning: string
    outreach_angle: string
    recommended_approach: string
    estimated_team_size: string    # Post-raise estimate
  }
]
dropped_companies: [
  {
    name: string
    drop_reason: string
  }
]

Human Checkpoint

Present qualified companies grouped by tier:

## Qualification Results

### Tier 1 — Act Today (X companies)
| Company | Stage | Amount | Angle | Why |
|---------|-------|--------|-------|-----|
| ...     | ...   | ...    | ...   | ... |

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

### Tier 3 — Queue (X companies)
| ... |

### Dropped (X companies)
| Company | Reason |
|---------|--------|
| ...     | ...    |

Approve this list before we find contacts? You can promote, demote, or drop any company.

Step 3: Find Relevant People

Purpose: For each qualified company, find the right people to contact based on your buyer personas.

Input Contract

qualified_companies: [...]        # From Step 2 output
buyer_personas: [                 # From config
  {
    title_patterns: string[]      # e.g. ["VP Sales", "Head of Revenue", "CRO"]
    department: string            # e.g. "Sales", "Engineering"
    seniority: string             # e.g. "VP+", "Director+", "Manager+"
    role_type: "buyer" | "champion" | "user"
  }
]
max_contacts_per_company: integer # Default: 3-5

Process

For each qualified company, use the configured contact_tool:

  1. Search for people matching buyer personas:

    • Apollo: People search with company domain + title filters
    • LinkedIn Sales Nav: Company page → filter by title/seniority
    • Clearbit: Prospector API with role filters
    • Web search: site:linkedin.com/in "{company}" "{title}" queries
    • Any other tool: Must return the same output contract
  2. For each person found, collect:

    • Full name
    • Current title
    • Email (if available from the tool)
    • LinkedIn URL
    • Role type classification (buyer / champion / user)
  3. Prioritize contacts within each company:

    • Buyers first (decision-makers who control budget)
    • Champions second (mid-level who feel the pain daily)
    • Users third (end-users who can advocate bottom-up)
  4. Cap at max_contacts_per_company — typically 3-5 people per company to avoid carpet-bombing.

Output Contract

contacts: [
  {
    person: {
      full_name: string
      first_name: string
      last_name: string
      title: string
      email: string | null
      linkedin_url: string | null
      role_type: "buyer" | "champion" | "user"
    }
    company: {
      name: string
      domain: string
      funding_amount: string
      funding_stage: string
      funding_date: string
      priority_tier: string
      outreach_angle: string
      relevance_reasoning: string
    }
  }
]
contacts_without_email: [...]     # Same structure, flagged for manual lookup

Human Checkpoint

Present contacts grouped by company:

## Contacts Found

### Acme Corp (Tier 1 — Series A, $15M)
| Name | Title | Role Type | Email | LinkedIn |
|------|-------|-----------|-------|----------|
| Jane Doe | VP Sales | Buyer | [email protected] | linkedin.com/in/janedoe |
| John Smith | Sales Manager | Champion | [email protected] | linkedin.com/in/johnsmith |

### Beta Inc (Tier 1 — Series B, $40M)
| ... |

Total: X contacts across Y companies (Z without email)

Approve before we draft emails?

Step 4: Draft Personalized Emails

Purpose: For each contact, draft a personalized email sequence that connects the funding signal to your product's value. This step is pure LLM reasoning — inherently tool-agnostic.

Input Contract

contacts: [...]                   # From Step 3 output
your_company: {                   # From config
  description: string
  pain_point: string
  proof_points: string[]
}
sequence_config: {
  touches: integer                # Default: 3
  timing: integer[]               # Default: [1, 5, 12] (days)
  personalization_tier: 1 | 2 | 3 # Default: 2
  tone: string                    # Default: "casual-direct"
  cta: string                     # Default: "15-min call"
}

Process

  1. Select framework based on signal type:

    • Funding signal → Signal-Proof-Ask (reference the raise, show proof, soft ask)
    • If the funding is for the exact problem you solve → BAB (before/after framing)
  2. Build personalization context per contact:

    Field Source Example
    Signal reference Step 1 "Congratulations on the $15M Series A"
    Company context Step 2 "As you scale the sales team post-raise..."
    Role-specific pain Step 3 role_type Buyer → budget/ROI, Champion → daily friction, User → workflow
    Proof point Config "Companies like [peer] use us to..."
    Outreach angle Step 2 "Scale fast with fresh capital"
  3. Generate emails following email-drafting skill rules:

    • Touch 1: 50-90 words. Hook with funding signal + proof + soft CTA.
    • Touch 2: 30-50 words. New angle (different proof point or asset offer).
    • Touch 3: 20-40 words. Social proof drop or breakup.
    • All hard rules from email-drafting apply (no filler, no "just checking in", one CTA per email, etc.)
  4. By personalization tier:

    • Tier 1: One template per touch with merge fields. Same for all contacts.
    • Tier 2: One template per (role_type + priority_tier) combination. Swap pain points and proof.
    • Tier 3: Unique email per contact. Reference their specific title, company's specific funding context.

Output Contract

email_sequences: [
  {
    contact: { full_name, email, company_name, ... }
    sequence: [
      {
        touch_number: integer
        send_day: integer
        subject: string
        body: string               # With merge fields resolved or ready
        framework: string
        word_count: integer
      }
    ]
  }
]

Human Checkpoint

Present 3-5 sample email sequences (one per tier if Tier 2, one per contact if Tier 3):

## Sample Emails for Review

### Contact: Jane Doe, VP Sales @ Acme Corp (Tier 1, Series A $15M)

**Touch 1 — Day 1**
Subject: Before the Series A hiring sprint
> Hi Jane — congrats on the raise. As Acme scales the sales team...
> [full email]

**Touch 2 — Day 5**
Subject: How [peer company] handled post-raise scaling
> [full email]

**Touch 3 — Day 12**
Subject: One last thought
> [full email]

---

Approve these samples? I'll generate the rest in the same style.
Iterate? Tell me what to change (tone, length, angle, CTA).

After approval, generate remaining emails and output the full set.


Step 5: Handoff to Outreach

Purpose: Package the contacts + email sequences for the configured outreach tool. This step adapts its output format to the tool.

Input Contract

email_sequences: [...]            # From Step 4 output
outreach_tool: string             # From config
outreach_channels: string         # From config

Process

Based on outreach_tool from config:

Tool Action
Smartlead Chain to cold-email-outreach Phase 4 (Smartlead MCP automation)
Instantly Generate Instantly-format CSV
Outreach.io Generate Outreach-compatible CSV
Lemlist Generate Lemlist-format CSV
Apollo Generate Apollo sequence import CSV
CSV export Generate generic CSV with all fields

If outreach_channels includes LinkedIn:

  • Chain to linkedin-outreach skill for LinkedIn message sequences
  • Output CSV for LinkedIn automation tool (Dripify, Expandi, etc.)

Output Contract

campaign_package: {
  tool: string
  file_path: string               # Path to CSV or campaign ID
  contact_count: integer
  sequence_touches: integer
  estimated_send_days: integer
  next_action: string             # "Upload to [tool]" or "Campaign created, activate when ready"
}

Human Checkpoint

## Campaign Ready

Tool: Smartlead (or CSV export, etc.)
Contacts: 23 people across 8 companies
Sequence: 3 touches over 12 days
File: skills/composites/funding-signal-outreach/output/{campaign-name}-{date}.csv

Ready to launch? (This is the final gate before emails are sent or files are created)

Execution Summary

Step Tool Dependency Human Checkpoint Typical Time
0. Config None First run only 5 min (once)
1. Detect Configurable (web search, Apollo, etc.) Review funded company list 2-5 min
2. Qualify None (LLM reasoning) Approve/adjust tier rankings 2-3 min
3. Find People Configurable (Apollo, LinkedIn, etc.) Approve contact list 2-3 min
4. Draft Emails None (LLM reasoning) Review sample emails, iterate 5-10 min
5. Handoff Configurable (Smartlead, CSV, etc.) Final launch approval 1 min

Total human review time: ~15-20 minutes to go from "here are my target companies" to "outreach is live."


Tips

  • Run weekly — funding signals have a 1-3 week outreach window before the company is flooded with vendor pitches
  • Tier 1 companies should be contacted within 48 hours of the funding announcement for maximum impact
  • 3-5 contacts per company is the sweet spot. More than that and you risk the "we're being carpet-bombed" effect
  • Signal-Proof-Ask framework works best for funding signals because the signal itself is the hook
  • Don't mention the funding amount in the email unless it's public and impressive. Focus on what the funding means for them (growth, hiring, new tools), not the number itself
1---
2name: funding-signal-outreach
3version: 1.0.0
4description: >
5 End-to-end funding signal composite. Takes any set of companies, detects recent
6 funding events, qualifies against your company context, finds relevant people
7 (buyers, champions, users), and drafts personalized outreach. Tool-agnostic —
8 works with any company source, contact finder, and outreach platform.
9tags: [outreach]
10 
11graph:
12 provides:
13 - qualified-funded-companies # Companies with recent funding, ranked by relevance
14 - contact-list # People at funded companies matched to buyer personas
15 - personalized-email-sequences # Ready-to-send email drafts per contact
16 requires:
17 - company-list # Any list of companies (CSV, CRM export, manual, Supabase)
18 - your-company-context # What you sell, who you sell to, proof points
19 connects_to:
20 - skill: cold-email-outreach
21 when: "User wants to launch the campaign via their outreach tool"
22 passes: contact-list, personalized-email-sequences
23 - skill: linkedin-outreach
24 when: "User wants LinkedIn outreach instead of or alongside email"
25 passes: contact-list
26 capabilities: [web-search, contact-finding, email-drafting]
27---
28 
29# Funding Signal Outreach
30 
31Detects recent funding events across a set of companies, qualifies them against your company's context, finds the right people to reach out to, and drafts personalized emails. The full chain from signal to outreach-ready.
32 
33## When to Auto-Load
34 
35Load this composite when:
36- User says "check if any of these companies raised funding", "funding signal outreach", "reach out to recently funded companies"
37- User has a list of companies and wants to act on funding signals
38- An upstream workflow (TAM Pulse, company monitoring) triggers a funding signal check
39 
40## Architecture
41 
42This composite is **tool-agnostic**. Each step defines a data contract (what goes in, what comes out). The specific tools that fulfill each step are configured once per client/user, not asked every run.
43 
44```
45┌─────────────────────────────────────────────────────────────────┐
46│ FUNDING SIGNAL OUTREACH │
47│ │
48│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
49│ │ DETECT │──▶│ QUALIFY │──▶│ FIND │──▶│ DRAFT │ │
50│ │ Funding │ │ & Rank │ │ People │ │ Emails │ │
51│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
52│ │ │ │ │ │
53│ Input: companies + your company + buyer + signal │
54│ Tool: web search context personas context │
55│ or apollo (LLM) Tool: apollo (LLM) │
56│ or crunchbase or linkedin │
57│ or any or clearbit │
58│ or any │
59└─────────────────────────────────────────────────────────────────┘
60```
61 
62---
63 
64## Step 0: Configuration (One-Time Setup)
65 
66On first run for a client/user, collect and store these preferences. Skip on subsequent runs.
67 
68### Company Source Config
69| Question | Options | Stored As |
70|----------|---------|-----------|
71| Where does your company list come from? | CSV file / Salesforce / HubSpot / Supabase / Manual list | `company_source` |
72| What fields identify a company? | At minimum: company name + domain. Optional: industry, size, location | `company_fields` |
73 
74### Signal Detection Config
75| Question | Options | Stored As |
76|----------|---------|-----------|
77| How should we detect funding signals? | Web search (free) / Apollo / Crunchbase API / PitchBook | `signal_tool` |
78| How far back should we look? | 7 / 14 / 30 / 60 / 90 days | `lookback_days` |
79 
80### Contact Finding Config
81| Question | Options | Stored As |
82|----------|---------|-----------|
83| How should we find contacts at these companies? | Apollo / LinkedIn Sales Nav / Clearbit / Web search / Manual | `contact_tool` |
84| Do you have API access? | Yes (provide key) / No (use free tier or web search) | `contact_api_access` |
85 
86### Outreach Config
87| Question | Options | Stored As |
88|----------|---------|-----------|
89| Where do you want outreach sent? | Smartlead / Instantly / Outreach.io / Lemlist / Apollo / CSV export | `outreach_tool` |
90| Email or multi-channel? | Email only / Email + LinkedIn | `outreach_channels` |
91 
92### Your Company Context
93| Question | Purpose | Stored As |
94|----------|---------|-----------|
95| What does your company do? (1-2 sentences) | Qualification + email personalization | `company_description` |
96| What problem do you solve? | Email hook | `pain_point` |
97| Who are your ideal buyers? (titles, departments) | Contact finding filters | `buyer_personas` |
98| Name 2-3 proof points (customers, metrics, results) | Email credibility | `proof_points` |
99| What's your product's price range? (SMB / Mid-Market / Enterprise) | Funding stage qualification | `price_tier` |
100 
101**Store config in:** `clients/<client-name>/config/signal-outreach.json` or equivalent.
102 
103---
104 
105## Step 1: Detect Funding Signals
106 
107**Purpose:** For each company in the input list, determine if they have raised funding within the lookback window.
108 
109### Input Contract
110 
111```
112companies: [
113 {
114 name: string # Required
115 domain: string # Required
116 industry?: string # Optional, helps qualification
117 size?: string # Optional
118 location?: string # Optional
119 }
120]
121lookback_days: integer # From config (default: 30)
122```
123 
124### Process
125 
126For each company (or in batches):
127 
1281. **Search for funding announcements** using the configured `signal_tool`:
129 - **Web search:** Query `"{company_name}" AND ("raised" OR "funding" OR "Series") AND "2026"` for each company
130 - **Apollo:** Use company enrichment endpoint to pull funding data
131 - **Crunchbase:** Query funding rounds API filtered by date
132 - **Any other tool:** Must return the same output contract
133 
1342. **Extract funding details** from results:
135 - Did they raise? (yes/no)
136 - How much?
137 - What stage? (Seed, A, B, C, D+)
138 - When? (exact date or approximate)
139 - Who led the round? (investors)
140 - Source URL (for verification)
141 
1423. **Filter:** Drop companies with no funding signal detected.
143 
144### Output Contract
145 
146```
147funded_companies: [
148 {
149 name: string
150 domain: string
151 industry: string
152 funding_amount: string # e.g. "$15M"
153 funding_stage: string # e.g. "Series A"
154 funding_date: string # ISO date or "March 2026"
155 lead_investors: string[] # e.g. ["Sequoia", "a16z"]
156 source_url: string # Link to announcement
157 confidence: "high" | "medium" # High = multiple sources or official PR
158 original_company_data: object # Pass through all original fields
159 }
160]
161```
162 
163### Human Checkpoint
164 
165Present results as a table:
166 
167```
168Found funding signals for X of Y companies:
169 
170| Company | Amount | Stage | Date | Investors | Confidence |
171|---------|--------|-------|------|-----------|------------|
172| Acme | $15M | Series A | 2026-02-15 | Sequoia | High |
173| ... | ... | ... | ... | ... | ... |
174 
175Proceed with qualification? (Y/n)
176```
177 
178---
179 
180## Step 2: Qualify & Prioritize
181 
182**Purpose:** Given funded companies + your company context, rank them by outreach priority. This step is pure LLM reasoning — inherently tool-agnostic.
183 
184### Input Contract
185 
186```
187funded_companies: [...] # From Step 1 output
188your_company: {
189 description: string # From config
190 pain_point: string # From config
191 buyer_personas: string[] # From config
192 proof_points: string[] # From config
193 price_tier: string # From config
194}
195```
196 
197### Process
198 
199For each funded company, evaluate:
200 
201| Criterion | Weight | How to Assess |
202|-----------|--------|---------------|
203| **Stage fit** | High | Does the funding stage match your price tier? Series A → SMB/mid-market tools. Series C → enterprise. |
204| **Industry relevance** | High | Is their industry one where your product solves a real problem? |
205| **Timing urgency** | Medium | How recent is the funding? <14 days = urgent window. 30-60 days = still viable. 60+ = cooling. |
206| **Size signal** | Medium | Post-raise team size estimate. Do they have enough people to need your product? |
207| **Round size** | Low | Larger rounds = more budget for tooling. But even small rounds trigger vendor evaluation. |
208 
209### Scoring
210 
211Assign each company a priority tier:
212 
213- **Tier 1 (Act Today):** Stage fit + industry relevance + funded within 14 days
214- **Tier 2 (Act This Week):** Two of three criteria met, or funded 15-30 days ago with strong fit
215- **Tier 3 (Queue):** Marginal fit or funding 30+ days old. Worth reaching out but not urgent.
216- **Drop:** No relevance to your product/market. Remove from pipeline.
217 
218For each qualified company, generate:
219- **Relevance reasoning:** 1-2 sentences on why this company would care about your product right now
220- **Outreach angle:** The specific hook connecting their funding to your product's value
221- **Recommended approach:** Direct pain-point, aspirational growth, or operational efficiency framing
222 
223### Output Contract
224 
225```
226qualified_companies: [
227 {
228 ...funded_company_fields,
229 priority_tier: "tier_1" | "tier_2" | "tier_3"
230 relevance_reasoning: string
231 outreach_angle: string
232 recommended_approach: string
233 estimated_team_size: string # Post-raise estimate
234 }
235]
236dropped_companies: [
237 {
238 name: string
239 drop_reason: string
240 }
241]
242```
243 
244### Human Checkpoint
245 
246Present qualified companies grouped by tier:
247 
248```
249## Qualification Results
250 
251### Tier 1 — Act Today (X companies)
252| Company | Stage | Amount | Angle | Why |
253|---------|-------|--------|-------|-----|
254| ... | ... | ... | ... | ... |
255 
256### Tier 2 — Act This Week (X companies)
257| ... |
258 
259### Tier 3 — Queue (X companies)
260| ... |
261 
262### Dropped (X companies)
263| Company | Reason |
264|---------|--------|
265| ... | ... |
266 
267Approve this list before we find contacts? You can promote, demote, or drop any company.
268```
269 
270---
271 
272## Step 3: Find Relevant People
273 
274**Purpose:** For each qualified company, find the right people to contact based on your buyer personas.
275 
276### Input Contract
277 
278```
279qualified_companies: [...] # From Step 2 output
280buyer_personas: [ # From config
281 {
282 title_patterns: string[] # e.g. ["VP Sales", "Head of Revenue", "CRO"]
283 department: string # e.g. "Sales", "Engineering"
284 seniority: string # e.g. "VP+", "Director+", "Manager+"
285 role_type: "buyer" | "champion" | "user"
286 }
287]
288max_contacts_per_company: integer # Default: 3-5
289```
290 
291### Process
292 
293For each qualified company, use the configured `contact_tool`:
294 
2951. **Search for people matching buyer personas:**
296 - **Apollo:** People search with company domain + title filters
297 - **LinkedIn Sales Nav:** Company page → filter by title/seniority
298 - **Clearbit:** Prospector API with role filters
299 - **Web search:** `site:linkedin.com/in "{company}" "{title}"` queries
300 - **Any other tool:** Must return the same output contract
301 
3022. **For each person found, collect:**
303 - Full name
304 - Current title
305 - Email (if available from the tool)
306 - LinkedIn URL
307 - Role type classification (buyer / champion / user)
308 
3093. **Prioritize contacts within each company:**
310 - Buyers first (decision-makers who control budget)
311 - Champions second (mid-level who feel the pain daily)
312 - Users third (end-users who can advocate bottom-up)
313 
3144. **Cap at `max_contacts_per_company`** — typically 3-5 people per company to avoid carpet-bombing.
315 
316### Output Contract
317 
318```
319contacts: [
320 {
321 person: {
322 full_name: string
323 first_name: string
324 last_name: string
325 title: string
326 email: string | null
327 linkedin_url: string | null
328 role_type: "buyer" | "champion" | "user"
329 }
330 company: {
331 name: string
332 domain: string
333 funding_amount: string
334 funding_stage: string
335 funding_date: string
336 priority_tier: string
337 outreach_angle: string
338 relevance_reasoning: string
339 }
340 }
341]
342contacts_without_email: [...] # Same structure, flagged for manual lookup
343```
344 
345### Human Checkpoint
346 
347Present contacts grouped by company:
348 
349```
350## Contacts Found
351 
352### Acme Corp (Tier 1 — Series A, $15M)
353| Name | Title | Role Type | Email | LinkedIn |
354|------|-------|-----------|-------|----------|
355| Jane Doe | VP Sales | Buyer | [email protected] | linkedin.com/in/janedoe |
356| John Smith | Sales Manager | Champion | [email protected] | linkedin.com/in/johnsmith |
357 
358### Beta Inc (Tier 1 — Series B, $40M)
359| ... |
360 
361Total: X contacts across Y companies (Z without email)
362 
363Approve before we draft emails?
364```
365 
366---
367 
368## Step 4: Draft Personalized Emails
369 
370**Purpose:** For each contact, draft a personalized email sequence that connects the funding signal to your product's value. This step is pure LLM reasoning — inherently tool-agnostic.
371 
372### Input Contract
373 
374```
375contacts: [...] # From Step 3 output
376your_company: { # From config
377 description: string
378 pain_point: string
379 proof_points: string[]
380}
381sequence_config: {
382 touches: integer # Default: 3
383 timing: integer[] # Default: [1, 5, 12] (days)
384 personalization_tier: 1 | 2 | 3 # Default: 2
385 tone: string # Default: "casual-direct"
386 cta: string # Default: "15-min call"
387}
388```
389 
390### Process
391 
3921. **Select framework based on signal type:**
393 - Funding signal → **Signal-Proof-Ask** (reference the raise, show proof, soft ask)
394 - If the funding is for the exact problem you solve → **BAB** (before/after framing)
395 
3962. **Build personalization context per contact:**
397 
398 | Field | Source | Example |
399 |-------|--------|---------|
400 | Signal reference | Step 1 | "Congratulations on the $15M Series A" |
401 | Company context | Step 2 | "As you scale the sales team post-raise..." |
402 | Role-specific pain | Step 3 role_type | Buyer → budget/ROI, Champion → daily friction, User → workflow |
403 | Proof point | Config | "Companies like [peer] use us to..." |
404 | Outreach angle | Step 2 | "Scale fast with fresh capital" |
405 
4063. **Generate emails following `email-drafting` skill rules:**
407 - Touch 1: 50-90 words. Hook with funding signal + proof + soft CTA.
408 - Touch 2: 30-50 words. New angle (different proof point or asset offer).
409 - Touch 3: 20-40 words. Social proof drop or breakup.
410 - All hard rules from `email-drafting` apply (no filler, no "just checking in", one CTA per email, etc.)
411 
4124. **By personalization tier:**
413 - **Tier 1:** One template per touch with merge fields. Same for all contacts.
414 - **Tier 2:** One template per (role_type + priority_tier) combination. Swap pain points and proof.
415 - **Tier 3:** Unique email per contact. Reference their specific title, company's specific funding context.
416 
417### Output Contract
418 
419```
420email_sequences: [
421 {
422 contact: { full_name, email, company_name, ... }
423 sequence: [
424 {
425 touch_number: integer
426 send_day: integer
427 subject: string
428 body: string # With merge fields resolved or ready
429 framework: string
430 word_count: integer
431 }
432 ]
433 }
434]
435```
436 
437### Human Checkpoint
438 
439Present 3-5 sample email sequences (one per tier if Tier 2, one per contact if Tier 3):
440 
441```
442## Sample Emails for Review
443 
444### Contact: Jane Doe, VP Sales @ Acme Corp (Tier 1, Series A $15M)
445 
446**Touch 1 — Day 1**
447Subject: Before the Series A hiring sprint
448> Hi Jane — congrats on the raise. As Acme scales the sales team...
449> [full email]
450 
451**Touch 2 — Day 5**
452Subject: How [peer company] handled post-raise scaling
453> [full email]
454 
455**Touch 3 — Day 12**
456Subject: One last thought
457> [full email]
458 
459---
460 
461Approve these samples? I'll generate the rest in the same style.
462Iterate? Tell me what to change (tone, length, angle, CTA).
463```
464 
465After approval, generate remaining emails and output the full set.
466 
467---
468 
469## Step 5: Handoff to Outreach
470 
471**Purpose:** Package the contacts + email sequences for the configured outreach tool. This step adapts its output format to the tool.
472 
473### Input Contract
474 
475```
476email_sequences: [...] # From Step 4 output
477outreach_tool: string # From config
478outreach_channels: string # From config
479```
480 
481### Process
482 
483Based on `outreach_tool` from config:
484 
485| Tool | Action |
486|------|--------|
487| **Smartlead** | Chain to `cold-email-outreach` Phase 4 (Smartlead MCP automation) |
488| **Instantly** | Generate Instantly-format CSV |
489| **Outreach.io** | Generate Outreach-compatible CSV |
490| **Lemlist** | Generate Lemlist-format CSV |
491| **Apollo** | Generate Apollo sequence import CSV |
492| **CSV export** | Generate generic CSV with all fields |
493 
494If `outreach_channels` includes LinkedIn:
495- Chain to `linkedin-outreach` skill for LinkedIn message sequences
496- Output CSV for LinkedIn automation tool (Dripify, Expandi, etc.)
497 
498### Output Contract
499 
500```
501campaign_package: {
502 tool: string
503 file_path: string # Path to CSV or campaign ID
504 contact_count: integer
505 sequence_touches: integer
506 estimated_send_days: integer
507 next_action: string # "Upload to [tool]" or "Campaign created, activate when ready"
508}
509```
510 
511### Human Checkpoint
512 
513```
514## Campaign Ready
515 
516Tool: Smartlead (or CSV export, etc.)
517Contacts: 23 people across 8 companies
518Sequence: 3 touches over 12 days
519File: skills/composites/funding-signal-outreach/output/{campaign-name}-{date}.csv
520 
521Ready to launch? (This is the final gate before emails are sent or files are created)
522```
523 
524---
525 
526## Execution Summary
527 
528| Step | Tool Dependency | Human Checkpoint | Typical Time |
529|------|----------------|-----------------|--------------|
530| 0. Config | None | First run only | 5 min (once) |
531| 1. Detect | Configurable (web search, Apollo, etc.) | Review funded company list | 2-5 min |
532| 2. Qualify | None (LLM reasoning) | Approve/adjust tier rankings | 2-3 min |
533| 3. Find People | Configurable (Apollo, LinkedIn, etc.) | Approve contact list | 2-3 min |
534| 4. Draft Emails | None (LLM reasoning) | Review sample emails, iterate | 5-10 min |
535| 5. Handoff | Configurable (Smartlead, CSV, etc.) | Final launch approval | 1 min |
536 
537**Total human review time: ~15-20 minutes** to go from "here are my target companies" to "outreach is live."
538 
539---
540 
541## Tips
542 
543- **Run weekly** — funding signals have a 1-3 week outreach window before the company is flooded with vendor pitches
544- **Tier 1 companies should be contacted within 48 hours** of the funding announcement for maximum impact
545- **3-5 contacts per company** is the sweet spot. More than that and you risk the "we're being carpet-bombed" effect
546- **Signal-Proof-Ask** framework works best for funding signals because the signal itself is the hook
547- **Don't mention the funding amount in the email** unless it's public and impressive. Focus on what the funding means for them (growth, hiring, new tools), not the number itself
548 

Discussion

Alternatives

Also in Buying signals