🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

Apify + Google Sheets: personalized cold emails ready

Lisa Granqvist Partner Workflow Automation Expert

Cold outreach falls apart in the same place every time. You have leads, but turning raw profiles into emails that feel “written for them” eats hours and your team starts cutting corners.

This Apify email automation hits sales reps first, honestly. But marketers building outbound campaigns and agency owners doing lead gen for clients feel it too. The outcome is simple: personalized email building blocks show up inside Google Sheets, ready to send.

You’ll see how the workflow pulls leads, scrapes the company site, uses AI to write the key parts of an email, then updates your spreadsheet so outreach stays consistent at scale.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Apify + Google Sheets: personalized cold emails ready

The Problem: Personalization Doesn’t Scale Manually

Personalized outreach sounds great until you have to do it 50 times in a row. You copy a lead’s name, skim a LinkedIn headline, open their company website, try to find something interesting, then write an icebreaker that doesn’t sound like a template. After the fifth one, quality slips. After the twentieth, you’re basically guessing. And if multiple people touch the same lead list, you also get mismatched tone, missing fields, and messy Sheets that can’t be trusted when it’s time to send.

The friction compounds. Here’s where it usually breaks down.

  • You spend about 10 minutes per lead just hunting for a “personal” angle across websites and profiles.
  • The same lead gets researched twice because notes live in DMs, docs, and browser tabs.
  • Outreach voice drifts, which means more edits and slower approvals.
  • Your sheet stays “half-filled,” so sending days get delayed while someone cleans it up.

The Solution: Apify → AI Personalization → Google Sheets

This workflow turns lead research and first-draft personalization into a repeatable system. It starts by processing leads in batches (so you can run 50 at a time without babysitting it), then pulls enriched lead data from Apify using an HTTP request. For each lead, it looks up your client or campaign context in Google Sheets, then crawls the prospect’s company website to capture real on-page language. That messy website content gets converted into cleaner text, and OpenAI summarizes what matters. Finally, a second AI step writes the parts you actually need for cold outreach: a tailored icebreaker, a relevant intro, and a value proposition aligned to your offer. Those fields are written back into Google Sheets by matching on the Email column.

The workflow begins when you execute it in n8n. From there, Apify supplies lead data, the company website adds specificity, and AI turns that context into usable copy blocks. Your Google Sheet becomes the single source of truth for outreach-ready personalization.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you want to personalize outreach for 50 new leads. Manually, you might spend about 10 minutes researching each company plus another 5 minutes writing an icebreaker and value prop, which is roughly 12 hours of work. With this workflow, you click execute, let it process those 50 leads in batches, and your sheet gets populated automatically as it goes. Even if the run takes about an hour end-to-end, your active time drops to a few minutes, and the list is ready for review and sending.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Apify to fetch and enrich lead data.
  • Google Sheets to store leads and email blocks.
  • OpenAI API key (get it from your OpenAI dashboard)

Skill level: Intermediate. You’ll connect credentials, map Sheet columns, and paste an API token into one HTTP header.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A manual or scheduled run kicks it off. In the current version, you click “Execute workflow” in n8n, then it generates a list of page indexes so it knows how many batches of leads to pull.

Lead data comes in from Apify. The workflow calls Apify (via HTTP Request) using your token and the search URL you provide (often an Apollo link). Results are processed in batches so you don’t overload anything downstream.

Your campaign context is pulled from Google Sheets, then the prospect’s website is crawled. This is the part most people skip manually because it’s tedious. The workflow grabs site content, converts it into cleaner text, and passes it into an AI summary so the next step has something useful to work with.

AI writes the email components, and the sheet gets updated. OpenAI produces an icebreaker, intro, and value_prop, then n8n appends or updates the row by matching the Email column. When you open the sheet later, the “blank” personalization fields are filled in.

You can easily modify the batch size to process more (or fewer) leads per run based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Manual Trigger

This workflow starts manually, then generates page indices to drive the Apollo data fetch loop.

  1. Add and open Manual Execution Start to serve as the trigger.
  2. Connect Manual Execution Start to Build Page Index List.
  3. In Build Page Index List, keep the JavaScript code as provided to generate indices from 1 to 50.

Step 2: Connect Google Sheets

These nodes store lead data and update email copy fields in your spreadsheet.

  1. Open Client Records Sheet and select the spreadsheet and sheet: Document [YOUR_ID], Sheet [YOUR_ID].
  2. Credential Required: Connect your googleSheetsOAuth2Api credentials in Client Records Sheet.
  3. Verify the column mappings in Client Records Sheet, such as Email set to {{ $json.emailAddress }} and Website set to {{ $json.company.mainDomain }}.
  4. Open Append Email Fields and confirm Operation is set to appendOrUpdate.
  5. Credential Required: Connect your googleSheetsOAuth2Api credentials in Append Email Fields.

Step 3: Set Up Data Ingestion and Batching

This section batches page indices and requests Apollo data for each page.

  1. Open Batch Iterator and keep the default batch behavior; it will iterate through the index list from Build Page Index List.
  2. Open Apollo Data Fetch and set URL to https://api.apify.com/v2/acts/dx0856bVYoGUkmXAo/run-sync-get-dataset-items.
  3. Set Method to POST and Body to the JSON expression:
    ={ "count": 10, "excludeGuessedEmails": false, "excludeNoEmails": false, "getEmails": true, "searchUrl": "LINK", "startPage": {{ $json.number }} }
  4. Update the Authorization header value from Bearer [CONFIGURE_YOUR_TOKEN] to your Apify token.
  5. Ensure Apollo Data Fetch connects to Client Records Sheet, which then connects to Website Crawl in sequence.

⚠️ Common Pitfall: If searchUrl is left as LINK in Apollo Data Fetch, no results will be returned. Replace it with your actual Apollo search URL.

Step 4: Set Up Website Parsing and Summarization

These nodes crawl the prospect’s website, convert content, and summarize it using AI.

  1. In Website Crawl, set URL to {{ $json.Website.startsWith('http') ? $json.Website : 'https://' + $json.Website }} to normalize domain inputs.
  2. Open Convert HTML to Markdown and set HTML to {{ $json.data }}.
  3. Open Prospect Summary AI and confirm Model is gpt-4.1-mini with Temperature set to 0.6.
  4. Credential Required: Connect your openAiApi credentials in Prospect Summary AI.
  5. Verify the system prompt and the input block that includes website and personal data, including the expression {{ $('Website Crawl').item.json.data.length > 5000 ? $('Website Crawl').item.json.data.slice(0, 5000) : $('Website Crawl').item.json.data }}.

Step 5: Compose Email Blocks and Update the Sheet

This section generates personalized email blocks and writes them back to the sheet.

  1. Open Compose Email Blocks and confirm Model is gpt-4.1 with Temperature set to 0.6.
  2. Credential Required: Connect your openAiApi credentials in Compose Email Blocks.
  3. Ensure the final context message uses the expressions {{ $json.message.content.WebsiteContext }}, {{ $json.message.content.PersonContext}}, and {{ $json.message.content.UniqueAngles }}.
  4. In Append Email Fields, confirm column mappings for intro, icebreaker, and value_prop reference {{ $json.message.content.intro }}, {{ $json.message.content.icebreaker }}, and {{ $json.message.content.value_prop }}.
  5. Connect Append Email Fields to Advance Page Index, then back to Batch Iterator to continue the loop.

Tip: Advance Page Index uses $item(0).$node["Batch Iterator"].json.number + 1 to increment pages. Keep this intact to ensure the loop progresses correctly.

Step 6: Test and Activate Your Workflow

Run a manual test to ensure data flows from Apollo to Google Sheets and the AI-generated email blocks are appended.

  1. Click Execute Workflow on Manual Execution Start to run a manual test.
  2. Confirm that Client Records Sheet receives new rows and that Append Email Fields updates intro, icebreaker, and value_prop.
  3. Check the output of Prospect Summary AI and Compose Email Blocks for valid JSON fields.
  4. If successful, save the workflow and leave it set for manual execution or change the trigger later as needed.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Apify credentials can expire or need specific permissions. If things break, check the Authorization header in the “Apollo Data Fetch” request first.
  • If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
  • Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.

Frequently Asked Questions

How long does it take to set up this Apify email automation?

About an hour if your Sheet and API keys are ready.

Do I need coding skills to automate Apify email automation?

No. You’ll mostly paste API keys, pick the right Google Sheet, and confirm the column mapping.

Is n8n free to use for this Apify email automation workflow?

Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in OpenAI API usage (usually a few cents per lead, depending on model and website length) and your Apify plan.

Where can I host n8n to run this automation?

Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.

Can I customize this Apify email automation workflow for my offer and tone?

Yes, and you should. Update the prompt inside the “Compose Email Blocks” OpenAI node (this is where you replace “PUT YOUR COMPANY INFO HERE” with your context). Common tweaks include changing the target industry, limiting the icebreaker to one sentence, adding a soft CTA, and enforcing your brand voice so emails don’t sound generic.

Why is my Apify connection failing in this workflow?

Usually it’s a bad token or the Authorization header is missing the “Bearer” format. Re-copy your Apify API key, update the “Apollo Data Fetch” node header, then run a single batch to test. If it still fails, the searchUrl you pasted may require access (private Apollo list) or Apify is rate-limiting your account. One more thing: if Apify returns a different field structure than expected, your Google Sheets lookup may appear “broken” even though Apify technically succeeded.

How many leads can this Apify email automation handle?

If you self-host n8n, there’s no fixed execution limit (it mostly depends on your server and API limits). The workflow is already designed to process about 50 leads per run, and you can raise or lower that number safely.

Is this Apify email automation better than using Zapier or Make?

It depends, but n8n is a strong fit here. You’re doing batching, conditional logic, multiple HTTP calls, and two AI steps, which is where Zapier scenarios can get expensive and Make can get fiddly to maintain. n8n also gives you the option to self-host, so high-volume outbound doesn’t turn into a task-billing problem. If you only need “new row in Sheets → send an email,” Zapier or Make is fine. But if you want repeatable enrichment, website scraping, and structured AI outputs saved back to the sheet, n8n is typically the smoother path. Talk to an automation expert if you want a quick recommendation for your stack.

Once this is running, your spreadsheet stops being a messy lead dump and starts acting like an outreach-ready system. Set it up once, then spend your time reviewing and sending, not researching the same basics over and over.

Need Help Setting This Up?

Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal