Multi-Agent Outreach: From Raw Prospect to Personalized Sequence
TLDR
A 5-agent pipeline that takes a list of prospect names and produces fully personalized outbound sequences ready to send. Each agent handles one job: enrich the prospect, score them against your ICP, write personalized copy, assemble multi-touch sequences, and sync to your sending tool.
I was spending 4 hours a day doing what this pipeline does in 20 minutes. Research a company. Find the right contact. Check if they fit. Write a personalized email. Repeat. The agents aren't magic — they just follow the same process I was doing manually, except they don't get tired and they don't skip steps when it's 4 PM and the brain is fried. The 11-play signal system now runs across hundreds of prospects per batch. Every email references something specific — their recent funding, their tech stack, a blog they haven't updated in months.
What you get:
- Automated prospect enrichment from LinkedIn + web sources
- 100-point lead scoring framework with weighted ICP criteria
- Signal-based personalization (different pitch for "just raised Series A" vs. "blog hasn't been updated in 6 months")
- Multi-touch sequences with A/B variants
- Output formatted for Instantly, Mailgun, or your preferred sending tool
Not building this yourself? I build production versions of this pipeline — ICP scoring calibrated, signal detection running, sequences personalized — for a flat fee. Book a 30-minute scoping call to get a build spec. Or keep reading for the full breakdown.
Step 0: ICP Config
The pipeline is only as good as your targeting. Define who you're going after before automating anything. YAML keeps targeting decisions separate from pipeline logic — your ICP will change, and editing a config file beats editing code.
# config/icp.yaml
icp:
company:
size_range: [15, 1000] # employees
sweet_spot: [50, 200]
funding_stages: ["series_a", "series_b", "series_c", "profitable"]
industries: ["b2b_saas", "fintech", "devtools", "martech"]
disqualify: ["agency", "consulting", "staffing", "recruiting", "nonprofit"]
buyer_personas:
- title: "VP Marketing"
priority: 1
- title: "Head of Demand Gen"
priority: 2
- title: "Director of Content"
priority: 3
- title: "Marketing Ops Lead"
priority: 4
- title: "Head of Growth"
priority: 5
scoring_weights:
company_fit: 40 # out of 100
trigger_quality: 20
pain_alignment: 20
individual_fit: 20
qualification_threshold: 60 # minimum score to outreach
Why YAML? Because when your VP of Sales says "we're pivoting upmarket, target 200-2000 employees now," you change two numbers in a config file. Not a codebase.
Step 1: Enrichment Agent
This agent takes a company domain and builds a rich profile. Two-level architecture: research the company once, then find individual buyers at that company. This prevents redundant API calls when a company has 3+ relevant contacts.
Agent prompt:
You are an enrichment agent for a B2B outbound pipeline.
INPUT: A company domain (e.g., "acme.com").
TASK:
1. COMPANY RESEARCH: Pull company name, employee count, industry, funding stage,
tech stack, recent news, and LinkedIn URL.
- Sources: Apollo (primary), company website, Crunchbase, LinkedIn.
2. BUYER IDENTIFICATION: Find individuals matching the buyer personas in the ICP config.
- Sources: Hunter domain search (primary), Apollo people search (fallback).
- For each buyer: name, email, title, LinkedIn URL.
3. PERSONALIZATION HOOKS: For each buyer, find 1-2 specific hooks:
- Recent LinkedIn posts or activity
- Company blog posts they authored
- Conference talks or podcast appearances
- Job postings their team has open
OUTPUT: Structured JSON with company profile + array of buyer profiles with hooks.
RULES:
- Don't fabricate data. If you can't find a field, return null.
- Prefer verified emails over guessed patterns.
- Flag companies that match any disqualify criteria from the ICP config.
Tool options: Apollo for company + contact enrichment. Hunter for email finding as fallback. Exa for web search (recent news, blog staleness). In the production build, this agent saves 15-20 minutes per duplicate company by caching company-level research.
<!-- INSERT IMAGE: ENRICHMENT WATERFALL — Apollo → Hunter → manual fallback chain (see prompts/multi-agent-outreach-visuals.md #6) -->Step 2: Scoring Agent
Score every prospect against your ICP with a 100-point framework. This isn't binary qualify/disqualify — granular scoring tells you which dimension is weakest, and that shapes the outreach angle.
100-point scoring framework:
| Category | Max Points | What It Measures |
|---|---|---|
| Company Fit | 40 | Size (sweet spot = 20, in range = 10), industry match (+10), funding stage (+10) |
| Trigger Quality | 20 | Signal strength — hand raiser (20), fresh money (18), competitor disruption (17), hiring spree (16) |
| Pain Alignment | 20 | Keywords from job posts, website copy, or tech stack gaps that suggest manual processes |
| Individual Fit | 20 | Title match to buyer persona priority list (VP Marketing = 20, Head of Growth = 8) |
Tier definitions:
| Tier | Score | Action |
|---|---|---|
| HOT | 90-100 | Outreach immediately. High priority. |
| WARM | 80-89 | Outreach within 48 hours. |
| QUALIFIED | 70-79 | Queue for next batch. |
| MARGINAL | 60-69 | Outreach only if pipeline is thin. |
| DEPRIORITIZE | <60 | Skip or save for later. |
Agent prompt:
You are a lead scoring agent.
INPUT: Enriched company profile, prospect profile, signal type, ICP config (YAML).
TASK: Score this prospect on the 100-point framework. Return:
- company_fit (0-40)
- trigger_quality (0-20)
- pain_alignment (0-20)
- individual_fit (0-20)
- total score
- tier assignment (HOT/WARM/QUALIFIED/MARGINAL/DEPRIORITIZE)
- disqualification flag + reason (if applicable)
- weakest dimension (used by personalization agent to shape the angle)
RULES:
- Be conservative. A score of 75 means "solid prospect." Don't grade-inflate.
- If any disqualify criteria match, return disqualified: true immediately.
- The weakest dimension matters — flag it explicitly for the personalization agent.
<!-- INSERT IMAGE: SCORING FRAMEWORK DASHBOARD — Gauge showing the 4 categories (40/20/20/20) with tier bars (see prompts/multi-agent-outreach-visuals.md #2) -->
Step 3: Personalization Agent
This is where generic outbound dies and signal-based outreach lives. The personalization agent reads the enrichment data, the scoring context, and the specific signal — then writes copy that speaks to their exact situation.
Agent prompt (this is the star of the show):
You are writing a cold email for a B2B GTM automation consultant.
PROSPECT CONTEXT:
- Name: {name}
- Title: {title}
- Company: {company_name} ({company_size} employees, {industry})
- Signal: {signal_type} — {signal_detail}
- Score: {score}/100 ({tier})
- Weakest dimension: {weakest_dimension}
- Personalization hooks: {hooks}
RULES (non-negotiable):
1. Under 120 words. They won't read more from a stranger.
2. First line references their specific situation (the signal). NOT "hope you're doing well."
3. Share an insight or observation, not a pitch. Give before you ask.
4. One CTA. Specific. "Worth a 15-min call Thursday?" not "Let me know if you're interested."
5. Conversational. Read it aloud. If it sounds like a template, rewrite it.
6. No buzzwords: "leverage," "synergy," "game-changing," "innovative," "cutting-edge."
7. No fake familiarity: "I've been following your company" (you haven't).
8. You are NOT selling. You're sharing what you've seen work for similar companies.
9. If the weakest dimension is pain_alignment, lean harder on the pain angle.
If it's company_fit, lead with a relevant case study from a similar company.
SIGNAL-SPECIFIC ANGLES:
- content_hire: "Before you fill that role, build the system first. Makes the hire 3x more effective."
- fresh_money: "Post-raise GTM is the bottleneck. Pipeline needs to scale but the team isn't built yet."
- content_gap: "Your blog hasn't been updated in {months} months. Competitors are publishing weekly."
- hiring_spree: "{count} open marketing roles means real budget. Automation handles 2-3 of those headcount plans."
- competitor_disruption: "With the news about {tool}, worth exploring a setup you own."
- hand_raiser: "No pitch. Saw your post and wanted to share what worked for a similar company."
Write the email. Subject line first, then body.
Signal-specific angles table:
| Signal | Source | Angle | Why It Works |
|---|---|---|---|
| Content Hire | LinkedIn job posts | "Build the system before you fill the role" | Budget is approved. You're faster than a 3-month hire. |
| Fresh Money | Funding announcements (Exa) | "Post-raise is when GTM becomes the bottleneck" | Spending mode. GTM is always the constraint. |
| Launch Day | Show HN, Product Hunt | "The spike fades fast. Build sustained distribution." | Day 3 reality hits. They need pipeline, not a moment. |
| Content Gap | Blog staleness (Exa) | "Your blog hasn't been updated in N months" | Specific. Painful. Shows you did the homework. |
| Hand Raiser | Reddit, HN posts | "No pitch — saw your post" | They asked for help. Zero cold. |
| Hiring Spree | 3+ marketing roles | "Automation handles 2-3 of those headcount plans" | Real budget, real urgency. |
| Tool Adoption | Tech stack + stale blog | "You've got the tools but nobody's running the playbooks" | Shelfware pain. |
| Revenue Milestone | ARR announcements | "That's the inflection where manual GTM breaks" | Growth creates bottlenecks. |
| Competitor Disruption | Layoffs, outages | "Before you sign another annual contract..." | Vendor gave them a reason to switch. |
Step 4: Sequence Assembly
One email isn't a sequence. Build 3-touch cadences with A/B variant generation.
3-touch structure:
| Touch | Day | Purpose | What It Contains |
|---|---|---|---|
| Initial | Day 1 | Signal-based outreach | Personalized email referencing their specific situation. Two A/B variants. |
| Follow-up | Day 3 | Value-add, no ask | Share an insight, article, or observation. "Thought this might be relevant. No response needed." Under 60 words. |
| Breakup | Day 7 | Respectful close | "If the timing's off, totally get it. Happy to reconnect down the road." |
Breakup email template:
Subject: closing the loop
Hey {first_name} — if the timing's off, totally get it. Happy to reconnect
down the road if things shift.
Best,
[Your name]
Why only 3 touches? Three-plus is spam. Full stop. You get one shot to be relevant, one follow-up to add value, and one breakup to close the loop gracefully. Anything more damages your domain reputation and your brand.
<!-- INSERT IMAGE: SEQUENCE TIMELINE — Day 1 → Day 3 → Day 7 visual with purpose labels (see prompts/multi-agent-outreach-visuals.md #4) -->Step 5: Outbox Sync
Push assembled sequences to your sending infrastructure. Before you send a single email:
Deliverability checklist:
- Use a dedicated sending domain (NOT your main domain — protect it)
- SPF record configured
- DKIM signing enabled
- DMARC policy set (start with
p=none, monitor, then tighten) - Domain warmed for 2+ weeks (start at 10/day, increase by 10 every 3 days)
- Unsubscribe link in every email (CAN-SPAM)
- Bounce handling configured (remove hard bounces immediately)
Use a dedicated domain. Not negotiable. If your cold outreach domain gets blacklisted, your main domain stays clean. Buy a similar domain — if your site is acme.com, send from acme-outreach.com. Daily send limits matter too: start at 50/day and scale gradually.
Cold Email Rules
These are non-negotiable. Break them and your reply rate drops to zero.
- Under 200 words. They won't read an essay from a stranger.
- No buzzwords. "Executed key initiatives" = meaningless. "Increased ARR by $1M in 3 months" = concrete.
- One clear CTA. "Worth a 15-min call?" Pick one. Not three.
- Be specific to THEM. If your email could be sent to anyone, rewrite it.
- Don't fake personalize. "I've been following your company" when you Googled them 5 minutes ago. People can tell.
- Share an insight, not a pitch. Give them something useful first.
- Conversational tone. Read it aloud. If it sounds like a template, it is one.
- Make it about them. You get 1-2 sentences about yourself. Max.
- Max 1-2 follow-ups. Three-plus is spam. Full stop.
- Speed matters. When they reply, respond within hours. Not days.
Before:
Hi Sarah, I hope this message finds you well! I wanted to reach out because I believe our innovative AI-powered GTM automation platform could really help leverage your team's content marketing efforts to drive synergistic growth outcomes.
After:
Sarah — saw you're hiring a Content Marketing Manager. Before you fill the seat: I built an automated content pipeline for a similar-sized SaaS company that handles 80% of what that role would do. Made the eventual hire 3x more effective when they started. Worth a 15-min call to see if something similar fits?
What the Playbook Doesn't Cover
This playbook gives you the architecture. You could build it yourself.
Here's what the playbook doesn't give you:
- Signal detection infrastructure. The 11-play signal system requires scrapers, APIs, and monitoring pipelines running continuously. The playbook describes the signals — the production version detects them automatically.
- ICP scoring calibration. The 100-point framework is the structure. Calibrating the weights for YOUR market — which signals matter most for your buyers — takes testing across hundreds of real prospects.
- Deliverability engineering. Domain warming, reputation management, bounce handling, blacklist monitoring. One mistake here burns your sending domain.
- CRM sync. Pushing enriched, scored, sequenced prospects into your CRM with proper stage mapping, ownership rules, and activity logging.
Most teams that attempt this spend 80-120 hours building a system that handles 3-4 signals. The production version handles 11 and runs on autopilot.
I build production outbound pipelines for $5,000-$12,000, flat fee. You own everything. That's less than 2 months of an SDR's salary for a system that runs indefinitely. The scoping call is free — you'll walk away with a build spec and a quote, even if you never hire me.
Currently booking for March 2026. I take on 2-3 builds per month.
Book a 30-minute scoping call →
Pro Tips & Pitfalls
Test your ICP config on 20 prospects before automating. Score them manually. If the scoring doesn't match your gut on who's a good prospect, adjust weights before running the pipeline on thousands.
Don't over-enrich. You need 5 good data points, not 50: company size, funding stage, the signal, their title, and one personalization hook. More data = more API costs and slower processing.
The personalization agent needs guardrails. Without explicit word limits and forbidden phrases in the prompt, it writes 300-word essays nobody reads. The prompt template constraints are critical.
Signal freshness matters. A Series A from 3 days ago is different from one 6 months ago. Weight recency in your scoring.
Separate your sending domain. Cold outreach carries deliverability risk. If your outreach domain gets flagged, your main domain stays clean.
Tools & Links
| Tool | Purpose | Pricing |
|---|---|---|
| Apollo | Company + contact enrichment | Free tier / $49+/mo |
| Hunter | Email finding (fallback) | Free tier / $49+/mo |
| Exa | Web search for signals | Usage-based |
| Apify | LinkedIn job scraping | $5-10/mo |
| Mailgun | Cold email sending | Pay-per-email |
| Instantly | Email sequence automation | $37+/mo |
| Anthropic API | LLM personalization (Claude) | Usage-based |
The Math
<!-- INSERT IMAGE: BEFORE/AFTER — "Manual SDR day" vs. "Automated pipeline" comparison (see prompts/multi-agent-outreach-visuals.md #5) -->Time Savings
| Task | Manual (per prospect) | Automated |
|---|---|---|
| Company research | 15-20 min | 30 sec |
| Contact finding | 10-15 min | 15 sec |
| ICP qualification | 5-10 min | 2 sec |
| Email personalization | 15-20 min | 10 sec |
| Sequence assembly | 10 min | 5 sec |
| Total | 55-75 min | ~1 min |
At 20 prospects/day, that's 18-25 hours of manual work replaced by ~20 minutes of pipeline runtime. That's where the "4 hours a day down to 20 minutes" number comes from — it's real.
Cost Per Enriched Lead
| Item | Monthly Cost | Leads/Month | Cost/Lead |
|---|---|---|---|
| Apollo | $49 | 500 | $0.10 |
| Hunter | $49 | 500 | $0.10 |
| LLM API | ~$30 | 500 | $0.06 |
| Mailgun | ~$15 | 1,500 emails | $0.01/email |
| Total | ~$143/mo | 500 leads | $0.29/lead |
vs. Manual SDR
An SDR doing this manually: $60-80K/year, processing 15-25 prospects/day. This pipeline: ~$143/month, processing 500+ prospects/day with better personalization. The pipeline doesn't replace the SDR — it makes them 10x more effective. They spend time on conversations instead of research.
Want This Built for Your Pipeline?
500 prospects per day. $0.29 per lead. 4 hours of manual work replaced by 20 minutes. Those are real production numbers.
I build outbound pipelines like this for businesses that want signal-based personalization at scale without hiring an SDR team. Here's what the scoping call covers:
- Your ICP and signals — which buyers, which triggers, which personalization angles matter for your market
- A build spec — scoring framework calibrated, signal detection configured, sequence templates written
- A flat-rate quote — $5,000-$12,000 one-time. Less than 2 months of an SDR's salary. You own everything.
The call is 30 minutes. No pitch. If I can help, I'll tell you what it costs. If I can't, I'll tell you that too.
"Julian takes clear ideas and turns them into fully executed AI go-to-market builds — with extreme ownership and zero ego." — Hannah Recker
Currently booking for March 2026. I take on 2-3 builds per month.