How I Automate Personalized Cold Email Icebreakers (Using and n8n). Which Increased My Reply Rate To 10%

Cold outreach is broken. Here’s how to use AI to scrape insights, personalize icebreakers, and skyrocket your reply rates to 5–10%

Ever stared at a blank email draft, wondering how to start a cold outreach that doesn’t sound like every other generic “I hope this email finds you well” message flooding your prospect’s inbox?

You’re not alone.

Last month, I watched a friend send 1,000 cold emails using a basic template. His reply rate? A devastating 0.3%. That’s 3 people out of 1,000 who even bothered to respond. Meanwhile, I’m consistently hitting 5-10% reply rates with cold emails that make prospects think I’ve spent hours researching their business personally.

The difference? While everyone else is playing the numbers game, I built a system that creates deeply personalized, multi-line icebreakers that feel like they’re written by someone who actually cares about their business.

Today, I’m going to show you exactly how to build this system from scratch. Fair warning: this isn’t your typical “send 10,000 generic emails and pray” approach. We’re going deep – scraping websites, extracting meaningful insights, and using AI to craft icebreakers so personalized your prospects will assume you’ve done hours of research.

 Cold Email Icebreakers

Get N8n Access For Free for 14 Days – ” N8n Free

Why Most Personalized Cold Email Icebreakers Falls Flat ?

Here’s the brutal truth: most people think personalization means throwing in a company name or mentioning they saw someone on LinkedIn. That’s not personalization – that’s mail merge with extra steps.

Real personalization means understanding what makes a business tick, what challenges they face, and what they’re proud of. It means crafting an opening that makes the recipient think, “Wow, this person actually gets what we’re doing here.”

The system I’m about to show you does exactly that. It scrapes entire websites, analyzes multiple pages, and creates icebreakers that reference specific, non-obvious details about their business. The kind of details that only come from actually diving deep into what they do.

What We’re Building: The Complete System Overview

Before we dive into the technical build, let me show you exactly what this system accomplishes:

Input : Leads scraped from Apollo.io and stored in a Google Sheet

Output: Personalized multi-line icebreakers like this:

         “Hey Katie, love how KTL Graphics makes it easy to filter by acreage –          

        also a fan of your property update email option. Wanted to run 

        something by you…”

Notice how specific that is? The system found details about acreage filtering and email updates – things a human would only notice after carefully exploring the website.

Here’s how the magic happens:

  1. Lead Extraction: I’ve already scraped my personalized leads using Apify and Apollo
AD 4nXekpM9X1nKde0CvP TsI6 f
  1. Website Discovery: Extract and clean website URLs from the lead data
  2. Deep Website Scraping: Crawl multiple pages on each prospect’s website
  3. Content Analysis: Use AI to summarize each page into meaningful insights
  4. Icebreaker Generation: Combine all insights into personalized opening lines
  5. Data Organization: Automatically populate a Google Sheet ready for your email campaigns

Step 1: Filtering for Quality Leads

  • Manual Trigger – “When clicking ‘Test workflow’
  • Google Sheet – Operation “Get Row(s)”
AD 4nXdiFgpKgu7tkopjJOXLsk2VeydkaLTkpcQZ1BKvQh m6zemaL6gSMxUCPo9

Add a Filter node to clean up your data. We only want leads that have:

  • A valid email address (obviously)
  • A company website URL (essential for personalization)

Set up two conditions:

  1. Website URL field exists and is not null
  2. Email field exists and is not null
AD 4nXcvw4JT

Step 2 : The Deep Website Scraping Process

Now for the secret sauce. Instead of just visiting the homepage like most people do, we’re going to scrape the entire website structure.

  1. Add an HTTP Request node configured with:
  • Error handling: Continue on error (some websites will block scraping)
  • URL: The website URL from each lead
  • Redirects: Follow redirects with max 21 redirects
AD 4nXfJi2N4xESMgD6NirFuXes heTx2dcJUuJVVNnAWOkTOVwjWkSYCMSqZHtLhZo4Jd MPpFGrMbZyA4LkFwGWy3gP7DtW2nKuhDSRJYuWHmM2 T27 iq nS4FoT1O4moiTi3lMCPTe1Xm0fI1fOa9p 6wH2CRfk?key=wfX9pVPEd192sndIJ7Fiwg

This gives us the raw HTML of each homepage. But we’re not stopping there.

  1. Add edit field 
  •  Fields to set 

Field – html > string > {{ $json.data }}

AD 4nXe0ZKh5yRkbr6Jp82k0v06d9jFtL21kQzB32VU7hlwb42hespFI9QhY12xUMYUBG0seU LtuLFoLLVTW
  1. Add Loop over item 

Batch Size – 1

AD 4nXfJfNYUQcgrphfd99bGMP0lRSlIC9FU6I054kI2edDYvJVDyyMpyzSn8TfDqpr4Qe4BvqLkEpPf4AHX48IPuHL0PxAAqfObwbnzFWTDwXSg2ipPhL26VY6o2JvAEaNYxFKQ78j6luBVPTQkNiQYTiaaOY ADQ?key=wfX9pVPEd192sndIJ7Fiwg

This ensures that only one record is processed at a time.

     5. Add code node 

          Code :

return [{

  json: {

    html: $json.html.toString()

  }

}];

AD 4nXdbFQUFECzKLzWa6UhCovtBeEg6HPeq7eUyRbQFICsUmQvHjuTrt8bXEPf0AsVPvh4XBe4epYZeCyfPKoeEo3PLDP7LeAwsedSpt7SOQJ aBp W332ZdzpzREFgNnqFh048RvQBjIw 4scMKVdA93mcAowleA?key=wfX9pVPEd192sndIJ7Fiwg
  1. Add an HTML Extractor node to pull out every link on the page:
  • CSS Selector: a
  • Attribute: href
  • Return: Array
  • Options: Trim values and clean text
AD 4nXfzvKsdc75p75q5bsarXH SHz7qmKYxZ52Sx3ZAdG66GTh2XcLCdWV fJ4WT6 23t6jNhSojFLiONRTLhAXIHnklfpQQ

Why extract all the links?

 Because a homepage only tells part of the story. The About page, Services page, Blog posts – these contain the golden details that make for compelling personalization.

Step 3 : Processing and Filtering Website Links

  1.  Add another Edit Field Node

  Drag and drop first_name , last_name , email , website_url , links 

  from the input

  1. Add Split Out Node
  •  Fields To Split Out – links
  • Include – No other Fields 
AD 4nXdfoUUixrYKBoELMTQi62nv9HK nrthMS6rc536EIkMGHGnE fkXnXOrs3O05HwPA cIuQKjzPes57kGVrJ7avJgp98rsnrBcu98x73sCW VIqRB
  1. Add Filter Node
  • {{ $json.links }} > starts with > /
AD 4nXeyESRbs4fF hL8czeKhTlDyAlCkagmIqPTtAei6sxjbH9S3Ic4IKRlVPFfzH3sj9iYJHOjqjYsgKT qJLeOZNIB8BbHzK65qxli27iIwP4hfDwQp6rYogJZ8mtWNgRWohQde 8INtv4zanNyuNYVobWnInjHc?key=wfX9pVPEd192sndIJ7Fiwg
  1. Add another Code node 

 Code : 

const items = $input.all();

const updatedItems = items.map((item) => {

  const link = item?.json?.links;

  if (typeof link === “string”) {

    // Case: starts with “/” → already relative

    if (link.startsWith(“/”)) {

      item.json.links = link;

    } 

    // Case: absolute URL (http or https)

    else if (link.startsWith(“http://”) || link.startsWith(“https://”)) {

      try {

        const url = new URL(link);

        let path = url.pathname;

        // Strip trailing slash unless root “/”

        if (path !== “/” && path.endsWith(“/”)) {

          path = path.slice(0, -1);

        }

        item.json.links = path || “/”;

      } catch (e) {

        // On parse error, keep original

        item.json.links = link;

      }

    }

    // Fallback: not relative or absolute, leave as-is

    else {

      item.json.links = link;

    }

  }

  return item;

});

return updatedItems;

AD 4nXdEfR7FUasp tVb1 8mkroY

Step 4 : The Content Extraction Loop

Here’s where n8n’s power really shines. We need to visit each filtered URL and extract its content

  1. Add Remove Duplicate URLs node
  2. Add Limit node 
  • Max items – 3
  • Keep – First Items
AD 4nXe4cYTA9GTBDS SsufPc9Qn3k 9puHNxXpFEHmVwRlQowPCGN4xzdcJY3crEOfcB CIyD41kzTzkWjaXJy9xug bqBuTN8YpEtmdCZ
  1. For each link, add another HTTP Request node that:
AD 4nXfCwirHScIeXLn8qH3G teoLmko3TOoj dzt Hd6aOFhW8uf1Zi0zf2v7r IemMIcC QE3qilCbFh96O2Fnb03b QmvaOAS0gz0c7rLEzu8pAqiQbkp0fASFeDc5AKPUVoE9ho ObNrdXVs3XaYGMzTChS7FA?key=wfX9pVPEd192sndIJ7Fiwg
  • Concatenates the base website URL with the relative link
  • Fetches the full page content
  • Handles errors gracefully (some pages will fail)
  1. Follow this with an HTML to Markdown conversion node

Markdown is much more efficient for AI processing – it strips out all the formatting overhead while preserving the actual content.

  •  Mode – HTML to Markdown
  • HTML –  {{ $json.data ? $json.data : “<div>empty</div>” }}
  • Destination Key – Data
AD 4nXepXCIDGF7av2Ad6vEG OF0mSS4RnFkxXZDmJthjhlGQCn3GRkIxwTrCWVAJoubBG4zoESbI
Step 5 : AI-Powered Content Analysis

Now we have raw website content, but it needs to be analyzed and summarized.

  •  Add an AI Agent  node with this system prompt:

You’re a helpful, intelligent website scraping assistant.

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.

Return in this JSON format:

{“abstract”:”your abstract goes here”}

Rules:

– Your extract should be comprehensive—similar level of detail as an abstract to a published paper.

– Use a straightforward, spartan tone of voice.

– If it’s empty, just say “no content”.

AD 4nXcLQgkUCv9 j7SqXqfnNtoJZhc7s7SteGXh4c5NtfwE7cAaOoV8L0TOYb3TM8yOeo zP2PYWni0EKFYnketGUN3kWphu32IdFXKcaoh0n1rtj79OGXiUCEkHAyadgUtoOeyVqS9zZj8Nex8i0PkKXW7db XA?key=wfX9pVPEd192sndIJ7Fiwg

This step transforms raw HTML into meaningful business intelligence about each website page.

Step 6 : Aggregating Insights for Personalization

After analyzing individual pages, we need to combine all insights about each prospect into a single, comprehensive view.

  • Add an Aggregate node that collects all the page abstracts for each lead. 
AD 4nXc9PKPvejE7 EEseEYpX 4iyo0SGRGEVNVPUfb432CArX5UWu57A7e0qyMvl6wI71bRbNhf0rXZVOeJMnoJHA4xYw97CbSyNUsbWNry9FVbXUGmuLvXJWqKerUzlpCEOV4kH4zyP0FGrdszC3CgOs6 Isu32g?key=wfX9pVPEd192sndIJ7Fiwg

This gives you a complete picture of what each business does, what they’re proud of, and what makes them unique.

Step 7 : The Icebreaker Generation Magic

This is where everything comes together.

  •  Add a final AI Agent node with a sophisticated prompt that turns website insights into compelling icebreakers.

Here’s the framework I use:

We just scraped a series of web pages for a business called . Your task is to take their summaries and turn them into catchy, personalized openers for a cold email campaign to imply that the rest of the campaign is personalized.

You’ll return your icebreakers in the following JSON format:

{“icebreaker”:”Hey {name}. Love {thing}—also doing/like/a fan of {otherThing}. Wanted to run something by you.\n\nI hope you’ll forgive me, but I creeped you/your site quite a bit, and know that {anotherThing} is important to you guys (or at least I’m assuming this given the focus on {fourthThing}). 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 demo website). Costs just a few cents to run, very high converting, and I think it’s in line with {someImpliedBeliefTheyHave}”}

Rules:

– Write in a spartan/laconic tone of voice.

– Make sure to use the above format when constructing your icebreakers. We wrote it this way on purpose.

– Shorten the company name wherever possible (say, “XYZ” instead of “XYZ Agency”). More examples: “Love AMS” instead of “Love AMS Professional Services”, “Love Mayo” instead of “Love Mayo Inc.”, etc.

– Do the same with locations. “San Fran” instead of “San Francisco”, “BC” instead of “British Columbia”, etc.

– For your variables, focus on small, non-obvious things to paraphrase. The idea is to make people think we *really* dove deep into their website, so don’t use something obvious. Do not say cookie-cutter stuff like “Love your website!” or “Love your take on marketing!”.

AD 4nXf6WbP PamXzpWxhrOMVMROZgxTplNBOQ iLgQCvtRK0Clja2 hNyl3Dll8EzJ6Mu2y7q9hjq v0RpI8yvdUI6iislYBZY7HnVyJlYaSKyrSwRwrjJaVYtb5Yqcc6a7fUfT9Zs4ifKN4abhEpQfSisnKOjYCl0?key=wfX9pVPEd192sndIJ7Fiwg

Step 8 : Automated Data Export

Finally, add a Google Sheets – Append Row node that automatically populates your “Leads” tab with:

  • First name, last name, email
  • Company website and headline
  • Location and phone (if available)
  • The personalized multi-line icebreaker (our golden output)

AD 4nXd4h3JTj5cecAcEkzGdpRvBDQ5dQOhoV0Ijm0LJOrrglXD5Q86Ie9qCBGOC9u6QctOPU ydKIWc0AH9JSfTN5odmNmCyvHxt5CPeGM6VDpWH F5cfwK0sX5TRXk8PGaqmfaBljalnQRlQiZl7Kyf3IGrI1sPw?key=wfX9pVPEd192sndIJ7Fiwg

Connect the loop back to itself so the system processes every lead automatically.

Scaling Your Cold Email Success

Once your icebreakers are generated, the real work begins. Here’s how I use this system:

Email Platform: Import directly into tools like Instantly.ai or Lemlist Campaign Structure: Use the icebreaker as your opening, then transition to your value proposition
Follow-up Sequences: Reference the same research in follow-up emails for consistency A/B Testing: Try different icebreaker styles to optimize performance

Final Thoughts: Your Cold Email Revolution Starts Now

While your competitors are still sending “Hope this email finds you well” messages to unimpressed inboxes, you’ll be delivering research-driven icebreakers that make prospects think you’ve personally studied their business for hours.

In today’s oversaturated email landscape, generic outreach isn’t just ineffective—it’s business suicide. The companies winning new clients are those that demonstrate genuine understanding from the very first line.

The system is built, the tools are accessible, and the automation runs while you sleep. What took manual researchers hours per prospect now happens in minutes, at scale, with deeper insights than most humans would even catch.

Ready to transform your cold outreach

Fire up n8n, grab your Apify account, and start building. Your prospects are tired of being treated like database entries—show them you see their business for what it really is.

The only question left: What will you do when your reply rates jump from 1% to 10%?

10 Comments

  1. Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?

Leave a Reply

Your email address will not be published. Required fields are marked *