This workflow corresponds to n8n.io template #7583 — we link there as the canonical source.
This workflow follows the Google Sheets → OpenAI recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "7ch9fPwlQk0fZlsj",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "google email ice breaker",
"tags": [],
"nodes": [
{
"id": "8791c4c6-6b15-486e-806d-53f3add6e8a0",
"name": "When clicking \u2018Test workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-864,
-448
],
"parameters": {},
"typeVersion": 1
},
{
"id": "5509f1fa-a7f5-47b8-8e94-9bc0febb3cb4",
"name": "Add Row1",
"type": "n8n-nodes-base.googleSheets",
"position": [
-592,
-448
],
"parameters": {
"options": {
"returnFirstMatch": false
},
"filtersUI": {
"values": [
{
"lookupValue": "Good",
"lookupColumn": "category"
},
{
"lookupValue": "no",
"lookupColumn": "email created"
}
]
},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2062707747,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/14JjbOiXXakwQrWpjdudiXrNDOVNfVKUGcNoBccgIJxg/edit#gid=2062707747",
"cachedResultName": "california"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "14JjbOiXXakwQrWpjdudiXrNDOVNfVKUGcNoBccgIJxg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/14JjbOiXXakwQrWpjdudiXrNDOVNfVKUGcNoBccgIJxg/edit?usp=drivesdk",
"cachedResultName": "verified emails"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"executeOnce": false,
"typeVersion": 4.5
},
{
"id": "ea570276-818e-46d9-9223-8fbbb0177cf4",
"name": "Code1",
"type": "n8n-nodes-base.code",
"position": [
544,
-432
],
"parameters": {
"jsCode": "// Use $input to access the first item\nconst input = $input.first();\n\n// Get the content safely\nlet rawJson = input.json.message.content;\n\n// Remove backticks and optional \"json\" label\nrawJson = rawJson.replace(/```json|```/g, '').trim();\n\n// Parse the cleaned JSON string\nlet parsed;\ntry {\n parsed = JSON.parse(rawJson);\n} catch (e) {\n throw new Error(\"Invalid JSON format: \" + e.message);\n}\n\n// Return subject and body\nreturn [\n {\n json: {\n subject: parsed.subject,\n body: parsed.body\n }\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "7fc98079-b298-4a40-93a5-4738dc57fb0a",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
-384,
-448
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "5194c7af-d5e2-4f06-9252-676967261a68",
"name": "Update row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
768,
-432
],
"parameters": {
"columns": {
"value": {
"body": "={{ $json.body }}",
"email created": "yes",
"email subject": "={{ $json.subject }}",
"EMAIL verified": "={{ $('Add Row1').item.json['EMAIL verified'] }}"
},
"schema": [
{
"id": "EMAIL verified",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "EMAIL verified",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "companyName",
"type": "string",
"display": true,
"required": false,
"displayName": "companyName",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": " description",
"type": "string",
"display": true,
"required": false,
"displayName": " description",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "website",
"type": "string",
"display": true,
"required": false,
"displayName": "website",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "category",
"type": "string",
"display": true,
"required": false,
"displayName": "category",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "email subject",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "email subject",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "body",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "body",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "email created",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "email created",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "sent",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "sent",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "row_number",
"type": "number",
"display": true,
"removed": true,
"readOnly": true,
"required": false,
"displayName": "row_number",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"EMAIL verified"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 2062707747,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/14JjbOiXXakwQrWpjdudiXrNDOVNfVKUGcNoBccgIJxg/edit#gid=2062707747",
"cachedResultName": "california"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "14JjbOiXXakwQrWpjdudiXrNDOVNfVKUGcNoBccgIJxg",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/14JjbOiXXakwQrWpjdudiXrNDOVNfVKUGcNoBccgIJxg/edit?usp=drivesdk",
"cachedResultName": "verified emails"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.5
},
{
"id": "817537f3-43fe-4c6e-a7a7-ab492c10c8d7",
"name": "email writer",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
16,
-432
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "system",
"content": "=you are cold email writer for dentist.keep your tone friendly and persuasive.\nWe just scraped a series of web pages form google map we will provide you email,company name,description,and social media links. Your task is to take their summaries and turn them into catchy, personalized openers for a cold email campaign to imply that the rest of the campaign is personalized.\n\n now please upgrade it to a chat bot automation that chat bot will put to your website and book oppointment to a user of website and add to your google calender and also to google sheet 24/7 work and also any other ai automation\n"
},
{
"content": "=You'll return your icebreakers in the following JSON format:\n\n{ \"subject\": \"Noticed something on {Shortened company name\\_or person name}\u2019s site\", \"body\": \"I saw your excellent reviews around {specific\\_copmany name\\_service\\_or\\_location}, and really admire how {Shortened Clinic Name} delivers patient-focused care. I help dental clinics install a smart AI chatbot that answers visitor questions, books appointments instantly, and syncs them to Google Calendar or Sheets.turning your website visitors into clients automatically.while you focus on care. Most clinics using this system see 2\u20133x more bookings in just a few weeks. Schedule your free 10-min demo here: https://letsautomate.us/contact-us/\"\n}\nRules:\n- Write in a spartan/laconic tone of voice.\n- Make sure to use the above format when constructing your icebreakers. We wrote it this way on purpose.\n- Shorten the company name wherever possible (say, \"XYZ\" instead of \"XYZ Agency\"). More examples: \"Love AMS\" instead of \"Love AMS Professional Services\", \"Love Mayo\" instead of \"Love Mayo Inc.\", etc.\n- Do the same with locations. \"San Fran\" instead of \"San Francisco\", \"BC\" instead of \"British Columbia\", etc.\n- For your variables, focus on small, non-obvious things to paraphrase. The idea is to make people think we *really* dove deep into their website, so don't use something obvious. Do not say cookie-cutter stuff like \"Love your company!\" or \"Love your take on marketing!\".\nemail:{{ $json['EMAIL verified'] }}\ncompany name:{{ $json.companyName }}\ndescription:{{ $json[' description'] }}\nwebsite:{{ $json.website }}"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "08e0e555-3fae-4749-89b7-9ba9579fcac6",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-704,
-608
],
"parameters": {
"width": 304,
"height": 144,
"content": "## add google sheet with prospect email name description of there business \nalso create credentials\n**Double click** to edit me. [Guide](https://docs.n8n.io/workflows/sticky-notes/)"
},
"typeVersion": 1
},
{
"id": "90706e9a-c487-4d5a-9ae5-318dd05b8a58",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-160,
-560
],
"parameters": {
"width": 624,
"height": 240,
"content": "## this email writer AI node will write the cold email with subject and body\nyou just have to change the prompet on behalf of your business\n**Double click** to edit me. [Guide](https://docs.n8n.io/workflows/sticky-notes/)"
},
"typeVersion": 1
},
{
"id": "2ca2806c-2aaa-4cde-bdd5-e279f7cb8150",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
512,
-240
],
"parameters": {
"color": 3,
"content": "## this code node will separate the body and subject \n**Double click** to edit me. [Guide](https://docs.n8n.io/workflows/sticky-notes/)"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "c6a18dbb-1344-4923-bfe1-f9d40a5e34a4",
"connections": {
"Code1": {
"main": [
[
{
"node": "Update row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Add Row1": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"email writer": {
"main": [
[
{
"node": "Code1",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "email writer",
"type": "main",
"index": 0
}
]
]
},
"Update row in sheet": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Test workflow\u2019": {
"main": [
[
{
"node": "Add Row1",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
googleSheetsOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Google Email Ice Breaker Workflow Description This n8n workflow automates the creation of personalized cold emails for dental clinics to promote an AI chatbot service. It retrieves verified email data from a Google Sheet, generates tailored email subject lines and bodies using…
Source: https://n8n.io/workflows/7583/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Ask questions like “How much did I spend on food last month?” and get instant answers from your financial data — directly in Telegram.
The Problem That it Solves
This intelligent email automation workflow helps you maximize engagement through domain-based outreach. It utilizes AI-powered personalization and strategic follow-ups to increase response rates. The
Note: Now includes an Apify alternative for Rapid API (Some users can't create new accounts on Rapid API, so I have added an alternative for you. But immediately you are able to get access to Rapid AP
Scrape ads – Pulls Facebook Ad Library data for "ai automation" keywords using Apify Filter & sort – Filters ads by page likes (>1,000) and separates into videos, images, and text ads Analyze creat