How to Build an AI Email Outreach System with N8N and OpenAI
Generic cold emails get a 2–3% reply rate. Personalized ones — where the opener references something specific about the recipient — get 8–12%. The problem: writing personalized openers at scale takes more time than most teams have.
This N8N workflow automates an AI Email Outreach System end-to-end: prospect research, AI-written first lines, scheduled sending, reply detection, and follow-up sequences.
Workflow Architecture
Lead List (Google Sheets / Apollo.io API)
│
▼
Enrich: Company news, LinkedIn data
│
▼
OpenAI: Write personalized first line
│
▼
Assemble full email from template
│
▼
Gmail: Send (rate-limited, scheduled)
│
▼
Gmail Watch: Monitor for replies
│
┌────┴────┐
Reply No Reply
│ │
Update Follow-up
CRM sequence
(Day 3, 7, 12)Step 1 — Pull Leads from Apollo.io
Apollo.io has a database of 270+ million contacts. Use their API to pull targeted leads:
// N8N HTTP Request node
{
"url": "https://api.apollo.io/api/v1/mixed_people/search",
"method": "POST",
"headers": { "Content-Type": "application/json" },
"body": {
"api_key": "YOUR_APOLLO_KEY",
"q_organization_domains": ["target-industry.com"],
"person_titles": ["CEO", "Founder", "COO", "Head of Operations"],
"per_page": 25,
"organization_industry_tag_ids": ["5567dd9973696439b10b0000"]
}
}Filter out leads missing email addresses or with low confidence scores.
Step 2 — Enrich with Recent Company News
For each lead, find something recent and specific to reference:
// N8N HTTP Request — NewsAPI
URL: https://newsapi.org/v2/everything
Params: {
q: "{{ $json.organization.name }}",
sortBy: "publishedAt",
pageSize: 3,
from: "[30 days ago]",
apiKey: "YOUR_NEWSAPI_KEY"
}Extract the most relevant headline. If no news found, fall back to their LinkedIn headline or recent company milestone from Apollo data.
Step 3 — AI-Personalized First Line
This is the ROI driver. Send each lead's data to OpenAI:
System prompt:
You write cold email opening lines for a B2B AI automation agency based in Ahmedabad, India.
Write ONE opening sentence (maximum 20 words) that:
- References something SPECIFIC about this person or company
- Sounds natural and human, not like a template
- Shows you've done real research
- Does NOT use: "I noticed", "I loved your", "I came across", "Congratulations on"
Lead info:
Name: {{ $json.first_name }} {{ $json.last_name }}
Title: {{ $json.title }}
Company: {{ $json.organization.name }}
Industry: {{ $json.organization.industry }}
Recent news: {{ $json.recent_news }}
LinkedIn headline: {{ $json.linkedin_headline }}
Company size: {{ $json.organization.estimated_num_employees }} employees
Return ONLY the sentence. No explanation.Sample outputs:
- "Scaling to 200 employees in two years must have the operations team running at full capacity."
- "Entering the Toronto commercial real estate market right as interest rates stabilize — good timing."
- "Your AI-first approach to HR sounds like it's attracting exactly the kind of talent acquisition clients who would benefit from what we do."
Step 4 — Email Template Assembly
// N8N Code node
const first_name = $json.first_name;
const first_line = $json.ai_first_line;
const company = $json.organization.name;
const industry = $json.organization.industry;
const email_body = `${first_line}
I'm reaching out because we work with ${industry} companies to automate their most time-consuming operational workflows — typically saving 10–20 hours per week per team.
We recently helped [reference client in same industry] reduce their [specific pain point] by 70% using a combination of N8N automation and AI agents.
Would a 20-minute call make sense to explore if there's a fit?
Best,
Dhruv Desai
Monk Media One Tech | monkmediaone.tech
+91 88668 19349`;
return [{ json: {
to_email: $json.email,
to_name: `${first_name} ${$json.last_name}`,
subject: `${company} + AI automation`,
body: email_body
} }];Step 5 — Scheduled Sending
Don't blast all emails at once. Schedule for optimal delivery times:
// N8N Code node — scheduling logic
const recipient_timezone = $json.organization.country_code === "IN" ? "Asia/Kolkata" : "America/New_York";
// Best times: Tuesday–Thursday, 9am–11am local time
const scheduled_time = getNextBusinessDayMorning(recipient_timezone);
return [{ json: { ...originalData, send_at: scheduled_time } }];Send via Gmail node with a 2-minute delay between each email to avoid triggering spam filters.
Step 6 — Reply Detection and Follow-Up
Set up a Gmail Watch trigger in N8N that monitors your inbox:
- If reply detected → mark lead as "replied" in Sheets, stop follow-up sequence, notify sales rep
- If no reply after 3 days → send follow-up 1
- If no reply after 7 days → send follow-up 2 (share case study, no ask)
- If no reply after 12 days → send final follow-up, remove from sequence
Our Results After 60 Days
| Metric | Value |
|---|---|
| Leads contacted | 420 |
| Email open rate | 58% |
| Reply rate (all replies) | 11.4% |
| Positive replies (interested) | 23 |
| Discovery calls booked | 18 |
| Deals closed | 4 |
Without the personalized first line (tested for 2 weeks), reply rate was 3.8%. The AI personalization was the single biggest variable.
Compliance Notes
- Include unsubscribe option in every email
- B2B cold email to business addresses is legal in India under IT Act
- For EU recipients: GDPR requires a legitimate interest basis — document this
- For Canadian recipients: CASL requires prior consent — consider opt-in sequences instead
We're Monk Media One Tech — AI automation agency, Ahmedabad. We build N8N workflows, sales automation, and AI systems.
Book a free discovery call: monkmediaone.tech/contact
📞 +91 88668 19349 | hello@monkmediaone.tech
