8
n8n 한국어amn8n.com

LinkedIn 직업 신호, Apify, Apollo.io, Google Gemini를 사용하여 판매 확장 자동화

고급

이것은자동화 워크플로우로, 47개의 노드를 포함합니다.주로 If, Code, Limit, Merge, Filter 등의 노드를 사용하며. LinkedIn 직업 신호를 사용하여 Apify와 Google Gemini를 사용하여 개인화된 판매 확장 생성

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

카테고리

-
워크플로우 미리보기
노드 연결 관계를 시각적으로 표시하며, 확대/축소 및 이동을 지원합니다
워크플로우 내보내기
다음 JSON 구성을 복사하여 n8n에 가져오면 이 워크플로우를 사용할 수 있습니다
{
  "id": "6ZDejfbyr1msa2zv",
  "meta": {
    "instanceId": "1a54c41d9050a8f1fa6f74ca858828ad9fb97b9fafa3e9760e576171c531a787",
    "templateCredsSetupCompleted": true
  },
  "name": "Automate Sales Outreach with LinkedIn Job Signals, Apify, Apollo.io & Google Gemini",
  "tags": [],
  "nodes": [
    {
      "id": "0fd7b446-8b69-4fb4-b79e-f69fbe4082ab",
      "name": "이메일로 시트 업데이트",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2560,
        1008
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $('Filter for Batching').item.json.Email }}",
            "Subject": "={{ $json.output.subject }}",
            "Email Body": "={{ $json.output.email_body }}"
          },
          "schema": [
            {
              "id": "First Name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "First Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Last Name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Last Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Occupation",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Occupation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "LinkedIn Url",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "LinkedIn Url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company LinkedIn Url",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Company LinkedIn Url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company URL",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Company URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Location",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Domain",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Domain",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Description",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Company Description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Employee Count",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Employee Count",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Job Title",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Job Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Subject",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Subject",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Body",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email Body",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1gUD7SVkq1spzbZXzMDh5kbXPD6ftqWPBwBgwZi3_gdo/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1gUD7SVkq1spzbZXzMDh5kbXPD6ftqWPBwBgwZi3_gdo",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1gUD7SVkq1spzbZXzMDh5kbXPD6ftqWPBwBgwZi3_gdo/edit?usp=drivesdk",
          "cachedResultName": "LinkedIn Lead Gen"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "12d544fc-86d7-4cbf-9be7-ed6d4730dbdf",
      "name": "Google Gemini 채팅 모델",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        1936,
        1376
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "78b63764-9948-40ca-be63-f188ff8faeba",
      "name": "구조화된 출력 파서",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        2496,
        1376
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"subject\": \"A short, catchy, question-based subject line\",\n  \"email_body\": \"The full email body, 100-120 words, without any salutation or sign-off.\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "6e685361-565d-4dc6-9149-a6c2b23fe2c3",
      "name": "'워크플로 실행' 클릭 시",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -816,
        160
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "9af7695c-fb5d-4a23-b7e3-8d26a821b4d1",
      "name": "중복 제거",
      "type": "n8n-nodes-base.removeDuplicates",
      "position": [
        -768,
        496
      ],
      "parameters": {
        "compare": "selectedFields",
        "options": {
          "removeOtherFields": false,
          "disableDotNotation": false
        },
        "fieldsToCompare": "companyName"
      },
      "typeVersion": 2
    },
    {
      "id": "c1348833-1b28-4270-ae53-4dbcfc93251e",
      "name": "LinkedIn 잡 스크래퍼 실행",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        -432,
        96
      ],
      "parameters": {
        "memory": 4096,
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "hKByXkMQaC5Qt9UMN",
          "cachedResultUrl": "https://console.apify.com/actors/hKByXkMQaC5Qt9UMN/input",
          "cachedResultName": "Linkedin Jobs Scraper - PPR (curious_coder/linkedin-jobs-scraper)"
        },
        "timeout": {},
        "customBody": "{\n  \"count\": 100,\n  \"scrapeCompany\": true,\n  \"urls\": [\n    \"https://www.linkedin.com/jobs/search-results/?distance=25&f_TPR=r86400&geoId=103644278&keywords=ML%20Engineer&origin=SEMANTIC_SEARCH_HISTORY\"\n  ]\n}"
      },
      "typeVersion": 1
    },
    {
      "id": "5e36853c-5e15-42ac-9c7e-95c60aadf9da",
      "name": "데이터셋 항목 가져오기",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        96,
        160
      ],
      "parameters": {
        "limit": 110,
        "offset": {},
        "resource": "Datasets",
        "datasetId": "={{ $json.defaultDatasetId }}"
      },
      "typeVersion": 1
    },
    {
      "id": "92470dd9-7f01-4795-b36a-8d1553a12e80",
      "name": "회사 규모 < 250 확인",
      "type": "n8n-nodes-base.if",
      "position": [
        592,
        208
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "ed72c7e6-2a1f-4c8e-b87c-7ab53ea8f356",
              "operator": {
                "type": "number",
                "operation": "lt"
              },
              "leftValue": "={{ $json.companyEmployeesCount }}",
              "rightValue": 250
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "9469d083-1393-4661-bc1a-2626be76b3af",
      "name": "HR 관련 업종 제거",
      "type": "n8n-nodes-base.if",
      "position": [
        -400,
        496
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "or",
          "conditions": [
            {
              "id": "cd695047-a0f4-4058-b83b-339c5fe77a9c",
              "operator": {
                "type": "string",
                "operation": "notContains"
              },
              "leftValue": "={{ $json.industries }}",
              "rightValue": "Human Resources"
            },
            {
              "id": "7b9d94db-da9c-4b94-8961-0827f5175f9c",
              "operator": {
                "type": "string",
                "operation": "notContains"
              },
              "leftValue": "={{ $json.industries }}",
              "rightValue": "Staffing and Recruiting"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "13ccb5b9-221b-4be6-ba7c-02c53205fc63",
      "name": "최종 회사 세부 정보 준비",
      "type": "n8n-nodes-base.code",
      "position": [
        112,
        496
      ],
      "parameters": {
        "jsCode": "// n8n Function Node\n// Keep only required fields + extract clean domain from companyWebsite\n// Wrap output in \"company\" wrapper\n\nreturn items.map(item => {\n  const data = item.json;\n\n  let domain = null;\n  if (data.companyWebsite) {\n    let website = data.companyWebsite.trim();\n\n    // If no protocol, prepend http://\n    if (!/^https?:\\/\\//i.test(website)) {\n      website = \"http://\" + website;\n    }\n\n    try {\n      const parsedUrl = new URL(website);\n      domain = parsedUrl.hostname.replace(/^www\\./, \"\"); // remove \"www.\"\n    } catch (err) {\n      // Fallback: strip query/hash manually\n      domain = website\n        .replace(/^(https?:\\/\\/)?(www\\.)?/, \"\")\n        .split(/[/?#]/)[0]; // take only domain part\n    }\n  }\n\n  return {\n    json: {\n      company: { // 👈 wrapper added\n        companyName: data.companyName || null,\n        companyLinkedInUrl: data.companyLinkedInUrl || data.companyLinkedinUrl || null,\n        companyWebsite: data.companyWebsite || null,\n        industries: data.industries || null,\n        location: data.location || null,\n        employeeCount: data.companyEmployeesCount || null,\n        jobTitle: data.jobTitle || data.title || null,\n        companyDescription: data.companyDescription || null,\n        domain: domain\n      }\n    }\n  };\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "43d308cf-516a-4acf-8b77-f20a3947f0cb",
      "name": "도메인 존재 여부 확인",
      "type": "n8n-nodes-base.if",
      "position": [
        -800,
        816
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "8f1130d1-8082-48a4-9f97-a05df2e6f725",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.company.domain }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "c25ec326-deb9-490e-97ab-ebe3521e41a0",
      "name": "Apollo 대상 인력 조회",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1168,
        1312
      ],
      "parameters": {
        "url": "https://api.apollo.io/api/v1/people/search",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"q_organization_domains_list\": [\"{{ $json.company.domain }}\"],\n  \"person_seniorities\": [\"vp\", \"head\", \"director\", \"founder\", \"c-suite\", \"lead\"],\n  \"person_titles\": [\n    \"engineering\",\n    \"technology\",\n    \"product\",\n    \"operations\",\n    \"infrastructure\",\n    \"devops\",\n    \"data science\",\n    \"machine learning\",\n    \"cloud\"\n  ],\n  \"pagination\": { \"page\": 1, \"per_page\": 2 }\n}\n",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "b42ec2f9-f178-49e3-aaf8-026fb1b3b360",
      "name": "Apollo 이메일 찾기",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -496,
        1648
      ],
      "parameters": {
        "url": "https://api.apollo.io/v1/people/match",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"id\": \"{{ $json.person.personId }}\"\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "dbd59767-6054-4a77-b097-73b537b7404d",
      "name": "이메일 세부 정보 정제",
      "type": "n8n-nodes-base.code",
      "position": [
        16,
        1648
      ],
      "parameters": {
        "jsCode": "// Extract only person.id + email\nreturn items.map(item => {\n  return {\n    json: {\n      email: {   // 👈 wrapped object\n        id: item.json.person?.id || null,\n        email: item.json.person?.email || null\n      }\n    }\n  };\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "c2d53522-21bb-4d04-b3f5-f6c935356c9a",
      "name": "개인 완전 정보 구조화",
      "type": "n8n-nodes-base.code",
      "position": [
        816,
        896
      ],
      "parameters": {
        "jsCode": "// N8N JavaScript Code Node - Clean Data Merging (No Debug)\n// Mapping Logic:\n// - person.personId <-> email.id (one-to-one, unique)\n// - person.companyName <-> company.companyName (many-to-one, multiple persons per company)\n\n// Get all input items\nconst allItems = $input.all();\n\n// Step 1: Build email lookup by personId (one-to-one mapping)\nconst emailMap = {};\nallItems.forEach(item => {\n  const jsonData = item.json || {};\n  if (jsonData.email && jsonData.email.id) {\n    emailMap[jsonData.email.id] = jsonData.email.email;\n  }\n});\n\n// Step 2: Build company lookup by companyName (many-to-one mapping)\nconst companyMap = {};\nallItems.forEach(item => {\n  const jsonData = item.json || {};\n  if (jsonData.company && jsonData.company.companyName) {\n    companyMap[jsonData.company.companyName] = jsonData.company;\n  }\n});\n\n// Step 3: Merge person with email + company info\nconst outputItems = [];\n\nallItems.forEach(item => {\n  const jsonData = item.json || {};\n  if (!jsonData.person) return;\n  \n  const person = jsonData.person;\n  const personId = person.personId;\n  const companyName = person.companyName;\n  \n  // Get email from emailMap (unique per person)\n  const email = emailMap[personId] || null;\n  \n  // Get company info from companyMap (same for all persons at this company)\n  const companyInfo = companyMap[companyName] || {};\n  \n  // Create merged record\n  const mergedItem = {\n    json: {\n      ...person, // Spread all person fields\n      email: email,\n      companyDescription: companyInfo.companyDescription || null,\n      jobTitle: companyInfo.jobTitle || null,\n      employeeCount: companyInfo.employeeCount || null\n    }\n  };\n  \n  outputItems.push(mergedItem);\n});\n\n// Return the merged results\nreturn outputItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "326bb4c6-ce73-4e76-9576-685319d00b1e",
      "name": "시트에 리드 추가",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1040,
        560
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $json.email }}",
            "Domain": "={{ $json.primaryDomain }}",
            "Company": "={{ $json.companyName }}",
            "Location": "={{ $json.city }}, {{ $json.country }}",
            "Job Title": "={{ $json.jobTitle }}",
            "Last Name": "={{ $json.lastName }}",
            "First Name": "={{ $json.firstName }}",
            "Occupation": "={{ $json.title }}",
            "Company URL": "={{ $json.companyWebsite }}",
            "LinkedIn Url": "={{ $json.personLinkedInUrl }}",
            "Employee Count": "={{ $json.employeeCount }}",
            "Company Description": "={{ $json.companyDescription }}",
            "Company LinkedIn Url": "={{ $json.companyLinkedInUrl }}"
          },
          "schema": [
            {
              "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": "Occupation",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Occupation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "LinkedIn Url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "LinkedIn Url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company LinkedIn Url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company LinkedIn Url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Location",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Domain",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Domain",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Description",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Company Description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Employee Count",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Employee Count",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Job Title",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Job Title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Subject",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "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": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1gUD7SVkq1spzbZXzMDh5kbXPD6ftqWPBwBgwZi3_gdo/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1gUD7SVkq1spzbZXzMDh5kbXPD6ftqWPBwBgwZi3_gdo",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1gUD7SVkq1spzbZXzMDh5kbXPD6ftqWPBwBgwZi3_gdo/edit?usp=drivesdk",
          "cachedResultName": "LinkedIn Lead Gen"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "636f4815-dae0-4628-aa65-775781c405b5",
      "name": "리드 데이터 가져오기",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1488,
        560
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1gUD7SVkq1spzbZXzMDh5kbXPD6ftqWPBwBgwZi3_gdo/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1gUD7SVkq1spzbZXzMDh5kbXPD6ftqWPBwBgwZi3_gdo",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1gUD7SVkq1spzbZXzMDh5kbXPD6ftqWPBwBgwZi3_gdo/edit?usp=drivesdk",
          "cachedResultName": "LinkedIn Lead Gen"
        }
      },
      "typeVersion": 4
    },
    {
      "id": "bb071500-09fa-492c-a64c-20fdd384e42a",
      "name": "이메일 ID 및 내용 검증",
      "type": "n8n-nodes-base.if",
      "position": [
        2160,
        576
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0640b75d-662e-4625-a038-92c099b79f25",
              "operator": {
                "type": "string",
                "operation": "empty",
                "singleValue": true
              },
              "leftValue": "={{ $json.Subject }}",
              "rightValue": ""
            },
            {
              "id": "6d30f170-03fd-4e89-9a56-ab87e8c7c01a",
              "operator": {
                "type": "string",
                "operation": "empty",
                "singleValue": true
              },
              "leftValue": "={{ $json[\"Email Body\"] }}",
              "rightValue": ""
            },
            {
              "id": "81d61ac3-f195-4516-8259-331f7190a0c3",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.Email }}",
              "rightValue": "@"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "012dd6c0-612d-4bbb-b690-43282abc2df0",
      "name": "리드 이메일 생성기",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        2032,
        1008
      ],
      "parameters": {
        "text": "=Act as an expert B2B copywriter specializing in cold outreach for tech recruitment services.\n\n\nYour task is to write a personalized, friendly, and professional cold email. The goal is to get the attention of a busy executive by offering a clear solution to their current hiring needs.\n\n\nBACKGROUND & CONTEXT:\n\nOur Service: We provide pre-vetted, skilled remote tech talent (AI/ML Engineers, DevOps, etc.).\n\nTarget Company: US-based, under 250 employees.\n\nTarget Persona: CEO, CTO, Head of Engineering, VP of Operations.\n\nTrigger Event: The target company is actively hiring for a specific tech role.\n\nKey Value Proposition:\n\nSave significant time in the hiring process.\n\nSave 30-40% on budget compared to a direct, in-house hire.\n\n\nINPUT VARIABLES (You will use these to personalize the email):\n\n{{ $json.Company }}: The name of the company.\n\n{{ $json['Job Title'] }}: The specific job title they are hiring for (e.g., \"AI Engineer\").\n\n{{ $json.Occupation }}: The job title of the person I'm emailing (e.g., \"CTO\").\n\n\nINSTRUCTIONS & CONSTRAINTS:\n\n\n1. Subject Line:\n\nGenerate catchy subject line.\n\nEach subject line must be 7-8 words maximum.\n\nThey should be intriguing and directly related to their hiring needs. Examples: \"Your AI Engineer role,\" \"An idea for your engineering team,\" \"Filling your {{ $json['Job Title'] }} role.\"\n\n\n2. Email Body:\n\nWrite the email body only. Do not include a salutation like \"Hi {{ $json['First Name'] }}\".\n\nThe email must start with the exact phrase: \"Saw that {{ $json.Company }} is hiring for a {{ $json['Job Title'] }}.\"\n\nThe tone must be professional, friendly, and easy to understand.\n\nCrucially, avoid high-level marketing jargon or complex AI-related terminology. Keep the language simple and direct.\n\nFocus the message on the two main benefits: filling the role faster and more affordably. Mention the 30-40% savings.\n\nThe total word count for the body must be under 120 words.\n\nEnd with a soft, low-pressure call-to-action, such as asking if they are open to exploring alternative ways to build their team",
        "batching": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.7
    },
    {
      "id": "2c3b430d-d1bb-42d6-ab31-88ced73e58f3",
      "name": "스티커 노트",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -912,
        -32
      ],
      "parameters": {
        "height": 360,
        "content": "## ▶️ Start Workflow\n\n\n**Manually triggers the entire lead generation process.**"
      },
      "typeVersion": 1
    },
    {
      "id": "0d3f4c5f-c716-40ab-87b3-e5f74f705e65",
      "name": "스티커 노트1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -512,
        -176
      ],
      "parameters": {
        "width": 260,
        "height": 440,
        "content": "## Run the LinkedIn Job Scraper from Apify\n\n\nScrape LinkedIn Job Postings:\n\nUses Apify to find companies that are actively hiring based on a specific job search URL."
      },
      "typeVersion": 1
    },
    {
      "id": "3743dc33-a59f-4ee4-95a2-9956c99c3981",
      "name": "스티커 노트2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        16,
        -112
      ],
      "parameters": {
        "width": 260,
        "height": 420,
        "content": "## Get dataset Items\n\nCollect Scraped Data:\n\nRetrieves the list of job postings and company details scraped by Apify."
      },
      "typeVersion": 1
    },
    {
      "id": "8bb80fc2-cd66-4664-8b44-16fb8776a61c",
      "name": "스티커 노트3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        512,
        -48
      ],
      "parameters": {
        "width": 260,
        "height": 420,
        "content": "## Checks Company Size < 250\n\nFilter by Company Size:\n\nOnly allows companies with fewer than 250 employees to pass through."
      },
      "typeVersion": 1
    },
    {
      "id": "2425cb33-44ce-411b-a01d-aede93c801b5",
      "name": "스티커 노트4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1072,
        496
      ],
      "parameters": {
        "color": 5,
        "height": 100,
        "content": "## Rmeove Duplicate Entries\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e5937705-ff40-41c7-bb0a-3864fac0e9dc",
      "name": "스티커 노트5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -448,
        368
      ],
      "parameters": {
        "color": 5,
        "height": 120,
        "content": "## Rmeove HR Related Companies"
      },
      "typeVersion": 1
    },
    {
      "id": "17a39567-8afb-4faa-a29f-ca7522cf3408",
      "name": "스티커 노트6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        96,
        368
      ],
      "parameters": {
        "color": 5,
        "height": 120,
        "content": "## Prepare Final Company Details"
      },
      "typeVersion": 1
    },
    {
      "id": "603bc9a8-e1be-49e2-a789-2bc84da68ee2",
      "name": "스티커 노트7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -816,
        736
      ],
      "parameters": {
        "color": 5,
        "height": 80,
        "content": "## Check domain Existence"
      },
      "typeVersion": 1
    },
    {
      "id": "ee151293-9743-4df6-bf8c-fab51cf5df10",
      "name": "회사 검색 제한",
      "type": "n8n-nodes-base.limit",
      "position": [
        -128,
        848
      ],
      "parameters": {
        "maxItems": 5
      },
      "typeVersion": 1
    },
    {
      "id": "6f6e8313-f32e-4bd1-8ff8-973593afd95d",
      "name": "스티커 노트8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -176,
        752
      ],
      "parameters": {
        "color": 5,
        "height": 80,
        "content": "## Limit Company Search"
      },
      "typeVersion": 1
    },
    {
      "id": "00d91745-b097-4049-805e-8133294b46fe",
      "name": "스티커 노트9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1488,
        1248
      ],
      "parameters": {
        "color": 6,
        "height": 260,
        "content": "## Apollo Get Targeted Personnel\n\n\nFind Decision-Makers:\n\nSearches Apollo.io using the company domain to find key contacts (VPs, Directors, etc.)."
      },
      "typeVersion": 1
    },
    {
      "id": "f7572335-877a-4033-82f8-bb7bda1a38ff",
      "name": "스티커 노트10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -848,
        1088
      ],
      "parameters": {
        "color": 6,
        "height": 260,
        "content": "## Sanitising Person Details\n\nClean Person Data:\n\nStructures the contact details and removes duplicates to create a clean list of people."
      },
      "typeVersion": 1
    },
    {
      "id": "786da361-b3f8-45ee-a4d5-4b1a0a00c9c7",
      "name": "개인 세부 정보 정제",
      "type": "n8n-nodes-base.code",
      "position": [
        -768,
        1360
      ],
      "parameters": {
        "jsCode": "// Flatten + dedupe by (person.id + companyName)\nlet results = [];\nlet seen = new Set();\n\nitems.forEach(item => {\n  const people = item.json.people || [];\n\n  people.forEach(person => {\n    if (!person.id) return;\n\n    const company = person.organization || {};\n    const uniqueKey = person.id + \"|\" + (company.name || \"\"); \n\n    if (seen.has(uniqueKey)) return;\n    seen.add(uniqueKey);\n\n    let websiteUrl = company.website_url || null;\n    let domain = company.primary_domain || null;\n\n    if (!domain && websiteUrl) {\n      try {\n        const parsedUrl = new URL(websiteUrl);\n        domain = parsedUrl.hostname.replace(/^www\\./, \"\");\n      } catch (err) {\n        domain = websiteUrl.replace(/^(https?:\\/\\/)?(www\\.)?/, \"\").split(/[/?#]/)[0];\n      }\n    }\n\n    results.push({\n      json: {\n        person: {   // 👈 wrapped object\n          uniqueKey: uniqueKey,\n          personId: person.id || null,\n          firstName: person.first_name || null,\n          lastName: person.last_name || null,\n          personLinkedInUrl: person.linkedin_url || null,\n          title: person.title || null,\n          city: person.city || null,\n          country: person.country || null,\n          companyName: company.name || null,\n          companyWebsite: websiteUrl,\n          primaryDomain: domain,\n          companyLinkedInUrl: company.linkedin_url || null\n        }\n      }\n    });\n  });\n});\n\nreturn results;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "f847fb0f-f82b-47c9-a493-9e859bc16a4e",
      "name": "스티커 노트11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -576,
        1840
      ],
      "parameters": {
        "color": 6,
        "height": 260,
        "content": "## Apollo Email Finder\n\nFind Verified Emails:\n\nFor each contact, this node asks Apollo.io to find their professional email address."
      },
      "typeVersion": 1
    },
    {
      "id": "18a68ac3-c63f-44aa-9169-a080eb1a21ce",
      "name": "스티커 노트12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        1840
      ],
      "parameters": {
        "color": 6,
        "height": 220,
        "content": "## Sanitising Email Details\n\nIsolate Email Data:\n\nPrepares the found email addresses for merging"
      },
      "typeVersion": 1
    },
    {
      "id": "2713732b-136d-4f9d-8964-ef5b54adeff6",
      "name": "스티커 노트13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        400,
        1296
      ],
      "parameters": {
        "color": 4,
        "width": 280,
        "height": 240,
        "content": "## Merge Data\n\nCombine Data Streams:\n\nMerges the company data, the person data, and the email data together."
      },
      "typeVersion": 1
    },
    {
      "id": "20fc29b2-1b85-4f55-847f-51161415391b",
      "name": "스티커 노트14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        768,
        1056
      ],
      "parameters": {
        "color": 4,
        "width": 280,
        "height": 240,
        "content": "## Structuring Complete Details of Person\n\nCreate Final Lead Profile:\n\nCombines all three data streams into a single, complete lead record for each person."
      },
      "typeVersion": 1
    },
    {
      "id": "6a07323e-c5aa-4cfa-8f8b-19662806e35b",
      "name": "스티커 노트15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        928,
        352
      ],
      "parameters": {
        "color": 3,
        "width": 280,
        "height": 240,
        "content": "## Save Leads to Google Sheets\n\nAppends each complete lead profile as a new row in the master spreadsheet."
      },
      "typeVersion": 1
    },
    {
      "id": "0b81960f-6d52-498d-9bd7-34689431fb88",
      "name": "스티커 노트16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1408,
        336
      ],
      "parameters": {
        "color": 3,
        "width": 280,
        "height": 260,
        "content": "## Fetching Leads Data\n\nRead Leads for AI:\n\nReads the newly saved leads from the sheet to begin the email generation phase."
      },
      "typeVersion": 1
    },
    {
      "id": "d19a3c2d-ec40-4263-aa09-799f3ab25e7a",
      "name": "스티커 노트17",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2080,
        352
      ],
      "parameters": {
        "color": 3,
        "width": 280,
        "height": 300,
        "content": "## Validates Email Id and Email Content\n\nCheck Before AI Processing:\n\nFilters for leads that have a valid email but do NOT yet have a generated subject or body."
      },
      "typeVersion": 1
    },
    {
      "id": "0ccfe835-fc19-4ffa-acf8-644bc6149633",
      "name": "스티커 노트18",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1408,
        1152
      ],
      "parameters": {
        "color": 2,
        "width": 280,
        "height": 180,
        "content": "## Apply Final Filter\n\nApplies a final condition before sending data to the AI model (e.g., for batching or testing).\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "fd60f2ef-f30c-4450-9ce4-273946d0f3ed",
      "name": "스티커 노트19",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1952,
        816
      ],
      "parameters": {
        "color": 2,
        "width": 360,
        "height": 240,
        "content": "## Lead Email Generator\n\nAI Prompt Engine:\n\nTakes the lead data, combines it with the prompt, and sends it to the Gemini model.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "14f000f8-c23b-43fb-9dc8-53c056d09345",
      "name": "스티커 노트20",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1792,
        1520
      ],
      "parameters": {
        "color": 2,
        "width": 360,
        "height": 240,
        "content": "## Google Gemini Chat Model\n\nGoogle Gemini Model:\n\nThe AI model that actually writes the email based on the provided data and instructions.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "17ef075d-dde3-4999-9868-f78f867fa322",
      "name": "스티커 노트21",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2448,
        816
      ],
      "parameters": {
        "color": 2,
        "width": 360,
        "height": 240,
        "content": "## Update Sheet with Email\n\nUpdate Sheet with AI Email:\n\nSaves the generated subject and email body back into the correct row for the lead in Google Sheets.\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d7ec9db4-05eb-4e9c-8916-26b046252611",
      "name": "스티커 노트22",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2416,
        1536
      ],
      "parameters": {
        "color": 2,
        "width": 360,
        "height": 240,
        "content": "## Structured Output Parser\n\nFormat AI Output:\n\nTakes the raw text from Gemini and structures it into clean JSON (subject and email_body).\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "26ab04ae-8f36-4268-ac75-0628e12e321d",
      "name": "스티커 노트23",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2880,
        1200
      ],
      "parameters": {
        "color": 2,
        "width": 440,
        "height": 240,
        "content": "## Need Help? \n\nWe develop tailored workflow to save youe valuable time. Should you have any questions or wish to explore more custom automation solutions, we would be happy to connect\n\n\n### Email: getstarted@intuz.com\n### Website: https://www.intuz.com/\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "30bffaa6-f024-4725-a969-06f489de54d1",
      "name": "데이터 병합",
      "type": "n8n-nodes-base.merge",
      "position": [
        480,
        1120
      ],
      "parameters": {
        "numberInputs": 3
      },
      "typeVersion": 3.2
    },
    {
      "id": "db0db762-142e-4ea8-8ff3-f868fd7d262c",
      "name": "배치 처리 필터링",
      "type": "n8n-nodes-base.filter",
      "position": [
        1520,
        1008
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "fed38656-1a21-4b77-babe-3c49a6f36124",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.row_number }}",
              "rightValue": 83
            }
          ]
        }
      },
      "typeVersion": 2.2
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "75ee3ba0-b483-48b3-a185-cd0aaec04290",
  "connections": {
    "30bffaa6-f024-4725-a969-06f489de54d1": {
      "main": [
        [
          {
            "node": "c2d53522-21bb-4d04-b3f5-f6c935356c9a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5e36853c-5e15-42ac-9c7e-95c60aadf9da": {
      "main": [
        [
          {
            "node": "92470dd9-7f01-4795-b36a-8d1553a12e80",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9af7695c-fb5d-4a23-b7e3-8d26a821b4d1": {
      "main": [
        [
          {
            "node": "9469d083-1393-4661-bc1a-2626be76b3af",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b42ec2f9-f178-49e3-aaf8-026fb1b3b360": {
      "main": [
        [
          {
            "node": "dbd59767-6054-4a77-b097-73b537b7404d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "636f4815-dae0-4628-aa65-775781c405b5": {
      "main": [
        [
          {
            "node": "bb071500-09fa-492c-a64c-20fdd384e42a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "db0db762-142e-4ea8-8ff3-f868fd7d262c": {
      "main": [
        [
          {
            "node": "012dd6c0-612d-4bbb-b690-43282abc2df0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "012dd6c0-612d-4bbb-b690-43282abc2df0": {
      "main": [
        [
          {
            "node": "0fd7b446-8b69-4fb4-b79e-f69fbe4082ab",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "326bb4c6-ce73-4e76-9576-685319d00b1e": {
      "main": [
        [
          {
            "node": "636f4815-dae0-4628-aa65-775781c405b5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ee151293-9743-4df6-bf8c-fab51cf5df10": {
      "main": [
        [
          {
            "node": "30bffaa6-f024-4725-a969-06f489de54d1",
            "type": "main",
            "index": 0
          },
          {
            "node": "c25ec326-deb9-490e-97ab-ebe3521e41a0",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "43d308cf-516a-4acf-8b77-f20a3947f0cb": {
      "main": [
        [
          {
            "node": "ee151293-9743-4df6-bf8c-fab51cf5df10",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "12d544fc-86d7-4cbf-9be7-ed6d4730dbdf": {
      "ai_languageModel": [
        [
          {
            "node": "012dd6c0-612d-4bbb-b690-43282abc2df0",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "dbd59767-6054-4a77-b097-73b537b7404d": {
      "main": [
        [
          {
            "node": "30bffaa6-f024-4725-a969-06f489de54d1",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "78b63764-9948-40ca-be63-f188ff8faeba": {
      "ai_outputParser": [
        [
          {
            "node": "012dd6c0-612d-4bbb-b690-43282abc2df0",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "92470dd9-7f01-4795-b36a-8d1553a12e80": {
      "main": [
        [
          {
            "node": "9af7695c-fb5d-4a23-b7e3-8d26a821b4d1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "786da361-b3f8-45ee-a4d5-4b1a0a00c9c7": {
      "main": [
        [
          {
            "node": "b42ec2f9-f178-49e3-aaf8-026fb1b3b360",
            "type": "main",
            "index": 0
          },
          {
            "node": "30bffaa6-f024-4725-a969-06f489de54d1",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "9469d083-1393-4661-bc1a-2626be76b3af": {
      "main": [
        [
          {
            "node": "13ccb5b9-221b-4be6-ba7c-02c53205fc63",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c1348833-1b28-4270-ae53-4dbcfc93251e": {
      "main": [
        [
          {
            "node": "5e36853c-5e15-42ac-9c7e-95c60aadf9da",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c25ec326-deb9-490e-97ab-ebe3521e41a0": {
      "main": [
        [
          {
            "node": "786da361-b3f8-45ee-a4d5-4b1a0a00c9c7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "13ccb5b9-221b-4be6-ba7c-02c53205fc63": {
      "main": [
        [
          {
            "node": "43d308cf-516a-4acf-8b77-f20a3947f0cb",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bb071500-09fa-492c-a64c-20fdd384e42a": {
      "main": [
        [
          {
            "node": "db0db762-142e-4ea8-8ff3-f868fd7d262c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6e685361-565d-4dc6-9149-a6c2b23fe2c3": {
      "main": [
        [
          {
            "node": "c1348833-1b28-4270-ae53-4dbcfc93251e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c2d53522-21bb-4d04-b3f5-f6c935356c9a": {
      "main": [
        [
          {
            "node": "326bb4c6-ce73-4e76-9576-685319d00b1e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
자주 묻는 질문

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

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

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

고급

유료인가요?

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

워크플로우 정보
난이도
고급
노드 수47
카테고리-
노드 유형14
난이도 설명

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

저자
Intuz

Intuz

@intuz

Workflow automation can help automate your routine activities and help saves $$$, as well as hours of time. As a boutique tech consulting company, Intuz help businesses with custom AI/ML, AI Workflow Automations, and software development. Automate your business workflow for: Sales Marketing Accounting Finance Operations E-Commerce Customer Support Admin & Backoffice Logistics & Supply Chain

외부 링크
n8n.io에서 보기

이 워크플로우 공유

카테고리

카테고리: 34