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