8
n8n 한국어amn8n.com

LinkedIn 에이전트 v2

고급

이것은Sales, AI분야의자동화 워크플로우로, 29개의 노드를 포함합니다.주로 If, Code, Wait, Gmail, Hunter 등의 노드를 사용하며인공지능 기술을 결합하여 스마트 자동화를 구현합니다. OpenAI, Hunter 및 Gmail을 사용한 LinkedIn 리드 자동 발견 및 개인화된 콜드 이메일 발송

사전 요구사항
  • Google 계정 및 Gmail API 인증 정보
  • 대상 API의 인증 정보가 필요할 수 있음
  • Google Sheets API 인증 정보
  • OpenAI API Key

카테고리

워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "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": "대기",
      "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": "채팅 메시지 수신 시",
      "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": "새 시트 생성",
      "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": "새 시트에 열 추가",
      "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": "google 검색 페이지 번호 설정",
      "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 불리언 검색",
      "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": "원하는 결과 미달 시",
      "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": "결과를 시트에 추가",
      "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": "코드",
      "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": "이름, 성, 도메인명 추출",
      "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": "google http 응답에서 모든 linkedin URL 및 직장 컨텍스트 추출",
      "type": "n8n-nodes-base.code",
      "position": [
        400,
        1140
      ],
      "parameters": {
        "jsCode": "function extractLinkedInProfiles(html) {\n    // Decode HTML entities\n    html = html.replace(/&amp;/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": "시작값에 10 추가 - 다음 페이지로 이동",
      "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": "불리언 검색 문자열 생성",
      "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": "연락처 세부정보 추출",
      "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": "스티커 노트4",
      "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": "스티커 노트",
      "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": "추가할 열: 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": "스티커 노트1",
      "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": "스티커 노트3",
      "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": "스티커 노트2",
      "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": "스티커 노트5",
      "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": "제목 및 이메일 본문 추출",
      "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": "맞춤형 콜드 이메일 생성기",
      "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": "스티커 노트6",
      "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": "스티커 노트7",
      "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": "스티커 노트8",
      "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": "스티커 노트9",
      "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
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

이 워크플로우를 어떻게 사용하나요?

위의 JSON 구성 코드를 복사하여 n8n 인스턴스에서 새 워크플로우를 생성하고 "JSON에서 가져오기"를 선택한 후, 구성을 붙여넣고 필요에 따라 인증 설정을 수정하세요.

이 워크플로우는 어떤 시나리오에 적합한가요?

고급 - 영업, 인공지능

유료인가요?

이 워크플로우는 완전히 무료이며 직접 가져와 사용할 수 있습니다. 다만, 워크플로우에서 사용하는 타사 서비스(예: OpenAI API)는 사용자 직접 비용을 지불해야 할 수 있습니다.

워크플로우 정보
난이도
고급
노드 수29
카테고리2
노드 유형10
난이도 설명

고급 사용자를 위한 16+개 노드의 복잡한 워크플로우

저자
Abhijay Vuyyuru

Abhijay Vuyyuru

@abhijayvuyyuru

Product 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.

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34