This workflow corresponds to n8n.io template #6749 — we link there as the canonical source.
This workflow follows the Google Sheets → HTTP Request 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": "ZHXRCYewmdPybb2a",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Template v07/31 - Custom Cold Email Icebreaker Writer",
"tags": [
{
"id": "Gn50itWF7nQz4HWE",
"name": "Advetica AI Automations",
"createdAt": "2025-07-16T17:56:49.888Z",
"updatedAt": "2025-07-16T17:56:49.888Z"
},
{
"id": "Ki43TEjHd7EDcykZ",
"name": "My Templates",
"createdAt": "2025-07-31T13:58:06.976Z",
"updatedAt": "2025-07-31T13:58:06.976Z"
}
],
"nodes": [
{
"id": "5e4e86bd-775b-4162-ab47-ef4050a39c59",
"name": "Website Summary",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1104,
-256
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "GPT-4.1-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "system",
"content": "=You are a helpful assistant. From a social media marketing agency's website, you get its scraped content as a plain text. You turn each website's content into a summarized short paragraph of what that agency offers to people.\n\nYou also include something specific, unique that agency offers. Something that can be congratulated on, something that they achieved, is extraordinary or be commented in a cold email."
},
{
"content": "=User Input:\nWebsite content: {{ $json.plainText }}\nAgency Name: {{ $('Keep Fields').item.json.organization_name }}"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "fa5c8394-9908-44ae-9f5e-6e66e9f774e2",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
176,
-272
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "b3df97ad-4a8d-4dcd-ab06-7b423ff1e1a6",
"name": "Icebreaker Writer",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
624,
48
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "GPT-4.1-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "system",
"content": "=You are an AI assistant responsible for writing short, natural-sounding cold emails for business owners. You\u2019ll get the lead\u2019s first name, agency name, their city, and content scraped from their website. Your job is to write a concise, human email that feels personal, short and starts a real conversation \u2014 not a sales pitch.\n\n# Goal\nGenerate a short cold email icebreaker that contains a personalized comment from their website content.\n\n# Structure\n- Use this:\nHey {{ $('Keep Fields').item.json.first_name }}, Love {something unique about {business_name}}. Also doing (marketing) in {{ $('Keep Fields').item.json.city }}. Wanted to run something by you.\n - Keep the \"{something unique about {agency_name}}\" quite short, don't overcomplicate! Cut out some words of a sentence if needed to make it more direct and natural. Keep it at 8\u201312 words. Always include the business' name in the first sentence. If you don\u2019t have the business' name, just use \u201cyou\u201d (e.g. \u201cLove how you\u2026\u201d)\n - The word \u201cbusiness\u201d can be varied, based on what the business is doing / offering as a service / which niche they're in \u2014 examples are \u201cdigital marketing\u201d, \u201cSEO\u201d, \u201cweb dev\u201d, etc., or describe what the business helps clients do (e.g. \u201calso helping brands scale paid traffic\u201d)\n\n# Notes\n- The first sentence must include something real from their website \u2014 a standout phrase, specialty, service focus, etc. \u2014 but keep it short (8\u201312 words).\n- DO NOT use or imply any \"blends\", \"mixtures\", \"combines\", \"fusions\", or anything similar. (IMPORTANT)\n- You can say \"...you guys at {business_name}...\" \u2014 feel free to shorten long names. If you don't have the agency name, just include \"you\" instead (e.g. \u201cLove how you\u2026\u201d)\n- Be quick, natural, and direct. Use casual language, like a human.\n- NEVER be cringe.\n- One adjective max if describing something.\n- Always start with: \"Hey {First Name},\" \u2014 with the comma! Do not add another comma in the sentence.\n- No parentheses ().\n- Tone: warm, confident, unpolished \u2014 like talking to someone at a bar. Not marketing.\n- No over-explaining. No emojis. No hype. No \u201csalesy\u201d phrases.\n- If there\u2019s no info on the website, use this fallback:\n Hey {{ $('Keep Fields').item.json.first_name }}, Came across {{ $('Keep Fields').item.json.organization_name }} and wanted to reach out. Also doing (business) in {{ $('Keep Fields').item.json.city }}. Thought you might find this useful.\n\n# Forbidden Words / Phrases (HARD REJECTION if used or implied):\n- blend / blends\n- vibe\n- thoughtful\n- approach\n- awesome\n- amazing\n- innovative\n- disrupt\n- nails\n- combine / combines / combined\n- fuse / fuses / fused\n- mix / mixes / mixed\n- mixture / mixtures\n\n# If any banned word appears in the scraped content, you MUST rephrase in plain, human terms.\n# NEVER imply a \"blend\" or \"combination\" using other language.\n\n# Input Formatting Rules\n- First name must be capitalized like this:\n - \"Richard\", \"Aaron\", \"Abaya\"\n - Keep initials like \u201cA.J.\u201d as is\n\n# Examples\n\n\u2705 Good icebreakers:\n\"Love your UGC push for meal brands\"\n\"Love the Shopify work you did for Bombas\"\n\"Love how you use TikTok for product drops\"\n\"Love the recent Klarna partnership rollout\"\n\"Love that meta humor in your agency reel\"\n\n\u274c Bad icebreakers:\n\"Love your thoughtful strategy\"\n\"Love your creative vibe\"\n\"Love your innovative blend of data and storytelling\"\n\"Love how your team blends design and analytics\"\n\n# Input Fields\n- First Name: {{ $('Keep Fields').item.json.first_name }}\n- Business Name: {{ $('Keep Fields').item.json.organization_name }}\n- City: {{ $('Keep Fields').item.json.city }}\n- Website Content: {{ $json.message.content }}\n\n# Utility Function (pseudocode to implement in agent logic):\nfunction formatName(name) {\n if (name.match(/^[A-Z]\\.[A-Z]\\.$/)) return name; // e.g., A.J.\n return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();\n}\n"
},
{
"content": "=# Input Fields\n- First Name: {{ $('Keep Fields').item.json.first_name }}\n- Agency Name: {{ $('Keep Fields').item.json.organization_name }}\n- City: {{ $('Keep Fields').item.json.city }}\n- Website Content: {{ $json.message.content }}"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "79f58fdf-cf76-4697-b52a-04535eadd2a8",
"name": "Subject Line Writer",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1024,
48
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1-mini",
"cachedResultName": "GPT-4.1-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "system",
"content": "=You are an AI assistant responsible for generating a single short and natural-sounding subject line for a cold email sent to a business owners.\n\n# Goal\nWrite a subject line that:\n- Feels personal \u2014 like it came from a thoughtful peer, not a marketer\n- Sounds casual and human, as if part of a conversation\n- Sparks curiosity without trying to sell\n- Relates naturally to the cold email's opening line\n\n# Rules\n- Output only **one** subject line (no bullet points, no prefix like \"Subject:\")\n- Keep it under **40 characters**\n- Include the lead\u2019s **first name** if it fits naturally\n- Reflect the tone or theme of the email's personalized opening (e.g., if the email mentions something about their style or launch, hint at that)\n- NEVER use:\n - Clickbait or gimmicks (e.g., \u201cFWD:\u201d, \u201cRe:\u201d)\n - Buzzwords (\u201cgrowth,\u201d \u201coptimize,\u201d \u201crevenue\u201d, \"streamline\")\n - Emojis or punctuation like \u201c!\u201d \n- DO NOT start with \u201cSubject:\u201d or quotation marks\n- You don't always have to point out a specific thing - sometimes, you can also write \"Thought this might fit\", \"Congrats \u2014 quick thing\", \"Bianca, quick thought\"\n\n# Input Variables\n- First Name: {{ $('Keep Fields').item.json.first_name }}\n- Website Content: {{ $('Website Summary').item.json.message.content }}\n- Cold Email: {{ $json.message.content }}\n\n# Examples\n\n**If First Name = Bianca** \nOpening Line = \u201cSaw you teach both Pilates and strength classes \u2014 love that blend.\u201d \n\u2192 Bianca, loved that combo \n\u2192 Bianca, quick thought\n\u2192 Something for your coaching flow\n\n**If First Name = Jordan** \nOpening Line = \u201cCongrats on launching the new group program \u2014 saw it on your site.\u201d \n\u2192 Jordan, saw the launch \n\u2192 Thought this might fit \n\u2192 Congrats \u2014 quick thing\n\n# Voice & Intention\nYour tone should be warm and specific \u2014 never robotic or salesy. \nYou\u2019re not trying to pitch. You\u2019re trying to get them to open the email because it sounds like it\u2019s from someone who actually paid attention.\n"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.8
},
{
"id": "964c47b1-6723-423a-a4e8-99e7feeca275",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-1648,
-288
],
"parameters": {},
"typeVersion": 1
},
{
"id": "d3b4360f-1667-4e80-81f6-05f3d364c527",
"name": "Create spreadsheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
-1424,
-288
],
"parameters": {
"title": "Scraped Leads",
"options": {},
"resource": "spreadsheet"
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "3b894213-ddcf-4bc8-b83a-cb4426d0563f",
"name": "EDIT Apollo URL + Amount",
"type": "n8n-nodes-base.set",
"position": [
-1072,
-704
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "57cb10ee-3189-464e-b20d-514ee13017c3",
"name": "Apollo URL",
"type": "string",
"value": ""
},
{
"id": "04a61783-c3ed-4fbf-b905-ec4530ff147d",
"name": "Amount to Scrape",
"type": "string",
"value": ""
}
]
}
},
"typeVersion": 3.4
},
{
"id": "a7b45d3c-0e18-4fd4-8de5-7f36c3a807b4",
"name": "Keep Fields",
"type": "n8n-nodes-base.set",
"position": [
-112,
-272
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "5eb4ef62-cdf5-4b5f-a4a6-bfa0295f075a",
"name": "first_name",
"type": "string",
"value": "={{ $json.first_name }}"
},
{
"id": "f06da4be-cf02-4cd7-adba-3f45ebbc6ca2",
"name": "last_name",
"type": "string",
"value": "={{ $json.last_name }}"
},
{
"id": "ad32e977-b973-40a3-94d4-283b9760c6b0",
"name": "email",
"type": "string",
"value": "={{ $json.email }}"
},
{
"id": "eb1e5f3f-daf3-44a7-b641-17ec11a56503",
"name": "organization_name",
"type": "string",
"value": "={{ $json.organization_name }}"
},
{
"id": "98ba5b54-ef78-48bf-997e-c3c3d2d06e8b",
"name": "organization_website_url",
"type": "string",
"value": "={{ $json.organization_website_url }}"
},
{
"id": "5634ba39-ed23-4ef6-80f8-7ca0babbf476",
"name": "city",
"type": "string",
"value": "={{ $json.city }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "b5780b16-1b89-4daf-9ffe-8e8113a249c6",
"name": "Filter URL + Email",
"type": "n8n-nodes-base.filter",
"position": [
-304,
-272
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "cb033b7d-fcc8-4504-a534-397c42e05b88",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.email }}",
"rightValue": ""
},
{
"id": "3f48d7e0-f786-48b4-9094-119e444feba1",
"operator": {
"type": "string",
"operation": "exists",
"singleValue": true
},
"leftValue": "={{ $json.organization_website_url }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "62ad69c8-526d-4718-ab3d-014a69e5aa5c",
"name": "Call Apify Scraper",
"type": "n8n-nodes-base.httpRequest",
"position": [
-736,
-272
],
"parameters": {
"method": "POST",
"options": {},
"jsonBody": "={\n \"cleanOutput\": true,\n \"totalRecords\": {{ $json['Amount to Scrape'] }},\n \"url\": \"{{ $json['Apollo URL'] }}\"\n} ",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.2
},
{
"id": "e7d1d155-fe52-4bc4-9cd4-414ee5c2cc59",
"name": "Receive Scraper's Data",
"type": "n8n-nodes-base.httpRequest",
"position": [
-512,
-272
],
"parameters": {
"options": {}
},
"typeVersion": 4.2
},
{
"id": "85c8ec84-c536-44ac-b6cf-47bfa9e2bce7",
"name": "Append or update row in sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
1024,
304
],
"parameters": {
"columns": {
"value": {},
"schema": [],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "appendOrUpdate",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "={{ $('Create spreadsheet').item.json.sheets[0].properties.title }}"
},
"documentId": {
"__rl": true,
"mode": "id",
"value": "={{ $('Create spreadsheet').item.json.spreadsheetId }}"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "890010b8-307d-47d7-810a-6cf579b4919c",
"name": "Save To Spreadsheet",
"type": "n8n-nodes-base.set",
"position": [
800,
304
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "a0d72f35-2b21-4969-9cfb-81388e04a0b0",
"name": "First Name",
"type": "string",
"value": "={{ $('Keep Fields').item.json.first_name }}"
},
{
"id": "33d6f687-b08d-439b-853e-aa81f840a003",
"name": "Last Name",
"type": "string",
"value": "={{ $('Keep Fields').item.json.last_name }}"
},
{
"id": "1f741189-c595-4818-927a-5e17721974ba",
"name": "Email",
"type": "string",
"value": "={{ $('Keep Fields').item.json.email }}"
},
{
"id": "14f2b0f7-ca94-445e-8e3a-865c2bab4f4d",
"name": "Business Name",
"type": "string",
"value": "={{ $('Keep Fields').item.json.organization_name }}"
},
{
"id": "ac403aaa-6aac-41ea-88fa-304a61eb6b67",
"name": "Website URL",
"type": "string",
"value": "={{ $('Keep Fields').item.json.organization_website_url }}"
},
{
"id": "80faaa28-9725-4ae5-adf4-cc38f14c0479",
"name": "Icebreaker",
"type": "string",
"value": "={{ $('Icebreaker Writer').item.json.message.content }}"
},
{
"id": "c94f9c56-ad9a-4672-86ba-e7c08af05adb",
"name": "Subject Line",
"type": "string",
"value": "={{ $json.message.content }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "9aaff82c-d078-4e30-b144-f736d98b00df",
"name": "HTTP -> Plain Text",
"type": "n8n-nodes-base.code",
"position": [
752,
-256
],
"parameters": {
"jsCode": "// HTML to Plain Text Converter for n8n Code Node\n// This code takes HTML content and converts it to clean plain text\n\n// Get the HTML content from the previous node\n// Adjust the field name based on your input data structure\nconst htmlContent = $input.first().json.data\n\nif (!htmlContent) {\n return [{ json: { error: \"No HTML content found in input\" } }];\n}\n\n// Function to strip HTML tags and decode HTML entities\nfunction htmlToPlainText(html) {\n let text = html;\n \n // Remove script and style elements completely\n text = text.replace(/<script[^>]*>[\\s\\S]*?<\\/script>/gi, '');\n text = text.replace(/<style[^>]*>[\\s\\S]*?<\\/style>/gi, '');\n \n // Replace common block elements with line breaks\n text = text.replace(/<\\/?(div|p|br|h[1-6]|li|tr)[^>]*>/gi, '\\n');\n \n // Replace list items with bullet points\n text = text.replace(/<li[^>]*>/gi, '\u2022 ');\n \n // Remove all remaining HTML tags\n text = text.replace(/<[^>]*>/g, '');\n \n // Decode common HTML entities\n const entityMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n ''': \"'\",\n ' ': ' ',\n '©': '\u00a9',\n '®': '\u00ae',\n '™': '\u2122',\n '…': '...',\n '—': '\u2014',\n '–': '\u2013'\n };\n \n for (const [entity, char] of Object.entries(entityMap)) {\n text = text.replace(new RegExp(entity, 'g'), char);\n }\n \n // Decode numeric HTML entities (e.g., {)\n text = text.replace(/&#(\\d+);/g, (match, dec) => {\n return String.fromCharCode(dec);\n });\n \n // Decode hex HTML entities (e.g., )\n text = text.replace(/&#x([0-9A-Fa-f]+);/g, (match, hex) => {\n return String.fromCharCode(parseInt(hex, 16));\n });\n \n // Clean up whitespace\n text = text.replace(/\\n\\s*\\n/g, '\\n\\n'); // Remove excessive line breaks\n text = text.replace(/[ \\t]+/g, ' '); // Replace multiple spaces/tabs with single space\n text = text.trim(); // Remove leading/trailing whitespace\n \n return text;\n}\n\ntry {\n const plainText = htmlToPlainText(htmlContent);\n \n return [{\n json: {\n originalHtml: htmlContent,\n plainText: plainText,\n characterCount: plainText.length,\n wordCount: plainText.split(/\\s+/).filter(word => word.length > 0).length,\n success: true\n }\n }];\n \n} catch (error) {\n return [{\n json: {\n error: `Failed to convert HTML to text: ${error.message}`,\n originalHtml: htmlContent,\n success: false\n }\n }];\n}"
},
"typeVersion": 2
},
{
"id": "b329a42d-1cc3-4b61-b567-e3d834e7d75a",
"name": "Crawl Website Content",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueRegularOutput",
"position": [
528,
-256
],
"parameters": {
"url": "={{ $json.organization_website_url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "453c94dc-3f83-4872-85df-48b84e2291cb",
"name": "Send a message",
"type": "n8n-nodes-base.slack",
"position": [
608,
-624
],
"parameters": {
"otherOptions": {}
},
"typeVersion": 2.3
},
{
"id": "27f8c017-0946-40f0-8deb-5fccca97f9e6",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1744,
-448
],
"parameters": {
"width": 544,
"height": 400,
"content": "## Create Spreadsheet To Capture Leads\n\n- This section creates a spreadsheet inside your Google Drive Account to capture all leads and their Icebreaker / Subject Line.\n- Make sure to add credentials."
},
"typeVersion": 1
},
{
"id": "616c91c6-4310-4f4c-81f7-4bde3134e51f",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1216,
-816
],
"parameters": {
"color": 3,
"width": 400,
"height": 304,
"content": "## Edit This\n- Inside this node, insert the Apollo URL you want to scrape, and how many (must be at least 500)."
},
"typeVersion": 1
},
{
"id": "fe957012-f7b0-4027-86a8-ebeecdbd0912",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
-448
],
"parameters": {
"width": 864,
"height": 400,
"content": "## Apollo Scraper\n- The first node calls the \"\ud83d\udd25Apollo Scraper - Scrape upto 50k Leads\" Apify scraper. For that, insert the \"Run Actor synchronously\" API inside API > API Endpoints.\n- The second node receives the scraper's data. Insert the \"Get last run dataset items\" API.\n- Filters out those leads how do not have a website or email included."
},
"typeVersion": 1
},
{
"id": "17701486-28c9-4997-8f25-2a60a7eb01a0",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
448,
-352
],
"parameters": {
"width": 528,
"height": 256,
"content": "## Crawl Website Content and Convert to Plain Text"
},
"typeVersion": 1
},
{
"id": "aec44523-f375-43bb-9723-9841160b7f76",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
448,
-32
],
"parameters": {
"width": 1040,
"height": 224,
"content": "## Write Icebreaker and Subject Line"
},
"typeVersion": 1
},
{
"id": "2e5432f7-2563-4666-ab32-295b93c2aeb0",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
1040,
-352
],
"parameters": {
"width": 432,
"height": 256,
"content": "## Summarise Website's Content"
},
"typeVersion": 1
},
{
"id": "f939ef76-10e0-475b-b884-c9923c15c69c",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
448,
240
],
"parameters": {
"color": 4,
"width": 1040,
"height": 272,
"content": "## Save to Spreadsheet"
},
"typeVersion": 1
},
{
"id": "a3cdfbcd-e338-4fc5-97f3-5ec2f6a0dd2f",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
448,
-704
],
"parameters": {
"color": 4,
"width": 352,
"height": 240,
"content": "## Send Slack Notification Once Done"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "91b75e6f-10e5-4e2f-9ef3-04a81cfadd97",
"connections": {
"Keep Fields": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
],
[
{
"node": "Crawl Website Content",
"type": "main",
"index": 0
}
]
]
},
"Website Summary": {
"main": [
[
{
"node": "Icebreaker Writer",
"type": "main",
"index": 0
}
]
]
},
"Icebreaker Writer": {
"main": [
[
{
"node": "Subject Line Writer",
"type": "main",
"index": 0
}
]
]
},
"Call Apify Scraper": {
"main": [
[
{
"node": "Receive Scraper's Data",
"type": "main",
"index": 0
}
]
]
},
"Create spreadsheet": {
"main": [
[
{
"node": "EDIT Apollo URL + Amount",
"type": "main",
"index": 0
}
]
]
},
"Filter URL + Email": {
"main": [
[
{
"node": "Keep Fields",
"type": "main",
"index": 0
}
]
]
},
"HTTP -> Plain Text": {
"main": [
[
{
"node": "Website Summary",
"type": "main",
"index": 0
}
]
]
},
"Save To Spreadsheet": {
"main": [
[
{
"node": "Append or update row in sheet",
"type": "main",
"index": 0
}
]
]
},
"Subject Line Writer": {
"main": [
[
{
"node": "Save To Spreadsheet",
"type": "main",
"index": 0
}
]
]
},
"Crawl Website Content": {
"main": [
[
{
"node": "HTTP -> Plain Text",
"type": "main",
"index": 0
}
]
]
},
"Receive Scraper's Data": {
"main": [
[
{
"node": "Filter URL + Email",
"type": "main",
"index": 0
}
]
]
},
"EDIT Apollo URL + Amount": {
"main": [
[
{
"node": "Call Apify Scraper",
"type": "main",
"index": 0
}
]
]
},
"Append or update row in sheet": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Create spreadsheet",
"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
How This Works This automation automatically scrapes leads from Apollo using the Apify scraper, filters out those who do not have an Email or URL included, scrapes the leads' website content and writes personalised Icebreakers and subject lines based on the website's content.
Source: https://n8n.io/workflows/6749/ — 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.
Overview
Consultants, agencies, freelancers, and professional service firms who need to create customized proposals and contracts quickly and efficiently.
Small teams, solo operators, and security-conscious individuals who receive email attachments from external senders. Useful for freelancers, agencies, HR teams, and anyone handling CVs, invoices, or d
This workflow automatically handles new GitHub issues by reading and understanding them using AI, then taking multiple actions simultaneously — creating tasks, sending notifications, and keeping every
Here is the template specification based on the provided workflow and guidelines.