n8n Cold Email Automation Template: Free Download + Setup Guide
AnswerLet's be precise, because "cold email automation" gets used to mean everything from scraping to sequencing. This template automates the personalization step — the one that's genuinely painful to do by hand and genuinely embarrassing to fake.
Contents
- What does an n8n cold email automation actually do?
- Is n8n free for this?
- How to import the template (step by step)
- How does the AI personalization node work — and how do you edit the prompt?
- What data does the Google Sheet need?
- What breaks — Gmail limits, OAuth, empty rows, spammy copy
- Pair it with lead scoring and objection prep
- Questions people ask
What does an n8n cold email automation actually do?
Let's be precise, because "cold email automation" gets used to mean everything from scraping to sequencing. This template automates the personalization step — the one that's genuinely painful to do by hand and genuinely embarrassing to fake.
Here is every node in the workflow, in execution order. These are the real node names you'll see on the canvas after import:
| # | Node | Type | What it does |
|---|---|---|---|
| 1 | Setup instructions | Sticky Note | On-canvas setup guide (the 5-minute checklist) — not executed |
| 2 | When clicking Execute | Manual Trigger | You run it on demand; no schedule to configure |
| 3 | Get prospects | Google Sheets (v4.5) | Reads every row from your Prospects tab |
| 4 | Only prospects without an opener | IF | Skips rows where the Opener column is already filled, so re-runs never double-process |
| 5 | Write opener (AI) | OpenAI (LangChain node) | Sends Name, Company, Role, and Context to gpt-4o-mini; gets back strict JSON: an opener, a 1–5 specificity score, and a one-line reason |
| 6 | Shape the result | Set | Maps the AI output into clean columns: Name, Company, Opener, Specificity, Why |
| 7 | Save personalized | Google Sheets (v4.5) | Appends the finished rows to your Personalized tab |
Two honest scope notes. First, this is closer to an n8n cold email agent for openers than a full outbound machine: it researches nothing on its own — it works from the Context column you provide — and it does not send email. There is deliberately no Gmail send node in this template; you review the Personalized tab and send through whatever tool you already use (or add a Gmail node yourself — more on the limits of that below). Second, the specificity score is the quiet killer feature: the AI is instructed to score its own opener honestly, so a 1 or 2 tells you the row's Context was too thin to personalize. Sort by score, fix the low ones, and you never send a "just following up" opener again.
If you want the broader picture of this workflow pattern — sheet in, AI transform, sheet out — the personalize cold emails automation page covers it end to end.
Is n8n free for this?
Yes — with one honest caveat about where the costs actually sit.
n8n itself: the self-hosted Community edition is free, indefinitely. Per n8n's own hosting docs, the Community edition "includes almost the complete feature set of n8n" and you can "stick with the basic Community edition for free, indefinitely." The features it excludes (SSO, environments, Git version control, log streaming, workflow sharing) are team/enterprise features — none of them are needed to run this template. You can run n8n via Docker or npm on your own machine or a cheap VPS. n8n Cloud, the hosted version, is a paid subscription after the trial — convenient, but not required.
What does cost money: the OpenAI API key. The template uses gpt-4o-mini, one of the cheapest capable models — personalizing a few hundred prospects costs cents, not dollars. Any OpenAI-compatible key works.
What's free: Google Sheets, the Google OAuth connection, and the template itself. So "cold email automation n8n free" is accurate for the infrastructure; budget a few cents per batch for the AI calls.
How to import the template (step by step)
- Download the file. Go to the Cold Email Personalizer template page and download
workflowstacks-cold-email-personalizer.n8n.json. - Optional but worth 30 seconds — personalize before you download. On the template page there's a goal field: type what you sell and who you sell it to (at least 10 characters, e.g. "book demos for our payroll software with HR leads at 50–500 person companies") and the download is rebuilt with the AI prompt node rewritten for your business. This is a real server-side feature, not a mail-merge gimmick — it edits the actual
Write opener (AI)node in the JSON you download, so the workflow speaks your language out of the box. - Import into n8n. In the n8n Editor UI, click the three-dots menu in the upper right, select Import from File, and choose the downloaded JSON. (These are the official steps from n8n's export/import docs; you can also paste workflow JSON straight onto the canvas with Ctrl+V.)
- Connect Google Sheets. Open the Get prospects node, create/select your Google credential, then pick your spreadsheet and the
Prospectstab. Do the same in Save personalized, pointing at thePersonalizedtab of the same spreadsheet. - Add your OpenAI key. Open Write opener (AI) and attach your OpenAI API credential.
- Run it. Click Execute. Each prospect row without an existing opener gets processed and appended to
Personalizedwith its specificity score.
The sticky note on the canvas repeats this checklist, so you don't need to keep this page open. Total setup time is about 5 minutes if your sheet is ready.
How does the AI personalization node work — and how do you edit the prompt?
The Write opener (AI) node is where the value lives. It calls gpt-4o-mini with a prompt that injects four fields from each row — Name, Company, Role, and Context — and demands strict JSON back in this shape:
- opener — one sentence, under 25 words, that references the specific Context naturally. The prompt explicitly bans flattery clichés ("love your work", "big fan"), "I hope this finds you well", and any mention of your own product. The bar it sets: the line should be impossible to send to anyone else.
- specificity — a 1–5 integer. 5 means the opener references a concrete detail only this prospect would recognize; 1 means it could go to anyone.
- why — 6–12 words on what makes the line land or fall flat.
If a row's Context is empty or vague, the prompt tells the model to write the best opener it can and score it honestly low — so weak inputs surface as low scores instead of hiding as confident garbage.
Editing the prompt: open the Write opener (AI) node and edit the message text directly. Keep three things intact if you do: the {{ $json.Name }}-style field references (they pull from your sheet), the strict-JSON instruction (the downstream Shape the result node reads opener, specificity, and why by name), and the JSON output toggle. Everything else — tone, banned phrases, length limit, what counts as a 5 — is yours to tune. Common edits: adding your industry's jargon to sound native, tightening the word limit for mobile preview lines, or adding "write in British English".
If you'd rather not hand-edit, the personalize-before-download feature on the template page does the prompt rewrite for you from a one-line goal. And if you want to go deeper on how to personalize cold emails with AI in n8n more generally, see /automate/personalize-cold-emails.
What data does the Google Sheet need?
One spreadsheet, two tabs. Exact structure:
Tab 1 — Prospects (your input), with these headers in row 1:
| Column | Required | What goes in it |
|---|---|---|
| Name | Yes | Prospect's first/full name |
| Company | Yes | Company name |
| Role | Yes | Their title or function |
| Context | Yes — this is the whole game | Something real and specific you know: a launch, a hire, a post they wrote, a metric, a tool they use |
| Opener | Leave empty | The IF node uses this to skip already-processed rows |
Tab 2 — Personalized (the output): create it empty. The workflow appends Name, Company, Opener, Specificity, and Why for each processed prospect.
The Context column is where cold email lives or dies, and the template is honest about that: garbage in, generic out. "Uses Salesforce" produces a 2/5 opener; "posted last week that their SDR team missed Q2 quota after doubling headcount" produces a 5/5. If your list doesn't have context yet, that's a research problem upstream of this template — the Lead Finder bundle pairs list-building with this personalizer for exactly that reason.
What breaks — Gmail limits, OAuth, empty rows, spammy copy
Four failure modes come up repeatedly. Here's each one and the fix.
1. Gmail sending limits (if you bolt on sending). This template doesn't send email — but many people add a Gmail node after Save personalized to make it a full n8n Gmail Google Sheets cold email pipeline. Know the ceilings before you do: free Gmail accounts are limited to roughly 500 emails per day, Google Workspace accounts to about 2,000, and hitting those limits from a cold start is a fast route to the spam folder or a temporarily suspended account. If you add sending: use a warmed-up domain (ideally separate from your main domain), start at low daily volume, and keep a human-review step between the sheet and the send. The personalizer's whole design — output to a sheet you review — exists because auto-sending unreviewed AI copy is how domains get burned.
2. Google OAuth. Two common snags: the credential connects but the spreadsheet dropdown is empty (you skipped a permission scope during consent — reconnect and grant Sheets access), and self-hosted instances where the OAuth redirect URL doesn't match what you registered in Google Cloud Console (your n8n base URL must match exactly). Also note Google OAuth tokens on unverified self-hosted apps in "testing" mode expire after 7 days — publish the app or expect weekly reconnects.
3. Empty rows and missing headers. The Get prospects node reads every row, and the IF node only filters on whether Opener is empty — so a blank row sails through and produces a nonsense opener (scored low, but still an API call). Delete trailing empty rows. And the header names are load-bearing: the prompt references {{ $json.Name }}, {{ $json.Company }}, {{ $json.Role }}, {{ $json.Context }} — rename a column and that field silently arrives empty. Keep the headers exactly as specified.
4. Spammy copy. The prompt bans the classic tells, but AI openers can still cluster into patterns if your Context column is uniform ("congrats on the funding" × 200 is a pattern filters notice). Defenses: vary your context sources, actually use the specificity score — treat anything under 4 as a rewrite, not a send — and remember the opener is one line of a good email, not the whole email. Personalization earns the right to a short, honest pitch; it doesn't replace one.
Pair it with lead scoring and objection prep
Personalization is the middle of a sales motion, not the whole one. Two free companion templates from the same template library close the loop:
Before you personalize — ICP Fit Checker. Same architecture (Google Sheet in, AI, sheet out): it scores every lead 1–5 against your ideal customer profile with a one-line reason, so you only spend research and personalization effort on prospects who could actually buy. The ICP description lives in an editable block inside its prompt — you describe your best customers once, then sort the scored output and work top-down. Full walkthrough at /automate/score-leads-icp-fit.
After they reply — Objection Prep Card. For each deal in a sheet, it generates the three objections you're most likely to hear, an honest response to each, and one sharp discovery question — so when a personalized opener turns into a booked call, you walk in prepared instead of improvising.
The sequence that works: score the list (ICP Fit Checker) → personalize the top scorers (this template) → prep the calls that come back (Objection Prep Card). All three are free, all three run on the same n8n + Google Sheets + OpenAI stack, so credentials you set up once work across all of them. If you want the list-building step handled too, the Lead Finder bundle packages the pipeline.
Ready to run it? Download the free n8n cold email personalizer — and type your goal on the template page first so the AI prompt arrives pre-tuned to your business. Prefer someone to wire the whole pipeline into your stack for you? That's what Build For Me is for.
Questions people ask
What does an n8n cold email automation actually do?
This template reads prospects from a Google Sheet, uses AI (gpt-4o-mini) to write a one-line personalized opener for each based on the Context you provide, scores every opener 1-5 for specificity, and appends results to a Personalized tab. It does not send email — you review, then send through your existing tool.
Is n8n free for cold email automation?
Yes — the self-hosted n8n Community edition is free indefinitely and includes everything this template needs. Google Sheets and the template are also free. The only running cost is the OpenAI API (gpt-4o-mini), which is cents per few hundred prospects. n8n Cloud is a paid hosted alternative.
How do I import the template into n8n?
Download the JSON from the template page, then in the n8n Editor UI click the three-dots menu (upper right), choose Import from File, and select the file. Connect your Google credential in the Get prospects and Save personalized nodes, add your OpenAI key in Write opener (AI), and click Execute.
What columns does the Google Sheet need?
One spreadsheet with a Prospects tab (headers: Name, Company, Role, Context, Opener — leave Opener empty) and an empty tab named Personalized. The Context column drives quality: the more specific the detail you paste in, the sharper and higher-scoring the opener.
Can it send emails through Gmail?
Not out of the box — by design it writes openers to a sheet for your review. You can add a Gmail node, but respect sending limits: roughly 500 emails/day on free Gmail and about 2,000/day on Google Workspace, and warm your domain up gradually to protect deliverability.
How do I customize the AI prompt for my business?
Easiest way: on the template page, enter a goal of at least 10 characters describing what you sell and to whom — the download is rebuilt with the Write opener (AI) prompt rewritten for your business. Or edit the node's message directly in n8n, keeping the field references and strict-JSON output intact.
Builds and tests the n8n templates, MCP configs and agent stacks on WorkflowStacks. Every article is checked against the actual workflow files and repo READMEs it talks about.