🔍 Research Agent
Automation Level: 90% AUTO
Runs fully autonomously after 03-Lead-Sourcing-Agent delivers a scored batch. Output is reviewed by humans at [[07-Human-Review-Gates|Gate #1]] alongside sourcing output.
Manifest Stage: S2 → See 01-Process-Manifest
Input: lead_batch.json from 03-Lead-Sourcing-Agent
Output: lead_intelligence_pack.json → handed to [[07-Human-Review-Gates|Gate #1]] for review, then to 06-Personalization-Agent
🎯 Agent Objective
agent:
name: ResearchAgent
version: 1.0.0
objective: >
For each approved lead, build a structured intelligence dossier
that gives the PersonalizationAgent enough context to write a
genuinely relevant, non-generic email hook.
depth: per_lead
run_mode: parallel # researches all leads in batch simultaneously
output_format: JSON🔎 Research Targets Per Lead
For every lead in the batch, the agent collects:
research_targets:
company_level:
- recent_news: # press releases, funding, product launches, 30d
source: Google News, company blog, PR Newswire
max_items: 3
- leadership_changes: # new C-suite, VPs hired in 90d
source: LinkedIn company page, Crunchbase
- job_postings: # active hiring signals
source: LinkedIn Jobs, Greenhouse, Lever
relevant_roles: [SDR, AE, RevOps, Growth, Sales Ops]
- product_launches: # new features, integrations, pricing changes
source: ProductHunt, company blog, changelog
- competitor_signals: # if they mentioned a competitor, note it
source: G2, Capterra, LinkedIn posts
person_level:
- linkedin_posts: # last 3 posts (topics, tone, interests)
source: LinkedIn
max_items: 3
- linkedin_activity: # comments, likes — what do they engage with?
source: LinkedIn
recency_days: 30
- speaking_events: # podcasts, conferences, webinars
source: Google, LinkedIn Events
- shared_content: # articles they've written or shared
source: LinkedIn, Medium, Substack
- mutual_connections: # optional — if relevant
source: LinkedIn
use_in_hook: false # privacy-sensitive, disabled by default📋 Execution Logic
flowchart TD A["Receive lead_batch<br/>from Lead Sourcing Agent"] A --> B["For each lead — run in parallel"] B --> C1["Scrape company news<br/>30 days"] B --> C2["Scrape LinkedIn profile<br/>+ recent posts"] B --> C3["Check job postings<br/>LinkedIn Jobs"] B --> C4["Get funding data<br/>Crunchbase"] C1 & C2 & C3 & C4 --> D["Synthesize<br/>Intelligence Dossier"] D --> E{"Enough context<br/>for personalization?"} E -->|"≥ 2 signals found"| F["Mark: READY"] E -->|"< 2 signals"| G["Mark: LOW_CONTEXT<br/>use fallback hook"] F & G --> H["Output: lead_intelligence_pack.json<br/>→ Human Gate 1"]
📤 Output Schema
{
"lead_id": "lead_001",
"research_status": "READY",
"researched_at": "2026-04-01T11:30:00Z",
"company_intel": {
"recent_news": [
{
"headline": "Acme SaaS raises $5M Series A",
"source": "TechCrunch",
"date": "2026-03-15",
"relevance": "funding_event",
"hook_potential": "high"
}
],
"hiring_signals": [
{
"role": "Senior SDR",
"posted": "2026-03-28",
"implication": "scaling outbound sales team"
}
],
"product_news": [],
"leadership_changes": []
},
"person_intel": {
"recent_posts": [
{
"topic": "Why outbound is dead (and what replaced it)",
"date": "2026-03-20",
"engagement": "high",
"hook_angle": "reference their POV, offer counterpoint"
}
],
"speaking": [],
"written_content": []
},
"personalization_signals": [
"recent_funding_round",
"hiring_SDR",
"posted_about_outbound"
],
"suggested_hook_angle": "scaling_outbound_with_AI",
"fallback_hook": "generic_pain_point_sequence",
"context_richness_score": 82
}📊 Agent Performance KPIs
Tracked in 09-Metrics-and-Self-Improvement.
| Metric | Target | Alert Threshold |
|---|---|---|
| Leads with ≥2 personalization signals | ≥75% | <50% |
| Avg context richness score | ≥70 | <50 |
| Research completion rate | 100% | <90% |
| Runtime per batch of 50 | ≤4 hours | >6 hours |
| Personalization-to-reply rate lift | ≥2× vs fallback | <1.5× |
Key Insight
Leads with
context_richness_score ≥ 80consistently generate 2–3× higher reply rates when combined with personalization. The improvement loop tracks this in 09-Metrics-and-Self-Improvement.
⚠️ Error Handling
error_rules:
- condition: linkedin_rate_limit
action: use_cached_profile_if_available, else mark LOW_CONTEXT
fallback: generic_hook_from [[05-Email-Sequence-Engine]]
- condition: no_company_news_found
action: try_alternative_sources (Product Hunt, G2, blog)
fallback: mark LOW_CONTEXT
- condition: research_runtime > 6h
action: alert_COO, submit partial results📎 Related Files
- 03-Lead-Sourcing-Agent — Upstream agent (provides lead_batch)
- 07-Human-Review-Gates — Gate #1 where research is reviewed before personalization
- 06-Personalization-Agent — Downstream agent (consumes intelligence dossier)
- 05-Email-Sequence-Engine — Provides fallback hooks when context is LOW
- 01-Process-Manifest — Stage S2 definition
- 09-Metrics-and-Self-Improvement — KPI tracking