{
  "nodes": [
    {
      "id": "3bf17efb-5a0d-4c2d-8835-a21978514ebc",
      "name": "Client data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -480,
        640
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $json.emailAddress }}",
            "Country": "={{ $json.countryName }}",
            "Website": "={{ $json.company.mainDomain }}",
            "Headline": "={{ $json.headline }}",
            "Keywords": "={{ ($json.company?.searchKeywords ?? []).slice(0, 31) }}\n",
            "LinkedIn": "={{ $json.linkedInProfileUrl }}",
            "cityName": "={{ $json.cityName }}",
            "Full Name": "={{ $json.firstName }} {{ $json.lastName }}",
            "stateName": "={{ $json.stateName }}",
            "Company Name": "={{ $json.company.companyName }}",
            "company/cityName": "={{ $json.company.cityName }}",
            "company/businessIndustry": "={{ $json.company.businessIndustry }}"
          },
          "schema": [
            {
              "id": "Full Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Full Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Headline",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Headline",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "LinkedIn",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "LinkedIn",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cityName",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "cityName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "stateName",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "stateName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "company/cityName",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "company/cityName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Country",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Country",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Company Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Website",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Website",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "company/businessIndustry",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "company/businessIndustry",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Keywords",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Keywords",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "icebreaker",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "icebreaker",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "intro",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "intro",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "value_prop",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "value_prop",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 747242514,
          "cachedResultUrl": "https://docs.google.com/YOUR_AWS_SECRET_KEY_HERE_AuYTFbB1FkTtkz31ZI/edit#gid=747242514",
          "cachedResultName": "Videography"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID",
          "cachedResultUrl": "https://docs.google.com/YOUR_AWS_SECRET_KEY_HERE_AuYTFbB1FkTtkz31ZI/edit?usp=drivesdk",
          "cachedResultName": "Leads"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "8456d4ee-f74a-48a7-8a9a-e876c357394e",
      "name": "Increment Page Number",
      "type": "n8n-nodes-base.code",
      "position": [
        -16,
        816
      ],
      "parameters": {
        "jsCode": "const next = $item(0).$node[\"Loop over one by one\"].json.number + 1;\n      return [{ json: { number: next } }];"
      },
      "typeVersion": 2
    },
    {
      "id": "d500268c-dbcd-418c-af22-786958e7dd3e",
      "name": "Generate Page Numbers",
      "type": "n8n-nodes-base.code",
      "position": [
        -1200,
        624
      ],
      "parameters": {
        "jsCode": "// Code (generator) node \u2013 start at 1 end at 50\nconst start  = 1;      // starting at 1\nconst end    = 50;     // total you want to reach\nreturn Array.from({ length: end - start + 1 }, (_, i) => ({\n  json: { number: start + i },\n}));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "e3d5ba17-44e5-4932-a5a4-2d6c9b88cecd",
      "name": "Loop over one by one",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -912,
        624
      ],
      "parameters": {
        "options": {
          "reset": true
        }
      },
      "typeVersion": 3
    },
    {
      "id": "fc2046ea-0117-4d01-b0cf-504c9386d1aa",
      "name": "Apollo Scraper",
      "type": "n8n-nodes-base.httpRequest",
      "maxTries": 5,
      "position": [
        -672,
        640
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/acts/dx0856bVYoGUkmXAo/run-sync-get-dataset-items",
        "method": "POST",
        "options": {
          "redirect": {
            "redirect": {}
          }
        },
        "jsonBody": "={\n    \"count\": 10,\n    \"excludeGuessedEmails\": false,\n    \"excludeNoEmails\": false,\n    \"getEmails\": true,\n    \"searchUrl\": \"LINK\",\n    \"startPage\": {{ $json.number }}\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer YOUR_TOKEN_HERE"
            }
          ]
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2,
      "alwaysOutputData": false
    },
    {
      "id": "1982b7f5-f39d-440c-b52b-735a56ae1456",
      "name": "Domain scrape",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        -256,
        640
      ],
      "parameters": {
        "url": "={{$json.Website.startsWith('http') ? $json.Website : 'https://' + $json.Website}}",
        "options": {}
      },
      "typeVersion": 4.2,
      "alwaysOutputData": false
    },
    {
      "id": "d373cd33-19f7-4d7d-b494-b66f193a92c9",
      "name": "Summarising prospect data",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -912,
        816
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini",
          "cachedResultName": "GPT-4.1-MINI"
        },
        "options": {
          "temperature": 0.6
        },
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "=You are a highly intelligent ai assistant"
            },
            {
              "content": "=Your task is to take as input a large amount of unstructured data on a client\u2019s website and profile, and condense it into a JSON output in this exact format:\n\n{\n  \"WebsiteContext\":   \"<Concise key points about the company\u2019s website or write \\\"no content\\\">\",\n  \"PersonContext\":    \"<Concise key points about the individual or write \\\"no content\\\">\",\n  \"UniqueAngles\":     \"<One or two brief, distinct outreach angles derived from the above contexts>\"\n}\n\nYou\u2019ll receive all necessary data as a single unstructured string. Parse it and emit only the JSON object.\n\nRules:\n- Focus on a small number of high-impact points per block for crafting an icebreaker.\n- WebsiteContext: 1\u20134 sentences on key company/website insights.\n- PersonContext: 1\u20134 sentences on key personal/professional insights.\n- UniqueAngles: 1\u20134 laconic hooks or unique angles that tie WebsiteContext and PersonContext into a personalized outreach idea.\n- Keep everything short and Spartan\u2014no em dashes \n- No extra fluff, only valuable information that can be effectively used for cold outreach to the client.  \n"
            },
            {
              "content": "=Website Scrape:\n{{ $('Domain scrape').item.json.data.length > 5000 ? $('Domain scrape').item.json.data.slice(0, 5000) : $('Domain scrape').item.json.data }}\n\nPersonal Data Scrape:\n{{ $('Client data').item.json['Full Name'] }}         // Full Name\n{{ $('Client data').item.json.cityName }}             // City (person)\n{{ $('Client data').item.json.stateName }}            // State\n{{ $('Client data').item.json.Country }}              // Country\n{{ $('Client data').item.json.Headline }}             // Headline\n{{ $('Client data').item.json[\"company/businessIndustry\"] }}  // Industry\n{{ $('Client data').item.json.Keywords }}             // Keywords\n{{ $('Client data').item.json[\"Company Name\"] }}       // Organization Name\n\n"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "3f7ee48d-b748-4a0f-b5e8-b8812c32d68c",
      "name": "Creating detailed email",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -576,
        816
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "GPT-4.1"
        },
        "options": {
          "temperature": 0.6
        },
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "=You are a highly intelligent, expert email copywriter. Your task is to generate a JSON object containing the building blocks of a personalized cold email. Prioritise warmth and clarity over cleverness. \n- Write like someone who respects the founder\u2019s time and isn\u2019t trying too hard, like a familiar discussion with a friend. \n- NO em dashes (\u2014) should be used at all in any of the bodies.\n"
            },
            {
              "content": "=Given the prospects context, produce a 5-block JSON object for a personalized, Spartan-style email. Directed towards operators and decision-makers at fitness studios, recovery clinics, and alternative therapy chains.\n\nUse the following template exactly:\n\n{\n  \"icebreaker\":    \"<Short, familiar opener that implies shared interest or belief, using context. Designed to hook the reader>\",\n  \"intro\":           \"<Start with: 'I know this is a bit out of the blue, but I work almost exclusively with [wellness/health/etc.] brands. My company, COMPANY NAME' Use the context to personalize naturally.>\",\n  \"value_prop\":    \"<One-sentence tie between our services and their industry or goals.>\"\n}\nMy Business context (for reference only, don\u2019t copy it verbatim):\nPUT YOUR COMPANY INFO HERE\n\n\nPersonalization rules:\n- Tailor blocks where possible around the context\u2014show homework, not box-ticking.\n- Tone: Spartan, laconic, familiar. first-person familiar voice, like you\u2019re talking over coffee. \n- NO em dashes (\u2014) should be used at all in any of the bodies.\n- Imply shared interests or goals where possible, even if it means stretching the truth a little. Avoid obvious lies like claiming you grew up in their hometown, which might invite follow-up questions.\n- Shorten company/brand names (e.g. \u201cAMS\u201d not \u201cAMS Professional Services\u201d, \"Mood Journal\" not \"The Mood Journal\") and locations (e.g. \u201cLA,\u201d \u201cSan Fran\u201d).\n- Don\u2019t be overly specific\u2014leave room for follow-up.\n- If no context is given just write general fitness studios, recovery clinics, and alternative therapy chains info."
            },
            {
              "role": "assistant",
              "content": "={\n  \"icebreaker\": \"Hey Jamie, love how Breathe brings neuroscience into everyday life in such a clear way. Got a quick idea that might click with what you're doing.\",\n  \"intro\": \"My company, COMPANY, blends smart digital marketing, standout brand design, and hands-on consulting to spark real growth. We've helped wellness brands turn expert content into something that clicks and converts, without losing the science.\",\n  \"value_prop\": \"We turn credibility into clean, scalable growth. It never needs to feel complicated.\"\n}\n"
            },
            {
              "role": "assistant",
              "content": "={\n  \"icebreaker\": \"Hey Morgan, ThriveLink\u2019s way of making therapy feel more real and less clinical really stuck with me. I\u2019ve got an idea that might fit right in.\",\n  \"intro\": \"My company, COMPANY, blends data-backed marketing, bold brand design, and hands-on strategy to help wellness brands stand out and scale up. We focus on building clarity and trust, whether you\u2019re speaking to individuals or partners.\",\n  \"value_prop\": \"We help wellness brands grow by making complex ideas feel clear, human and engaging.\"\n}\n"
            },
            {
              "content": "=Use this information for context:\nWebsite Context:\n{{ $json.message.content.WebsiteContext }}\n\nPerson Context:\n{{ $json.message.content.PersonContext}}\n\nUnique Angles:\n{{ $json.message.content.UniqueAngles }}"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "44d27e87-7c00-4825-9395-97ca00fe1e59",
      "name": "Add email data to sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -224,
        816
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $('Client data').item.json.Email }}",
            "intro": "={{ $json.message.content.intro }}",
            "icebreaker": "={{ $json.message.content.icebreaker }}",
            "value_prop": "={{ $json.message.content.value_prop }}"
          },
          "schema": [
            {
              "id": "Full Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Full Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Headline",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Headline",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "LinkedIn",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "LinkedIn",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "cityName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "cityName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "stateName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "stateName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "company/cityName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "company/cityName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Country",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Country",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Company Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Company Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Website",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Website",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "company/businessIndustry",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "company/businessIndustry",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Keywords",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Keywords",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "icebreaker",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "icebreaker",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "intro",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "intro",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "value_prop",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "value_prop",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 747242514,
          "cachedResultUrl": "https://docs.google.com/YOUR_AWS_SECRET_KEY_HERE_AuYTFbB1FkTtkz31ZI/edit#gid=747242514",
          "cachedResultName": "Videography"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "YOUR_GOOGLE_SHEETS_DOCUMENT_ID",
          "cachedResultUrl": "https://docs.google.com/YOUR_AWS_SECRET_KEY_HERE_AuYTFbB1FkTtkz31ZI/edit?usp=drivesdk",
          "cachedResultName": "Leads"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "14cead03-9780-4312-8952-b558c24eb2d2",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -784,
        304
      ],
      "parameters": {
        "color": 5,
        "width": 528,
        "height": 304,
        "content": "## Workflow Overview\n\nThis workflow takes the client's personal data and website to create a personalized cold outreach email.\n\n### Instructions\n\n1. Modify the **Apollo Scraper** node with your **Apify API token** and **Apollo link**.\n2. Modify the **Google Sheets** nodes.\n3. Modify the **OpenAI** nodes with your **credentials**, **company name**, and **target sector**.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "c589ed00-f246-4262-a35c-0f9297870dfe",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1440,
        624
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "45d96539-5a2d-4aa9-b8da-cf39997b19d3",
      "name": "Website HTML to Markdown",
      "type": "n8n-nodes-base.markdown",
      "onError": "continueRegularOutput",
      "position": [
        -32,
        640
      ],
      "parameters": {
        "html": "={{ $json.data }}",
        "options": {}
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Client data": {
      "main": [
        [
          {
            "node": "Domain scrape",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Domain scrape": {
      "main": [
        [
          {
            "node": "Website HTML to Markdown",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Apollo Scraper": {
      "main": [
        [
          {
            "node": "Client data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop over one by one": {
      "main": [
        [],
        [
          {
            "node": "Apollo Scraper",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Page Numbers": {
      "main": [
        [
          {
            "node": "Loop over one by one",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Increment Page Number": {
      "main": [
        [
          {
            "node": "Loop over one by one",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add email data to sheet": {
      "main": [
        [
          {
            "node": "Increment Page Number",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Creating detailed email": {
      "main": [
        [
          {
            "node": "Add email data to sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Website HTML to Markdown": {
      "main": [
        [
          {
            "node": "Summarising prospect data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Summarising prospect data": {
      "main": [
        [
          {
            "node": "Creating detailed email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Generate Page Numbers",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}