Manual outreach is for agencies that want to stay small forever. If you want to run an AI cold email operation that generates $10,000+/month in recurring revenue, you need an automated engine that researches prospects, writes personalized emails, manages deliverability, and tracks results — all without you touching a keyboard after the initial setup. This guide is the technical implementation manual. Follow every step in order. Skip nothing. If you skip the SPF configuration, your emails go to spam. If you skip the quality gate, your AI sends embarrassing hallucinations. Every step exists because someone lost a client by skipping it.
This guide assumes you have zero infrastructure set up. By the end, you’ll have a fully automated pipeline that can handle 10+ clients simultaneously with minimal manual intervention.
Prerequisites
Before you start, you need the following:
- Instantly .ai — $37/mo (Growth plan for unlimited sending accounts and warmup)
- Make .com — $16/mo (Teams plan for 10,000 operations/month)
- Apollo .io — $49/mo (Starter plan for 500 export credits/month)
- Gemini API key — Free tier available via Google AI Studio, pay-as-you-go for scale
- 5 domain names — ~$50/year total on Namecheap or Cloudflare
- Google Workspace — $7.20/mo per domain ($36/mo for 5 domains)
- 8-12 hours of uninterrupted time for initial setup
Total upfront cost: $138/mo + $50/year for domains. A single client at $2,000/month covers this 14x over.
Step 1: Domain Infrastructure and Deliverability Setup
This is the most critical step. Skip it and everything else is pointless. Your emails will land in spam and you’ll burn through domains faster than you can buy them. Take the time to do this right.
Sub-step 1a: Purchase and Configure Sending Domains
Go to Namecheap.com. Purchase 5 domains that sound professional and relate to outreach. Examples: “youragency-connect.com,” “youragency-outreach.com,” “youragency-growth.com,” “youragency-reach.com,” “youragency-hello.com.” Do NOT use your main agency domain for sending — if it gets flagged, your entire business email goes down.
For each domain:
- Add the domain to your Google Workspace account. Follow the Google Workspace setup wizard — it will give you a TXT record to add to your DNS.
- Go to your Namecheap DNS settings for each domain. Add the TXT verification record Google gave you. Wait 5-10 minutes, then click “Verify” in Google Workspace.
- Create one user account per domain: “sarah@youragency-connect.com,” “michael@youragency-outreach.com,” etc. Use real-sounding names — “no-reply@” or “outreach@” scream “mass email” and kill reply rates.
Do you see the Google Workspace admin console showing all 5 domains as “Verified”? If any show “Setup in progress,” check that the DNS TXT record was added correctly. Common mistake: adding the TXT record to the wrong domain.
Sub-step 1b: Configure SPF, DKIM, and DMARC Records
For each domain, add these DNS records in Namecheap:
SPF Record (TXT record at the root domain):
v=spf1 include:_spf.google.com ~all
This tells receiving mail servers that Google Workspace is authorized to send emails on behalf of your domain.
DKIM Record (In Google Workspace admin → Apps → Google Workspace → Gmail → Authenticate email): Click “Generate new record” for each domain. Copy the TXT record name and value into Namecheap DNS. This adds a cryptographic signature to every email you send, proving it wasn’t tampered with.
DMARC Record (TXT record at _dmarc.yourdomain.com):
v=DMARC1; p=none; rua=mailto:your-main-email@gmail.com
Start with p=none (monitor mode) for the first 30 days. This tells receiving servers to send you reports about email authentication failures without rejecting anything. After 30 days of clean reports, upgrade to p=quarantine.
Do you see all three record types in your Namecheap DNS dashboard? Verify each domain at mail-tester.com by sending a test email from each domain. Your score must be 9/10 or higher. If any domain scores below 9, the mail-tester report will tell you exactly which record is missing or misconfigured. Fix it before moving on.
Sub-step 1c: Import Domains into Instantly.ai and Start Warmup
Log into Instantly.ai. Go to “Accounts” → “Add Account.” Connect each of your 5 Google Workspace email accounts using the “Sign in with Google” option. Instantly will request send and read permissions — grant them.
For each account, configure warmup settings:
- Warmup volume: Start at 5 emails/day, increase by 2-3 per day until reaching 40 emails/day after 14 days
- Warmup reply rate: Set to 25-30% (this means 25-30% of warmup emails receive automated replies, which signals to spam filters that your emails are wanted)
- Warmup timing: 9 AM - 5 PM in your target timezone
- Warmup content: Use the default Instantly warmup templates — they’re designed to look natural
Do NOT start sending cold emails until each domain has been warming up for at least 14 days. The warmup builds domain reputation with Gmail and Outlook spam filters. Sending cold emails too early is like trying to sprint on day one of gym membership — you’ll pull something and be out for months.
Step 1 Check-In
Verify each of these before moving on:
- All 5 domains show “Verified” in Google Workspace admin console
- Mail-tester.com score is 9/10 or higher for each domain
- All 5 accounts show “Warmup Active” in Instantly.ai dashboard
- DMARC reports are being received at your monitoring email address
- Each account’s warmup schedule is increasing volume gradually (check “warmup progress” column)
Step 2: Lead Sourcing and List Building Pipeline
This step builds your automated lead pipeline. Instead of manually scraping prospects one by one, you’ll set up a repeatable system that produces high-quality lists for any client niche.
Sub-step 2a: Apollo.io Configuration
Log into Apollo.io. Go to “Filters” and build your first saved search for your own agency: Target VP Sales, Head of Growth, or Director of Revenue at B2B SaaS companies with 20-200 employees. Add intent signals: “Currently hiring for Sales roles,” “Recently raised funding,” or “Using Salesforce/ HubSpot .”
Save this search as “Agency Prospects — Own Outbound.” You’ll use this to sell your own services.
For each client, create a new saved search with their specific ICP. Name it “[Client Name] — Prospects.” Important: never reuse lists across clients. Each client’s list must be unique to avoid prospects receiving emails from multiple campaigns about different services.
Sub-step 2b: Google Sheet Lead Database
Create a Google Sheet called “Lead Database — [Client Name]” with these columns: A: First Name | B: Last Name | C: Title | D: Company | E: Email | F: LinkedIn URL | G: Context (auto-filled by Apollo) | H: Personalization (auto-filled by AI) | I: Campaign Status | J: Send Date | K: Reply Status
Set up data validation on column I (Campaign Status): “Pending,” “Queued,” “Sent,” “Replied-Positive,” “Replied-Negative,” “Bounced.” This lets you filter and track leads at every stage.
Sub-step 2c: Make.com Workflow — Lead Import
Create a new Make.com scenario called “Lead Import Pipeline”:
- Trigger: Manual trigger (you’ll run this when you export leads from Apollo)
- Module 1 — Google Sheets “Add Rows”: Map the Apollo export data to columns A-G in your lead database
- Module 2 — Filter: Skip any rows where email is blank or doesn’t match standard email format
- Module 3 — Google Sheets “Update Row”: Set Campaign Status to “Pending”
When you export leads from Apollo (up to 500/month on Starter), download the CSV, paste the relevant columns into your Google Sheet, and the Make.com workflow processes them automatically.
Step 2 Check-In
Verify each of these before moving on:
- Apollo.io saved search returns at least 200 prospects matching your ICP
- Google Sheet is set up with all columns and data validation
- Make.com “Lead Import Pipeline” scenario runs successfully with test data
- Test leads appear in the Google Sheet with “Pending” status
Step 3: AI Personalization Engine
This is the heart of your agency. The personalization engine is what separates you from every other cold email agency that sends generic templates. When it works, reply rates double or triple. When it fails, you send embarrassing hallucinations that kill deals.
Sub-step 3a: Gemini API Setup
Go to Google AI Studio (aistudio.google.com). Create a new API key. Copy the key and store it securely — you’ll need it for your Make.com workflow.
Test the API with a simple curl command or using the AI Studio playground:
Prompt: "You are a senior BDR at a cold email agency. Write a 1-sentence opening line for a cold email to Sarah Chen, VP of Sales at TechFlow (a B2B SaaS company that just raised a $12M Series A). Reference the funding round. Be specific and natural. No exclamation marks."
Expected output should look like: “Saw TechFlow’s $12M Series A — congrats on the raise, and curious if scaling the outbound engine is on the roadmap now that you’re hiring AEs.”
If the output is generic (“I noticed your company is growing…”), your prompt needs more constraints. If it hallucinates facts not in the prompt, add: “Only reference information explicitly provided. Do not invent details.”
Sub-step 3b: Make.com Workflow — Personalization Pipeline
Create a new Make.com scenario called “AI Personalization Engine”:
- Trigger: Google Sheets “Watch Rows” — trigger when column H (Personalization) is empty and column I (Campaign Status) is “Pending”
- Module 1 — HTTP Request to Gemini API:
- URL:
https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=[YOUR_API_KEY] - Method: POST
- Body: Your personalization prompt with variables from columns A-G
- URL:
- Module 2 — Error Handler: If the API call fails (rate limit, timeout), log the error to a separate “Errors” sheet and set Campaign Status to “Error-Needs Retry”
- Module 3 — Google Sheets “Update Row”: Write the AI-generated personalization to column H, set Campaign Status to “Personalized”
The critical prompt template for Module 1:
You are a senior business development representative writing a cold email opening line.
PROSPECT: {First Name} {Last Name}
TITLE: {Title}
COMPANY: {Company}
CONTEXT: {Context from Apollo}
RULES:
- Write exactly 1-2 sentences
- Reference something specific from the CONTEXT provided
- Sound like a human who spent 10 minutes researching this person
- NO exclamation marks
- NO "I noticed" or "I came across" or "I was wondering"
- Start with the observation, not with "I"
- If no specific context is available, write a professional observation about their industry
- Do NOT invent or hallucinate any facts not in the CONTEXT
OUTPUT FORMAT: Just the opening line text, nothing else.
Sub-step 3c: Quality Gate — The Hostile Critic
Create a second Make.com scenario called “Quality Gate”:
- Trigger: Google Sheets “Watch Rows” — trigger when column H (Personalization) is filled and column I is “Personalized”
- Module 1 — HTTP Request to Gemini API:
- Prompt: “You are a strict editor reviewing a cold email opening line for accuracy and tone. Line: {Personalization}. Context provided: {Context}. Check: (1) Does it reference only facts from the context? (2) Is it free of exclamation marks and hype? (3) Does it sound natural? Reply PASS or FAIL. If FAIL, explain briefly.”
- Module 2 — Router:
- If PASS: Set Campaign Status to “Approved” and proceed to sending
- If FAIL: Set Campaign Status to “Review-Needed” and highlight the row in the sheet
This quality gate catches approximately 5-10% of AI outputs that are either hallucinated or poorly written. For the first 500 emails per client, review every FAIL manually. After that, you can trust the system and only review random samples.
Step 3 Check-In
Verify each of these before moving on:
- Gemini API key works and returns high-quality personalization lines
- Make.com “AI Personalization Engine” scenario processes test leads correctly
- Personalization appears in column H of the Google Sheet
- Quality Gate scenario correctly identifies and flags poor outputs
- At least 10 test personalizations pass the quality gate with PASS status
Step 4: Campaign Deployment and Sending Infrastructure
With leads sourced and personalized, it’s time to build the automated sending pipeline.
Sub-step 4a: Campaign Setup in Instantly.ai
Create a new campaign in Instantly for each client. Configure:
- Campaign name: “[Client Name] — [Niche] — [Month]”
- Sending accounts: Select 3-5 of your warmed-up domains (rotate which accounts you use for different clients)
- Daily limit per account: 40 emails (never exceed 50 on a single domain)
- Sending schedule: Monday-Friday, 9 AM - 5 PM in the prospect’s timezone
- Random delay between sends: 2-8 minutes (makes the pattern look human)
- Stop sending if reply rate drops below: 1% (indicates a deliverability problem)
Write your email sequence. Use this template structure:
Email 1 (Day 1):
{Personalization from column H}
{One sentence about the problem you solve — specific to their industry}
{One sentence about a result — use a real number}
Worth a 15-minute chat this week?
{Your name}
{Your title}
P.S. {Specific reference to recent company news — also AI-generated}
Email 2 (Day 4):
Hey {First Name},
Just bumping this up. Happy to share a quick case study from [similar company in their space] that went from 0 to 12 qualified meetings in their first month.
Interested?
{Your name}
Email 3 (Day 9):
Hey {First Name},
I put together a 2-page breakdown of how [their industry] companies are using AI to generate 3x more meetings from outbound. Want me to send it over?
No strings attached — just useful data.
{Your name}
Email 4 (Day 15):
Hey {First Name},
Assuming this isn't a priority right now. I'll stop reaching out — feel free to ping me if things change.
Good luck with everything.
{Your name}
Sub-step 4b: Make.com Workflow — Push to Instantly
Create a Make.com scenario called “Campaign Sender”:
- Trigger: Google Sheets “Watch Rows” — trigger when column I is “Approved”
- Module 1 — Instantly.ai “Add Lead to Campaign”:
- Map email address, first name, company, and personalization to the correct fields in the Instantly campaign
- Module 2 — Google Sheets “Update Row”: Set Campaign Status to “Queued” and record the send date
Run this scenario on a schedule: every 2 hours during business days. This batches your sends naturally instead of pushing all leads at once.
Step 4 Check-In
Verify each of these before moving on:
- Instantly campaign is created with all 4 email templates
- Sending accounts are configured with proper daily limits
- Make.com “Campaign Sender” scenario successfully adds test leads to the campaign
- Test emails land in the primary inbox (not spam) — send to your own email addresses first
- Reply tracking is active in Instantly dashboard
Step 5: Monitoring, Reporting, and Client Delivery
This is where you justify your monthly retainer. Clients don’t pay you to send emails — they pay you for the meetings and the visibility into what’s working.
Sub-step 5a: Automated Daily Metrics Pull
Create a Make.com scenario called “Daily Metrics Reporter”:
- Trigger: Schedule — runs every day at 8 AM
- Module 1 — Instantly.ai “Get Campaign Stats”: Pull yesterday’s metrics (emails sent, opens, replies, positive replies, bounces, unsubscribes)
- Module 2 — Google Sheets “Add Row”: Append the data to a “Metrics” sheet with columns for Date, Campaign, Emails Sent, Opens, Open Rate, Replies, Reply Rate, Positive Replies, Meetings Booked
- Module 3 — Conditional: If reply rate drops below 2% for any campaign, send a Slack /email alert to you
Sub-step 5b: Client Dashboard in Notion
Create a Notion page for each client with these sections:
- Weekly Snapshot: Auto-updated table showing this week’s metrics vs. last week
- Meeting Log: Every qualified meeting booked, with prospect name, company, and date
- Campaign Performance: Open rates, reply rates, and positive reply rates by campaign and template
- Action Items: Any issues you’ve identified and fixes you’re implementing
- Next Week’s Plan: Upcoming campaigns, new lists, A/B tests
Share this Notion page with the client. Update it every Friday. This is the single most important thing you can do to reduce churn — clients who can see their metrics are 3x less likely to cancel than clients who get a monthly email summary.
Sub-step 5c: Pricing and Service Delivery
Pricing Table
| Tier | Monthly | What’s Included | Your Cost | Margin |
|---|---|---|---|---|
| Starter | $1,500 | 500 emails/week, 5 meetings guaranteed, 1 campaign, weekly report | ~$30/mo tools + 3 hrs/week | ~90% |
| Growth | $3,000 | 1,500 emails/week, 12 meetings guaranteed, 3 campaigns, daily report, A/B testing | ~$60/mo tools + 5 hrs/week | ~88% |
| Scale | $5,000 | 3,000+ emails/week, 25 meetings guaranteed, unlimited campaigns, Notion dashboard, reply handling | ~$150/mo tools + 8 hrs/week | ~82% |
Cost Breakdown
| Item | Free Tier | Paid Tier | When to Upgrade |
|---|---|---|---|
| Instantly.ai | 14-day trial | $37/mo | Immediately — you need the warmup feature |
| Apollo.io | 60 credits/mo | $49/mo | After landing first client |
| Make.com | 1,000 ops/mo | $16/mo | After landing first client |
| Gemini API | 15 req/min free | Pay-as-you-go ~$20/mo | When processing 5,000+ leads/mo |
| Domains | — | $10/domain/year | Buy 5 immediately |
| Google Workspace | — | $7.20/mo/domain | Buy 5 immediately |
Production Checklist
- SPF, DKIM, and DMARC records verified on all 5 sending domains
- Mail-tester.com score is 9/10+ for every domain
- Domain warmup running for 14+ days before first cold email
- Apollo.io saved searches configured for each client ICP
- Google Sheet lead database set up with data validation
- AI Personalization Engine Make.com scenario tested and running
- Quality Gate Make.com scenario flagging poor outputs correctly
- Instantly.ai campaigns configured with 4-email sequences
- Daily sending limits set to 40 emails/domain/day maximum
- Random delay between sends (2-8 minutes)
- Daily Metrics Reporter Make.com scenario running on schedule
- Client Notion dashboard created and shared
- Reply monitoring active — positive replies responded to within 1 hour
- Weekly client report template created and tested



