funding-signal-outreach

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.

380 stars

Best use case

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

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.

Teams using funding-signal-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/funding-signal-outreach/SKILL.md --create-dirs "https://raw.githubusercontent.com/gooseworks-ai/goose-skills/main/skills/composites/funding-signal-outreach/SKILL.md"

Manual Installation

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

How funding-signal-outreach Compares

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

Frequently Asked Questions

What does this skill do?

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.

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.

SKILL.md Source

# 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 | jane@acme.com | linkedin.com/in/janedoe |
| John Smith | Sales Manager | Champion | john@acme.com | 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

Related Skills

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.

signal-detection-pipeline

380
from gooseworks-ai/goose-skills

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

github-repo-signals

380
from gooseworks-ai/goose-skills

Extract and score leads from GitHub repositories by analyzing stars, forks, issues, PRs, comments, and contributions. Produces unified multi-repo CSV with deduplicated user profiles. No paid API credits required.

event-signals

380
from gooseworks-ai/goose-skills

Extract leads from conferences, meetups, hackathons, and podcasts by analyzing speaker lists, sponsor lists, hackathon entries, and podcast guests. Discovers events via Sessionize, Confs.tech, Meetup, Luma, ListenNotes, and Devpost. Looks back 90 days and forward 180 days.

competitor-signals

380
from gooseworks-ai/goose-skills

Extract leads from competitor product activity — Product Hunt commenters/upvoters, HN posts about competitors, case studies, testimonials, tech press, and switching signals. Detects people actively switching from competitors as highest-priority leads.

community-signals

380
from gooseworks-ai/goose-skills

Extract leads from developer forums (Hacker News, Reddit) by detecting intent signals — alternative seeking, competitor pain, scaling challenges, DIY solutions, and migration intent. Scores users by intent strength and cross-platform presence.

newsletter-signal-scanner

380
from gooseworks-ai/goose-skills

Subscribe to and scan industry newsletters for buying signals, competitor mentions, ICP pain-point language, and market shifts. Parses incoming newsletter emails via AgentMail, matches against keyword campaigns, and delivers a weekly digest of actionable signals. Use when a marketing team wants to turn newsletter subscriptions into an ongoing intelligence feed without manual reading.

news-signal-outreach

380
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

380
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

380
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-monitor

380
from gooseworks-ai/goose-skills

Monitor web sources for Series A-C funding announcements. Aggregates signals from TechCrunch, Crunchbase (via web search), Twitter, Hacker News, and LinkedIn. Filters by stage, amount, and industry. Returns qualified recently-funded companies ready for outreach.

expansion-signal-spotter

380
from gooseworks-ai/goose-skills

Monitor existing customer accounts for upsell and cross-sell signals: team growth on LinkedIn, new job postings, product usage patterns, funding announcements, and public company news. Produces a weekly expansion opportunity list with context and talk tracks. Chains web search, LinkedIn profile monitoring, and job posting detection.