π€ Lead Sourcing Agent
Automation Level: 95% AUTO
This agent runs without human involvement. The only human touch is at [[07-Human-Review-Gates|Gate #1]] after it completes.
Manifest Stage: S1 β See 01-Process-Manifest Input: ICP Specification v1.0 Output: Scored lead batch (JSON) β handed to 04-Research-Agent
π― Agent Objective
agent:
name: LeadSourcingAgent
version: 1.0.0
objective: >
Source a batch of leads that match the ICP specification,
deduplicate against CRM, score each lead, and produce a
ranked list ready for deep research.
batch_size: 50 # leads per run
run_cadence: twice_per_week # Mon + Thu
output_format: JSONπ§ Tools & Integrations
tools:
- name: Apollo.io
action: search_people
filters: "mapped from [[02-ICP-Definition]] firmographics + contact spec"
output: raw_lead_list
- name: LinkedIn Sales Navigator
action: search_leads
filters: "seniority, function, company size, recent activity"
output: linkedin_profiles
- name: HubSpot CRM
action: check_existing_contacts
purpose: deduplicate β never contact existing CRM records
output: already_in_crm_flag
- name: Hunter.io / ZeroBounce
action: verify_email
purpose: remove invalid emails before scoring
output: email_verified_flag
- name: Crunchbase API
action: get_funding_data
purpose: detect recent raises as intent signal
output: funding_event_flagπ Execution Steps
flowchart TD A["Read ICP Definition"] --> B["Query Apollo.io<br/>+ LinkedIn Nav"] B --> C["Deduplicate<br/>vs. HubSpot CRM"] C --> D["Verify emails<br/>Hunter / ZeroBounce"] D --> E["Enrich intent signals<br/>Crunchbase, job boards"] E --> F["Score each lead<br/>0 β 100"] F --> G{"Score β₯ 40?"} G -->|Yes| H["Add to batch"] G -->|No| I["Discard + log reason"] H --> J["Sort by score DESC"] J --> K["Output: lead_batch.json<br/>β Research Agent"]
π€ Output Schema
{
"batch_id": "2026-04-01-A",
"generated_at": "2026-04-01T09:00:00Z",
"total_leads": 50,
"leads": [
{
"id": "lead_001",
"score": 87,
"score_tier": "hot",
"first_name": "Sarah",
"last_name": "Chen",
"title": "VP of Sales",
"company": "Acme SaaS Inc.",
"company_size": 45,
"industry": "B2B SaaS",
"email": "sarah.chen@acmesaas.com",
"email_verified": true,
"linkedin_url": "linkedin.com/in/sarahchen",
"linkedin_active_30d": true,
"intent_signals": ["recent_funding", "hiring_SDR"],
"icp_match": {
"firmographic": true,
"technographic": true,
"seniority": true
},
"disqualify_flags": [],
"crm_exists": false,
"source": "apollo",
"sourced_at": "2026-04-01T09:00:00Z"
}
]
}β οΈ Error Handling
error_rules:
- condition: apollo_api_timeout
action: retry_3x_then_alert_COO
fallback: use_linkedin_only
- condition: crm_api_unavailable
action: pause_batch_until_restored
reason: "Never risk re-contacting existing leads"
- condition: batch_size < 20
action: alert_COO_and_expand_ICP_filters
reason: "ICP too narrow β needs human review of [[02-ICP-Definition]]"
- condition: email_verify_rate < 0.7
action: flag_batch_and_alert
reason: "Data quality issue β check Apollo source quality"π Agent Performance KPIs
Tracked in 09-Metrics-and-Self-Improvement.
| Metric | Target | Alert Threshold |
|---|---|---|
| Batch email validity rate | β₯85% | <70% |
| Avg lead score (hot tier) | β₯75 | <65 |
| ICP match rate | β₯80% | <65% |
| Leads rejected at Gate #1 | β€20% | >35% |
| Runtime | β€2 hours | >4 hours |
Self-Improvement
If [[07-Human-Review-Gates|Gate #1]] rejection rate exceeds 35% for two consecutive batches, this agent automatically proposes an ICP filter update to the improvement loop.
π Related Files
- 02-ICP-Definition β Filter spec this agent reads
- 04-Research-Agent β Next agent in pipeline (receives output)
- 07-Human-Review-Gates β Gate #1 that reviews this agentβs output
- 01-Process-Manifest β Stage S1 definition
- 09-Metrics-and-Self-Improvement β Where this agentβs KPIs are tracked