{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "6d70f7f7-d6b4-4a0d-9172-f123aa488bd6",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -352,
        -160
      ],
      "parameters": {
        "options": {},
        "batchSize": 10
      },
      "typeVersion": 3
    },
    {
      "id": "ae8944db-7440-431b-ab31-ba7aa13253e6",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -576,
        -160
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "82e6f93a-c560-4e50-a46c-9941bb7c1010",
      "name": "Client data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -128,
        -176
      ],
      "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": "First Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "First 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
            }
          ],
          "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": "1jJF92Zt9GUJJBL2il7PnyjFP_AuYTFbB1FkTtkz31ZI",
          "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": "5aff8102-e39f-4d0b-8ec5-dc85322addd1",
      "name": "Domain scrape",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        128,
        -176
      ],
      "parameters": {
        "url": "={{$json.Website.startsWith('http') ? $json.Website : 'https://' + $json.Website}}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "3c6a3532-d86b-4330-afb9-1782449d75aa",
      "name": "Creating icebreaker",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        32,
        16
      ],
      "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 Icebreaker. 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": "=Your task is to take, as input, a bunch of information about a prospect, and then generate a customized email icebreaker to imply that the rest of my communique is personalized.\nYou'll return your icebreakers in the following JSON format:\n{\"icebreaker\": \"Hey {name}, Love {thing}, also a fan of {otherThing}, thought you might want to hear about this.\"}\n\nRules:\n- Write in a Spartan/laconic tone of voice.\n- Keep things short.\n- Don't be overly specific\n- Don't use em dashes under any circumstances.\n- Imply familiarity wherever possible- i.e if you see an opportunity to imply that I like the same things, believe the same things, or want the same things as they do, go for it\n- Shorten the company name wherever possible (say \"XYZ\" instead of \"XYZ Agency\"). Say things like \"Love AMS\" instead of \"Love AMS Professional Services\"\n- shorten locations as well whenever you see fit, for example, \"LA\" instead of Los Angeles, San Fran instead of San Francisco\n\n\n"
            },
            {
              "role": "assistant",
              "content": "= {\"icebreaker\": \"Hey Lina, Love how Vault\u2019s handling ops at scale, also big on clean design, thought you might want to hear about this.\"}"
            },
            {
              "role": "assistant",
              "content": "=  {\"icebreaker\": \"Hey Maya, Love Alto\u2019s content game, run a tight brand engine too, thought you might want to hear about this.\"}"
            },
            {
              "role": "assistant",
              "content": "={\"icebreaker\": \"Hey Tom, Love Fuse\u2019s take on AI in retail, seen the same gaps, thought you might want to hear about this.\"}"
            },
            {
              "role": "assistant",
              "content": "={\"icebreaker\": \"Hey Leo, Love Sway\u2019s onboarding flow, built similar loops before, thought you might want to hear about this.\"}"
            },
            {
              "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": "c7d01d36-57e6-4aaa-980b-7d6e705cd6e2",
      "name": "Add icebreaker to sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        448,
        16
      ],
      "parameters": {
        "columns": {
          "value": {
            "Email": "={{ $('Client data').item.json.Email }}",
            "icebreaker": "={{ $json.message.content.icebreaker }}"
          },
          "schema": [
            {
              "id": "Full Name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Full Name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "First Name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "First 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,
              "removed": false,
              "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
            }
          ],
          "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": "1jJF92Zt9GUJJBL2il7PnyjFP_AuYTFbB1FkTtkz31ZI",
          "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": "4b2a96d3-7ee6-4f4f-89d0-634f58540955",
      "name": "Summarising prospect data",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        -320,
        16
      ],
      "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": "7667cbed-9bb0-47b8-8241-5964720c30f9",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -176,
        -496
      ],
      "parameters": {
        "color": 4,
        "width": 368,
        "height": 224,
        "content": "## Workflow Overview\n\nThis workflow takes the client's personal data and website to create a personalized cold outreach icebreaker.\n\n### Instructions\n* Modify Google Sheets nodes to run.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "fa39d62d-f934-4df7-a24c-9c87a64db039",
      "name": "removing HTML from website scrape",
      "type": "n8n-nodes-base.markdown",
      "onError": "continueRegularOutput",
      "position": [
        352,
        -176
      ],
      "parameters": {
        "html": "={{ $json.data }}",
        "options": {}
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Client data": {
      "main": [
        [
          {
            "node": "Domain scrape",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Domain scrape": {
      "main": [
        [
          {
            "node": "removing HTML from website scrape",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Client data",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Creating icebreaker": {
      "main": [
        [
          {
            "node": "Add icebreaker to sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add icebreaker to sheet": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Summarising prospect data": {
      "main": [
        [
          {
            "node": "Creating icebreaker",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "removing HTML from website scrape": {
      "main": [
        [
          {
            "node": "Summarising prospect data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}