Email Outreach Automation
Cold email outreach pipeline with multi-step sequences, reply tracking, bounce handling, and campaign analytics. 4 production-ready n8n workflows with Google...
Description
name: email-outreach-automation description: Cold email outreach pipeline with multi-step sequences, reply tracking, bounce handling, and campaign analytics. 4 production-ready n8n workflows with Google Sheets CRM and SMTP integration. tags: [outreach, cold-email, sales, sequences, crm, automation, prospecting, n8n, google-sheets] author: mhmalvi version: 1.2.0 license: CC BY-NC-SA 4.0 metadata: clawdbot: emoji: "\U0001F4E7" requires: n8nCredentials: [google-sheets-oauth2, smtp] env: [OUTREACH_SECRET, OUTREACH_ADMIN_EMAIL] os: [linux, darwin, win32]
Email Outreach Automation
A complete cold email outreach pipeline built on n8n and Google Sheets. Import prospects, run multi-step email sequences, track replies, and get daily campaign reports.
Problem
Cold email outreach requires consistent followup sequences, reply detection, and status tracking across hundreds of prospects. Most tools charge $50-200/month per seat and lock you into their platform.
This system provides a free, self-hosted outreach pipeline with full control over your data and sending.
What It Does
- Prospect Import — Webhook API to import prospects (single or batch) with validation and deduplication
- Email Sequences — 4-step automated outreach: initial, follow-up 1 (Day 3), follow-up 2 (Day 7), breakup (Day 14)
- Reply Tracking — Webhook to mark prospects as replied and notify your team
- Campaign Reports — Daily metrics: reply rates, bounce rates, step distribution, per-campaign breakdown
Included Workflows
| # | File | Purpose |
|---|---|---|
| 01 | 01-prospect-import.json |
Webhook import with validation, dedup, and Sheets storage |
| 02 | 02-outreach-sequence.json |
Scheduled 4-step email sequence with timing logic |
| 03 | 03-reply-tracker.json |
Webhook to log replies and notify team |
| 04 | 04-campaign-report.json |
Daily campaign analytics email |
Architecture
Prospect Import (webhook/CSV)
|
v
Workflow 01: Validate & Store
+-> Deduplicate by email
+-> Save to Google Sheets (status: new)
Scheduled (every 4 hours):
|
v
Workflow 02: Outreach Sequence
+-> Read prospects with status != replied/bounced
+-> Check timing (Day 0/3/7/14)
+-> Send appropriate email template
+-> Update step + next_send_at in Sheets
Reply received:
|
v
Workflow 03: Reply Tracker
+-> Match email to prospect
+-> Mark as replied in Sheets
+-> Notify team via email
Daily Schedule:
|
v
Workflow 04: Campaign Report
+-> Aggregate metrics by campaign
+-> Reply rate, bounce rate, step distribution
+-> Email report to admin
Email Sequence
| Step | Timing | Template |
|---|---|---|
| 1 - Initial | Day 0 | Introduction + value proposition |
| 2 - Follow-up 1 | Day 3 | Brief followup + case study mention |
| 3 - Follow-up 2 | Day 7 | Different angle + call-to-action |
| 4 - Breakup | Day 14 | Polite closing, leaves door open |
Required n8n Credentials
| Credential Type | Used For | Placeholder in JSON |
|---|---|---|
| Google Sheets OAuth2 | Prospect storage and tracking | YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
| SMTP | Sending outreach emails and reports | YOUR_SMTP_CREDENTIAL_ID |
Environment Variables
# Required
OUTREACH_SECRET=your-webhook-auth-secret
OUTREACH_ADMIN_EMAIL=admin@yourbusiness.com
Configuration Placeholders
| Placeholder | Description |
|---|---|
YOUR_OUTREACH_SHEET_ID |
Google Sheet ID for prospect data |
YOUR_GOOGLE_SHEETS_CREDENTIAL_ID |
n8n Google Sheets credential ID |
YOUR_SMTP_CREDENTIAL_ID |
n8n SMTP credential ID |
YOUR_NOTIFICATION_EMAIL |
Fallback admin email (also set via OUTREACH_ADMIN_EMAIL env) |
Google Sheets Schema (Prospects)
| Column | Type | Description |
|---|---|---|
| text | Primary key, prospect email | |
| name | text | Prospect name |
| company | text | Company name |
| title | text | Job title |
| campaign | text | Campaign identifier |
| status | text | new / in_sequence / replied / bounced / completed |
| step | number | Current sequence step (0-4) |
| last_sent_at | datetime | When last email was sent |
| next_send_at | datetime | When next email is due |
| replied | boolean | Whether prospect replied |
| replied_at | datetime | Reply timestamp |
| bounced | boolean | Whether email bounced |
| imported_at | datetime | Import timestamp |
Quick Start
1. Prerequisites
- n8n v2.4+ (self-hosted)
- Google Sheets OAuth2 credentials
- SMTP credentials (dedicated outreach email recommended)
2. Create Prospect Sheet
Create a Google Sheet with the columns above. Name the tab "Prospects".
3. Import & Configure
Import all 4 JSON files into n8n. Replace all YOUR_* placeholders.
4. Import Prospects
curl -X POST https://your-n8n.com/webhook/outreach/import \
-H "Content-Type: application/json" \
-d '{
"_secret": "your-outreach-secret",
"prospects": [
{"email": "john@company.com", "name": "John", "company": "Acme Inc", "campaign": "q1-2026"}
]
}'
5. Track Replies
curl -X POST https://your-n8n.com/webhook/outreach/reply \
-H "Content-Type: application/json" \
-d '{"email": "john@company.com", "subject": "Re: Quick question", "message": "Sure, let us chat!"}'
Use Cases
- Freelancers — Automated client prospecting with professional followup
- Agencies — Multi-campaign outreach with per-campaign analytics
- SaaS founders — Early-stage customer development outreach
- Recruiters — Candidate outreach with sequenced followup
- Sales teams — Supplement CRM with lightweight, self-hosted sequences
Requirements
- n8n v2.4+ (self-hosted recommended)
- Google Sheets OAuth2 credentials
- SMTP email credentials (use dedicated sending domain for deliverability)
Reviews (0)
No reviews yet. Be the first to review!
Comments (0)
No comments yet. Be the first to share your thoughts!