LinkedIn-Agent v2
Dies ist ein Sales, AI-Bereich Automatisierungsworkflow mit 29 Nodes. Hauptsächlich werden If, Code, Wait, Gmail, Hunter und andere Nodes verwendet, kombiniert mit KI-Technologie für intelligente Automatisierung. Automatisches Auffinden von LinkedIn-Leads und Versenden personalisierter Kalt-E-Mails mit OpenAI, Hunter und Gmail
- •Google-Konto + Gmail API-Anmeldedaten
- •Möglicherweise sind Ziel-API-Anmeldedaten erforderlich
- •Google Sheets API-Anmeldedaten
- •OpenAI API Key
Verwendete Nodes (29)
Kategorie
{
"id": "e49UBJheMiRF7iDk",
"meta": {
"instanceId": "7b22476bf9699de09fe66fed92056e8ae798418cc9901fa9bd85bb46439116b8",
"templateCredsSetupCompleted": true
},
"name": "LinkedIn Agent v2",
"tags": [
{
"id": "V4LdVOYIGIbfdqvb",
"name": "linkedin",
"createdAt": "2025-06-11T18:52:18.612Z",
"updatedAt": "2025-06-11T18:52:18.612Z"
},
{
"id": "qlvLkg4Mxoeos0VK",
"name": "cold email",
"createdAt": "2025-06-11T18:52:31.368Z",
"updatedAt": "2025-06-11T18:52:31.368Z"
},
{
"id": "yt7Z3T0SDl1Coo7S",
"name": "hunter",
"createdAt": "2025-06-11T18:52:25.423Z",
"updatedAt": "2025-06-11T18:52:25.423Z"
}
],
"nodes": [
{
"id": "0fa236a3-2e00-4710-ab5f-a5d237dcfa90",
"name": "Warten",
"type": "n8n-nodes-base.wait",
"position": [
760,
880
],
"webhookId": "39010e58-367a-490c-a827-0e06d5d47a51",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "5d57cbba-4061-4f2f-b4a1-f99ef47eedcc",
"name": "Bei Chat-Nachricht empfangen",
"type": "@n8n/n8n-nodes-langchain.chatTrigger",
"position": [
440,
400
],
"webhookId": "34291cf6-4908-4be5-9cf6-df085702abd2",
"parameters": {
"options": {}
},
"typeVersion": 1.1
},
{
"id": "af9ccdbe-30aa-451c-851c-3f2b6418c211",
"name": "Neues Blatt erstellen",
"type": "n8n-nodes-base.googleSheets",
"position": [
1120,
400
],
"parameters": {
"title": "={{ $('Generate a Boolean Search String').item.json.choices[0].message.content.sheet_name + ' ' + $now }}\n",
"options": {},
"operation": "create",
"documentId": {
"__rl": true,
"mode": "list",
"value": "1e-yJEDemablqkYm7Yen02vZBiMjfsPNnm9c5D5wDt-E",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1e-yJEDemablqkYm7Yen02vZBiMjfsPNnm9c5D5wDt-E/edit?usp=drivesdk",
"cachedResultName": "n8n test"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "u5NHPs335Uzgd0AU",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.5
},
{
"id": "36698cf4-3d75-491f-b4da-bdb7b6d2d3c1",
"name": "Spalten zum neuen Blatt hinzufügen",
"type": "n8n-nodes-base.googleSheets",
"position": [
760,
640
],
"parameters": {
"columns": {
"value": {},
"schema": [
{
"id": "linkedin_url",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "linkedin_url",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "autoMapInputData",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "={{ $('Create a new sheet').item.json.title }}"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1e-yJEDemablqkYm7Yen02vZBiMjfsPNnm9c5D5wDt-E",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1e-yJEDemablqkYm7Yen02vZBiMjfsPNnm9c5D5wDt-E/edit?usp=drivesdk",
"cachedResultName": "n8n test"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "u5NHPs335Uzgd0AU",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.5
},
{
"id": "84149de7-58b5-498c-aebc-ec79ec7317fa",
"name": "Seitennummer für google-Suche setzen",
"type": "n8n-nodes-base.code",
"position": [
1060,
640
],
"parameters": {
"jsCode": "return [{ json: { start: 0 } }];\n"
},
"typeVersion": 2
},
{
"id": "119084c3-a1d8-4007-9421-764f4625d5dc",
"name": "Google Boolean Search",
"type": "n8n-nodes-base.httpRequest",
"position": [
1080,
880
],
"parameters": {
"url": "https://www.google.com/search",
"options": {},
"sendQuery": true,
"sendHeaders": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"queryParameters": {
"parameters": [
{
"name": "q",
"value": "={{ $('Generate a Boolean Search String').first().json.choices[0].message.content.search_string }}\n"
},
{
"name": "start",
"value": "={{ $json.start }}"
}
]
},
"headerParameters": {
"parameters": [
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36"
}
]
}
},
"credentials": {
"httpHeaderAuth": {
"id": "blc3rCxHTbCbg5PY",
"name": "Header Auth account"
}
},
"typeVersion": 4.2
},
{
"id": "2ae7afc6-727d-4c25-8f3b-dc6e613b813b",
"name": "Wenn gewünschte Ergebnisse nicht erreicht",
"type": "n8n-nodes-base.if",
"position": [
400,
900
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "da9f8de0-1e75-4ff3-9f81-8e911251416b",
"operator": {
"type": "number",
"operation": "lt"
},
"leftValue": "={{ $json.start }}",
"rightValue": 3
},
{
"id": "a891c085-7f49-4523-8610-40577b3ffd3b",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "650665b9-cb6e-4e69-b039-4962a9a0efca",
"name": "Ergebnisse zum Blatt hinzufügen",
"type": "n8n-nodes-base.googleSheets",
"position": [
380,
1320
],
"parameters": {
"columns": {
"value": {
"email": "={{ $json.email }}",
"context": "={{ $('Extracts fname, lname, domainname').item.json.meaningful_context }}",
"last_name": "={{ $('Extracts fname, lname, domainname').item.json.last_name }}",
"email_body": "={{ $('Extract subject and email body').item.json.emailBody }}",
"first_name": "={{ $('Extracts fname, lname, domainname').item.json.first_name }}",
"domain_name": "={{ $('Extracts fname, lname, domainname').item.json.domain_name }}",
"linkedin_url": "={{ $('Extracts all linkedin urls and workplace context from the google http response').item.json.linkedin_url }}",
"email_subject": "={{ $('Extract subject and email body').item.json.subject }}"
},
"schema": [
{
"id": "linkedin_url",
"type": "string",
"display": true,
"required": false,
"displayName": "linkedin_url",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "first_name",
"type": "string",
"display": true,
"required": false,
"displayName": "first_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "last_name",
"type": "string",
"display": true,
"required": false,
"displayName": "last_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "domain_name",
"type": "string",
"display": true,
"required": false,
"displayName": "domain_name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "email",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "context",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "context",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "email_subject",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "email_subject",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "email_body",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "email_body",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "name",
"value": "={{ $('Create a new sheet').first().json.title }}"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1e-yJEDemablqkYm7Yen02vZBiMjfsPNnm9c5D5wDt-E",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1e-yJEDemablqkYm7Yen02vZBiMjfsPNnm9c5D5wDt-E/edit?usp=drivesdk",
"cachedResultName": "n8n test"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "u5NHPs335Uzgd0AU",
"name": "Google Sheets account 2"
}
},
"typeVersion": 4.5
},
{
"id": "5289c588-a2d0-41d9-94e9-5e1ab564c78f",
"name": "Code",
"type": "n8n-nodes-base.code",
"position": [
4960,
600
],
"parameters": {
"jsCode": "const items = $input.all();\nconst updatedItems = items.map((item) => {\n const urlParts = item.json.linkedin_url.split(\"/\");\n const domain = urlParts[2];\n const nameParts = urlParts[4].split(\"-\");\n const firstName = nameParts[0];\n const lastName = nameParts[1];\n return { ...item.json, firstName, lastName, domain };\n});\nreturn updatedItems;\n"
},
"typeVersion": 2
},
{
"id": "5e6b2802-6710-4851-ab2e-4d29c9c5e644",
"name": "Extrahiert Vorname, Nachname, Domainname",
"type": "n8n-nodes-base.code",
"position": [
1080,
1140
],
"parameters": {
"jsCode": "const items = $input.all();\nconst updatedItems = items.map(item => {\n const content = item.json.message.content || \"\";\n\n // Prepare variables\n let linkedin_url = \"\";\n let first_name = \"\";\n let last_name = \"\";\n let domain_name = \"\";\n let meaningful_context = \"\";\n\n const jsonMatch = content.match(/{[\\s\\S]*}/);\n\n if (jsonMatch) {\n // 1️⃣ Try to parse as JSON\n try {\n const data = JSON.parse(jsonMatch[0]);\n linkedin_url = data.linkedin_url || \"\";\n first_name = data.first_name || \"\";\n last_name = data.last_name || \"\";\n domain_name = data.domain_name || \"\";\n meaningful_context = data.meaningful_context || \"\";\n } catch (e) {\n // If JSON parsing fails, fallback to regex extraction\n const urlMatch = content.match(/linkedin_url:\\s*(\\S+)/i);\n const firstMatch = content.match(/first_name:\\s*(\\S+)/i);\n const lastMatch = content.match(/last_name:\\s*(\\S+)/i);\n const domainMatch = content.match(/domain_name:\\s*(\\S+)/i);\n const contextMatch = content.match(/meaningful_context:\\s*(.+)/i);\n\n linkedin_url = urlMatch ? urlMatch[1].trim() : \"\";\n first_name = firstMatch ? firstMatch[1].trim() : \"\";\n last_name = lastMatch ? lastMatch[1].trim() : \"\";\n domain_name = domainMatch ? domainMatch[1].trim() : \"\";\n meaningful_context = contextMatch ? contextMatch[1].trim() : \"\";\n }\n } else {\n // 2️⃣ If no JSON found, fallback to regex extraction\n const urlMatch = content.match(/linkedin_url:\\s*(\\S+)/i);\n const firstMatch = content.match(/first_name:\\s*(\\S+)/i);\n const lastMatch = content.match(/last_name:\\s*(\\S+)/i);\n const domainMatch = content.match(/domain_name:\\s*(\\S+)/i);\n const contextMatch = content.match(/meaningful_context:\\s*(.+)/i);\n\n linkedin_url = urlMatch ? urlMatch[1].trim() : \"\";\n first_name = firstMatch ? firstMatch[1].trim() : \"\";\n last_name = lastMatch ? lastMatch[1].trim() : \"\";\n domain_name = domainMatch ? domainMatch[1].trim() : \"\";\n meaningful_context = contextMatch ? contextMatch[1].trim() : \"\";\n }\n\n // Store back on the item\n item.json.linkedin_url = linkedin_url;\n item.json.first_name = first_name;\n item.json.last_name = last_name;\n item.json.domain_name = domain_name;\n item.json.meaningful_context = meaningful_context;\n\n return item;\n});\n\nreturn updatedItems;"
},
"typeVersion": 2
},
{
"id": "f611ee14-5864-4032-8ae1-3342658be76f",
"name": "Extrahiert alle linkedin-URLs und Arbeitsplatzkontext aus der google http-Antwort",
"type": "n8n-nodes-base.code",
"position": [
400,
1140
],
"parameters": {
"jsCode": "function extractLinkedInProfiles(html) {\n // Decode HTML entities\n html = html.replace(/&/g, '&')\n .replace(/\\u003d/g, '=')\n .replace(/\\x22/g, '\"')\n .replace(/\\x26/g, '&')\n .replace(/\\x3e/g, '>')\n .replace(/\\x3c/g, '<');\n\n const patterns = [\n /(?:https?:)?\\/\\/(?:[a-z]{2,}\\.)?linkedin\\.com\\/in\\/[a-zA-Z0-9._-]+(?:\\/[a-z]{2})?/gi,\n /(?:\"url\"|url=)(?:[^\"&]*?)(?:https?:)?\\/\\/(?:[a-z]{2,}\\.)?linkedin\\.com\\/in\\/[a-zA-Z0-9._-]+(?:\\/[a-z]{2})?/gi,\n /\"(?:https?:)?\\/\\/(?:[a-z]{2,}\\.)?linkedin\\.com\\/in\\/[a-zA-Z0-9._-]+(?:\\/[a-z]{2})?\"/gi\n ];\n\n const urls = new Set();\n const urlPositions = [];\n\n patterns.forEach(pattern => {\n const matches = html.matchAll(pattern);\n for (const match of matches) {\n let url = match[0];\n url = url.replace(/^\"url\"|^url=|\"$/g, '')\n .replace(/^['\"]|['\"]$/g, '')\n .replace(/\\\\+/g, '')\n .trim();\n if (!url.startsWith('http')) {\n url = 'https://' + url.replace(/^\\/\\//, '');\n }\n if (url.includes('linkedin.com/in/')) {\n url = url.split(/[?#&]/)[0];\n url = url.replace(/\\/$/, '');\n if (!urls.has(url)) {\n urls.add(url);\n urlPositions.push({ url, index: html.indexOf(url) });\n }\n }\n }\n });\n\n function stripTags(str) {\n return str.replace(/<[^>]+>/g, ' ').replace(/\\s+/g, ' ').trim();\n }\n\n function extractWorkplaceContext(html, index) {\n const after = html.substring(index, Math.min(html.length, index + 4000));\n\n // 1. Find <div class=\"YrbPuc\">...</div>\n let contextText = '';\n const yrbMatch = after.match(/<div[^>]+class=\"[^\"]*YrbPuc[^\"]*\"[^>]*>([\\s\\S]*?)<\\/div>/i);\n if (yrbMatch) {\n contextText += stripTags(yrbMatch[1]) + ' ';\n }\n\n // 2. Find <div class=\"VwiC3b ...\">...</div>\n const vwiMatch = after.match(/<div[^>]+class=\"[^\"]*VwiC3b[^\"]*\"[^>]*>([\\s\\S]*?)<\\/div>/i);\n if (vwiMatch) {\n contextText += stripTags(vwiMatch[1]);\n }\n\n // Fallback: if nothing found, return up to 500 chars after the URL (stripped)\n if (!contextText.trim()) {\n contextText = stripTags(after.substring(0, 500));\n }\n\n return contextText.trim();\n }\n\n // Build result array\n const results = urlPositions.map(({ url, index }) => {\n const workplace_context = extractWorkplaceContext(html, index);\n return {\n linkedin_url: url,\n workplace_context\n };\n });\n\n return results;\n}\n\n// Get the HTML from input\nconst html = $input.first().json.data;\n\n// Extract LinkedIn profiles with workplace context (plain text)\nreturn extractLinkedInProfiles(html);"
},
"typeVersion": 2
},
{
"id": "7b60c3e0-d6b3-4652-93d4-805bbe7f095c",
"name": "Addiert 10 zum Start - Zur nächsten Seite",
"type": "n8n-nodes-base.code",
"position": [
100,
900
],
"parameters": {
"jsCode": "// Get the start value from 'Edit Fields2' node\nconst startValue =$('If desired results not reached').first().json.start;\n\n// Add 10 to the start value\nconst start = startValue + 10;\n\n// Return the new value\nreturn [{ json: { start } }];\n"
},
"typeVersion": 2
},
{
"id": "f19b8bac-a55f-43cf-bd74-fa59fc0c217c",
"name": "Boolean-Suchstring generieren",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
740,
400
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "system",
"content": "You are an expert in Boolean search techniques for Google. When the user send a job description, generate a search string specifically for finding LinkedIn profiles. Your response must always follow this exact format:\nsite:linkedin.com/in [Boolean search string]\n\nif a [Company Name] is mentioned always include \"at [Company Name]\" or \"company [Company Name]\" in the Boolean string.\n\nCreate the Boolean search string using precise operators (AND, OR, \"\", *, -) to match the job requirements. Focus only on generating the search string - provide no additional commentary or explanations unless specifically requested.\n\nAlso return sheet_name (less than 100 char)"
},
{
"content": "={{ $json.chatInput }}"
}
]
},
"simplify": false,
"jsonOutput": true
},
"credentials": {
"openAiApi": {
"id": "jtWO101PBVIMkiwq",
"name": "OpenAi account"
}
},
"retryOnFail": false,
"typeVersion": 1.8
},
{
"id": "7b57464a-d650-465b-91fd-d87aa8884517",
"name": "Kontaktdaten extrahieren",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
680,
1140
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "chatgpt-4o-latest",
"cachedResultName": "CHATGPT-4O-LATEST"
},
"options": {},
"messages": {
"values": [
{
"content": "=For each {{ $json.linkedin_url }} and {{ $json.workplace_context }} extract linkedin_url, first_name, last_name, domain_name and meaningful_context. First_name is the first name of the person, last_name is the last name of the person, domain_name is the place of current work and meaningful_context is workplace context written in English sentences that make sense.\nDomain_name is where the person currently works. Figure it out from the workplace_context. Append \".com\", \".ai\", or \".org\" based on what the domain name and output the domain name. "
}
]
}
},
"credentials": {
"openAiApi": {
"id": "jtWO101PBVIMkiwq",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "18fba241-bb89-4468-bbf0-6bec4e75612c",
"name": "Haftnotiz4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1240,
840
],
"parameters": {
"color": 4,
"width": 320,
"height": 180,
"content": "Get this Cookie-Editor. https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm\n\nDo a google search --> click this extension --> Export --> Header string.\n\nThen, open this node --> under Header Auth --> edit --> and under cookie value paste in your header string. \n\nThis is to perform an authenticated google search.\n"
},
"typeVersion": 1
},
{
"id": "ebb1f62f-3206-46f3-873e-36d78eb134dc",
"name": "Haftnotiz",
"type": "n8n-nodes-base.stickyNote",
"position": [
660,
1060
],
"parameters": {
"color": 4,
"width": 320,
"height": 180,
"content": "This basically calls ChatGPT to infer the place of work from workplace context. This helps form the domain name for Hunter."
},
"typeVersion": 1
},
{
"id": "e7283690-37fb-4ca6-8797-d0b07026e0a6",
"name": "Spalten zum Hinzufügen: linkedin_url, first_name, last_name, email, context, domain",
"type": "n8n-nodes-base.code",
"position": [
420,
640
],
"parameters": {
"jsCode": "return [\n {\n json: {\n linkedin_url: \"\",\n first_name: \"\",\n last_name: \"\",\n domain_name: \"\",\n email: \"\",\n context: \"\",\n email_subject:\"\",\n email_body:\"\"\n },\n },\n];\n"
},
"typeVersion": 2
},
{
"id": "98eb8c1b-a90d-497b-865f-70db3a79ba4a",
"name": "Haftnotiz1",
"type": "n8n-nodes-base.stickyNote",
"position": [
720,
300
],
"parameters": {
"width": 300,
"content": "Under \"Credential to connect with\" add your openAI API key. Find at: https://platform.openai.com/settings/organization/api-keys\n"
},
"typeVersion": 1
},
{
"id": "463dc7e3-711b-4d9f-8b23-6622215e20e9",
"name": "Haftnotiz3",
"type": "n8n-nodes-base.stickyNote",
"position": [
640,
820
],
"parameters": {
"color": 5,
"width": 200,
"height": 200,
"content": "Waits 5 seconds to avoid rate limiting by Google. While it's unlikely you'll be rate-limited since you're authenticated with your cookie, this is just a precaution."
},
"typeVersion": 1
},
{
"id": "db7b1096-5381-4daf-8aac-ab491921d862",
"name": "Haftnotiz2",
"type": "n8n-nodes-base.stickyNote",
"position": [
60,
760
],
"parameters": {
"width": 300,
"content": "For the first condition: {{ $json.start }} is less than 50, so change \"50\" to your desired number of results. \n\nEach loop fetches the next page, returning 10 results per iteration."
},
"typeVersion": 1
},
{
"id": "4a9d208c-c989-4630-a013-77aa9a3f9bd7",
"name": "Haftnotiz5",
"type": "n8n-nodes-base.stickyNote",
"position": [
180,
1280
],
"parameters": {
"color": 5,
"width": 200,
"height": 200,
"content": "Stores all the cold emails in a Google Sheet"
},
"typeVersion": 1
},
{
"id": "7b8fb208-bfc3-4d3a-b676-3fc9ea53c5c1",
"name": "Gmail",
"type": "n8n-nodes-base.gmail",
"position": [
1260,
1360
],
"webhookId": "e3c8a3f8-6dac-48e0-90c8-3fb9ac2213fb",
"parameters": {
"message": "={{ $('Extract subject and email body').item.json.emailBody }}",
"options": {
"ccList": "",
"sendTo": "={{ $json.email }}"
},
"subject": "={{ $('Extract subject and email body').item.json.subject }}",
"resource": "draft"
},
"credentials": {
"gmailOAuth2": {
"id": "nl3SKVasBIyYDr5a",
"name": "Gmail account"
}
},
"typeVersion": 2.1
},
{
"id": "1f3132e6-a3d1-4e94-9d3d-bd5ea6e333d0",
"name": "Betreff und E-Mail-Text extrahieren",
"type": "n8n-nodes-base.code",
"position": [
700,
1360
],
"parameters": {
"jsCode": "const items = $input.all();\nconst updatedItems = items.map((item) => {\n const content = item?.json?.message?.content;\n const [subject, ...emailBodyParts] = content.split(\"\\n\\n\");\n const emailBody = emailBodyParts.join(\"\\n\\n\");\n item.json.subject = subject.replace(\"Subject: \", \"\");\n item.json.emailBody = emailBody;\n return item;\n});\nreturn updatedItems;\n"
},
"typeVersion": 2
},
{
"id": "b4396b3c-83aa-4255-92c1-98b910388101",
"name": "Personalisierter Cold-Email-Generator",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1360,
1140
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "chatgpt-4o-latest",
"cachedResultName": "CHATGPT-4O-LATEST"
},
"options": {},
"messages": {
"values": [
{
"content": "=Profile name: {{ $json.first_name }}\nProfile last name: {{ $json.last_name }}\nProfile context: {{ $json.meaningful_context }}\n\nProfile LinkedIn URL: {{ $json.linkedin_url }}"
},
{
"role": "system",
"content": "You are an expert at crafting formal, personalized, and compelling cold outreach emails designed to resonate strongly with recipients.\nYour task is to use the context provided on the profile and perform a search on the LinkedIn URL of the profile to write concise yet impactful emails that:\nClearly and professionally introduce the sender.\nPrecisely connect the sender's unique background, expertise, or interests with the recipient's professional experiences, role, achievements, or interests.\nDemonstrate genuine value or relevance to the recipient, making a clear and compelling case for a brief conversation.\nThe receiver should derive value from this cold email.\nPolitely and directly request a brief 15-20 minute call to explore mutual interests or opportunities.\nEnsure each email:\nUses formal language and professional etiquette.\nClearly demonstrates the sender has researched and thoughtfully understands the recipient's role, achievements, or professional context.\nLeverages specific, relevant details from both the sender's background and recipient’s professional profile to establish credibility and genuine interest.\nConcludes with a courteous request for a brief, convenient meeting, explicitly stating availability or willingness to accommodate the recipient's schedule.\nMaintain a respectful, confident tone, and make the email concise, typically no longer than 5-6 sentences. Make sure you sound human-like and not like an AI.\n\nDo not add the sender's email ID or the LinkedIn profile.\nEnd the email with \n\"Best,\n<Sender Name>\"\n\nHere is more information about the sender:\n\nAbhijay currently works as a Product Manager at YouTube within Google where he is responsible for connected experience products (think casting, or getting people to open up their phone) for users watching YouTube on TV.\n\nHe brings experience managing complex stakeholder needs, translating strategy into execution to drive product growth, and building delightful products for 2B+ users.\n\n\nPreviously, at Alpine Investors he drove 0-1 journeys for Gen AI products at the private equity firm and prior to that he was a product management intern on the Ads team at Apple, where he and his team drove a revenue gain of ~$xxM.\n\nPrior to Apple, he worked in the corporate strategy team at Hilti Group in Switzerland, a $6B B2B SaaS firm in the construction space, where he worked with the CEO and the Executive Board in crafting the firm's strategy in a data-driven manner. He was the first data scientist for the group and helped build and scale multiple customer-facing AI initiatives for the company such as Chatbots and Recommender Engines, leading to a revenue gain of $xxM. \n\nAs a product manager and product owner, he led cross-functional teams across Europe and Asia to create innovative solutions that improved customer experience, increased online sales, and opened up new revenue streams. He also mentored and supported young talent, contributed to strategic initiatives, and collaborated with industry leaders such as Amazon Web Services. He is passionate about applying his skills and knowledge to solve complex problems and create positive impact.\n\nHe also worked with a senior advisor, SDG and the CEO of NITI Aayog (think tank for the Government of India and chaired by the honorable Prime Minister of India). \n\nHe holds a B.Tech and M.Tech in Computer Science from IIIT-B, with a specialization in Artificial Intelligence, and an MBA from Harvard Business School."
}
]
}
},
"credentials": {
"openAiApi": {
"id": "jtWO101PBVIMkiwq",
"name": "OpenAi account"
}
},
"typeVersion": 1.8
},
{
"id": "9822e7c5-1f6a-4c94-a997-d83f30a0160c",
"name": "Hunter",
"type": "n8n-nodes-base.hunter",
"position": [
900,
1360
],
"parameters": {
"domain": "={{ $('Extracts fname, lname, domainname').item.json.domain_name }}",
"lastname": "={{ $('Extracts fname, lname, domainname').item.json.last_name }}",
"firstname": "={{ $('Extracts fname, lname, domainname').item.json.first_name }}",
"operation": "emailFinder"
},
"credentials": {
"hunterApi": {
"id": "ELWffpiY1btUdxl1",
"name": "Hunter account 3"
}
},
"executeOnce": true,
"typeVersion": 1
},
{
"id": "c9813338-95b8-433c-b52b-c78c049575ec",
"name": "Haftnotiz6",
"type": "n8n-nodes-base.stickyNote",
"position": [
860,
1320
],
"parameters": {
"color": 5,
"width": 200,
"height": 200,
"content": "Create an account on Hunter.io and add the API key here. 25 uses a month in the free model."
},
"typeVersion": 1
},
{
"id": "28eddff1-1b6b-4d87-a650-0262d2f2ccde",
"name": "Haftnotiz7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1080,
320
],
"parameters": {
"color": 5,
"width": 200,
"height": 200,
"content": "Please change the name of the sheet to a sheet in your Google Drive"
},
"typeVersion": 1
},
{
"id": "e92fb3ad-c98b-4917-98d6-6de847af7425",
"name": "Haftnotiz8",
"type": "n8n-nodes-base.stickyNote",
"position": [
1320,
1060
],
"parameters": {
"color": 4,
"width": 320,
"height": 180,
"content": "Please change the system prompt to add information about yourself (it currently has my details). Also, change the system prompt for the task you are interested in (job request /sales demo etc)"
},
"typeVersion": 1
},
{
"id": "2b8c2dba-4b3c-486d-b765-7bae108802a3",
"name": "Haftnotiz9",
"type": "n8n-nodes-base.stickyNote",
"position": [
1360,
1340
],
"parameters": {
"width": 260,
"height": 100,
"content": "Please add your Gmail credentials. You will find the cold email drafts in your Gmail drafts folder for review."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {},
"versionId": "70ebcd8c-5023-4fee-85af-c94683f7bba0",
"connections": {
"5289c588-a2d0-41d9-94e9-5e1ab564c78f": {
"main": [
[]
]
},
"0fa236a3-2e00-4710-ab5f-a5d237dcfa90": {
"main": [
[
{
"node": "119084c3-a1d8-4007-9421-764f4625d5dc",
"type": "main",
"index": 0
}
]
]
},
"9822e7c5-1f6a-4c94-a997-d83f30a0160c": {
"main": [
[
{
"node": "7b8fb208-bfc3-4d3a-b676-3fc9ea53c5c1",
"type": "main",
"index": 0
},
{
"node": "650665b9-cb6e-4e69-b039-4962a9a0efca",
"type": "main",
"index": 0
}
]
]
},
"af9ccdbe-30aa-451c-851c-3f2b6418c211": {
"main": [
[
{
"node": "e7283690-37fb-4ca6-8797-d0b07026e0a6",
"type": "main",
"index": 0
}
]
]
},
"119084c3-a1d8-4007-9421-764f4625d5dc": {
"main": [
[
{
"node": "f611ee14-5864-4032-8ae1-3342658be76f",
"type": "main",
"index": 0
}
]
]
},
"7b57464a-d650-465b-91fd-d87aa8884517": {
"main": [
[
{
"node": "5e6b2802-6710-4851-ab2e-4d29c9c5e644",
"type": "main",
"index": 0
}
]
]
},
"36698cf4-3d75-491f-b4da-bdb7b6d2d3c1": {
"main": [
[
{
"node": "84149de7-58b5-498c-aebc-ec79ec7317fa",
"type": "main",
"index": 0
}
]
]
},
"5d57cbba-4061-4f2f-b4a1-f99ef47eedcc": {
"main": [
[
{
"node": "f19b8bac-a55f-43cf-bd74-fa59fc0c217c",
"type": "main",
"index": 0
}
]
]
},
"1f3132e6-a3d1-4e94-9d3d-bd5ea6e333d0": {
"main": [
[
{
"node": "9822e7c5-1f6a-4c94-a997-d83f30a0160c",
"type": "main",
"index": 0
}
]
]
},
"2ae7afc6-727d-4c25-8f3b-dc6e613b813b": {
"main": [
[
{
"node": "0fa236a3-2e00-4710-ab5f-a5d237dcfa90",
"type": "main",
"index": 0
}
],
[]
]
},
"650665b9-cb6e-4e69-b039-4962a9a0efca": {
"main": [
[
{
"node": "7b60c3e0-d6b3-4652-93d4-805bbe7f095c",
"type": "main",
"index": 0
}
]
]
},
"f19b8bac-a55f-43cf-bd74-fa59fc0c217c": {
"main": [
[
{
"node": "af9ccdbe-30aa-451c-851c-3f2b6418c211",
"type": "main",
"index": 0
}
]
]
},
"5e6b2802-6710-4851-ab2e-4d29c9c5e644": {
"main": [
[
{
"node": "b4396b3c-83aa-4255-92c1-98b910388101",
"type": "main",
"index": 0
}
]
]
},
"b4396b3c-83aa-4255-92c1-98b910388101": {
"main": [
[
{
"node": "1f3132e6-a3d1-4e94-9d3d-bd5ea6e333d0",
"type": "main",
"index": 0
}
]
]
},
"84149de7-58b5-498c-aebc-ec79ec7317fa": {
"main": [
[
{
"node": "2ae7afc6-727d-4c25-8f3b-dc6e613b813b",
"type": "main",
"index": 0
}
]
]
},
"7b60c3e0-d6b3-4652-93d4-805bbe7f095c": {
"main": [
[
{
"node": "2ae7afc6-727d-4c25-8f3b-dc6e613b813b",
"type": "main",
"index": 0
}
]
]
},
"e7283690-37fb-4ca6-8797-d0b07026e0a6": {
"main": [
[
{
"node": "36698cf4-3d75-491f-b4da-bdb7b6d2d3c1",
"type": "main",
"index": 0
}
]
]
},
"f611ee14-5864-4032-8ae1-3342658be76f": {
"main": [
[
{
"node": "7b57464a-d650-465b-91fd-d87aa8884517",
"type": "main",
"index": 0
}
]
]
}
}
}Wie verwende ich diesen Workflow?
Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.
Für welche Szenarien ist dieser Workflow geeignet?
Experte - Vertrieb, Künstliche Intelligenz
Ist es kostenpflichtig?
Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.
Verwandte Workflows
Abhijay Vuyyuru
@abhijayvuyyuruProduct Manager at Google, Harvard MBA and Automation Expert for real-life, business use cases I am a LinkedIn top voice with over 30K+ followers, and over 175K+ views on YouTube. With any purchase of my n8n template, I will offer my full support to get it up an running! Let's automate and create value.
Diesen Workflow teilen