{
  "id": "8UE60gPbOI3IZxlO",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Deep Multiline Icebreaker",
  "tags": [],
  "nodes": [
    {
      "id": "2a93653a-d4c0-4e20-8efb-b75a3fa98154",
      "name": "Remove Duplicate URLs1",
      "type": "n8n-nodes-base.removeDuplicates",
      "onError": "continueErrorOutput",
      "position": [
        3392,
        1024
      ],
      "parameters": {},
      "typeVersion": 1.1,
      "alwaysOutputData": true
    },
    {
      "id": "dea14f77-9f64-4e4a-a208-57e5270eba61",
      "name": "HTML1",
      "type": "n8n-nodes-base.html",
      "position": [
        2176,
        1248
      ],
      "parameters": {
        "options": {
          "trimValues": true,
          "cleanUpText": true
        },
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "links",
              "attribute": "href",
              "cssSelector": "a",
              "returnArray": true,
              "returnValue": "attribute"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5c9d64e6-0d07-4fca-8216-8cc664e2fc4c",
      "name": "Split Out1",
      "type": "n8n-nodes-base.splitOut",
      "onError": "continueErrorOutput",
      "position": [
        2800,
        1072
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "links"
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "49acd376-e177-484c-8c9f-23599dd633c3",
      "name": "Filter1",
      "type": "n8n-nodes-base.filter",
      "onError": "continueErrorOutput",
      "position": [
        2960,
        1056
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "9a75bc22-f6b3-426e-96df-db5e319e5cd5",
              "operator": {
                "type": "string",
                "operation": "startsWith"
              },
              "leftValue": "={{ $json.links }}",
              "rightValue": "/"
            }
          ]
        }
      },
      "typeVersion": 2.2,
      "alwaysOutputData": true
    },
    {
      "id": "34d4ef7e-746f-438b-a636-cb6919715fbe",
      "name": "Request web page for URL1",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        2992,
        1264
      ],
      "parameters": {
        "url": "={{ $('Loop Over Items1').item.json.website_url }}{{ $json.links }}",
        "options": {}
      },
      "typeVersion": 4.2,
      "alwaysOutputData": false
    },
    {
      "id": "073a6b1b-0a34-4990-9250-eaaf79e38c9b",
      "name": "Markdown1",
      "type": "n8n-nodes-base.markdown",
      "position": [
        3136,
        1264
      ],
      "parameters": {
        "html": "={{ $json.data ? $json.data : \"<div>empty</div>\" }}",
        "options": {}
      },
      "typeVersion": 1
    },
    {
      "id": "13e1d0bd-4861-422e-964d-70ab7603aac1",
      "name": "Summarize Website Page1",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3296,
        1264
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "GPT-4.1"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "You're a helpful, intelligent website scraping assistant."
            },
            {
              "content": "You're provided a Markdown scrape of a website page. Your task is to provide a two-paragraph abstract of what this page is about.\n\nReturn in this JSON format:\n\n{\"abstract\":\"your abstract goes here\"}\n\nRules:\n- Your extract should be comprehensive\u2014similar level of detail as an abstract to a published paper.\n- Use a straightforward, spartan tone of voice.\n- If it's empty, just say \"no content\"."
            },
            {
              "content": "={{ $json.data }}"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.6
    },
    {
      "id": "fb0cde1a-8063-4a9c-89f9-5c8b3d75998e",
      "name": "Limit1",
      "type": "n8n-nodes-base.limit",
      "onError": "continueErrorOutput",
      "position": [
        2800,
        1280
      ],
      "parameters": {
        "maxItems": 3
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "50ec4ccd-1360-4b37-b711-cd9dae971229",
      "name": "Scrape Home1",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        2000,
        1264
      ],
      "parameters": {
        "url": "={{ $json.company_website }}",
        "options": {
          "redirect": {
            "redirect": {}
          },
          "allowUnauthorizedCerts": false
        }
      },
      "executeOnce": false,
      "typeVersion": 4.2,
      "alwaysOutputData": false
    },
    {
      "id": "0f314bb8-4d41-4a9f-823c-ed6d6a936b75",
      "name": "Aggregate1",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        3776,
        1088
      ],
      "parameters": {
        "options": {},
        "fieldsToAggregate": {
          "fieldToAggregate": [
            {
              "fieldToAggregate": "message.content.abstract"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "035c995b-a727-451c-96e7-12e664a2dae2",
      "name": "Generate Multiline Icebreaker1",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        3936,
        1088
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1",
          "cachedResultName": "GPT-4.1"
        },
        "options": {
          "temperature": 0.5
        },
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "You're a helpful, intelligent sales assistant."
            },
            {
              "content": "=We just scraped a series of web pages for a business called {companyName}. Your task is to take their summaries and turn them into personalized full cold email bodies that feel researched and tailored.\n\nYou\u2019ll return each email in the following format:\n\n{\n  \"email\": \"Subject: A quick idea for {companyShort}\\n\\nHi {name},\\n\\nI spent some time on {companyShort}\u2019s site and noticed {specificThing}. It\u2019s a small detail, but it shows how much you care about {valueTheyCareAbout}, which not everyone in {industry/space} prioritizes. I also saw the focus on {secondThing}, which signals a bigger strategy around {insight}.\\n\\nThe reason I\u2019m reaching out: we built {productDescription}, a lightweight but powerful tool that costs just a few cents per run, scales easily, and consistently drives high conversion rates. A few things that set it apart:\\n- {featureOne}\\n- {featureTwo}\\n- {featureThree}\\n\\nIf you\u2019d like a closer look, I\u2019ve shared a link here: {{ $('Details').item.json['Product URL'] }}. My sense is that {companyShort} values {someImpliedBeliefTheyHave}, and this tool aligns directly with that. Would you be open to a short conversation to see if it could fit into what you\u2019re already running?\\n\\nBest regards,\\n{{ $('Details').item.json['Your Name'] }}\"\n}\n\n\n\nRules:\n\nKeep the tone professional, concise, and credible\u2014avoid fluff.\n\nExpand on the product by mentioning cost efficiency, conversion performance, ease of use, and flexibility.\n\nShorten long company names and locations (e.g., \u201cLove AMS\u201d instead of \u201cAMS Professional Services,\u201d \u201cSan Fran\u201d instead of \u201cSan Francisco\u201d).\n\nFocus on non-obvious details from the company summaries\u2014small but meaningful things that imply real research.\n\nAvoid generic praise like \u201cGreat website\u201d or \u201cLove your marketing.\u201d\n\nThe output should always follow the JSON format provided."
            },
            {
              "content": "=Profile: Aina Rakotoarinaly, CEO founder - Maki Agency / Ti'bouffe, Maki agency, outsourcing/offshoring, Antananarivo, Madagascar\n\nWebsite: \n\nThis webpage presents Maki Agency, a professional digital outsourcing company based in Madagascar that specializes in tailored web development, integration, design, SEO, content creation, community management, and more. The agency offers a range of white-label and dedicated resource solutions, targeting businesses that wish to outsource various digital projects. Maki Agency emphasizes its team's versatile technical expertise across major web technologies, including CSS, HTML, JQuery, WordPress, PHP, WooCommerce, Laravel, and Odoo. The company positions itself as an ideal partner for comprehensive digital support, ensuring that client's digital and branding needs are met through experienced personnel and rigorous project management.\\n\\nThe website details the specific services provided, such as graphic and web design (logos, banners, retouching), web integration (landing pages, newsletters, site layouts), development (showcase sites, e-commerce, intranets, bespoke applications, maintenance), content writing (SEO-optimized texts, articles, product sheets, social media posts), search engine optimization (audits, optimizations, submissions), and social media management. The agency highlights its strengths in quality of work, experience, and discretion, especially in white-label arrangements. Visitors are encouraged to contact Maki Agency for new or existing projects, and convenient contact options (phone, QR codes, social media, chat) are provided for initiating discussions.\n\nThis page presents Maki Agency, a Madagascar-based digital agency specializing in web outsourcing and subcontracting services. The agency emphasizes its experience and dedicated team capable of handling diverse digital tasks such as web development, design, SEO, content writing, integration, community management, and maintenance. Maki Agency offers both white-label and dedicated resource solutions for clients seeking to externalize parts of their workflow to a specialized offshore partner. The descriptions highlight the agency's proficiency in popular web technologies, frameworks, and CMS platforms (such as HTML, CSS, PHP, WordPress, Laravel, WooCommerce, and Odoo), as well as its ability to execute projects ranging from landing pages, e-commerce platforms, and intranets to detailed graphic design and content creation.\\n\\nThe site underscores Maki Agency's core values and competitive advantages, such as meticulous attention to detail, experienced professionals, creativity, discretion, and a client-focused approach. It provides detailed breakdowns of service offerings, ranging from graphic materials (logos, flyers, banners), technical integration, app and website development, staff outsourcing (developers, designers, writers), SEO strategies, community management, and digital content production. Contact details and multiple avenues for communication (phone, WhatsApp, Skype, QR codes) are prominently featured, along with encouragements for clients to reach out for consultations or ongoing projects requiring outsourcing. The agency also highlights its longevity and adaptability in the digital sector, supporting clients across various industries and digital competencies"
            },
            {
              "role": "assistant",
              "content": "{\"icebreaker\":\"Hey Aina,\\n\\nLove what you're doing at Maki. Also doing some outsourcing right now, wanted to run something by you.\\n\\nSo I hope you'll forgive me, but I creeped you/Maki quite a bit. I know that discretion is important to you guys (or at least I'm assuming this given the part on your website about white-labelling your services) and I put something together a few months ago that I think could help. To make a long story short, it's an outreach system that uses AI to find people hiring website devs. Then pitches them with templates (actually makes them a white-labelled demo website). Costs just a few cents to run, very high converting, and I think it's in line with Maki's emphasis on scalability.\"}"
            },
            {
              "content": "=Profile: {{ $('Loop Over Items1').item.json.first_name }} {{ $('Loop Over Items1').item.json.last_name }} {{ $('Loop Over Items1').item.json.headline }}\n\nWebsite: {{ $json.abstract.join(\"/n\") }}\n\nProduct Description: {{ $('Details').item.json[\"About your Product\"] }}"
            }
          ]
        },
        "jsonOutput": true
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.6
    },
    {
      "id": "7ba16bbb-a371-4a0a-968e-46fb2b862ec3",
      "name": "Add Row1",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        4240,
        1088
      ],
      "parameters": {
        "columns": {
          "value": {
            "email": "={{ $('Loop Over Items1').item.json.email }}",
            "location": "={{ $('Loop Over Items1').item.json.location }}",
            "last_name": "={{ $('Loop Over Items1').item.json.last_name }}",
            "first_name": "={{ $('Loop Over Items1').item.json.first_name }}",
            "designation": "={{ $('Loop Over Items1').item.json.designation }}",
            "website_url": "={{ $('Loop Over Items1').item.json.website_url }}",
            "phone_number": "={{ JSON.stringify($('Loop Over Items1').item.json.phone_number) }}",
            "Outreach Content": "={{ $json.message.content.email }}"
          },
          "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": "designation",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "designation",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "website_url",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "website_url",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "location",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "phone_number",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "phone_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Outreach Content",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Outreach Content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 488241496,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1X9Y1VR-aqzoEV56jlCsPVMlOt5zCl_MUAvs1TwgnZic/edit#gid=488241496",
          "cachedResultName": "Leads"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1X9Y1VR-aqzoEV56jlCsPVMlOt5zCl_MUAvs1TwgnZic",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1X9Y1VR-aqzoEV56jlCsPVMlOt5zCl_MUAvs1TwgnZic/edit?usp=drivesdk",
          "cachedResultName": "Multiline Icebreaker Generator"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "executeOnce": false,
      "typeVersion": 4.5
    },
    {
      "id": "59a7a5d3-7680-4def-ab43-bf123d4836bb",
      "name": "Edit Fields1",
      "type": "n8n-nodes-base.set",
      "position": [
        2320,
        1248
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "e7737c7a-b5b6-44a1-9f0d-361f0ac7a459",
              "name": "first_name",
              "type": "string",
              "value": "={{ $('Only Websites & Emails1').item.json.first_name }}"
            },
            {
              "id": "e867e03d-60e6-4dee-b1ac-12c517fd8d6c",
              "name": "last_name",
              "type": "string",
              "value": "={{ $('Only Websites & Emails1').item.json.last_name }}"
            },
            {
              "id": "d522ec31-e21e-417e-ab78-f4a49019e544",
              "name": "email",
              "type": "string",
              "value": "={{ $('Only Websites & Emails1').item.json.email }}"
            },
            {
              "id": "8f1ddf8d-7df8-433e-a687-c1a81cced4e1",
              "name": "website_url",
              "type": "string",
              "value": "={{ $('Only Websites & Emails1').item.json.company_website }}"
            },
            {
              "id": "9ccf7442-97cc-4840-aff0-7919e4119027",
              "name": "headline",
              "type": "string",
              "value": "={{ $('Only Websites & Emails1').item.json.headline }}"
            },
            {
              "id": "d2eb1588-87d2-43b2-8356-7bfe754c7707",
              "name": "location",
              "type": "string",
              "value": "={{ $('Only Websites & Emails1').item.json.city }} {{ $('Only Websites & Emails1').item.json.country }}"
            },
            {
              "id": "b9ca5dad-9733-4b62-aeb8-c5675bc423d9",
              "name": "phone_number",
              "type": "string",
              "value": "={{ $('Only Websites & Emails1').item.json.company_phone }}"
            },
            {
              "id": "40fd7130-c65d-4826-a713-ecca24d23b07",
              "name": "links",
              "type": "array",
              "value": "={{ $json.links }}"
            },
            {
              "id": "37e79aa3-4332-42c9-83a5-9a5ec1b35eea",
              "name": "designation",
              "type": "string",
              "value": "={{ $('Only Websites & Emails1').item.json.headline }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d64b8bbe-d85b-4615-9ff4-c490e06f7345",
      "name": "Only Websites & Emails1",
      "type": "n8n-nodes-base.filter",
      "position": [
        1856,
        1264
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "fc44a289-8c50-4682-8b50-c2e63cfc6514",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.company_website }}",
              "rightValue": "/"
            },
            {
              "id": "f8e675e8-99cc-4c30-92e3-e08a659cff9b",
              "operator": {
                "type": "string",
                "operation": "exists",
                "singleValue": true
              },
              "leftValue": "={{ $json.email }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "af62b990-f3f0-4087-b47f-506eec8de33f",
      "name": "Loop Over Items1",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        2592,
        1152
      ],
      "parameters": {
        "options": {}
      },
      "executeOnce": false,
      "typeVersion": 3
    },
    {
      "id": "bd072791-b491-457a-911c-125dc5adc8f0",
      "name": "Code1",
      "type": "n8n-nodes-base.code",
      "onError": "continueErrorOutput",
      "position": [
        3168,
        1040
      ],
      "parameters": {
        "jsCode": "const items = $input.all();\n\nconst updatedItems = items.map((item) => {\n  const link = item?.json?.links;\n\n  if (typeof link === \"string\") {\n    // Case: starts with \"/\" \u2192 already relative\n    if (link.startsWith(\"/\")) {\n      item.json.links = link;\n    } \n    \n    // Case: absolute URL (http or https)\n    else if (link.startsWith(\"http://\") || link.startsWith(\"https://\")) {\n      try {\n        const url = new URL(link);\n        let path = url.pathname;\n\n        // Strip trailing slash unless root \"/\"\n        if (path !== \"/\" && path.endsWith(\"/\")) {\n          path = path.slice(0, -1);\n        }\n\n        item.json.links = path || \"/\";\n      } catch (e) {\n        // On parse error, keep original\n        item.json.links = link;\n      }\n    }\n\n    // Fallback: not relative or absolute, leave as-is\n    else {\n      item.json.links = link;\n    }\n  }\n\n  return item;\n});\n\nreturn updatedItems;"
      },
      "typeVersion": 2,
      "alwaysOutputData": true
    },
    {
      "id": "89a54228-faab-4742-b8fe-fe2a97a5b8a0",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1232,
        816
      ],
      "parameters": {
        "width": 416,
        "height": 800,
        "content": "# Deep Multiline Icebreaker\n\n**Generate research-backed icebreakers with web scraping, OpenAI, and Google Sheets**\n\nTurn scraped company pages into research-backed, multi-line icebreakers and export them to a Google Sheet \u2014 powered by website scraping + GPT summarization \u2192 personalized emails.\n\n## How it works \n1. **Form trigger** \u2014 you submit product details, target designation, location, etc.\n2. **Leads fetch** \u2014 the workflow calls an external leads scraper (Apify act) to retrieve potential contacts.\n3. **Filter & normalize** \u2014 only rows with website + email proceed; links are normalized (relative/absolute handling).\n4. **Scrape & convert** \u2014 homepage and linked pages are fetched and converted to Markdown for clean input.\n5. **Summarize (GPT)** \u2014 each page is summarized into a two-paragraph abstract.\n6. **Aggregate & generate** \u2014 abstracts are aggregated and GPT generates a tailored multi-line icebreaker JSON (subject + body).\n7. **Append to Google Sheets** \u2014 resulting outreach content + lead metadata is appended to your sheet.\n\n## Quick Setup Guide\n\ud83d\udc49 [Demo & Setup Video](https://drive.google.com/file/d/1HpkWNCC0YC_z2Yag41Hf68o54jQTnZJy/view?usp=sharing)\n\ud83d\udc49 [Sheet Template](https://docs.google.com/spreadsheets/d/1X9Y1VR-aqzoEV56jlCsPVMlOt5zCl_MUAvs1TwgnZic/edit?usp=sharing)\n\ud83d\udc49 [Course](https://www.udemy.com/course/n8n-automation-mastery-build-ai-powered-enterprise-ready/?referralCode=2EAE71591D3BEB80F2CC)"
      },
      "typeVersion": 1
    },
    {
      "id": "6768d937-132d-4e3b-8bc9-2dc2ae3e5b7e",
      "name": "Leads Scraper1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        2208,
        1024
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/acts/IoSHqwTR9YGhzccez/run-sync-get-dataset-items",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n    \"contact_job_title\": [\n        \"{{ $json.Designation }}\"\n    ],\n    \"contact_location\": [\n        \"{{ $('Details').item.json.Location.toLowerCase() }}\"\n    ],\n    \"email_status\": [\n        \"validated\"\n    ],\n    \"fetch_count\": 100\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "headerParameters": {
          "parameters": [
            {
              "name": "Authorization",
              "value": "Bearer <API Key>"
            },
            {
              "name": "Accept",
              "value": "application/json"
            }
          ]
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "96b97739-827e-4c50-935c-7f6dc327dd33",
      "name": "Details",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        1840,
        1024
      ],
      "parameters": {
        "options": {},
        "formTitle": "Outreach",
        "formFields": {
          "values": [
            {
              "fieldType": "textarea",
              "fieldLabel": "About your Product",
              "placeholder": "GravityWrite is a comprehensive AI content-generation tool designed to simplify and accelerate content production across multiple formats\u2014text, visuals, and social media. It brings together advanced AI models, a wide array of tool templates, and a focus on brand-consistent output to serve growing audiences of individual creators and business users.",
              "requiredField": true
            },
            {
              "fieldLabel": "Designation",
              "placeholder": "Product Managers",
              "requiredField": true
            },
            {
              "fieldLabel": "Location",
              "placeholder": "India",
              "requiredField": true
            },
            {
              "fieldLabel": "Keywords",
              "placeholder": "Artificial intelligence"
            },
            {
              "fieldLabel": "Your Name",
              "placeholder": "Pratyush",
              "requiredField": true
            },
            {
              "fieldLabel": "Product URL",
              "placeholder": "https://gravitywrite.com/",
              "requiredField": true
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "4aef5f33-86d9-4efc-8337-0942a5d3954f",
      "name": "formatting",
      "type": "n8n-nodes-base.code",
      "position": [
        2000,
        1024
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  let obj = item.json;\n\n  for (let key in obj) {\n    if (typeof obj[key] === \"string\") {\n      // Convert string to lowercase and URL encode\n      obj[key] = encodeURIComponent(obj[key]);\n    }\n  }\n\n  return { json: obj };\n});"
      },
      "typeVersion": 2
    },
    {
      "id": "f2e8d556-67d9-444b-b2a0-ea1b2f9cfb91",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1696,
        832
      ],
      "parameters": {
        "color": 5,
        "width": 864,
        "height": 592,
        "content": "# Input & Lead Collection\n## Collects campaign details via form input and scrapes targeted leads using an external source. Only valid leads with emails and company websites move forward for personalization."
      },
      "typeVersion": 1
    },
    {
      "id": "3f2195cd-b5bf-4e14-8168-ab7df7f87300",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2720,
        832
      ],
      "parameters": {
        "color": 6,
        "width": 896,
        "height": 592,
        "content": "# Website Research & AI Analysis\n## Scrapes company websites, extracts key internal pages, and uses AI to summarize each page. All insights are combined to build deep, research-backed context for outreach."
      },
      "typeVersion": 1
    },
    {
      "id": "07f9b2c9-898a-49ed-8100-ec7bca9dd351",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3680,
        832
      ],
      "parameters": {
        "color": 6,
        "width": 784,
        "height": 592,
        "content": "# Icebreaker Generation & Output\n## Generates personalized multi-line cold email icebreakers using AI and saves the final results to Google Sheets for review and outbound use."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "8baff38f-38cf-43aa-8fc6-c81ea79d5b7c",
  "connections": {
    "Code1": {
      "main": [
        [
          {
            "node": "Remove Duplicate URLs1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML1": {
      "main": [
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit1": {
      "main": [
        [
          {
            "node": "Request web page for URL1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Details": {
      "main": [
        [
          {
            "node": "formatting",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter1": {
      "main": [
        [
          {
            "node": "Code1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add Row1": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Markdown1": {
      "main": [
        [
          {
            "node": "Summarize Website Page1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate1": {
      "main": [
        [
          {
            "node": "Generate Multiline Icebreaker1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out1": {
      "main": [
        [
          {
            "node": "Filter1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "formatting": {
      "main": [
        [
          {
            "node": "Leads Scraper1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields1": {
      "main": [
        [
          {
            "node": "Loop Over Items1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Scrape Home1": {
      "main": [
        [
          {
            "node": "HTML1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Leads Scraper1": {
      "main": [
        [
          {
            "node": "Only Websites & Emails1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items1": {
      "main": [
        [],
        [
          {
            "node": "Split Out1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Remove Duplicate URLs1": {
      "main": [
        [
          {
            "node": "Limit1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Only Websites & Emails1": {
      "main": [
        [
          {
            "node": "Scrape Home1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Summarize Website Page1": {
      "main": [
        [
          {
            "node": "Aggregate1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Request web page for URL1": {
      "main": [
        [
          {
            "node": "Markdown1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Multiline Icebreaker1": {
      "main": [
        [
          {
            "node": "Add Row1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}