How to use it
- Hit Copy the whole skill.
- 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. - Describe your job in plain words. The AI follows the skill from there.
npx degit gooseworks-ai/goose-skills/skills/outreach/composites/news-signal-outreach#main ~/.claude/skills/news-signal-outreachFor one project only, change the path to .claude/skills/news-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.
Paste into Claude, ChatGPT or Cursor.
Show the full text804 lines
News Signal Outreach
The catch-all signal composite. Every other composite handles a specific signal type (funding, hiring, leadership change, champion move). This one handles everything else — any piece of news or public event that could create a reason to reach out.
A regulation change. A product recall. A competitor acquisition. A market expansion. A layoff. An earnings miss. A new partnership. An industry report. A conference keynote. A viral LinkedIn post. Any external event that shifts a company's priorities, creates urgency, or opens a window for your product.
Why this composite exists: The world generates an infinite stream of potential outreach triggers. The four structured signal composites handle the most common patterns. This composite handles the long tail — the unpredictable, opportunistic moments that often produce the best outreach because nobody else is sending a templated sequence about them.
When to Auto-Load
Load this composite when ANY of these are true:
- User shares ANY URL (LinkedIn post, article, tweet, blog, news) and asks about a company or person mentioned in it
- User says "came across", "saw this post", "found this article", "check this out", "is this relevant", "is this company a fit", "should we reach out"
- User mentions a company or person they discovered from an external source (social media, news, conference, podcast, newsletter) and asks about relevance or fit
- User asks "can we reach out to anyone based on this?"
- User says "check if this news is relevant to our prospects", "news-based outreach", "trigger-based outreach"
- User has a list of companies and wants to check recent news for outreach angles
- The news doesn't fit neatly into funding, hiring, leadership change, or champion move categories
- An upstream workflow surfaces a news item that needs evaluation
Key principle: If the user shares an external signal (URL, post, article, mention) and asks ANY question about the companies/people in it — load this composite. Don't wait for the word "outreach." The composite handles both evaluation-only (Steps 1-3) and full outreach (Steps 1-6).
Input Flexibility
This composite accepts three input modes:
| Mode | Input | Example |
|---|---|---|
| News → Companies | A news item. Extract companies/people mentioned, qualify them. | "Here's an article about new FDA regulations on telehealth" |
| Companies → News | A list of companies. Find recent news about them, evaluate relevance. | "Check these 50 companies for any news we can use as an outreach angle" |
| Person → News | A person or list of people. Find recent news about them or their company, evaluate relevance. | "Check if any of these prospects have been in the news" |
Step 0: Configuration (One-Time Setup)
On first run for a client/user, collect and store these preferences. Skip on subsequent runs.
ICP Definition
| Question | Purpose | Stored As |
|---|---|---|
| What does your company do? (1-2 sentences) | Relevance matching | company_description |
| What problem do you solve? | Connection angle identification | pain_point |
| What industries do you sell to? | ICP filter | target_industries |
| What company sizes? | ICP filter | target_company_size |
| What geographies? | ICP filter (optional) | target_geographies |
| Any disqualifiers? | Hard no's | disqualifiers |
| Who are your buyers? (titles) | Contact finding | buyer_titles |
| Who are your champions? (titles) | Contact finding | champion_titles |
| Who are your users? (titles) | Contact finding | user_titles |
Your Company Context
| Question | Purpose | Stored As |
|---|---|---|
| What specific outcomes does your product deliver? | Relevance angle building | product_outcomes |
| Name 2-3 proof points (customers, metrics) | Email credibility | proof_points |
| What categories of news are most relevant to your product? | Helps prioritize | relevant_news_categories |
Examples of relevant_news_categories:
# For a cybersecurity product:
relevant_news_categories: ["data breach", "compliance regulation", "security incident",
"digital transformation", "cloud migration", "IPO/going public"]
# For a sales AI product:
relevant_news_categories: ["sales team scaling", "market expansion", "new product launch",
"competitor acquisition", "cost cutting", "revenue miss"]
# For an HR tech product:
relevant_news_categories: ["layoffs", "rapid hiring", "remote work policy",
"DEI initiative", "union activity", "culture crisis"]
Signal Detection Config
| Question | Options | Stored As |
|---|---|---|
| How should we find news? | Web search / Google News / RSS feeds / Social media | news_tool |
| How far back should we look? (when scanning companies for news) | 7 / 14 / 30 / 60 days | lookback_days |
Contact Finding & Outreach Config
| Question | Options | Stored As |
|---|---|---|
| How should we find contacts? | Apollo / LinkedIn / Clearbit / Web search | contact_tool |
| Where do you want outreach sent? | Smartlead / Instantly / Outreach.io / CSV export | outreach_tool |
| Email or multi-channel? | Email only / Email + LinkedIn | outreach_channels |
Store config in: clients/<client-name>/config/signal-outreach.json or equivalent.
Step 1: Parse & Extract
Purpose: Take the raw news input — whatever form it arrives in — and extract structured entities (companies, people) and the core event.
Input Contract
Three modes:
Mode A: News → Companies/People
news_input: {
mode: "news_to_targets"
items: [
{
type: "url" | "text" | "structured"
content: string # URL to article, raw text, or structured summary
source: string | null # "TechCrunch", "LinkedIn post", "user provided", etc.
}
]
}
Mode B: Companies → News
news_input: {
mode: "targets_to_news"
companies: [
{
name: string
domain: string
industry?: string
}
]
lookback_days: integer
}
Mode C: People → News
news_input: {
mode: "people_to_news"
people: [
{
full_name: string
company: string
linkedin_url?: string
}
]
lookback_days: integer
}
Process
Mode A: News → Companies/People
Fetch and parse the news content:
- If URL → fetch the page, extract article text
- If raw text → use as-is
- If structured → use as-is
Extract entities:
- Companies mentioned (name, role in the story — subject, affected party, partner, competitor)
- People mentioned (name, title, company, role in the story)
- The core event (what happened, in one sentence)
- Event category (regulation, acquisition, partnership, product launch, market event, crisis, expansion, contraction, etc.)
- Date of event
- Affected industries
Expand if needed: If the news implies a broader set of affected companies beyond those mentioned:
- "New FDA regulation on telehealth" → all telehealth companies, not just ones in the article
- "Major data breach at [company]" → the breached company AND their competitors (who can capitalize)
- "Industry report shows X trend" → companies in that industry
Mode B: Companies → News
For each company, search for recent news using configured
news_tool:- Web search:
"{company_name}" AND (news OR announced OR launches OR raises OR expands OR partners)withinlookback_days - Filter results against
relevant_news_categoriesfrom config - Extract the same fields as Mode A for each news item found
- Web search:
Group results: Company → list of news items, ranked by relevance to your product
Mode C: People → News
For each person, search for recent news/activity:
- Web search:
"{full_name}" AND "{company}"withinlookback_days - LinkedIn activity (if available): recent posts, shares, comments
- Look for: promotions, speaking engagements, published articles, quoted in press, new projects
- Web search:
Group results: Person → list of news items/activity
Output Contract
extracted_signals: [
{
entity: {
type: "company" | "person"
name: string
company: string # Company name (same as name if type=company)
domain: string | null
role_in_news: string # "subject", "affected", "partner", "competitor", "mentioned"
}
news: {
headline: string # One-line summary of what happened
event_category: string # "regulation", "acquisition", "expansion", "crisis", etc.
event_date: string
full_summary: string # 2-3 sentence summary
source_url: string | null
affected_industries: string[]
}
}
]
Human Checkpoint
## Extracted Signals
Source: [news source/input description]
Event: [one-line summary]
Category: [event category]
### Companies/People Extracted
| Entity | Type | Role in News | Industry |
|--------|------|-------------|----------|
| Acme Corp | Company | Subject | Healthcare |
| Jane Doe | Person | Quoted (CEO) | Healthcare |
| HealthTech sector | Industry | Affected | Healthcare |
Also evaluating: X companies in [affected industry] not directly mentioned
Proceed with ICP qualification? (Y/n)
Step 2: Qualify Against ICP
Purpose: For each extracted entity, determine if they're an ICP fit. Drop companies/people that don't match. Pure LLM reasoning — inherently tool-agnostic.
Input Contract
extracted_signals: [...] # From Step 1 output
icp_criteria: {
target_industries: string[]
target_company_size: string
target_geographies: string[]
disqualifiers: string[]
}
your_company: {
description: string
pain_point: string
}
Process
For each entity:
If entity is a company:
- Check industry against
target_industries - Estimate company size (from news context or quick web search)
- Check geography if relevant
- Check against
disqualifiers - Result: Pass / Fail with reasoning
- Check industry against
If entity is a person:
- Identify their company
- Qualify the company through the same ICP checks above
- Additionally check: is this person's role relevant? (matches
buyer_titles,champion_titles, oruser_titles) - Result: Pass / Fail with reasoning
For entities implied but not mentioned (e.g., "all telehealth companies" from a regulation news):
- Use web search or existing company lists to identify specific companies in the affected space
- Qualify each against ICP
- This step may surface new companies not in your existing pipeline
Output Contract
icp_qualified: [
{
entity: { ... } # From Step 1
news: { ... } # From Step 1
icp_assessment: {
fit: "strong" | "moderate"
industry_match: boolean
size_match: boolean | "unknown"
reasoning: string # Why they're a fit
}
}
]
icp_disqualified: [
{
entity_name: string
reason: string
}
]
Human Checkpoint
## ICP Qualification
### Qualified (X entities)
| Entity | Type | Industry | Size | ICP Fit | Reasoning |
|--------|------|----------|------|---------|-----------|
| Acme Corp | Company | Healthcare SaaS | ~200 | Strong | Core ICP industry, right size |
| MedTech Inc | Company | HealthTech | ~500 | Moderate | Adjacent industry, large |
### Disqualified (X entities)
| Entity | Reason |
|--------|--------|
| BigPharma Co | Enterprise (50K+ employees) — above target size |
Approve qualified list?
Step 3: Identify Connection Angle
Purpose: This is the critical thinking step. For each ICP-qualified entity, determine the specific connection between the news event and your product. Why should they care about your product RIGHT NOW because of THIS news? Pure LLM reasoning — inherently tool-agnostic.
Input Contract
icp_qualified: [...] # From Step 2 output
your_company: {
description: string
pain_point: string
product_outcomes: string[]
proof_points: string[]
relevant_news_categories: string[]
}
Process
For each qualified entity, answer three questions:
Question 1: "Why does this news create urgency for our product?"
Map the news event category to a product relevance pattern:
| Event Category | How It Creates Urgency | Example |
|---|---|---|
| Regulation change | They need to comply, your product helps them comply or adapt faster | "New data privacy law → they need [your compliance tool] before enforcement date" |
| Acquisition / Merger | Systems need integration, processes need standardization, new leadership evaluates stack | "Acquired a company → need to unify [function your product handles]" |
| Market expansion | New market = new challenges, need tools that scale | "Expanding to EMEA → need [your product] for localized [function]" |
| Product launch | Scaling up means scaling operations | "Launching enterprise tier → need [your product] to handle enterprise [function]" |
| Competitive pressure | Competitor moved, they need to respond | "Competitor launched [X] → they need to level up [area your product addresses]" |
| Cost cutting / Layoffs | Do more with less, automation becomes essential | "Cut 15% of staff → need [your product] to maintain output with smaller team" |
| Crisis / Incident | Reactive buying — they need a solution NOW | "Data breach → urgently need [your security product]" |
| Partnership | New partner = new workflows, new opportunities | "Partnered with [company] → need [your product] to support the integration" |
| Earnings / Growth | Over-performing = scaling challenges. Under-performing = efficiency pressure | "Revenue grew 3x → [function your product handles] can't keep up manually" |
| Industry trend / Report | Category awareness is high, they're thinking about this | "Industry report says [trend] → they're likely evaluating solutions in this space" |
| Person-level news | Published an article, spoke at a conference, posted on LinkedIn about a topic you solve | "Posted about [pain] → they're actively thinking about this problem" |
Question 2: "What's the specific angle?"
Craft a one-sentence connection:
"Because [news event], [company] now needs [specific outcome your product delivers]."
Examples:
- "Because Acme just acquired BetaCo, they need to unify two separate CRM systems — exactly what [product] does in 30 days."
- "Because the new HIPAA amendment takes effect in Q3, [company] needs to audit their data handling — [product] automates this."
- "Because [person] just posted about struggling with [pain], they're actively looking for a solution — [product] solves this."
Question 3: "How strong is this connection?"
| Strength | Criteria | Example |
|---|---|---|
| Direct | The news explicitly describes a problem your product solves | Layoff in your product's department → they need automation |
| Adjacent | The news implies a downstream need your product addresses | Market expansion → implies scaling, which implies need for your tool |
| Thematic | The news is in the same category as your product's domain | Industry report about the trend you're in → awareness play |
Output Contract
connection_angles: [
{
entity: { ... }
news: { ... }
icp_assessment: { ... }
connection: {
urgency_reason: string # Why this news creates urgency
specific_angle: string # One-sentence connection
connection_strength: "direct" | "adjacent" | "thematic"
timing_note: string # How time-sensitive this outreach is
recommended_framework: string # Which email framework fits best
}
}
]
Framework Selection Based on Connection Strength
| Connection Strength | Recommended Framework | Why |
|---|---|---|
| Direct | Signal-Proof-Ask | The news IS the hook — reference it directly, show proof, ask |
| Adjacent | PAS | Problem (implied by the news) → Agitate (what happens if they don't act) → Solve |
| Thematic | AIDA | Attention (news reference) → Interest (how it relates to them) → Desire (your product) → Action |
Human Checkpoint
## Connection Angles
### Direct Connections (X entities) — Act quickly
| Entity | News | Angle | Timing |
|--------|------|-------|--------|
| Acme Corp | Acquired BetaCo | "Need to unify CRM systems — [product] does this in 30 days" | This week (integration planning starts immediately) |
### Adjacent Connections (X entities)
| Entity | News | Angle | Timing |
|--------|------|-------|--------|
| MedTech Inc | Expanding to EMEA | "Localized [function] becomes a requirement — [product] supports 15 languages" | This month |
### Thematic Connections (X entities)
| Entity | News | Angle | Timing |
|--------|------|-------|--------|
| HealthCo | Industry report on [trend] | "They're likely evaluating [category] solutions" | Flexible |
Approve these angles before we find contacts?
Step 4: Find Relevant People
Purpose: For each qualified entity with a connection angle, find the right people to contact.
Input Contract
connection_angles: [...] # From Step 3 output
buyer_titles: string[] # From config
champion_titles: string[] # From config
user_titles: string[] # From config
max_contacts_per_company: integer # Default: 3-5
Process
If the entity is already a person (Mode C or person mentioned in news):
- They're the primary contact. Still find 1-2 additional contacts at their company (buyer if they're a champion, champion if they're a buyer) for multi-threading.
If the entity is a company:
- Use configured
contact_toolto find people matchingbuyer_titles,champion_titles,user_titles - Prioritize people whose role is closest to the news event:
News Category Prioritize These Contacts Regulation / Compliance Legal, Compliance, Operations leadership Acquisition / Merger COO, CTO, VP Operations, Integration leads Market expansion VP Sales, VP Marketing, Country/Regional leads Cost cutting / Layoffs COO, CFO, VP Operations Product launch CTO, VP Product, VP Engineering Crisis / Incident CISO, VP Engineering, CTO (for security), CEO/COO (for operational) General growth Default to buyer_titlesfrom config- Use configured
For each contact, note their relevance to the news:
- Are they directly affected by the news? (Their department, their function)
- Are they the decision-maker for the response to this news?
- Are they the person who will feel the pain this news creates?
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"
news_relevance: string # Why THIS person for THIS news
}
company: {
name: string
domain: string
}
connection: {
specific_angle: string
connection_strength: string
urgency_reason: string
}
news: {
headline: string
event_category: string
source_url: string | null
}
}
]
Human Checkpoint
## Contacts Found
### Acme Corp — "Acquired BetaCo" (Direct connection)
| Name | Title | Role | Why This Person |
|------|-------|------|----------------|
| Sarah Kim | COO | Buyer | Owns post-acquisition integration |
| David Park | VP Operations | Champion | Will manage unified workflows |
| Amy Chen | Director of Sales Ops | User | Directly affected by CRM unification |
### MedTech Inc — "Expanding to EMEA" (Adjacent connection)
| ... |
Total: X contacts across Y companies
Approve before we draft emails?
Step 5: Draft Personalized Outreach
Purpose: Draft outreach where the news event is the hook, your product is the solution, and the email demonstrates you understand their specific situation. Pure LLM reasoning — inherently tool-agnostic.
Input Contract
contacts: [...] # From Step 4 output
your_company: {
description: string
pain_point: string
product_outcomes: string[]
proof_points: string[]
}
sequence_config: {
touches: integer # Default: 3
timing: integer[] # Default varies by connection strength (see below)
tone: string # Default: "casual-direct"
cta: string # Default: "15-min call"
}
Process
Adjust sequence timing by connection strength:
Strength Timing Rationale Direct Day 1 / 3 / 7 Urgency is real — they're actively dealing with this Adjacent Day 1 / 5 / 12 Standard timing — urgency is implied, not immediate Thematic Day 1 / 7 / 14 Slower cadence — this is awareness, not crisis response Build the email around the news, not the product:
The news is the subject. Your product is the punchline. Never lead with the product.
Element Source How to Use News hook Step 1 news.headlineOpen with what happened — show you're informed Impact on them Step 3 connection.urgency_reasonExplain what this means for their specific role Your angle Step 3 connection.specific_angleConnect the dots to your product naturally Proof Config proof_pointsShow a peer who faced a similar situation CTA Config Low-friction ask Email structure by connection strength:
Direct connection (Signal-Proof-Ask):
Hook: Reference the specific news event Impact: What this means for them (1 sentence) Proof: A peer who faced the same situation and used your product Ask: Soft CTAAdjacent connection (PAS):
Problem: The downstream challenge the news creates Agitate: What happens if they don't address it (1 sentence) Solve: How your product helps, with a proof point Ask: Soft CTAThematic connection (AIDA):
Attention: Reference the news/trend Interest: How it relates to their company specifically Desire: What your product does in this context Action: Soft CTAPersonalization layers:
Layer What Gets Personalized Source News reference The specific event and its relevance Step 1 news data Company context What their company does, their industry, their situation Step 2 ICP research Role context Why THIS person cares about this news Step 4 news_relevanceYour company fit How your product specifically helps in this scenario Step 3 connection angle Follow
email-draftingskill hard rules. Additionally:- Never sensationalize negative news. If the signal is a layoff, breach, or crisis, be empathetic, not opportunistic. "I know this is a challenging time" not "Your layoffs mean you need our tool!"
- Don't pretend you just happened to see the news. Be direct: "Saw the news about [event]" not "I came across an interesting article."
- If the news is about a crisis, wait 48-72 hours before reaching out. Immediate outreach during a crisis looks predatory.
Output Contract
email_sequences: [
{
contact: { full_name, email, title, company_name, role_type, news_relevance }
news_context: { headline, event_category, source_url }
connection: { specific_angle, connection_strength }
sequence: [
{
touch_number: integer
send_day: integer
subject: string
body: string
framework: string
personalization_elements: {
news_reference: string # How the news was referenced
company_context: string # How their company situation was used
role_context: string # How their specific role was leveraged
product_connection: string # How the product was positioned
}
word_count: integer
}
]
}
]
Human Checkpoint
Present samples grouped by connection strength:
## Sample Outreach for Review
### Direct Connection: Sarah Kim, COO @ Acme Corp
News: Acme acquired BetaCo | Angle: CRM unification | Framework: Signal-Proof-Ask
**Touch 1 — Day 1**
Subject: Unifying Acme + BetaCo systems
> Hi Sarah — saw the BetaCo acquisition. Congrats. The integration
> sprint typically surfaces a CRM unification challenge fast —
> two systems, overlapping data, different workflows.
>
> [Peer company] faced the same thing after their acquisition last year.
> [Product] had both systems unified in 30 days. Happy to share how.
>
> Worth a 15-minute call?
**Touch 2 — Day 3**
> [New angle — data migration complexity, with a specific metric]
**Touch 3 — Day 7**
> [Breakup with offer to share the integration playbook]
---
### Adjacent Connection: Dr. Lee, VP Product @ MedTech Inc
News: EMEA expansion | Angle: Localization needs | Framework: PAS
**Touch 1 — Day 1**
Subject: EMEA expansion + [function] localization
> [full email]
---
Approve these samples? I'll generate the rest in the same style.
Step 6: Handoff to Outreach
Identical to the other signal composites. Package contacts + email sequences for the configured outreach tool.
Output Contract
campaign_package: {
tool: string
file_path: string
contact_count: integer
sequence_touches: integer
estimated_send_days: integer
next_action: string
}
Human Checkpoint
## Campaign Ready
Tool: [configured tool]
Signal type: News-triggered
News event: [headline]
Connection strengths: X direct, Y adjacent, Z thematic
Contacts: N people across M companies
Sequence: 3 touches (timing varies by connection strength)
Ready to launch?
Execution Summary
| Step | Tool Dependency | Human Checkpoint | Typical Time |
|---|---|---|---|
| 0. Config | None | First run only | 5 min (once) |
| 1. Parse & Extract | Web fetch (for URLs) or none (for text) | Review extracted entities | 2-3 min |
| 2. Qualify ICP | Web search (for company research) | Approve qualified list | 2-3 min |
| 3. Connection Angle | None (LLM reasoning) | Approve angles + strength ratings | 3-5 min |
| 4. Find People | Configurable (Apollo, LinkedIn, etc.) | Approve contact list | 2-3 min |
| 5. Draft Emails | None (LLM reasoning) | Review samples, iterate | 5-10 min |
| 6. Handoff | Configurable (Smartlead, CSV, etc.) | Final launch approval | 1 min |
Total human review time: ~15-25 minutes
Key Difference from Other Signal Composites
| Dimension | Structured Signals (Funding, Hiring, etc.) | News Signal |
|---|---|---|
| Signal type | Predefined, narrow | Arbitrary, broad — anything can be a trigger |
| Detection | Targeted search (job boards, funding databases) | Open-ended (any news source) |
| Extra step | — | Step 3: Connection Angle identification. Other composites have obvious connections (funding = money to spend). News requires explicit reasoning about WHY this event matters for your product. |
| Input modes | Companies in → signals out | Three modes: News→Companies, Companies→News, People→News |
| Timing | Predictable windows (post-raise, pre-hire) | Varies wildly by event type — crisis = 48hr delay, trend = flexible |
| Sensitivity | Generally positive (funding, hiring, growth) | Can be negative (layoffs, crises, failures). Requires empathy calibration. |
Sensitivity Guidelines
Some news events require careful tone calibration:
| Event Type | Tone | What NOT to Do |
|---|---|---|
| Layoffs | Empathetic. "I know this is a tough time." | Don't say "your layoffs mean you need us!" |
| Data breach / Security incident | Helpful, not salesy. "If you need help with [specific thing]." | Don't pile on or blame. Don't reach out same-day. |
| Earnings miss / Revenue decline | Efficiency-focused. "Do more with what you have." | Don't reference the miss directly in the subject line. |
| Executive departure / Fired CEO | Skip the drama entirely. Focus on the new leader or the company's direction. | Don't mention the departure unless it's public and amicable. |
| Lawsuit / Legal trouble | Generally avoid unless your product directly helps with compliance/legal. | Don't reference the lawsuit. It looks ambulance-chasey. |
| Product failure / Recall | Only reach out if you have a direct solution. | Don't gloat or compare. |
Rule of thumb: If you wouldn't bring it up in a face-to-face conversation at a conference, don't put it in a cold email.
Tips
- Direct connections are rare but powerful. Most news creates adjacent or thematic connections. When you find a direct one, prioritize it — these convert at 2-3x the rate.
- Speed matters for direct connections. The first vendor to reference a relevant news event looks informed. The fifth looks like they're running the same playbook.
- Don't force weak connections. If you can't articulate the angle in one sentence, the connection is too weak. Drop it.
- News about competitors is gold. If a competitor raises funding, gets acquired, has a security breach, or launches a product — their customers and prospects are suddenly open to conversations.
- Negative news requires a 48-72 hour cooling period. Reaching out the day of a layoff or breach is predatory. Wait, then lead with empathy.
- Industry reports and trend pieces make great thematic triggers. "The Gartner report on [category] just dropped — here's what it means for [company]" positions you as thoughtful, not reactive.
- Combine with other signal composites. News often contains embedded signals: an acquisition article mentions the acquiring company is hiring 50 people (hiring signal), a new CEO is named (leadership change signal), or the company just raised funding (funding signal). Route these to the appropriate specialist composite for better outreach.
| 1 | |
| 2 | name news-signal-outreach |
| 3 | version 1.0.0 |
| 4 | description > |
| 5 | End-to-end news-triggered signal composite. Takes any piece of news — an article, |
| 6 | LinkedIn post, tweet, announcement, event, trend, regulation, product launch, |
| 7 | acquisition, layoff, expansion, or any other public event — and evaluates whether |
| 8 | the companies or people mentioned are ICP fits. If yes, identifies the connection |
| 9 | between the news and your product, finds the right people to contact, and drafts |
| 10 | personalized outreach using the news as the hook. Tool-agnostic. Accepts both |
| 11 | company-level and person-level news triggers. |
| 12 | |
| 13 | AUTO-TRIGGER Load this composite whenever a user shares a URL (LinkedIn post, |
| 14 | article, tweet, blog post) or mentions a company/person they "came across", |
| 15 | "saw", or "found" from any external source and asks about relevance, fit, |
| 16 | ICP match, or whether to reach out. The user does NOT need to explicitly say |
| 17 | "outreach" — any signal evaluation request from an external source triggers this. |
| 18 | tags [outreach] |
| 19 | |
| 20 | graph |
| 21 | provides |
| 22 | - icp-qualified-targets # Companies/people from the news that fit ICP |
| 23 | - relevance-angles # How the news connects to your product |
| 24 | - contact-list # People to reach out to |
| 25 | - personalized-email-sequences # Outreach drafts using the news as the hook |
| 26 | requires |
| 27 | - news-input # The news item(s) — URL, text, or structured data |
| 28 | - your-company-context # What you sell, ICP, proof points |
| 29 | connects_to |
| 30 | - skill: cold-email-outreach |
| 31 | when "User wants to launch the campaign via their outreach tool" |
| 32 | passes contact-list, personalized-email-sequences |
| 33 | - skill: linkedin-outreach |
| 34 | when "User wants LinkedIn outreach instead of or alongside email" |
| 35 | passes contact-list |
| 36 | capabilities [web-search, contact-finding, email-drafting] |
| 37 | |
| 38 | |
| 39 | # News Signal Outreach |
| 40 | |
| 41 | The catch-all signal composite. Every other composite handles a specific signal type (funding, hiring, leadership change, champion move). This one handles **everything else** — any piece of news or public event that could create a reason to reach out. |
| 42 | |
| 43 | A regulation change. A product recall. A competitor acquisition. A market expansion. A layoff. An earnings miss. A new partnership. An industry report. A conference keynote. A viral LinkedIn post. Any external event that shifts a company's priorities, creates urgency, or opens a window for your product. |
| 44 | |
| 45 | **Why this composite exists:** The world generates an infinite stream of potential outreach triggers. The four structured signal composites handle the most common patterns. This composite handles the long tail — the unpredictable, opportunistic moments that often produce the best outreach because nobody else is sending a templated sequence about them. |
| 46 | |
| 47 | ## When to Auto-Load |
| 48 | |
| 49 | Load this composite when ANY of these are true: |
| 50 | User shares ANY URL (LinkedIn post, article, tweet, blog, news) and asks about a company or person mentioned in it |
| 51 | User says "came across", "saw this post", "found this article", "check this out", "is this relevant", "is this company a fit", "should we reach out" |
| 52 | User mentions a company or person they discovered from an external source (social media, news, conference, podcast, newsletter) and asks about relevance or fit |
| 53 | User asks "can we reach out to anyone based on this?" |
| 54 | User says "check if this news is relevant to our prospects", "news-based outreach", "trigger-based outreach" |
| 55 | User has a list of companies and wants to check recent news for outreach angles |
| 56 | The news doesn't fit neatly into funding, hiring, leadership change, or champion move categories |
| 57 | An upstream workflow surfaces a news item that needs evaluation |
| 58 | |
| 59 | **Key principle:** If the user shares an external signal (URL, post, article, mention) and asks ANY question about the companies/people in it — load this composite. Don't wait for the word "outreach." The composite handles both evaluation-only (Steps 1-3) and full outreach (Steps 1-6). |
| 60 | |
| 61 | ## Input Flexibility |
| 62 | |
| 63 | This composite accepts three input modes: |
| 64 | |
| 65 | | Mode | Input | Example | |
| 66 | |------|-------|---------| |
| 67 | | **News → Companies** | A news item. Extract companies/people mentioned, qualify them. | "Here's an article about new FDA regulations on telehealth" | |
| 68 | | **Companies → News** | A list of companies. Find recent news about them, evaluate relevance. | "Check these 50 companies for any news we can use as an outreach angle" | |
| 69 | | **Person → News** | A person or list of people. Find recent news about them or their company, evaluate relevance. | "Check if any of these prospects have been in the news" | |
| 70 | |
| 71 | |
| 72 | |
| 73 | ## Step 0: Configuration (One-Time Setup) |
| 74 | |
| 75 | On first run for a client/user, collect and store these preferences. Skip on subsequent runs. |
| 76 | |
| 77 | ### ICP Definition |
| 78 | |
| 79 | | Question | Purpose | Stored As | |
| 80 | |----------|---------|-----------| |
| 81 | | What does your company do? (1-2 sentences) | Relevance matching | `company_description` | |
| 82 | | What problem do you solve? | Connection angle identification | `pain_point` | |
| 83 | | What industries do you sell to? | ICP filter | `target_industries` | |
| 84 | | What company sizes? | ICP filter | `target_company_size` | |
| 85 | | What geographies? | ICP filter (optional) | `target_geographies` | |
| 86 | | Any disqualifiers? | Hard no's | `disqualifiers` | |
| 87 | | Who are your buyers? (titles) | Contact finding | `buyer_titles` | |
| 88 | | Who are your champions? (titles) | Contact finding | `champion_titles` | |
| 89 | | Who are your users? (titles) | Contact finding | `user_titles` | |
| 90 | |
| 91 | ### Your Company Context |
| 92 | |
| 93 | | Question | Purpose | Stored As | |
| 94 | |----------|---------|-----------| |
| 95 | | What specific outcomes does your product deliver? | Relevance angle building | `product_outcomes` | |
| 96 | | Name 2-3 proof points (customers, metrics) | Email credibility | `proof_points` | |
| 97 | | What categories of news are most relevant to your product? | Helps prioritize | `relevant_news_categories` | |
| 98 | |
| 99 | **Examples of `relevant_news_categories`:** |
| 100 | |
| 101 | # For a cybersecurity product: |
| 102 | relevant_news_categories: ["data breach", "compliance regulation", "security incident", |
| 103 | "digital transformation", "cloud migration", "IPO/going public"] |
| 104 | |
| 105 | # For a sales AI product: |
| 106 | relevant_news_categories: ["sales team scaling", "market expansion", "new product launch", |
| 107 | "competitor acquisition", "cost cutting", "revenue miss"] |
| 108 | |
| 109 | # For an HR tech product: |
| 110 | relevant_news_categories: ["layoffs", "rapid hiring", "remote work policy", |
| 111 | "DEI initiative", "union activity", "culture crisis"] |
| 112 | |
| 113 | |
| 114 | ### Signal Detection Config |
| 115 | | Question | Options | Stored As | |
| 116 | |----------|---------|-----------| |
| 117 | | How should we find news? | Web search / Google News / RSS feeds / Social media | `news_tool` | |
| 118 | | How far back should we look? (when scanning companies for news) | 7 / 14 / 30 / 60 days | `lookback_days` | |
| 119 | |
| 120 | ### Contact Finding & Outreach Config |
| 121 | | Question | Options | Stored As | |
| 122 | |----------|---------|-----------| |
| 123 | | How should we find contacts? | Apollo / LinkedIn / Clearbit / Web search | `contact_tool` | |
| 124 | | Where do you want outreach sent? | Smartlead / Instantly / Outreach.io / CSV export | `outreach_tool` | |
| 125 | | Email or multi-channel? | Email only / Email + LinkedIn | `outreach_channels` | |
| 126 | |
| 127 | **Store config in:** `clients/<client-name>/config/signal-outreach.json` or equivalent. |
| 128 | |
| 129 | |
| 130 | |
| 131 | ## Step 1: Parse & Extract |
| 132 | |
| 133 | **Purpose:** Take the raw news input — whatever form it arrives in — and extract structured entities (companies, people) and the core event. |
| 134 | |
| 135 | ### Input Contract |
| 136 | |
| 137 | Three modes: |
| 138 | |
| 139 | **Mode A: News → Companies/People** |
| 140 | |
| 141 | news_input: { |
| 142 | mode: "news_to_targets" |
| 143 | items: [ |
| 144 | { |
| 145 | type: "url" | "text" | "structured" |
| 146 | content: string # URL to article, raw text, or structured summary |
| 147 | source: string | null # "TechCrunch", "LinkedIn post", "user provided", etc. |
| 148 | } |
| 149 | ] |
| 150 | } |
| 151 | |
| 152 | |
| 153 | **Mode B: Companies → News** |
| 154 | |
| 155 | news_input: { |
| 156 | mode: "targets_to_news" |
| 157 | companies: [ |
| 158 | { |
| 159 | name: string |
| 160 | domain: string |
| 161 | industry?: string |
| 162 | } |
| 163 | ] |
| 164 | lookback_days: integer |
| 165 | } |
| 166 | |
| 167 | |
| 168 | **Mode C: People → News** |
| 169 | |
| 170 | news_input: { |
| 171 | mode: "people_to_news" |
| 172 | people: [ |
| 173 | { |
| 174 | full_name: string |
| 175 | company: string |
| 176 | linkedin_url?: string |
| 177 | } |
| 178 | ] |
| 179 | lookback_days: integer |
| 180 | } |
| 181 | |
| 182 | |
| 183 | ### Process |
| 184 | |
| 185 | #### Mode A: News → Companies/People |
| 186 | |
| 187 | **Fetch and parse the news content:** |
| 188 | If URL → fetch the page, extract article text |
| 189 | If raw text → use as-is |
| 190 | If structured → use as-is |
| 191 | |
| 192 | **Extract entities:** |
| 193 | Companies mentioned (name, role in the story — subject, affected party, partner, competitor) |
| 194 | People mentioned (name, title, company, role in the story) |
| 195 | The core event (what happened, in one sentence) |
| 196 | Event category (regulation, acquisition, partnership, product launch, market event, crisis, expansion, contraction, etc.) |
| 197 | Date of event |
| 198 | Affected industries |
| 199 | |
| 200 | **Expand if needed:** If the news implies a broader set of affected companies beyond those mentioned: |
| 201 | "New FDA regulation on telehealth" → all telehealth companies, not just ones in the article |
| 202 | "Major data breach at [company]" → the breached company AND their competitors (who can capitalize) |
| 203 | "Industry report shows X trend" → companies in that industry |
| 204 | |
| 205 | #### Mode B: Companies → News |
| 206 | |
| 207 | **For each company, search for recent news** using configured `news_tool`: |
| 208 | Web search: `"{company_name}" AND (news OR announced OR launches OR raises OR expands OR partners)` within `lookback_days` |
| 209 | Filter results against `relevant_news_categories` from config |
| 210 | Extract the same fields as Mode A for each news item found |
| 211 | |
| 212 | **Group results:** Company → list of news items, ranked by relevance to your product |
| 213 | |
| 214 | #### Mode C: People → News |
| 215 | |
| 216 | **For each person, search for recent news/activity:** |
| 217 | Web search: `"{full_name}" AND "{company}"` within `lookback_days` |
| 218 | LinkedIn activity (if available): recent posts, shares, comments |
| 219 | Look for: promotions, speaking engagements, published articles, quoted in press, new projects |
| 220 | |
| 221 | **Group results:** Person → list of news items/activity |
| 222 | |
| 223 | ### Output Contract |
| 224 | |
| 225 | |
| 226 | extracted_signals: [ |
| 227 | { |
| 228 | entity: { |
| 229 | type: "company" | "person" |
| 230 | name: string |
| 231 | company: string # Company name (same as name if type=company) |
| 232 | domain: string | null |
| 233 | role_in_news: string # "subject", "affected", "partner", "competitor", "mentioned" |
| 234 | } |
| 235 | news: { |
| 236 | headline: string # One-line summary of what happened |
| 237 | event_category: string # "regulation", "acquisition", "expansion", "crisis", etc. |
| 238 | event_date: string |
| 239 | full_summary: string # 2-3 sentence summary |
| 240 | source_url: string | null |
| 241 | affected_industries: string[] |
| 242 | } |
| 243 | } |
| 244 | ] |
| 245 | |
| 246 | |
| 247 | ### Human Checkpoint |
| 248 | |
| 249 | |
| 250 | ## Extracted Signals |
| 251 | |
| 252 | Source: [news source/input description] |
| 253 | Event: [one-line summary] |
| 254 | Category: [event category] |
| 255 | |
| 256 | ### Companies/People Extracted |
| 257 | | Entity | Type | Role in News | Industry | |
| 258 | |--------|------|-------------|----------| |
| 259 | | Acme Corp | Company | Subject | Healthcare | |
| 260 | | Jane Doe | Person | Quoted (CEO) | Healthcare | |
| 261 | | HealthTech sector | Industry | Affected | Healthcare | |
| 262 | |
| 263 | Also evaluating: X companies in [affected industry] not directly mentioned |
| 264 | |
| 265 | Proceed with ICP qualification? (Y/n) |
| 266 | |
| 267 | |
| 268 | |
| 269 | |
| 270 | ## Step 2: Qualify Against ICP |
| 271 | |
| 272 | **Purpose:** For each extracted entity, determine if they're an ICP fit. Drop companies/people that don't match. Pure LLM reasoning — inherently tool-agnostic. |
| 273 | |
| 274 | ### Input Contract |
| 275 | |
| 276 | |
| 277 | extracted_signals: [...] # From Step 1 output |
| 278 | icp_criteria: { |
| 279 | target_industries: string[] |
| 280 | target_company_size: string |
| 281 | target_geographies: string[] |
| 282 | disqualifiers: string[] |
| 283 | } |
| 284 | your_company: { |
| 285 | description: string |
| 286 | pain_point: string |
| 287 | } |
| 288 | |
| 289 | |
| 290 | ### Process |
| 291 | |
| 292 | For each entity: |
| 293 | |
| 294 | **If entity is a company:** |
| 295 | Check industry against `target_industries` |
| 296 | Estimate company size (from news context or quick web search) |
| 297 | Check geography if relevant |
| 298 | Check against `disqualifiers` |
| 299 | Result: Pass / Fail with reasoning |
| 300 | |
| 301 | **If entity is a person:** |
| 302 | Identify their company |
| 303 | Qualify the company through the same ICP checks above |
| 304 | Additionally check: is this person's role relevant? (matches `buyer_titles`, `champion_titles`, or `user_titles`) |
| 305 | Result: Pass / Fail with reasoning |
| 306 | |
| 307 | **For entities implied but not mentioned** (e.g., "all telehealth companies" from a regulation news): |
| 308 | Use web search or existing company lists to identify specific companies in the affected space |
| 309 | Qualify each against ICP |
| 310 | This step may surface new companies not in your existing pipeline |
| 311 | |
| 312 | ### Output Contract |
| 313 | |
| 314 | |
| 315 | icp_qualified: [ |
| 316 | { |
| 317 | entity: { ... } # From Step 1 |
| 318 | news: { ... } # From Step 1 |
| 319 | icp_assessment: { |
| 320 | fit: "strong" | "moderate" |
| 321 | industry_match: boolean |
| 322 | size_match: boolean | "unknown" |
| 323 | reasoning: string # Why they're a fit |
| 324 | } |
| 325 | } |
| 326 | ] |
| 327 | icp_disqualified: [ |
| 328 | { |
| 329 | entity_name: string |
| 330 | reason: string |
| 331 | } |
| 332 | ] |
| 333 | |
| 334 | |
| 335 | ### Human Checkpoint |
| 336 | |
| 337 | |
| 338 | ## ICP Qualification |
| 339 | |
| 340 | ### Qualified (X entities) |
| 341 | | Entity | Type | Industry | Size | ICP Fit | Reasoning | |
| 342 | |--------|------|----------|------|---------|-----------| |
| 343 | | Acme Corp | Company | Healthcare SaaS | ~200 | Strong | Core ICP industry, right size | |
| 344 | | MedTech Inc | Company | HealthTech | ~500 | Moderate | Adjacent industry, large | |
| 345 | |
| 346 | ### Disqualified (X entities) |
| 347 | | Entity | Reason | |
| 348 | |--------|--------| |
| 349 | | BigPharma Co | Enterprise (50K+ employees) — above target size | |
| 350 | |
| 351 | Approve qualified list? |
| 352 | |
| 353 | |
| 354 | |
| 355 | |
| 356 | ## Step 3: Identify Connection Angle |
| 357 | |
| 358 | **Purpose:** This is the critical thinking step. For each ICP-qualified entity, determine the specific connection between the news event and your product. Why should they care about your product RIGHT NOW because of THIS news? Pure LLM reasoning — inherently tool-agnostic. |
| 359 | |
| 360 | ### Input Contract |
| 361 | |
| 362 | |
| 363 | icp_qualified: [...] # From Step 2 output |
| 364 | your_company: { |
| 365 | description: string |
| 366 | pain_point: string |
| 367 | product_outcomes: string[] |
| 368 | proof_points: string[] |
| 369 | relevant_news_categories: string[] |
| 370 | } |
| 371 | |
| 372 | |
| 373 | ### Process |
| 374 | |
| 375 | For each qualified entity, answer three questions: |
| 376 | |
| 377 | #### Question 1: "Why does this news create urgency for our product?" |
| 378 | |
| 379 | Map the news event category to a product relevance pattern: |
| 380 | |
| 381 | | Event Category | How It Creates Urgency | Example | |
| 382 | |---------------|----------------------|---------| |
| 383 | | **Regulation change** | They need to comply, your product helps them comply or adapt faster | "New data privacy law → they need [your compliance tool] before enforcement date" | |
| 384 | | **Acquisition / Merger** | Systems need integration, processes need standardization, new leadership evaluates stack | "Acquired a company → need to unify [function your product handles]" | |
| 385 | | **Market expansion** | New market = new challenges, need tools that scale | "Expanding to EMEA → need [your product] for localized [function]" | |
| 386 | | **Product launch** | Scaling up means scaling operations | "Launching enterprise tier → need [your product] to handle enterprise [function]" | |
| 387 | | **Competitive pressure** | Competitor moved, they need to respond | "Competitor launched [X] → they need to level up [area your product addresses]" | |
| 388 | | **Cost cutting / Layoffs** | Do more with less, automation becomes essential | "Cut 15% of staff → need [your product] to maintain output with smaller team" | |
| 389 | | **Crisis / Incident** | Reactive buying — they need a solution NOW | "Data breach → urgently need [your security product]" | |
| 390 | | **Partnership** | New partner = new workflows, new opportunities | "Partnered with [company] → need [your product] to support the integration" | |
| 391 | | **Earnings / Growth** | Over-performing = scaling challenges. Under-performing = efficiency pressure | "Revenue grew 3x → [function your product handles] can't keep up manually" | |
| 392 | | **Industry trend / Report** | Category awareness is high, they're thinking about this | "Industry report says [trend] → they're likely evaluating solutions in this space" | |
| 393 | | **Person-level news** | Published an article, spoke at a conference, posted on LinkedIn about a topic you solve | "Posted about [pain] → they're actively thinking about this problem" | |
| 394 | |
| 395 | #### Question 2: "What's the specific angle?" |
| 396 | |
| 397 | Craft a one-sentence connection: |
| 398 | |
| 399 | "Because [news event], [company] now needs [specific outcome your product delivers]." |
| 400 | |
| 401 | |
| 402 | Examples: |
| 403 | "Because Acme just acquired BetaCo, they need to unify two separate CRM systems — exactly what [product] does in 30 days." |
| 404 | "Because the new HIPAA amendment takes effect in Q3, [company] needs to audit their data handling — [product] automates this." |
| 405 | "Because [person] just posted about struggling with [pain], they're actively looking for a solution — [product] solves this." |
| 406 | |
| 407 | #### Question 3: "How strong is this connection?" |
| 408 | |
| 409 | | Strength | Criteria | Example | |
| 410 | |----------|---------|---------| |
| 411 | | **Direct** | The news explicitly describes a problem your product solves | Layoff in your product's department → they need automation | |
| 412 | | **Adjacent** | The news implies a downstream need your product addresses | Market expansion → implies scaling, which implies need for your tool | |
| 413 | | **Thematic** | The news is in the same category as your product's domain | Industry report about the trend you're in → awareness play | |
| 414 | |
| 415 | ### Output Contract |
| 416 | |
| 417 | |
| 418 | connection_angles: [ |
| 419 | { |
| 420 | entity: { ... } |
| 421 | news: { ... } |
| 422 | icp_assessment: { ... } |
| 423 | connection: { |
| 424 | urgency_reason: string # Why this news creates urgency |
| 425 | specific_angle: string # One-sentence connection |
| 426 | connection_strength: "direct" | "adjacent" | "thematic" |
| 427 | timing_note: string # How time-sensitive this outreach is |
| 428 | recommended_framework: string # Which email framework fits best |
| 429 | } |
| 430 | } |
| 431 | ] |
| 432 | |
| 433 | |
| 434 | ### Framework Selection Based on Connection Strength |
| 435 | |
| 436 | | Connection Strength | Recommended Framework | Why | |
| 437 | |--------------------|----------------------|-----| |
| 438 | | **Direct** | **Signal-Proof-Ask** | The news IS the hook — reference it directly, show proof, ask | |
| 439 | | **Adjacent** | **PAS** | Problem (implied by the news) → Agitate (what happens if they don't act) → Solve | |
| 440 | | **Thematic** | **AIDA** | Attention (news reference) → Interest (how it relates to them) → Desire (your product) → Action | |
| 441 | |
| 442 | ### Human Checkpoint |
| 443 | |
| 444 | |
| 445 | ## Connection Angles |
| 446 | |
| 447 | ### Direct Connections (X entities) — Act quickly |
| 448 | | Entity | News | Angle | Timing | |
| 449 | |--------|------|-------|--------| |
| 450 | | Acme Corp | Acquired BetaCo | "Need to unify CRM systems — [product] does this in 30 days" | This week (integration planning starts immediately) | |
| 451 | |
| 452 | ### Adjacent Connections (X entities) |
| 453 | | Entity | News | Angle | Timing | |
| 454 | |--------|------|-------|--------| |
| 455 | | MedTech Inc | Expanding to EMEA | "Localized [function] becomes a requirement — [product] supports 15 languages" | This month | |
| 456 | |
| 457 | ### Thematic Connections (X entities) |
| 458 | | Entity | News | Angle | Timing | |
| 459 | |--------|------|-------|--------| |
| 460 | | HealthCo | Industry report on [trend] | "They're likely evaluating [category] solutions" | Flexible | |
| 461 | |
| 462 | Approve these angles before we find contacts? |
| 463 | |
| 464 | |
| 465 | |
| 466 | |
| 467 | ## Step 4: Find Relevant People |
| 468 | |
| 469 | **Purpose:** For each qualified entity with a connection angle, find the right people to contact. |
| 470 | |
| 471 | ### Input Contract |
| 472 | |
| 473 | |
| 474 | connection_angles: [...] # From Step 3 output |
| 475 | buyer_titles: string[] # From config |
| 476 | champion_titles: string[] # From config |
| 477 | user_titles: string[] # From config |
| 478 | max_contacts_per_company: integer # Default: 3-5 |
| 479 | |
| 480 | |
| 481 | ### Process |
| 482 | |
| 483 | **If the entity is already a person** (Mode C or person mentioned in news): |
| 484 | They're the primary contact. Still find 1-2 additional contacts at their company (buyer if they're a champion, champion if they're a buyer) for multi-threading. |
| 485 | |
| 486 | **If the entity is a company:** |
| 487 | Use configured `contact_tool` to find people matching `buyer_titles`, `champion_titles`, `user_titles` |
| 488 | Prioritize people whose role is closest to the news event: |
| 489 | |
| 490 | | News Category | Prioritize These Contacts | |
| 491 | |--------------|--------------------------| |
| 492 | | Regulation / Compliance | Legal, Compliance, Operations leadership | |
| 493 | | Acquisition / Merger | COO, CTO, VP Operations, Integration leads | |
| 494 | | Market expansion | VP Sales, VP Marketing, Country/Regional leads | |
| 495 | | Cost cutting / Layoffs | COO, CFO, VP Operations | |
| 496 | | Product launch | CTO, VP Product, VP Engineering | |
| 497 | | Crisis / Incident | CISO, VP Engineering, CTO (for security), CEO/COO (for operational) | |
| 498 | | General growth | Default to `buyer_titles` from config | |
| 499 | |
| 500 | **For each contact, note their relevance to the news:** |
| 501 | Are they directly affected by the news? (Their department, their function) |
| 502 | Are they the decision-maker for the response to this news? |
| 503 | Are they the person who will feel the pain this news creates? |
| 504 | |
| 505 | ### Output Contract |
| 506 | |
| 507 | |
| 508 | contacts: [ |
| 509 | { |
| 510 | person: { |
| 511 | full_name: string |
| 512 | first_name: string |
| 513 | last_name: string |
| 514 | title: string |
| 515 | email: string | null |
| 516 | linkedin_url: string | null |
| 517 | role_type: "buyer" | "champion" | "user" |
| 518 | news_relevance: string # Why THIS person for THIS news |
| 519 | } |
| 520 | company: { |
| 521 | name: string |
| 522 | domain: string |
| 523 | } |
| 524 | connection: { |
| 525 | specific_angle: string |
| 526 | connection_strength: string |
| 527 | urgency_reason: string |
| 528 | } |
| 529 | news: { |
| 530 | headline: string |
| 531 | event_category: string |
| 532 | source_url: string | null |
| 533 | } |
| 534 | } |
| 535 | ] |
| 536 | |
| 537 | |
| 538 | ### Human Checkpoint |
| 539 | |
| 540 | |
| 541 | ## Contacts Found |
| 542 | |
| 543 | ### Acme Corp — "Acquired BetaCo" (Direct connection) |
| 544 | | Name | Title | Role | Why This Person | |
| 545 | |------|-------|------|----------------| |
| 546 | | Sarah Kim | COO | Buyer | Owns post-acquisition integration | |
| 547 | | David Park | VP Operations | Champion | Will manage unified workflows | |
| 548 | | Amy Chen | Director of Sales Ops | User | Directly affected by CRM unification | |
| 549 | |
| 550 | ### MedTech Inc — "Expanding to EMEA" (Adjacent connection) |
| 551 | | ... | |
| 552 | |
| 553 | Total: X contacts across Y companies |
| 554 | |
| 555 | Approve before we draft emails? |
| 556 | |
| 557 | |
| 558 | |
| 559 | |
| 560 | ## Step 5: Draft Personalized Outreach |
| 561 | |
| 562 | **Purpose:** Draft outreach where the news event is the hook, your product is the solution, and the email demonstrates you understand their specific situation. Pure LLM reasoning — inherently tool-agnostic. |
| 563 | |
| 564 | ### Input Contract |
| 565 | |
| 566 | |
| 567 | contacts: [...] # From Step 4 output |
| 568 | your_company: { |
| 569 | description: string |
| 570 | pain_point: string |
| 571 | product_outcomes: string[] |
| 572 | proof_points: string[] |
| 573 | } |
| 574 | sequence_config: { |
| 575 | touches: integer # Default: 3 |
| 576 | timing: integer[] # Default varies by connection strength (see below) |
| 577 | tone: string # Default: "casual-direct" |
| 578 | cta: string # Default: "15-min call" |
| 579 | } |
| 580 | |
| 581 | |
| 582 | ### Process |
| 583 | |
| 584 | **Adjust sequence timing by connection strength:** |
| 585 | |
| 586 | | Strength | Timing | Rationale | |
| 587 | |----------|--------|-----------| |
| 588 | | **Direct** | Day 1 / 3 / 7 | Urgency is real — they're actively dealing with this | |
| 589 | | **Adjacent** | Day 1 / 5 / 12 | Standard timing — urgency is implied, not immediate | |
| 590 | | **Thematic** | Day 1 / 7 / 14 | Slower cadence — this is awareness, not crisis response | |
| 591 | |
| 592 | **Build the email around the news, not the product:** |
| 593 | |
| 594 | The news is the subject. Your product is the punchline. Never lead with the product. |
| 595 | |
| 596 | | Element | Source | How to Use | |
| 597 | |---------|--------|-----------| |
| 598 | | News hook | Step 1 `news.headline` | Open with what happened — show you're informed | |
| 599 | | Impact on them | Step 3 `connection.urgency_reason` | Explain what this means for their specific role | |
| 600 | | Your angle | Step 3 `connection.specific_angle` | Connect the dots to your product naturally | |
| 601 | | Proof | Config `proof_points` | Show a peer who faced a similar situation | |
| 602 | | CTA | Config | Low-friction ask | |
| 603 | |
| 604 | **Email structure by connection strength:** |
| 605 | |
| 606 | **Direct connection (Signal-Proof-Ask):** |
| 607 | |
| 608 | Hook: Reference the specific news event |
| 609 | Impact: What this means for them (1 sentence) |
| 610 | Proof: A peer who faced the same situation and used your product |
| 611 | Ask: Soft CTA |
| 612 | |
| 613 | |
| 614 | **Adjacent connection (PAS):** |
| 615 | |
| 616 | Problem: The downstream challenge the news creates |
| 617 | Agitate: What happens if they don't address it (1 sentence) |
| 618 | Solve: How your product helps, with a proof point |
| 619 | Ask: Soft CTA |
| 620 | |
| 621 | |
| 622 | **Thematic connection (AIDA):** |
| 623 | |
| 624 | Attention: Reference the news/trend |
| 625 | Interest: How it relates to their company specifically |
| 626 | Desire: What your product does in this context |
| 627 | Action: Soft CTA |
| 628 | |
| 629 | |
| 630 | **Personalization layers:** |
| 631 | |
| 632 | | Layer | What Gets Personalized | Source | |
| 633 | |-------|----------------------|--------| |
| 634 | | News reference | The specific event and its relevance | Step 1 news data | |
| 635 | | Company context | What their company does, their industry, their situation | Step 2 ICP research | |
| 636 | | Role context | Why THIS person cares about this news | Step 4 `news_relevance` | |
| 637 | | Your company fit | How your product specifically helps in this scenario | Step 3 connection angle | |
| 638 | |
| 639 | **Follow `email-drafting` skill hard rules.** Additionally: |
| 640 | **Never sensationalize negative news.** If the signal is a layoff, breach, or crisis, be empathetic, not opportunistic. "I know this is a challenging time" not "Your layoffs mean you need our tool!" |
| 641 | **Don't pretend you just happened to see the news.** Be direct: "Saw the news about [event]" not "I came across an interesting article." |
| 642 | **If the news is about a crisis, wait 48-72 hours before reaching out.** Immediate outreach during a crisis looks predatory. |
| 643 | |
| 644 | ### Output Contract |
| 645 | |
| 646 | |
| 647 | email_sequences: [ |
| 648 | { |
| 649 | contact: { full_name, email, title, company_name, role_type, news_relevance } |
| 650 | news_context: { headline, event_category, source_url } |
| 651 | connection: { specific_angle, connection_strength } |
| 652 | sequence: [ |
| 653 | { |
| 654 | touch_number: integer |
| 655 | send_day: integer |
| 656 | subject: string |
| 657 | body: string |
| 658 | framework: string |
| 659 | personalization_elements: { |
| 660 | news_reference: string # How the news was referenced |
| 661 | company_context: string # How their company situation was used |
| 662 | role_context: string # How their specific role was leveraged |
| 663 | product_connection: string # How the product was positioned |
| 664 | } |
| 665 | word_count: integer |
| 666 | } |
| 667 | ] |
| 668 | } |
| 669 | ] |
| 670 | |
| 671 | |
| 672 | ### Human Checkpoint |
| 673 | |
| 674 | Present samples grouped by connection strength: |
| 675 | |
| 676 | |
| 677 | ## Sample Outreach for Review |
| 678 | |
| 679 | ### Direct Connection: Sarah Kim, COO @ Acme Corp |
| 680 | News: Acme acquired BetaCo | Angle: CRM unification | Framework: Signal-Proof-Ask |
| 681 | |
| 682 | **Touch 1 — Day 1** |
| 683 | Subject: Unifying Acme + BetaCo systems |
| 684 | > Hi Sarah — saw the BetaCo acquisition. Congrats. The integration |
| 685 | > sprint typically surfaces a CRM unification challenge fast — |
| 686 | > two systems, overlapping data, different workflows. |
| 687 | > |
| 688 | > [Peer company] faced the same thing after their acquisition last year. |
| 689 | > [Product] had both systems unified in 30 days. Happy to share how. |
| 690 | > |
| 691 | > Worth a 15-minute call? |
| 692 | |
| 693 | **Touch 2 — Day 3** |
| 694 | > [New angle — data migration complexity, with a specific metric] |
| 695 | |
| 696 | **Touch 3 — Day 7** |
| 697 | > [Breakup with offer to share the integration playbook] |
| 698 | |
| 699 | |
| 700 | |
| 701 | ### Adjacent Connection: Dr. Lee, VP Product @ MedTech Inc |
| 702 | News: EMEA expansion | Angle: Localization needs | Framework: PAS |
| 703 | |
| 704 | **Touch 1 — Day 1** |
| 705 | Subject: EMEA expansion + [function] localization |
| 706 | > [full email] |
| 707 | |
| 708 | |
| 709 | |
| 710 | Approve these samples? I'll generate the rest in the same style. |
| 711 | |
| 712 | |
| 713 | |
| 714 | |
| 715 | ## Step 6: Handoff to Outreach |
| 716 | |
| 717 | Identical to the other signal composites. Package contacts + email sequences for the configured outreach tool. |
| 718 | |
| 719 | ### Output Contract |
| 720 | |
| 721 | |
| 722 | campaign_package: { |
| 723 | tool: string |
| 724 | file_path: string |
| 725 | contact_count: integer |
| 726 | sequence_touches: integer |
| 727 | estimated_send_days: integer |
| 728 | next_action: string |
| 729 | } |
| 730 | |
| 731 | |
| 732 | ### Human Checkpoint |
| 733 | |
| 734 | |
| 735 | ## Campaign Ready |
| 736 | |
| 737 | Tool: [configured tool] |
| 738 | Signal type: News-triggered |
| 739 | News event: [headline] |
| 740 | Connection strengths: X direct, Y adjacent, Z thematic |
| 741 | Contacts: N people across M companies |
| 742 | Sequence: 3 touches (timing varies by connection strength) |
| 743 | |
| 744 | Ready to launch? |
| 745 | |
| 746 | |
| 747 | |
| 748 | |
| 749 | ## Execution Summary |
| 750 | |
| 751 | | Step | Tool Dependency | Human Checkpoint | Typical Time | |
| 752 | |------|----------------|-----------------|--------------| |
| 753 | | 0. Config | None | First run only | 5 min (once) | |
| 754 | | 1. Parse & Extract | Web fetch (for URLs) or none (for text) | Review extracted entities | 2-3 min | |
| 755 | | 2. Qualify ICP | Web search (for company research) | Approve qualified list | 2-3 min | |
| 756 | | 3. Connection Angle | None (LLM reasoning) | Approve angles + strength ratings | 3-5 min | |
| 757 | | 4. Find People | Configurable (Apollo, LinkedIn, etc.) | Approve contact list | 2-3 min | |
| 758 | | 5. Draft Emails | None (LLM reasoning) | Review samples, iterate | 5-10 min | |
| 759 | | 6. Handoff | Configurable (Smartlead, CSV, etc.) | Final launch approval | 1 min | |
| 760 | |
| 761 | **Total human review time: ~15-25 minutes** |
| 762 | |
| 763 | |
| 764 | |
| 765 | ## Key Difference from Other Signal Composites |
| 766 | |
| 767 | | Dimension | Structured Signals (Funding, Hiring, etc.) | News Signal | |
| 768 | |-----------|-------------------------------------------|-------------| |
| 769 | | **Signal type** | Predefined, narrow | Arbitrary, broad — anything can be a trigger | |
| 770 | | **Detection** | Targeted search (job boards, funding databases) | Open-ended (any news source) | |
| 771 | | **Extra step** | — | Step 3: Connection Angle identification. Other composites have obvious connections (funding = money to spend). News requires explicit reasoning about WHY this event matters for your product. | |
| 772 | | **Input modes** | Companies in → signals out | Three modes: News→Companies, Companies→News, People→News | |
| 773 | | **Timing** | Predictable windows (post-raise, pre-hire) | Varies wildly by event type — crisis = 48hr delay, trend = flexible | |
| 774 | | **Sensitivity** | Generally positive (funding, hiring, growth) | Can be negative (layoffs, crises, failures). Requires empathy calibration. | |
| 775 | |
| 776 | |
| 777 | |
| 778 | ## Sensitivity Guidelines |
| 779 | |
| 780 | Some news events require careful tone calibration: |
| 781 | |
| 782 | | Event Type | Tone | What NOT to Do | |
| 783 | |-----------|------|---------------| |
| 784 | | **Layoffs** | Empathetic. "I know this is a tough time." | Don't say "your layoffs mean you need us!" | |
| 785 | | **Data breach / Security incident** | Helpful, not salesy. "If you need help with [specific thing]." | Don't pile on or blame. Don't reach out same-day. | |
| 786 | | **Earnings miss / Revenue decline** | Efficiency-focused. "Do more with what you have." | Don't reference the miss directly in the subject line. | |
| 787 | | **Executive departure / Fired CEO** | Skip the drama entirely. Focus on the new leader or the company's direction. | Don't mention the departure unless it's public and amicable. | |
| 788 | | **Lawsuit / Legal trouble** | Generally avoid unless your product directly helps with compliance/legal. | Don't reference the lawsuit. It looks ambulance-chasey. | |
| 789 | | **Product failure / Recall** | Only reach out if you have a direct solution. | Don't gloat or compare. | |
| 790 | |
| 791 | **Rule of thumb:** If you wouldn't bring it up in a face-to-face conversation at a conference, don't put it in a cold email. |
| 792 | |
| 793 | |
| 794 | |
| 795 | ## Tips |
| 796 | |
| 797 | **Direct connections are rare but powerful.** Most news creates adjacent or thematic connections. When you find a direct one, prioritize it — these convert at 2-3x the rate. |
| 798 | **Speed matters for direct connections.** The first vendor to reference a relevant news event looks informed. The fifth looks like they're running the same playbook. |
| 799 | **Don't force weak connections.** If you can't articulate the angle in one sentence, the connection is too weak. Drop it. |
| 800 | **News about competitors is gold.** If a competitor raises funding, gets acquired, has a security breach, or launches a product — their customers and prospects are suddenly open to conversations. |
| 801 | **Negative news requires a 48-72 hour cooling period.** Reaching out the day of a layoff or breach is predatory. Wait, then lead with empathy. |
| 802 | **Industry reports and trend pieces make great thematic triggers.** "The Gartner report on [category] just dropped — here's what it means for [company]" positions you as thoughtful, not reactive. |
| 803 | **Combine with other signal composites.** News often contains embedded signals: an acquisition article mentions the acquiring company is hiring 50 people (hiring signal), a new CEO is named (leadership change signal), or the company just raised funding (funding signal). Route these to the appropriate specialist composite for better outreach. |
| 804 |