내 워크플로우 2
고급
이것은Lead Nurturing, Multimodal AI분야의자동화 워크플로우로, 43개의 노드를 포함합니다.주로 If, Set, Code, Wait, Webhook 등의 노드를 사용하며. Lighthouse와 GPT-4를 활용한 자동화 웹사이트 감사 및 개인 맞춤형 아웃리치
사전 요구사항
- •HTTP Webhook 엔드포인트(n8n이 자동으로 생성)
- •대상 API의 인증 정보가 필요할 수 있음
- •Google Sheets API 인증 정보
- •OpenAI API Key
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
"id": "G44pYgYD1odi0RqW",
"meta": {
"instanceId": "4a9efc2152e53a86a131cbceb18ee074f3387b800dd008fa606135f90255da7a",
"templateCredsSetupCompleted": true
},
"name": "My workflow 2",
"tags": [],
"nodes": [
{
"id": "3d4e3710-7b7c-434a-8fa5-d29f4dfaa165",
"name": "Wait1",
"type": "n8n-nodes-base.wait",
"position": [
1640,
340
],
"webhookId": "55c3dc88-2797-40a4-9370-d69adcd1eede",
"parameters": {
"amount": 25
},
"typeVersion": 1.1
},
{
"id": "8236459e-12c0-480a-89de-8cce992d5f09",
"name": "새 행 가져오기",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueErrorOutput",
"position": [
140,
620
],
"parameters": {
"sheetName": {
"__rl": true,
"mode": "list",
"value": "",
"cachedResultUrl": "",
"cachedResultName": ""
},
"documentId": {
"__rl": true,
"mode": "id",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "SF8NEIL6WSj1IVIg",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "ff17bbac-59e9-4c67-a3c5-4f71fb1ba004",
"name": "첫 번째 행",
"type": "n8n-nodes-base.code",
"position": [
140,
200
],
"parameters": {
"jsCode": "return [items[0]];"
},
"typeVersion": 2
},
{
"id": "002ae828-5db7-4e57-b879-62840449580d",
"name": "이메일이 비어 있지 않은 경우",
"type": "n8n-nodes-base.if",
"position": [
140,
480
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "88f0524b-2dd2-4a50-8776-9d305498776e",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.Email }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "ca905c6b-dc60-4876-9349-b190051b5cb2",
"name": "시트 업데이트 (이메일이 존재하지 않음)",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueErrorOutput",
"position": [
140,
760
],
"parameters": {
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "name",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "id",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "SF8NEIL6WSj1IVIg",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "f6f76a64-5f7d-4c6e-8220-f61eef86a8cd",
"name": "이메일이 BokaDirect 지원 이메일이 아닌 경우",
"type": "n8n-nodes-base.if",
"position": [
360,
620
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "463f92c5-e786-4bdc-bc8c-21781e683325",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.Email }}",
"rightValue": "foto@lkjkjkj.com"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "02fa89b6-a094-489b-b78e-c6d435074b94",
"name": "BokaDirect 프로필 URL 요청",
"type": "n8n-nodes-base.httpRequest",
"position": [
580,
200
],
"parameters": {
"url": "={{ $json['BokaDirect Profile'] }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "f68ba01c-11fe-443a-92ab-a0ad3cf60195",
"name": "프로필 페이지 또는 리디렉션됨",
"type": "n8n-nodes-base.code",
"position": [
580,
480
],
"parameters": {
"jsCode": "const html = $('BokaDirect Profile URL Request').first().json.data; // Replace with your actual input\n\n// Regex to check for <div class=\"w-full\"> with any content inside, non-greedy\nconst regex = /<div\\s+class=[\"']w-full[\"'][^>]*>[\\s\\S]*?<\\/div>/i;\n\nconst found = regex.test(html);\n\nreturn {\n hasWFullDiv: found\n};"
},
"typeVersion": 2
},
{
"id": "5a717b6c-5b7e-4149-a3c6-cb7867168824",
"name": "이메일 가져오기",
"type": "n8n-nodes-base.code",
"position": [
720,
200
],
"parameters": {
"jsCode": "const html = $('BokaDirect Profile URL Request').first().json.data; // Replace with actual HTML input\n\n// Regex to find an email address (basic pattern)\nconst emailRegex = /[\\w.+-]+@[\\w-]+\\.[\\w.-]+/g;\n\nconst match = html.match(emailRegex);\n\nreturn {\n emailFound: !!match,\n email: match ? match[0] : null\n};"
},
"typeVersion": 2
},
{
"id": "09611789-b242-4050-8a43-af96798d9305",
"name": "URL 리디렉션됨 시트 업데이트",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueErrorOutput",
"position": [
580,
1040
],
"parameters": {
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "name",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "id",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "SF8NEIL6WSj1IVIg",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "8d620fb9-7481-49fd-905b-d0d97a086054",
"name": "의사 결정자 이름",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
580,
360
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "assistant",
"content": "You're a helpful, intelligent web scraping assistant."
},
{
"content": "Tell me about DecisionMakerName using the StaffList and email scrape below. Use the following JSON format.\n\n{\"DecisionMakerName\":\"\"}\n\nNOTE: Donot add variable name as json for given output. Only give output in curly brackets {given format}. For DecisionMakerName, check the name and role in given data below in this format: name1, role1; name2, role2; ....\nIf 1 or more than 1 staff members, check who's the decision maker from their roles and return their name only. \n\nAlway prioritize this:\nCheck if given email has name from the given staff list, then consider that staff a decision maker."
},
{
"content": "=StaffList: {{ $json.staff_list }}\nEmail: {{ $('FirstRow').item.json.Email }}"
}
]
},
"jsonOutput": true
},
"credentials": {
"openAiApi": {
"id": "vsnN8w3j8HK3ETFm",
"name": "Shahrukh Open AI"
}
},
"typeVersion": 1.8
},
{
"id": "3dc05efa-b498-415a-9ad2-aa0c85c60000",
"name": "비즈니스 세부 정보",
"type": "n8n-nodes-base.code",
"position": [
720,
480
],
"parameters": {
"jsCode": "// Get HTML content from previous node\nconst htmlContent = $('BokaDirect Profile URL Request').first().json.data;\n\n// Basic HTML entity decoder\nfunction decodeHtmlEntities(str) {\n const entities = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\",\n ''': \"'\",\n ' ': ' ',\n };\n return str.replace(/&[a-zA-Z0-9#]+;/g, (entity) => entities[entity] || entity);\n}\n\n// Base64 decoding function\nfunction decodeBase64(str) {\n return decodeURIComponent(\n Array.prototype.map.call(atob(str), c => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)).join('')\n );\n}\n\n// Regex patterns\nconst nameRegex = /<h1.*?>(.*?)<\\/h1>/i;\nconst descriptionRegex = /<div id=\"welcomeText\".*?>(.*?)<\\/div>/is;\nconst staffNameRegex = /<span class=\" block font-semibold\">\\s*(?:<div[^>]*>.*?<\\/div>\\s*)*([^<]+)\\s*<\\/span>/g;\nconst staffRoleRegex = /<span class=\"text-black-600 text-sm\">([^<]+)<\\/span>/g;\nconst urlRegex = /<li[^>]*class=\"[^\"]*border-black-100[^\"]*\"[^>]*>[\\s\\S]*?<a[^>]*href=\"([^\"]+)\"[^>]*>/i;\nconst phoneRegex = /<meta data-react-helmet=\"true\" name=\"business:contact_data:phone_number\" content=\"(.*?)\"\\s*\\/>/i;\nconst emailImageRegex = /<img[^>]+src=\"data:image\\/png;base64,([^\"]+)\"[^>]*>/i;\n\n// Extract business name\nconst nameMatch = htmlContent.match(nameRegex);\nconst businessName = nameMatch ? decodeHtmlEntities(nameMatch[1].trim()) : null;\n\n// Extract business description\nconst descriptionMatch = htmlContent.match(descriptionRegex);\nconst businessDescription = descriptionMatch ? decodeHtmlEntities(descriptionMatch[1].trim()) : null;\n\n// Extract staff names\nconst names = [];\nlet nameMatchLoop;\nwhile ((nameMatchLoop = staffNameRegex.exec(htmlContent)) !== null) {\n names.push(decodeHtmlEntities(nameMatchLoop[1].trim()));\n}\n\n// Extract staff roles\nconst roles = [];\nlet roleMatchLoop;\nwhile ((roleMatchLoop = staffRoleRegex.exec(htmlContent)) !== null) {\n roles.push(decodeHtmlEntities(roleMatchLoop[1].trim()));\n}\n\n// Combine staff names and roles\nconst staffList = names.map((name, i) => {\n const role = roles[i] || 'Unknown';\n return `${name}, ${role}`;\n}).join('; ');\n\n// Extract URL\nconst urlMatch = htmlContent.match(urlRegex);\nconst url = urlMatch ? decodeHtmlEntities(urlMatch[1].trim()) : null;\n\n// Extract phone number\nconst phoneMatch = htmlContent.match(phoneRegex);\nconst phone = phoneMatch ? phoneMatch[1].trim() : null;\n\n// Extract email image (Base64)\nconst emailImageMatch = htmlContent.match(emailImageRegex);\nlet email = null;\n\nif (emailImageMatch) {\n // Decode Base64 string and extract the email content\n const base64String = emailImageMatch[1].trim();\n const decodedEmailContent = decodeBase64(base64String);\n\n // Assuming decoded content might contain email-like text (this can be further refined as needed)\n // You can try a simple regex for extracting an email\n const emailRegex = /([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})/i;\n const emailMatch = decodedEmailContent.match(emailRegex);\n\n if (emailMatch) {\n email = emailMatch[1];\n } else {\n email = \"Decoded content doesn't contain a valid email\";\n }\n} else {\n email = \"No Base64 image email found\";\n}\n\nconst pBlockRegex = /<p class=\"cursor-pointer\">([\\s\\S]*?)<\\/p>/;\nconst spanRegex = /<span>(.*?)<\\/span>/g;\n\nconst pMatch = htmlContent.match(pBlockRegex);\nlet address = '';\n\nif (pMatch) {\n const spanContent = [...pMatch[1].matchAll(spanRegex)].map(m => m[1]);\n address = spanContent.join(', ');\n}\n\n// Decode HTML entities (like & to &)\nconst txt = decodeHtmlEntities(address)\n\n// Return structured result\nreturn [\n {\n json: {\n business_name: businessName,\n business_description: businessDescription,\n staff_list: staffList,\n url: url,\n phone: phone,\n email: email,\n location: txt\n }\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "5e7bf73d-25c9-44ba-bf4c-9efedf3188e6",
"name": "프로필 페이지 여부",
"type": "n8n-nodes-base.if",
"position": [
580,
620
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "991cacdd-b64e-4e72-8d36-70d1aeee738b",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $('ProfilePage or Redirected').item.json.hasWFullDiv }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "8fe37ef9-8050-44b3-ac66-d9ec473aa532",
"name": "웹사이트 존재 여부",
"type": "n8n-nodes-base.if",
"position": [
580,
760
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "22599d7c-3e5d-4e6b-980e-5c81edd3edec",
"operator": {
"type": "string",
"operation": "notStartsWith"
},
"leftValue": "={{ $('Business Details').item.json.url }}",
"rightValue": "/"
},
{
"id": "0f8bc517-b7a4-41f6-9f81-46c99d327f16",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $('Business Details').item.json.url }}",
"rightValue": "none"
},
{
"id": "eaef4953-4c8b-4402-92c1-a7d07ae508c1",
"operator": {
"type": "string",
"operation": "notContains"
},
"leftValue": "={{ $('Business Details').item.json.url }}",
"rightValue": "instagram"
},
{
"id": "8f2fbedf-23fb-4638-8e99-f3432fe2fe54",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $('Business Details').item.json.url }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "281d4589-99d0-4155-9ef7-29e4558fd230",
"name": "전문 이메일 또는 개인 이메일",
"type": "n8n-nodes-base.code",
"position": [
720,
620
],
"parameters": {
"jsCode": "// List of keywords that indicate personal/free email providers\nconst freeEmailKeywords = [\n \"gmail\", \"yahoo\", \"hotmail\", \"outlook\", \"aol\",\n \"icloud\", \"live\", \"protonmail\", \"msn\", \"mail\", \n \"zoho\", \"yandex\", \"gmx\"\n];\n\nreturn items.map(item => {\n const email = $('FirstRow').first().json.Email || \"\";\n const domain = email.split(\"@\")[1]?.toLowerCase() || \"\";\n\n const isPersonal = freeEmailKeywords.some(keyword => domain.includes(keyword));\n const isProfessional = !isPersonal;\n\n // Extract domain only if it's a professional email\n const result = {\n ...item.json,\n isProfessional,\n emailType: isProfessional ? \"professional\" : \"personal\"\n };\n\n if (isProfessional) {\n result.domain = domain;\n }\n\n return { json: result };\n});"
},
"typeVersion": 2
},
{
"id": "1862d6bc-74cd-4db7-a229-67b039f5ca24",
"name": "전문 여부",
"type": "n8n-nodes-base.if",
"position": [
720,
760
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "96bf5921-7ef0-41a8-ac42-37b50fbb1e57",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.emailType }}",
"rightValue": "professional"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "964b2306-5b0d-4126-9dc9-43f5b6f78216",
"name": "웹사이트 없음 업데이트",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueErrorOutput",
"position": [
580,
1200
],
"parameters": {
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "name",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "id",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "SF8NEIL6WSj1IVIg",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "f9c7aaa4-7af1-4e3c-86cd-22ca4dbebb32",
"name": "전문 이메일에서 URL 설정",
"type": "n8n-nodes-base.set",
"position": [
720,
900
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "65d5a8d6-e8d8-4500-abff-bd5517f728ae",
"name": "URL",
"type": "string",
"value": "=https://www.{{ $json.domain }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "62fb45a6-4198-40a9-b69b-f98350414199",
"name": "URL 설정",
"type": "n8n-nodes-base.set",
"position": [
580,
900
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "e0dd80bd-1a37-4c11-b808-139b529eca41",
"name": "URL",
"type": "string",
"value": "={{ $('Business Details').item.json.url }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "d5b88f94-b13a-474e-8e21-ba470d54cdcb",
"name": "스크랩한 비즈니스 세부 정보 업데이트",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueErrorOutput",
"position": [
720,
1040
],
"parameters": {
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "name",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "id",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "SF8NEIL6WSj1IVIg",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "2e9901f8-233f-4954-a1d1-51aa9bd9a942",
"name": "비즈니스 웹사이트 요청",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
960,
620
],
"parameters": {
"url": "={{ $json.URL }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "fc02ee1d-3613-421b-874b-d48ba90dbea0",
"name": "웹사이트 오류 메시지 작성",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1220,
1000
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"content": "The error type (e.g., 404 Not Found, 500 Server Error, SSL Error, timeout)\n\n\nBasic context (business name, location, what they do)\n\n\nYour task:\n Generate a personalized icebreaker for a cold outreach email, pitching web repair, redesign, and performance/SEO improvements. Make it feel researched and human-written. Always output as a JSON below:\n{\n \"content\": \"Hey [Team companyShort or FirstName], I tried visiting your site but it looks like it's returning a [error_type] error right now. That kind of issue can quietly block new leads, affect your SEO, or just make the business feel offline to potential customers.\\n\\nFigured you’d want to know, since it’s likely costing traffic and trust. I’ve worked on 500+ web projects over the last 8 years—fixing things like this fast, and often turning them into a chance to improve performance, ranking, and UX.\\n\\nAlong with development, I also bring SEO and AI expertise to help businesses strengthen their online presence and drive more qualified traffic. If you're open to it, happy to jump on a quick call and walk through what I’d recommend for getting your site up and performing at its best.\\n\\nNo pressure—just reaching out since I already ran the check. Let me know if you want to see some sites I’ve helped turn around.\"\n}\n\nRules Recap (for this error-based version):\n-Clearly mention the error type (e.g., 404, timeout, SSL error)\n-Highlight the cost of downtime: missed leads, SEO loss, trust issues\n-Keep tone helpful, not critical\n-Include your track record (1000+ web projects, 8 years)\n-Mention your SEO and AI expertise\n-Offer web repair + performance/redesign improvements\n-Include a soft, benefit-driven CTA (e.g., “happy to jump on a quick call…”)\n\n\nBasic Business Details: \nName: {{ $('Business Details').item.json.business_name }}\nLocation: {{ $('Business Details').item.json.location }}\nBusiness Description: {{ $('Business Details').item.json.business_description }}\nDecision Maker Name: {{ $('DecisionMaker Name').item.json.message.content.DecisionMakerName }}\n\nError Details: \nError Name: {{ $('Business Website Request').item.json.error.name }}\nError Code: {{ $('Business Website Request').item.json.error.code}}\nError Status: {{ $('Business Website Request').item.json.error.status }}"
}
]
},
"jsonOutput": true
},
"credentials": {
"openAiApi": {
"id": "vsnN8w3j8HK3ETFm",
"name": "Shahrukh Open AI"
}
},
"typeVersion": 1.8
},
{
"id": "df154851-f651-4a8b-ad3e-13076f777f01",
"name": "Lighthouse 통계 요청",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
1180,
240
],
"parameters": {
"url": "=https://www.googleapis.com/pagespeedonline/v5/runPagespeed?url={{ $('Update Scraped Business Details').item.json.URL }}&strategy=mobile&category=performance&category=accessibility&category=seo&category=best-practices&key=**YourPassKey**",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "a724316b-4643-4071-a5bb-f7c676c6ffb0",
"name": "스웨덴어로 번역",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1520,
600
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"messages": {
"values": [
{
"role": "assistant",
"content": "You are a native Swedish copywriter. Your job is to translate English into fluent Swedish."
},
{
"content": "=Here's text to translate:\n{{ $json.message.content.content }}"
}
]
},
"jsonOutput": true
},
"credentials": {
"openAiApi": {
"id": "vsnN8w3j8HK3ETFm",
"name": "Shahrukh Open AI"
}
},
"typeVersion": 1.8
},
{
"id": "4591596e-4646-458e-b1b8-2651a2251dc0",
"name": "통계 오류 업데이트",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueErrorOutput",
"position": [
1180,
540
],
"parameters": {
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "name",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "id",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "SF8NEIL6WSj1IVIg",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "1a6e8cf0-d939-4f46-8070-1bdb03957439",
"name": "통계 필터링",
"type": "n8n-nodes-base.code",
"position": [
1180,
400
],
"parameters": {
"jsCode": "const categories = $input.first().json.lighthouseResult?.categories || {};\n\nfunction extractScore(cat) {\n return categories[cat]?.score !== undefined\n ? Math.round(categories[cat].score * 100)\n : \"none\";\n}\n\nreturn [{\n performance: extractScore(\"performance\"),\n accessibility: extractScore(\"accessibility\"),\n bestPractices: extractScore(\"best-practices\"),\n seo: extractScore(\"seo\"),\n}];\n"
},
"typeVersion": 2
},
{
"id": "569192d1-825e-4532-9a3d-bd5a9585cf43",
"name": "웹사이트 스크린샷 요청",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
1380,
240
],
"parameters": {
"url": "=https://image.thum.io/get/fullpage/{{ $('Update Scraped Business Details').item.json.URL }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "d7561abd-1681-424f-a728-6402cb6dfaf8",
"name": "UI/UX 디자인, Lighthouse 통계 및 비즈니스 세부 정보 분석",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1520,
220
],
"parameters": {
"text": "=We scraped a business website and collected the following data:\n- A screenshot of the homepage \n- A Lighthouse audit with scores for Performance (e.g. 34), Accessibility (e.g. 55), SEO (e.g. 61), and Best Practices \n- Basic context (business name, location, what they do) \n\nYour task: \nGenerate a personalized email copy for a cold outreach email, pitching web redesign, performance optimization, and AI features depending on what you found. Always output the icebreaker value only from the following JSON. \n\n{\n \"icebreaker\": \"Hey [FirstName/companyShort], I came across [companyShort] and thought the way you***********Write your prompt****************************************************",
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "GPT-4O-MINI"
},
"options": {},
"resource": "image",
"inputType": "base64",
"operation": "analyze"
},
"credentials": {
"openAiApi": {
"id": "vsnN8w3j8HK3ETFm",
"name": "Shahrukh Open AI"
}
},
"typeVersion": 1.8
},
{
"id": "b3d56936-7c43-41f1-8b0a-7098dd0a4593",
"name": "시트 업데이트",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueErrorOutput",
"position": [
1560,
980
],
"parameters": {
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "name",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "id",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "SF8NEIL6WSj1IVIg",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "31bfb667-c41f-4a62-80d6-6bd33f58bf55",
"name": "메시지 및 상태로 시트 업데이트",
"type": "n8n-nodes-base.googleSheets",
"onError": "continueErrorOutput",
"position": [
1520,
460
],
"parameters": {
"operation": "update",
"sheetName": {
"__rl": true,
"mode": "name",
"value": ""
},
"documentId": {
"__rl": true,
"mode": "id",
"value": ""
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"id": "SF8NEIL6WSj1IVIg",
"name": "Google Sheets account"
}
},
"typeVersion": 4.5
},
{
"id": "b2d12902-a0dc-4459-97a4-1cc61e6e83a2",
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
-80,
620
],
"webhookId": "0f267a89-60f6-46c5-a97e-39c4e1452579",
"parameters": {
"path": "0f267a89-60f6-46c5-a97e-39c4e1452579",
"options": {}
},
"typeVersion": 2
},
{
"id": "8455a92d-5052-4bc1-8161-4698b357afbc",
"name": "Wait",
"type": "n8n-nodes-base.wait",
"position": [
140,
340
],
"webhookId": "a1be5555-4dc5-45da-b325-acef36739068",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "981579ab-37d4-483d-932e-42700c91f616",
"name": "Wait2",
"type": "n8n-nodes-base.wait",
"position": [
140,
920
],
"webhookId": "cf54f6db-ead7-4dcb-83c9-08226efea440",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "f20403fe-f238-4243-8ccd-87f582384cd4",
"name": "Wait3",
"type": "n8n-nodes-base.wait",
"position": [
720,
1200
],
"webhookId": "e3174a31-fbc3-4c51-95b5-6bc4cbdddb09",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "0c8ed81c-3ca9-4201-989a-016adba159b9",
"name": "Wait4",
"type": "n8n-nodes-base.wait",
"position": [
580,
1340
],
"webhookId": "573bfa47-7c05-4bb4-a97d-8435a2b6d662",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "b11ea917-3cd2-4acb-8f44-be75efbcd15f",
"name": "Wait5",
"type": "n8n-nodes-base.wait",
"position": [
720,
1340
],
"webhookId": "4396638e-aba6-45e5-84e9-d3a03ebb1939",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "87d6352f-4eb0-4e87-b34a-b24e2317fe09",
"name": "Wait6",
"type": "n8n-nodes-base.wait",
"position": [
1560,
1140
],
"webhookId": "6eb88867-d8b2-41d9-b995-48cad54e0dd4",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "5685ace3-0176-4fcf-8e97-c1bb70aff7cd",
"name": "Wait7",
"type": "n8n-nodes-base.wait",
"position": [
1320,
540
],
"webhookId": "179cac21-c996-4e0a-bdeb-531d95bf020b",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "520c0c73-0589-49f5-9c8c-25dae8ac7d52",
"name": "Wait8",
"type": "n8n-nodes-base.wait",
"position": [
1360,
400
],
"webhookId": "67e35c1e-1785-465d-998d-8bb49ce3b260",
"parameters": {},
"typeVersion": 1.1
},
{
"id": "d171e318-d5a7-480b-9cb2-4b95e9e08985",
"name": "스티커 노트",
"type": "n8n-nodes-base.stickyNote",
"position": [
60,
60
],
"parameters": {
"color": 2,
"width": 260,
"height": 1100,
"content": "# Step 1.\n## Trigger & CRM Input"
},
"typeVersion": 1
},
{
"id": "214dfeb1-daaa-4ae1-b85a-3cedc0d6ca22",
"name": "스티커 노트1",
"type": "n8n-nodes-base.stickyNote",
"position": [
500,
60
],
"parameters": {
"color": 6,
"width": 420,
"height": 1520,
"content": "# Step 2.\n## Scraping Business Data"
},
"typeVersion": 1
},
{
"id": "eb1be7fe-147d-44d6-913b-7508e8d8ab8b",
"name": "스티커 노트2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1100,
60
],
"parameters": {
"color": 7,
"width": 720,
"height": 680,
"content": "# Step 3.\n## Analyzing Lighthouse Stats + Website UI/UX Design & Generating Hyper-Personalised Outreach Email"
},
"typeVersion": 1
},
{
"id": "fb473b10-10b7-4d37-8d8f-41b250d7b46e",
"name": "스티커 노트3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1160,
800
],
"parameters": {
"color": 3,
"width": 660,
"height": 540,
"content": "# Step 4.\n## Analyzing Website Error & Generating Hyper-Personalised Outreach Email"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "1d38610c-a6da-410e-acf9-fd3d0712094b",
"connections": {
"8455a92d-5052-4bc1-8161-4698b357afbc": {
"main": [
[
{
"node": "8236459e-12c0-480a-89de-8cce992d5f09",
"type": "main",
"index": 0
}
]
]
},
"3d4e3710-7b7c-434a-8fa5-d29f4dfaa165": {
"main": [
[
{
"node": "569192d1-825e-4532-9a3d-bd5a9585cf43",
"type": "main",
"index": 0
}
]
]
},
"981579ab-37d4-483d-932e-42700c91f616": {
"main": [
[
{
"node": "ca905c6b-dc60-4876-9349-b190051b5cb2",
"type": "main",
"index": 0
}
]
]
},
"f20403fe-f238-4243-8ccd-87f582384cd4": {
"main": [
[
{
"node": "09611789-b242-4050-8a43-af96798d9305",
"type": "main",
"index": 0
}
]
]
},
"0c8ed81c-3ca9-4201-989a-016adba159b9": {
"main": [
[
{
"node": "964b2306-5b0d-4126-9dc9-43f5b6f78216",
"type": "main",
"index": 0
}
]
]
},
"b11ea917-3cd2-4acb-8f44-be75efbcd15f": {
"main": [
[
{
"node": "d5b88f94-b13a-474e-8e21-ba470d54cdcb",
"type": "main",
"index": 0
}
]
]
},
"87d6352f-4eb0-4e87-b34a-b24e2317fe09": {
"main": [
[
{
"node": "b3d56936-7c43-41f1-8b0a-7098dd0a4593",
"type": "main",
"index": 0
}
]
]
},
"5685ace3-0176-4fcf-8e97-c1bb70aff7cd": {
"main": [
[
{
"node": "4591596e-4646-458e-b1b8-2651a2251dc0",
"type": "main",
"index": 0
}
]
]
},
"520c0c73-0589-49f5-9c8c-25dae8ac7d52": {
"main": [
[
{
"node": "31bfb667-c41f-4a62-80d6-6bd33f58bf55",
"type": "main",
"index": 0
}
]
]
},
"62fb45a6-4198-40a9-b69b-f98350414199": {
"main": [
[
{
"node": "d5b88f94-b13a-474e-8e21-ba470d54cdcb",
"type": "main",
"index": 0
}
]
]
},
"b2d12902-a0dc-4459-97a4-1cc61e6e83a2": {
"main": [
[
{
"node": "8236459e-12c0-480a-89de-8cce992d5f09",
"type": "main",
"index": 0
}
]
]
},
"ff17bbac-59e9-4c67-a3c5-4f71fb1ba004": {
"main": [
[
{
"node": "002ae828-5db7-4e57-b879-62840449580d",
"type": "main",
"index": 0
}
]
]
},
"5a717b6c-5b7e-4149-a3c6-cb7867168824": {
"main": [
[
{
"node": "5e7bf73d-25c9-44ba-bf4c-9efedf3188e6",
"type": "main",
"index": 0
}
]
]
},
"1a6e8cf0-d939-4f46-8070-1bdb03957439": {
"main": [
[
{
"node": "569192d1-825e-4532-9a3d-bd5a9585cf43",
"type": "main",
"index": 0
}
]
]
},
"8236459e-12c0-480a-89de-8cce992d5f09": {
"main": [
[
{
"node": "ff17bbac-59e9-4c67-a3c5-4f71fb1ba004",
"type": "main",
"index": 0
}
],
[
{
"node": "8455a92d-5052-4bc1-8161-4698b357afbc",
"type": "main",
"index": 0
}
]
]
},
"b3d56936-7c43-41f1-8b0a-7098dd0a4593": {
"main": [
[],
[
{
"node": "87d6352f-4eb0-4e87-b34a-b24e2317fe09",
"type": "main",
"index": 0
}
]
]
},
"3dc05efa-b498-415a-9ad2-aa0c85c60000": {
"main": [
[
{
"node": "8d620fb9-7481-49fd-905b-d0d97a086054",
"type": "main",
"index": 0
}
]
]
},
"8fe37ef9-8050-44b3-ac66-d9ec473aa532": {
"main": [
[
{
"node": "62fb45a6-4198-40a9-b69b-f98350414199",
"type": "main",
"index": 0
}
],
[
{
"node": "281d4589-99d0-4155-9ef7-29e4558fd230",
"type": "main",
"index": 0
}
]
]
},
"8d620fb9-7481-49fd-905b-d0d97a086054": {
"main": [
[
{
"node": "8fe37ef9-8050-44b3-ac66-d9ec473aa532",
"type": "main",
"index": 0
}
]
]
},
"1862d6bc-74cd-4db7-a229-67b039f5ca24": {
"main": [
[
{
"node": "f9c7aaa4-7af1-4e3c-86cd-22ca4dbebb32",
"type": "main",
"index": 0
}
],
[
{
"node": "964b2306-5b0d-4126-9dc9-43f5b6f78216",
"type": "main",
"index": 0
}
]
]
},
"002ae828-5db7-4e57-b879-62840449580d": {
"main": [
[
{
"node": "f6f76a64-5f7d-4c6e-8220-f61eef86a8cd",
"type": "main",
"index": 0
}
],
[
{
"node": "ca905c6b-dc60-4876-9349-b190051b5cb2",
"type": "main",
"index": 0
}
]
]
},
"5e7bf73d-25c9-44ba-bf4c-9efedf3188e6": {
"main": [
[
{
"node": "3dc05efa-b498-415a-9ad2-aa0c85c60000",
"type": "main",
"index": 0
}
],
[
{
"node": "09611789-b242-4050-8a43-af96798d9305",
"type": "main",
"index": 0
}
]
]
},
"4591596e-4646-458e-b1b8-2651a2251dc0": {
"main": [
[],
[
{
"node": "5685ace3-0176-4fcf-8e97-c1bb70aff7cd",
"type": "main",
"index": 0
}
]
]
},
"a724316b-4643-4071-a5bb-f7c676c6ffb0": {
"main": [
[]
]
},
"2e9901f8-233f-4954-a1d1-51aa9bd9a942": {
"main": [
[
{
"node": "df154851-f651-4a8b-ad3e-13076f777f01",
"type": "main",
"index": 0
}
],
[
{
"node": "fc02ee1d-3613-421b-874b-d48ba90dbea0",
"type": "main",
"index": 0
}
]
]
},
"df154851-f651-4a8b-ad3e-13076f777f01": {
"main": [
[
{
"node": "1a6e8cf0-d939-4f46-8070-1bdb03957439",
"type": "main",
"index": 0
}
],
[
{
"node": "4591596e-4646-458e-b1b8-2651a2251dc0",
"type": "main",
"index": 0
}
]
]
},
"f68ba01c-11fe-443a-92ab-a0ad3cf60195": {
"main": [
[
{
"node": "5a717b6c-5b7e-4149-a3c6-cb7867168824",
"type": "main",
"index": 0
}
]
]
},
"09611789-b242-4050-8a43-af96798d9305": {
"main": [
[],
[
{
"node": "f20403fe-f238-4243-8ccd-87f582384cd4",
"type": "main",
"index": 0
}
]
]
},
"964b2306-5b0d-4126-9dc9-43f5b6f78216": {
"main": [
[],
[
{
"node": "0c8ed81c-3ca9-4201-989a-016adba159b9",
"type": "main",
"index": 0
}
]
]
},
"569192d1-825e-4532-9a3d-bd5a9585cf43": {
"main": [
[
{
"node": "d7561abd-1681-424f-a728-6402cb6dfaf8",
"type": "main",
"index": 0
}
],
[
{
"node": "3d4e3710-7b7c-434a-8fa5-d29f4dfaa165",
"type": "main",
"index": 0
}
]
]
},
"02fa89b6-a094-489b-b78e-c6d435074b94": {
"main": [
[
{
"node": "f68ba01c-11fe-443a-92ab-a0ad3cf60195",
"type": "main",
"index": 0
}
]
]
},
"281d4589-99d0-4155-9ef7-29e4558fd230": {
"main": [
[
{
"node": "1862d6bc-74cd-4db7-a229-67b039f5ca24",
"type": "main",
"index": 0
}
]
]
},
"f9c7aaa4-7af1-4e3c-86cd-22ca4dbebb32": {
"main": [
[
{
"node": "d5b88f94-b13a-474e-8e21-ba470d54cdcb",
"type": "main",
"index": 0
}
]
]
},
"d5b88f94-b13a-474e-8e21-ba470d54cdcb": {
"main": [
[
{
"node": "2e9901f8-233f-4954-a1d1-51aa9bd9a942",
"type": "main",
"index": 0
}
],
[
{
"node": "b11ea917-3cd2-4acb-8f44-be75efbcd15f",
"type": "main",
"index": 0
}
]
]
},
"ca905c6b-dc60-4876-9349-b190051b5cb2": {
"main": [
[
{
"node": "8236459e-12c0-480a-89de-8cce992d5f09",
"type": "main",
"index": 0
}
],
[
{
"node": "981579ab-37d4-483d-932e-42700c91f616",
"type": "main",
"index": 0
}
]
]
},
"fc02ee1d-3613-421b-874b-d48ba90dbea0": {
"main": [
[
{
"node": "b3d56936-7c43-41f1-8b0a-7098dd0a4593",
"type": "main",
"index": 0
}
]
]
},
"31bfb667-c41f-4a62-80d6-6bd33f58bf55": {
"main": [
[],
[
{
"node": "520c0c73-0589-49f5-9c8c-25dae8ac7d52",
"type": "main",
"index": 0
}
]
]
},
"f6f76a64-5f7d-4c6e-8220-f61eef86a8cd": {
"main": [
[
{
"node": "02fa89b6-a094-489b-b78e-c6d435074b94",
"type": "main",
"index": 0
}
],
[
{
"node": "09611789-b242-4050-8a43-af96798d9305",
"type": "main",
"index": 0
}
]
]
},
"d7561abd-1681-424f-a728-6402cb6dfaf8": {
"main": [
[
{
"node": "31bfb667-c41f-4a62-80d6-6bd33f58bf55",
"type": "main",
"index": 0
}
]
]
}
}
}자주 묻는 질문
이 워크플로우를 어떻게 사용하나요?
위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.
이 워크플로우는 어떤 시나리오에 적합한가요?
고급 - 리드 육성, 멀티모달 AI
유료인가요?
이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.
관련 워크플로우 추천
09 - 잠재 리드 프로필 강화기
잠재 고객 정보 보강 및 개인화 아웃리치 자동화: HubSpot, Phantombuster 및 GPT
If
Set
Code
+
If
Set
Code
30 노드Avkash Kakdiya
리드 육성
잠재 리드 생성 및 개인화 아웃리치 자동화: Apollo, AI 및 Instantly.ai
잠재 고객 생성 및 개인화 아웃리치 자동화: Apollo, AI 및 Instantly.ai
If
Set
Code
+
If
Set
Code
166 노드Ruben AI
리드 육성
자동화된 리드 캡처, AI 자격 평가 및 ElevenLabs 개인화 음성 후속 조치
OpenAI와 ElevenLabs 기반 자동 리드 캡처 및 AI 개인화 음성 후속 조치
If
Set
Code
+
If
Set
Code
22 노드Marth
리드 육성
Airtable, OpenAI 및 Unipile을 사용한 자동화된 LinkedIn 잠재 고객 생성 및 개인 메시지 발송
Airtable, OpenAI 및 Unipile을 사용한 자동화된 LinkedIn 리드 생성 및 개인 메시지 발송
If
Set
Code
+
If
Set
Code
143 노드Ruben AI
리드 육성
매일 WhatsApp 그룹 지능형 분석: GPT-4.1 분석 및 음성 메시지 변환
매일 WhatsApp 그룹 지능 분석: GPT-4.1 분석 및 음성 메시지 트랜스크립션
If
Set
Code
+
If
Set
Code
52 노드Daniel Lianes
기타
B2B 외부 연결 자동화: LinkedIn에서 이메일 시리즈로
B2B 외부 연결 자동화: GPT, AnyMailFinder, Perplexity를 사용하여 LinkedIn에서 이메일 시리즈로 이동합니다.
If
Set
Code
+
If
Set
Code
25 노드LukaszB
리드 육성
워크플로우 정보
난이도
고급
노드 수43
카테고리2
노드 유형9
저자
Shahrukh
@shahrukhmaI build AI-driven lead generation and automation systems that help businesses scale without heavy ad spend or manual outreach. With expertise in sales automation, n8n workflows, and personalized cold email, I focus on creating predictable pipelines and reducing CAC. My goal: deliver measurable revenue growth through smart, scalable systems.
외부 링크
n8n.io에서 보기 →
이 워크플로우 공유