{
  "id": "sHrDKk218lrR9EuJ",
  "name": "CB Funded Companies & Enrichment",
  "tags": [],
  "nodes": [
    {
      "id": "f2504ef0-8458-46c6-9816-0258404752da",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1660,
        740
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "2c8e08d1-cf17-4a75-ae44-5ffa8d8da861",
      "name": "Run an Actor",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        -1220,
        680
      ],
      "parameters": {
        "actorId": {
          "__rl": true,
          "mode": "list",
          "value": "BBfgvSNWcySEk1jQO",
          "cachedResultUrl": "https://console.apify.com/actors/BBfgvSNWcySEk1jQO/input",
          "cachedResultName": "Ultimate Crunchbase Search Scraper (curious_coder/crunchbase-scraper)"
        },
        "customBody": "{\n      \"cookie\": [{\n            \"name\": \"__cf_bm\",\n            \"value\": \"wYRPGnWRM0UYZdB4AFShftQeSIv22SULJBzuYNtA4q4-1755589945-1.0.1.1-TGfFN9cvFdrEc8u8E1W2wA.lCDj_P5s9c0w4tlLYFgaRh1i0lNFGL_qNFUtgutVOn0sQ5I4oo7kVkDdNJHMXzwusLMuYUqoM_vnageRi9ao\",\n            \"domain\": \".crunchbase.com\"\n        }],\n    \"count\": 10,\n    \"maxDelay\": 5,\n    \"minDelay\": 1,\n    \"search.url\": \"https://www.crunchbase.com/discover/funding_rounds/d8b2672be2ea74b38a0b8950d96e983b\"\n}"
      },
      "typeVersion": 1
    },
    {
      "id": "0b75e57c-d4aa-4dd7-b9da-22096b93082d",
      "name": "Get dataset items",
      "type": "@apify/n8n-nodes-apify.apify",
      "position": [
        -780,
        660
      ],
      "parameters": {
        "limit": 99,
        "offset": 0,
        "resource": "Datasets",
        "datasetId": "={{ $json.defaultDatasetId }}"
      },
      "typeVersion": 1
    },
    {
      "id": "d7748505-cf02-43bc-8c26-e5ce17728335",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        1180,
        1140
      ],
      "parameters": {
        "jsCode": "// All people items from the previous node\nconst peopleItems = $input.all();\n\n// All company items from \"Apollo - Get Company Details1\"\nconst companyItems = $('Apollo - Get Company Details').all();\n\nreturn peopleItems.flatMap((item, idx) => {\n  const companyData = companyItems[idx]?.json || {};\n\n  // Prefer organizations[0], else fallback to accounts[0]\n  const company = companyData.organizations?.[0] || companyData.accounts?.[0] || {};\n\n  const people = item.json.people || [];\n\n  return people.map(person => ({\n    json: {\n      company_name: company.name || null,\n      company_linkedin_url: company.linkedin_url || null,\n      company_twitter_url: company.twitter_url || null,\n      company_phone: company.sanitized_phone || company.primary_phone?.sanitized_number || null,\n      company_domain: company.primary_domain || company.domain || null,\n      person_name: person.name || null,\n      person_first_name: person.first_name || null,\n      person_last_name: person.last_name || null,\n      person_linkedin_url: person.linkedin_url || null,\n      person_email: person.email || null,\n      person_designation: person.title || null,\n      person_city: person.city || null,\n      person_country: person.country || null\n    }\n  }));\n});\n"
      },
      "typeVersion": 2
    },
    {
      "id": "3b082405-c1c2-4372-959f-cfecae090642",
      "name": "Apollo - Get Company Details",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1320,
        1380
      ],
      "parameters": {
        "url": "https://api.apollo.io/v1/mixed_companies/search",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"q_organization_name\": \"{{ $json.funded_organization_identifier.value }}\",\n  \"page\": 1,\n  \"per_page\": 1\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "3fe3b835-d09a-4390-85d2-08627f91521a",
      "name": "Code1",
      "type": "n8n-nodes-base.code",
      "position": [
        720,
        1340
      ],
      "parameters": {
        "jsCode": "// Separate base items (with people[]) and email items\nconst baseItems = items.filter(i => i.json.people);  // companies with people[]\nconst emailItems = items.filter(i => i.json.person); // email data\n\n// For each company\nconst updatedCompanies = baseItems.map(base => {\n  const company = { ...base.json };\n\n  // For each person in this company, try to match email\n  company.people.forEach(person => {\n    const match = emailItems.find(e => e.json.person?.id === person.id);\n    if (match) {\n      person.email = match.json.person?.email || null;\n    }\n  });\n\n  return { json: company };\n});\n\nreturn updatedCompanies;\n"
      },
      "typeVersion": 2
    },
    {
      "id": "acfae4be-9ccd-4a69-9350-da9c4a75e3f4",
      "name": "Get Email",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        440,
        820
      ],
      "parameters": {
        "url": "https://api.apollo.io/v1/people/match",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"id\": \"{{ $json.id }}\"\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "53b2536e-1250-4adc-84cd-fa9c788c9e6e",
      "name": "Apollo - Get User",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -760,
        1380
      ],
      "parameters": {
        "url": "https://api.apollo.io/v1/people/search",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"q_organization_domains_list\": [\"{{ $json.organizations[0].primary_domain }}\"],\n  \"person_seniorities\": [\"vp\", \"head\", \"director\"],\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\": 10 }\n}\n",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "typeVersion": 4.2
    },
    {
      "id": "3fdf95ad-c64f-4498-86d6-af8392cfdaa1",
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        160,
        1640
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "5b5b807b-aa77-4574-b5a8-ee3f364daeb8",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -200,
        840
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "people"
      },
      "typeVersion": 1
    },
    {
      "id": "fa4b43de-f7f9-4d80-b3dd-77edbf0c63b2",
      "name": "Get row(s) in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2320,
        1080
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1QmnckE5w-CL6vCjjiCO8BJZyRZETwOAYTLeDXUiJ_RE/edit#gid=0",
          "cachedResultName": "Company sheet"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1QmnckE5w-CL6vCjjiCO8BJZyRZETwOAYTLeDXUiJ_RE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1QmnckE5w-CL6vCjjiCO8BJZyRZETwOAYTLeDXUiJ_RE/edit?usp=drivesdk",
          "cachedResultName": "Company sheet"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "af218570-e707-4447-b156-b45cd0e4d904",
      "name": "If",
      "type": "n8n-nodes-base.if",
      "position": [
        2780,
        1060
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "65dec214-2b3e-453b-81f6-7d6794272030",
              "operator": {
                "type": "string",
                "operation": "empty",
                "singleValue": true
              },
              "leftValue": "={{ $json['Personalised Email'] }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "69abd956-6f0d-4be4-a515-3d17b63bdc85",
      "name": "No Operation, do nothing",
      "type": "n8n-nodes-base.noOp",
      "position": [
        3340,
        1220
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "0e77fe58-69c4-4256-adb1-d68a38161c69",
      "name": "Message a model",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3320,
        840
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "GPT-4.1"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=You are a B2B strategy consultant who writes hyper-concise, high-impact \"first touch\" cold emails. Your tone is that of a peer making a sharp, relevant observation. You are direct, respectful of the reader's time, and your only goal is to start a conversation by identifying a highly probable business pain point.\n\n\nYour task is to generate only the first email for a cold outreach sequence. It must strictly adhere to the following rules:\n\n\nCORE DIRECTIVES:\n\nBody Only & No Salutation: Do NOT use any greeting like \"Hi,\" \"Hello,\" or \"Hey.\" The email must start directly with the first sentence of the body.\n\nNo \"As a {{ $json['Person Designation'] }}...\": You are strictly forbidden from using any phrase like \"As a CTO...\" or \"In your role as...\". Do not tell them what their job is.\n\nStrict Word Count: The email body must be between 80 and 100 words. This is non-negotiable. Use short, scannable sentences.\n\nNo Obvious Statements: Do not state the obvious (e.g., \"Congratulations on your funding,\" \"Scaling is hard,\" \"Optimizing costs is important\"). Assume the reader is intelligent and get straight to the point.\n\nSubtle Personalization: The first sentence must be a custom-researched observation that connects a public event (like funding or a new product launch) to a specific, behind-the-scenes operational challenge. Frame it as a pattern you've observed in similar companies.\n\n\nCONTENT & STRUCTURE:\n\nSubject Line: Must be 4-6 words and feel like an internal email. It should be lowercase.\n\nStyle 1 (Direct): question about [Company Name]'s infra\n\nStyle 2 (Observational): post-funding cloud costs\n\nStyle 3 (Intriguing): [Company Name] & AWS spend\n\nOpening Line (The Observation): Start with an observation that links their recent success to a likely pain point.\n\nExample Formula: \"Saw the news on [Company Name]'s recent round. We've seen a few [Industry] companies struggle to keep their ML cloud spend from doubling post-investment.\"\n\nValue Proposition (The Solution): State your solution concisely and with a single, powerful data point.\n\nExample: \"We help them cut that specific infrastructure spend by around 30% by eliminating wasted compute resources.\"\n\nCall-to-Action (The Question): End with a low-friction, open-ended question that is easy to answer. It should be about their priorities, not about booking a meeting.\n\nGood Example: Curious if infra efficiency is on your roadmap for this half?\n\nBad Example: Are you free for a 15-minute chat next week?\n\n\nGENERATE THE FIRST EMAIL USING THE FOLLOWING INPUTS:\n\nCompany Name: {{ $json['Company Name'] }}\n\nJob Title: {{ $json['Person Designation'] }} (This informs the angle: strategic vs. tactical)\n\nIndustry: {{ $json.Industry }} (e.g., HealthTech, FinTech, etc.)\n\n"
            }
          ]
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "937f0554-0d59-4c09-ae16-a04dc9988779",
      "name": "Update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        4040,
        1140
      ],
      "parameters": {
        "columns": {
          "value": {
            "Person Email": "={{ $('If').item.json['Person Email'] }}",
            "Personalised Email": "={{ $json.message.content }}"
          },
          "schema": [
            {
              "id": "Company Name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Company Name",
              "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 Twitter URL",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Company Twitter URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Phone Number",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Company Phone Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Domain",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Company Domain",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Name",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Person Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person LinkedIn URL",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Person LinkedIn URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Person Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Designation",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "Person Designation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Personalised Email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Personalised Email",
              "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": [
            "Person Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1QmnckE5w-CL6vCjjiCO8BJZyRZETwOAYTLeDXUiJ_RE/edit#gid=0",
          "cachedResultName": "Company sheet"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1QmnckE5w-CL6vCjjiCO8BJZyRZETwOAYTLeDXUiJ_RE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1QmnckE5w-CL6vCjjiCO8BJZyRZETwOAYTLeDXUiJ_RE/edit?usp=drivesdk",
          "cachedResultName": "Company sheet"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "80bad05a-ecc2-4527-ad29-4fcd9826950a",
      "name": "Append or update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1800,
        1100
      ],
      "parameters": {
        "columns": {
          "value": {
            "City": "={{ $json.person_city }}",
            "Country": "={{ $json.person_country }}",
            "Email Id": "={{ $json.person_email }}",
            "Industry": "Healthcare",
            "Last Name": "={{ $json.person_last_name }}",
            "First Name": "={{ $json.person_first_name }}",
            "Job Title ": "={{ $json.person_designation }}",
            "Website URL": "={{ $json.company_domain }}",
            "Company Name": "={{ $json.company_name }}",
            "Company LinkedIn": "={{ $json.company_linkedin_url }}",
            "Person Linkedin Url": "={{ $json.person_linkedin_url }}"
          },
          "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": "Job Title ",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Job Title ",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email Id",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email Id",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Website URL",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Website URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Industry",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Industry",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Person Linkedin Url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Person Linkedin Url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company LinkedIn",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company LinkedIn",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "City",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "City",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Country",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Country",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "First Email",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "First Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email Id"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1108236131,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1QmnckE5w-CL6vCjjiCO8BJZyRZETwOAYTLeDXUiJ_RE/edit#gid=1108236131",
          "cachedResultName": "HealthCare"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1QmnckE5w-CL6vCjjiCO8BJZyRZETwOAYTLeDXUiJ_RE",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1QmnckE5w-CL6vCjjiCO8BJZyRZETwOAYTLeDXUiJ_RE/edit?usp=drivesdk",
          "cachedResultName": "Company sheet"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "9b8c0620-1ed3-49db-a1c9-c6b640b67512",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1740,
        520
      ],
      "parameters": {
        "width": 280,
        "height": 380,
        "content": "## Click to Execute flow \n\n**Step 1: Start the workflow\n \n\n\nThis node manually triggers the entire lead generation and outreach process.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7bd61df1-ad56-4507-8807-967fa98b6479",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1320,
        340
      ],
      "parameters": {
        "color": 5,
        "width": 320,
        "height": 520,
        "content": "## Run the Actor from Apify\n\n**Step 2: Scrape Funded Companies from Crunchbase\n \n\n\nThis node runs an Apify Actor to scrape a predefined Crunchbase search for recently funded companies.\n\n It automatically finds high-intent prospects who have the capital to invest in new solutions. This is the source of all your raw leads.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "00c86e8d-1564-4f54-b7cc-d8a2aa305f74",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -900,
        340
      ],
      "parameters": {
        "color": 3,
        "width": 320,
        "height": 520,
        "content": "## Get dataset items\n\n**Step 3:  Collect the Scraped Company Data \n \n\n\nThis node retrieves the list of companies that the Apify Actor successfully scraped in the previous step.\n\nIt gathers the raw data and prepares it for the next stage of enrichment within the n8n workflow.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e9ddee77-9282-4f66-a7fc-32dd1acf13cb",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1360,
        1020
      ],
      "parameters": {
        "color": 5,
        "width": 340,
        "height": 560,
        "content": "## Apollo - Get Company Details\n\n**Step 4:  Enrich Company Details via Apollo.io\n \n\n\nThis node takes each company name from the Apify data and searches for it in Apollo.io to retrieve its full profile, including the company domain.\n\n\nThe company domain is crucial for the next step of finding specific employees.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "7e3c86e0-2ef5-4cdc-8584-58cc01b3cf38",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -860,
        1000
      ],
      "parameters": {
        "color": 3,
        "width": 320,
        "height": 580,
        "content": "## Apollo - Apollo - Get User\n\n**Step 5:  Find Key Decision-Makers\n \n\n\nUsing the company domain from the previous step, this node searches Apollo.io for specific people based on seniority (VP, Head, Director) and relevant job titles (Engineering, Product, etc.).\n\n\nIt ensures you are targeting the right contacts within each company, not just anyone.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "af647a84-677a-4912-98a8-daf504337cef",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -320,
        540
      ],
      "parameters": {
        "color": 6,
        "width": 320,
        "height": 440,
        "content": "## Split Out\n\n**Step 6:  Process Each Person Individually\n \n\nThe previous node returns a list of people for each company. This node splits that list so that every individual person becomes a separate item to be processed.\n\nIt allows the workflow to find an email address for each person one by one, ensuring accurate data handling.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "137a82c4-3d2c-44b7-a118-00753065f90c",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        300,
        580
      ],
      "parameters": {
        "color": 4,
        "width": 320,
        "height": 400,
        "content": "## Get Email\" (Apollo)\n\n**Step 7:  Find the Contact's Email Address\n \n\nFor each individual person, this node makes a specific API call to Apollo.io to find and verify their professional email address.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9e0ffc63-30dd-43a9-bdfa-39eb5ea18942",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        100,
        1400
      ],
      "parameters": {
        "color": 4,
        "width": 320,
        "height": 400,
        "content": "## Merge\n\n**Step 8:  Re-combine People & Emails\n \n\nThis node brings together the initial list of people with the email addresses found in the previous step, ensuring all data is correctly associated."
      },
      "typeVersion": 1
    },
    {
      "id": "b713e67f-db31-4007-9169-17a780c7fde8",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        620,
        1080
      ],
      "parameters": {
        "color": 2,
        "width": 320,
        "height": 400,
        "content": "## Code1 node\n\n**Step 9:   Consolidate Enriched Data\n \n\nThis custom JavaScript node cleanly merges the company data, people data, and the newly found emails into a unified structure."
      },
      "typeVersion": 1
    },
    {
      "id": "82989a4f-5442-40a1-a72f-bb3a928fd69c",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1060,
        840
      ],
      "parameters": {
        "color": 2,
        "width": 300,
        "height": 440,
        "content": "## Code node\n\n**Step 10:  Structure Data for Google Sheets.\n\n \nThis node takes all the enriched information and formats it into a final, clean JSON object, mapping each piece of data (e.g., company.name, person.email) to a specific field.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "abe48428-0004-42ef-985c-671fd4a4b7d3",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1680,
        840
      ],
      "parameters": {
        "color": 6,
        "width": 320,
        "height": 440,
        "content": "## Append or update row in sheet\n\n**Step 11:  Build the Master Lead List in Google Sheets\n\nThis node takes the structured lead data and adds it as a new row to your master Google Sheet, creating your database of prospects."
      },
      "typeVersion": 1
    },
    {
      "id": "520c24d2-44d4-4cf5-b33d-cbcb4bb33123",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2200,
        820
      ],
      "parameters": {
        "color": 6,
        "width": 320,
        "height": 440,
        "content": "## Get row(s) in sheet\n\n**Step 12:  Read Leads for AI Email Generation\n\nAfter building the list, this node reads all the rows back from the Google Sheet to begin the second phase of the workflow: email personalization.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c018d50c-de9d-4d51-86f3-b180c66f5909",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2680,
        780
      ],
      "parameters": {
        "color": 4,
        "width": 320,
        "height": 440,
        "content": "## IF Node\n\n**Step 13:  Check if Email Is Already Written\n\nThis node checks a simple but critical condition: is the \"Personalised Email\" column for this lead empty?\n\nIt prevents the workflow from overwriting existing emails and wasting OpenAI credits on leads that have already been processed.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "12fc8c2a-3d48-4eaa-904a-c2eef1a06ec2",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3280,
        480
      ],
      "parameters": {
        "color": 3,
        "width": 320,
        "height": 480,
        "content": "## Message a model\" (OpenAI)\n\n**Step 14:   Generate AI-Personalized Email\n\nIf the email column is empty, this node sends the lead's data (company, job title, industry) to OpenAI (GPT-4) with a detailed prompt to craft a hyper-personalized cold email.\n\n\nThis is the core of the outreach automation, creating high-quality, relevant emails at scale."
      },
      "typeVersion": 1
    },
    {
      "id": "22211539-ad4e-4dc2-ac44-ee3fd101b0c0",
      "name": "Sticky Note14",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3920,
        820
      ],
      "parameters": {
        "color": 5,
        "width": 320,
        "height": 480,
        "content": "## Update row in sheet\n\n**Step 15:   Save the AI Email to the Sheet\n\nOnce OpenAI generates the email, this node updates the lead's row in Google Sheets, pasting the new email content into the \"Personalised Email\" column.\n\n\nIt closes the loop, making the lead list fully actionable and ready for sending."
      },
      "typeVersion": 1
    },
    {
      "id": "50bed6ba-c33a-4538-8c1b-9da913b25368",
      "name": "Sticky Note15",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3500,
        1420
      ],
      "parameters": {
        "color": 3,
        "width": 320,
        "height": 320,
        "content": "## Need Help?\n\n\nWe develop tailored workflow to save your 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/"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "3ae843f3-ca7e-41db-83c4-2f7f3c61f3ba",
  "connections": {
    "If": {
      "main": [
        [
          {
            "node": "Message a model",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "No Operation, do nothing",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code": {
      "main": [
        [
          {
            "node": "Append or update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code1": {
      "main": [
        [
          {
            "node": "Code",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Code1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Email": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Get Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Run an Actor": {
      "main": [
        [
          {
            "node": "Get dataset items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Message a model": {
      "main": [
        [
          {
            "node": "Update row in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Apollo - Get User": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get dataset items": {
      "main": [
        [
          {
            "node": "Apollo - Get Company Details",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet": {
      "main": [
        [
          {
            "node": "If",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Apollo - Get Company Details": {
      "main": [
        [
          {
            "node": "Apollo - Get User",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append or update row in sheet": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Run an Actor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}