Use This Cold Email Automation
I've been helping dental practices automate patient communication, and the biggest bottleneck was initial outreach. Manually emailing 50+ clinics a day wasn't scalable, but mass email tools got me blocked or landed in spam.
So I built this workflow in n8n that reads a Google Sheet of clinic contacts, personalizes each email based on their data, and sends them one by one with proper delays between each send. It feels human because it actually waits between emails like a person would.
Here's the full breakdown:
Manual Trigger Node This is just the start button. When I'm ready to run the campaign, I click execute and the whole thing kicks off. Nothing fancy here, just a clean way to control when emails go out.
Google Sheets Connection Setup This node initializes the connection to my Google Sheet where all the clinic data lives. It's basically telling the workflow which spreadsheet to read from and which columns to pull. I keep Email, FirstName, Organization, Website, and Icebreaker columns in there.
Google Sheets Reader This pulls all the rows from the sheet. Every clinic contact becomes a data point the workflow can use. It's connected to my actual Google account using OAuth so it has permission to read the data.
Process Email Data This is where the magic happens. It loops through every row, grabs the relevant fields, checks if there's a valid email address, and packages everything into a clean data structure. It also counts how many total emails will be sent so I can track progress. If someone doesn't have an email or it's malformed, they get skipped automatically.
Split Into Batches This node processes one contact at a time. Instead of blasting 100 emails at once, it queues them up and releases them one by one. This is critical for avoiding spam flags and staying within email provider limits.
Send Email The actual email goes out here. I'm using a custom SMTP connection through my business email so it comes from a real domain. The subject line and body pull from the data fields, so each email is personalized with the recipient's name and clinic name. No generic mass email language.
The email itself is simple and conversational. I explain the problem they're likely facing, hint at the solution, and ask if they want more info. No hard pitch.
Wait 70 Seconds After each email sends, the workflow pauses for 70 seconds before moving to the next one. This mimics human behavior and keeps my sending rate under provider limits. Gmail and most SMTP servers flag you if you send too fast.
Log Email Progress This just logs which email number we're on out of the total. So if I'm sending to 50 clinics, it'll say "Email 12/50 sent successfully." Helpful for monitoring runs and debugging issues.
Check if Last Email Once we hit the last email in the list, this node catches it and routes to a completion message instead of looping back. Without this, the workflow would try to keep going forever.
Campaign Complete Message Just a final confirmation that all emails went out. Gives me peace of mind that the run finished cleanly.
What worked: The 70-second delay was the sweet spot. I tried 30 seconds initially and got rate-limited. The one-by-one batch processing also keeps Gmail happy.
What I'm still improving: Right now, if the workflow fails halfway through, I have to manually figure out where it stopped. I'm thinking about adding a "last sent" tracker in the sheet so it can resume from where it left off.
Also considering adding a reply detection node so if someone responds, they automatically get removed from future campaigns.
6
1 comment
Digvijay Singh Gour
3
Use This Cold Email Automation
AI Automation Society
skool.com/ai-automation-society
A community built to master no-code AI automations. Join to learn, discuss, and build the systems that will shape the future of work.
Leaderboard (30-day)
Powered by