News Signal Outreach

SkillDev tools

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.

Use News Signal Outreach in Claude, ChatGPT or Ahel Desktop

Free. Sign in, add News Signal Outreach and connect your AI. About a minute.

Also: Claude Code · Cursor · Codex

Then ask your AI: use the News Signal Outreach skill

Details

Instructions available. Your AI can read the instructions. Execution depends on the setup they require.

Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.

News Signal OutreachStart free

What this skill tells your AI

The instructions your AI receives, as published by gooseworks-ai/goose-skills in skills/outreach/composites/news-signal-outreach/SKILL.md and read by Ahel’s review.

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:

ModeInputExample
News → CompaniesA news item. Extract companies/people mentioned, qualify them."Here's an article about new FDA regulations on telehealth"
Companies → NewsA 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 → NewsA 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

QuestionPurposeStored As
What does your company do? (1-2 sentences)Relevance matchingcompany_description
What problem do you solve?Connection angle identificationpain_point
What industries do you sell to?ICP filtertarget_industries
What company sizes?ICP filtertarget_company_size
What geographies?ICP filter (optional)target_geographies
Any disqualifiers?Hard no'sdisqualifiers
Who are your buyers? (titles)Contact findingbuyer_titles
Who are your champions? (titles)Contact findingchampion_titles
Who are your users? (titles)Contact findinguser_titles

Your Company Context

QuestionPurposeStored As
What specific outcomes does your product deliver?Relevance angle buildingproduct_outcomes
Name 2-3 proof points (customers, metrics)Email credibilityproof_points
What categories of news are most relevant to your product?Helps prioritizerelevant_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

QuestionOptionsStored As
How should we find news?Web search / Google News / RSS feeds / Social medianews_tool
How far back should we look? (when scanning companies for news)7 / 14 / 30 / 60 dayslookback_days

Contact Finding & Outreach Config

QuestionOptionsStored As
How should we find contacts?Apollo / LinkedIn / Clearbit / Web searchcontact_tool
Where do you want outreach sent?Smartlead / Instantly / Outreach.io / CSV exportoutreach_tool
Email or multi-channel?Email only / Email + LinkedInoutreach_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
  1. 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
  2. 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
  3. 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
  1. 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) within lookback_days
    • Filter results against relevant_news_categories from config
    • Extract the same fields as Mode A for each news item found
  2. Group results: Company → list of news items, ranked by relevance to your product

Mode C: People → News
  1. For each person, search for recent news/activity:

    • Web search: "{full_name}" AND "{company}" within lookback_days
    • LinkedIn activity (if available): recent posts, shares, comments
    • Look for: promotions, speaking engagements, published articles, quoted in press, new projects
  2. 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:

  1. 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
  2. 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, or user_titles)
    • Result: Pass / Fail with reasoning
  3. 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 CategoryHow It Creates UrgencyExample
Regulation changeThey need to comply, your product helps them comply or adapt faster"New data privacy law → they need [your compliance tool] before enforcement date"
Acquisition / MergerSystems need integration, processes need standardization, new leadership evaluates stack"Acquired a company → need to unify [function your product handles]"
Market expansionNew market = new challenges, need tools that scale"Expanding to EMEA → need [your product] for localized [function]"
Product launchScaling up means scaling operations"Launching enterprise tier → need [your product] to handle enterprise [function]"
Competitive pressureCompetitor moved, they need to respond"Competitor launched [X] → they need to level up [area your product addresses]"
Cost cutting / LayoffsDo more with less, automation becomes essential"Cut 15% of staff → need [your product] to maintain output with smaller team"
Crisis / IncidentReactive buying — they need a solution NOW"Data breach → urgently need [your security product]"
PartnershipNew partner = new workflows, new opportunities"Partnered with [company] → need [your product] to support the integration"
Earnings / GrowthOver-performing = scaling challenges. Under-performing = efficiency pressure"Revenue grew 3x → [function your product handles] can't keep up manually"
Industry trend / ReportCategory awareness is high, they're thinking about this"Industry report says [trend] → they're likely evaluating solutions in this space"
Person-level newsPublished 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?"
StrengthCriteriaExample
DirectThe news explicitly describes a problem your product solvesLayoff in your product's department → they need automation
AdjacentThe news implies a downstream need your product addressesMarket expansion → implies scaling, which implies need for your tool
ThematicThe news is in the same category as your product's domainIndustry 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 StrengthRecommended FrameworkWhy
DirectSignal-Proof-AskThe news IS the hook — reference it directly, show proof, ask
AdjacentPASProblem (implied by the news) → Agitate (what happens if they don't act) → Solve
ThematicAIDAAttention (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

  1. 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.
  2. If the entity is a company:

    • Use configured contact_tool to find people matching buyer_titles, champion_titles, user_titles
    • Prioritize people whose role is closest to the news event:
    News CategoryPrioritize These Contacts
    Regulation / ComplianceLegal, Compliance, Operations leadership
    Acquisition / MergerCOO, CTO, VP Operations, Integration leads
    Market expansionVP Sales, VP Marketing, Country/Regional leads
    Cost cutting / LayoffsCOO, CFO, VP Operations
    Product launchCTO, VP Product, VP Engineering
    Crisis / IncidentCISO, VP Engineering, CTO (for security), CEO/COO (for operational)
    General growthDefault to buyer_titles from config
  3. 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

  1. Adjust sequence timing by connection strength:

    StrengthTimingRationale
    DirectDay 1 / 3 / 7Urgency is real — they're actively dealing with this
    AdjacentDay 1 / 5 / 12Standard timing — urgency is implied, not immediate
    ThematicDay 1 / 7 / 14Slower cadence — this is awareness, not crisis response
  2. Build the email around the news, not the product:

    The news is the subject. Your product is the punchline. Never lead with the product.

    ElementSourceHow to Use
    News hookStep 1 news.headlineOpen with what happened — show you're informed
    Impact on themStep 3 connection.urgency_reasonExplain what this means for their specific role
    Your angleStep 3 connection.specific_angleConnect the dots to your product naturally
    ProofConfig proof_pointsShow a peer who faced a similar situation
    CTAConfigLow-friction ask
  3. 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 CTA
    

    Adjacent 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 CTA
    

    Thematic 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 CTA
    
  4. Personalization layers:

    LayerWhat Gets PersonalizedSource
    News referenceThe specific event and its relevanceStep 1 news data
    Company contextWhat their company does, their industry, their situationStep 2 ICP research
    Role contextWhy THIS person cares about this newsStep 4 news_relevance
    Your company fitHow your product specifically helps in this scenarioStep 3 connection angle
  5. Follow email-drafting skill 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

Shortened here. Read the whole file on GitHub.

Signals

GitHub stars
1k
Forks
211
Last commit
Oct 2026
Advanced
Item type
skill
Key
news-signal-outreach
Source
github.com/gooseworks-ai/goose-skills