Generate cold email icebreakers and subject lines with Google Sheets and OpenAI
Ready for 3.0Ready for 3.0. This template uses no nodes that n8n 3.0 removes. No removed nodes, versions or helpers found. Static check, last run 2026-10-19.
Nodes used (8)
- Wait
n8n-nodes-base.wait - Google Sheets
n8n-nodes-base.googleSheets - Filter
n8n-nodes-base.filter - Limit
n8n-nodes-base.limit - Loop Over Items (Split in Batches)
n8n-nodes-base.splitInBatches - If
n8n-nodes-base.if - OpenAI
@n8n/n8n-nodes-langchain.openAi - Manual Trigger
n8n-nodes-base.manualTrigger
What it does
Email List Personalization - Icebreaker & Subject Line Generator Reads an enriched lead list from Google Sheets, generates a personalized icebreaker + subject line for each lead using OpenAI, and writes results back to the same sheet -- ready for your email sequencer. --- Who is this for? SDRs, founders, and agency owners running cold outbound who want personalized first lines without spending 2-3 minutes per lead on manual research. Sits between your Apollo / Sales Nav export and Instantly / Smartlead / Lemlist. What problem does this solve? Generic cold emails get ignored. Writing unique icebreakers for 200+ leads/day is not realistic by hand. This workflow does it at ~$0.002/lead with GPT-4.1-mini -- spartan, human-sounding copy that references real prospect details. How it works 1. Read Lead Sheets from Google Sheets (enriched with LinkedIn data) 2. Filter Empty Rows rows where icebreakers or subjectLine is empty (safe to re-run) 3. Limit To 200 Leads batch to 200 leads per run 4. Process One-By-One with an IF safety check before each API call 5. Genrates Icebreaker a JSON response with few-shot examples locking the tone: - icebreaker -- spartan one-liner referencing their company/role/industry - subjectLine -- personalized with name + relevant hook - shortenedCompanyName -- strips "Agency", "Inc.", "LLC" for natural copy - verdict -- true for real people, false for company pages (filter before sending) 6. Write Result To Sheet to the same row via rownumber match key 7. Rate Limit Delay between calls to avoid throttling Setup 1. Google Sheets -- Connect OAuth2 in both sheet nodes. Point to your lead spreadsheet. 2. OpenAI -- Connect API key. Default: GPT-4.1-mini. Swap to GPT-4o for premium campaigns. 3. Sheet columns needed: firstname, lastname, email, jobtitle, company, linkedinindustry, location, summary, linkedindescription, linkedinspecialities, linkedincompanyemployeecount, linkedinfoundedyear, icebreakers, subjectLine, rownumber 4. Customize the prompt -- Swap the few-shot examples in the OpenAI node to match your voice and offer. 5. Test first -- Set Limit to 5, run manually, review output, then scale. Customization tips - Trigger -- Replace Manual Trigger with Schedule or Google Drive Trigger for automation - Batch size -- Adjust the Limit node to match your daily send volume - Model -- GPT-4.1-mini ($0.002/lead) vs GPT-4o ($0.01/lead) --- Built by Devon Toh