🔓 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

Google Sheets to WhatsApp, personalized outreach at scale

Lisa Granqvist Partner Workflow Automation Expert

Your lead list is in Google Sheets. Your outreach happens in WhatsApp. And somehow you’re still copying names, double-checking numbers, researching each company, then trying to remember who got what message.

This is where Sales Ops starts drowning, but agency owners and growth-minded consultants feel it too. Sheets WhatsApp outreach should not take half your morning. This workflow turns a messy “list + manual effort” routine into a repeatable system that can handle real volume.

You’ll see how the automation pulls leads, enriches them with research, writes personalized messages using AI, and sends (and tracks) WhatsApp outreach without losing control of follow-ups.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Google Sheets to WhatsApp, personalized outreach at scale

The Problem: Personalization Doesn’t Scale in a Spreadsheet

Most outreach starts with good intentions: build a clean list, do a little research, send a thoughtful message. Then reality hits. You need to scrape business info, find a relevant angle, write something that doesn’t sound templated, and actually send it at the right time. Doing that across 50 or 200 leads turns into a week of context switching. Worse, the spreadsheet becomes “kind of accurate” at best, so you end up resending messages or forgetting follow-ups. It’s exhausting, honestly.

The friction compounds once you try to scale.

  • Research lives in tabs, browser history, and random notes, so your messages drift toward generic.
  • Someone updates a row, but the outreach status doesn’t follow, which means you lose track of what was sent.
  • Manual WhatsApp sending slows you down to a crawl and increases mistakes with names, links, and phone formatting.
  • When replies come in, there’s no consistent way to route them, log them, and decide the next step.

The Solution: Google Sheets → Research → WhatsApp, Automatically

This workflow takes your Google Sheets lead list and turns it into a structured outreach pipeline. A sheet update (or a webhook call) kicks things off, then the workflow cleans and validates each lead record so phone numbers, company fields, and locations are consistent. Next, it enriches leads through scraping (via HTTP requests) and uses an AI agent with RAG (retrieval-augmented generation) to write messages that reference real details about the prospect. Finally, the workflow pushes personalized WhatsApp messages through a WAHA integration, while updating your sheet rows so send status and next actions stay visible.

It starts with a trigger from Google Sheets or a webhook. Then research and message generation happen in the background using OpenAI plus your own company docs stored in a vector index (Supabase). Once a message is ready, WhatsApp delivery and ongoing reply handling are automated, so your team can focus on real conversations.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you message 60 leads a week. Manually, you might spend about 5 minutes researching each lead, then another 2 minutes crafting and sending a WhatsApp message, plus a minute updating the sheet. That’s roughly 8 minutes per lead, or about 8 hours weekly. With this workflow, you update or add rows once (maybe 15 minutes total), let scraping and AI run in the background, then review and monitor replies. For many teams that turns “a day of busywork” into “a short daily check-in.”

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets to store leads and outreach status
  • Google Drive for your company docs and sales assets
  • OpenAI API key (get it from the OpenAI API dashboard)

Skill level: Intermediate. You’ll connect accounts, add API keys, and adjust a few message fields and triggers.

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

How It Works

A lead change triggers the workflow. A Google Sheets update trigger, a manual launch, or an incoming webhook starts the run, depending on how you want to operate (scheduled batches, manual pushes, or API-driven).

Lead data gets cleaned and prepared. Code steps sanitize records, normalize fields like location, and update the sheet rows so your pipeline doesn’t slowly rot from inconsistent formatting.

Research and personalization happen automatically. HTTP requests fetch scraping results, then documents from Google Drive are chunked and embedded into Supabase vector indexes. An AI agent uses that context to generate a message that sounds like you actually looked at the prospect.

WhatsApp outreach and reply handling kick in. Messages go out through the WAHA WhatsApp integration, and inbound WhatsApp events can trigger “insight” and “chat intelligence” agents to guide follow-ups and log conversation state.

You can easily modify message tone and qualification rules to match your offer and audience. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Drive Update Trigger

This workflow starts with file updates from Google Drive, so the first step is to configure the drive trigger that watches a specific folder.

  1. Select Drive Update Trigger and set Event to fileUpdated.
  2. Set Trigger On to specificFolder.
  3. Choose the folder in Folder To Watch with the ID value [YOUR_ID].
  4. Credential Required: Connect your googleDriveOAuth2Api credentials.
⚠️ Common Pitfall: Replace every [YOUR_ID] placeholder (folder IDs, document IDs, and API URLs) or the workflow will fail.

Step 2: Connect Google Drive file retrieval

The drive trigger hands off to file discovery and download so files can be processed into the vector index.

  1. Open Locate Drive Files and set Resource to fileFolder with Return All enabled.
  2. Set the folder filter Folder ID to [YOUR_ID] so only the target folder is scanned.
  3. Credential Required: Connect your googleDriveOAuth2Api credentials for Locate Drive Files.
  4. In Download Drive Item, keep Operation set to download and set File ID to {{ $json.id }}.
  5. Credential Required: Connect your googleDriveOAuth2Api credentials for Download Drive Item.

Step 3: Set up document ingestion to Supabase vectors

Downloaded files are chunked, embedded, and inserted into Supabase using the vector index path.

  1. Configure Default Document Loader to use Data Type binary.
  2. Keep Recursive Text Chunker with default settings for chunking.
  3. Set Supabase Vector Index to Mode insert and Table Name documents.
  4. Credential Required: Connect your supabaseApi credentials for Supabase Vector Index.
  5. Ensure OpenAI Embedding Gen is connected as the embedding model for Supabase Vector Index.
  6. Credential Required: Connect your openAiApi credentials for OpenAI Embedding Gen.
Tip: The embedding model nodes are AI sub-nodes; credentials belong on the embedding node itself, not on Supabase Vector Index.

Step 4: Configure lead scraping and Google Sheets output

The manual path allows scraping from Maps and appending lead results to Google Sheets.

  1. In Manual Launch Trigger, leave default settings so you can test the scraping path manually.
  2. In Assign Location, set lokasi to Bali.
  3. In Maps Scraper, set Method to POST and set URL to [YOUR_ID].
  4. In Maps Scraper, set JSON Body to the provided payload and ensure locationQuery uses {{ $json.lokasi }}.
  5. In Fetch Scrape Result, set URL to [YOUR_ID].
  6. In Append Lead Rows, set Operation to append and Authentication to serviceAccount.
  7. Set Document ID to [YOUR_ID] and Sheet Name to gid=0 in Append Lead Rows.
  8. Credential Required: Connect your googleApi credentials for Append Lead Rows.
⚠️ Common Pitfall: The Maps Scraper, Fetch Scrape Result, and External Request Alpha URLs are placeholders. Replace [YOUR_ID] with real API endpoints.

Step 5: Configure Sheets cleanup and enrichment

Incoming rows from Sheets are sanitized and updated with enriched fields and lead scoring.

  1. In Incoming Webhook, set Path to [YOUR_ID] if you plan to enable this trigger.
  2. Open Retrieve Lead Sheet and select the Google Sheet via Document ID and Sheet Name.
  3. Credential Required: Connect your googleApi credentials for Retrieve Lead Sheet.
  4. Review Sanitize Records to confirm it outputs cleaned fields like lead_score, lead_quality, and business_summary.
  5. In Update Sheet Rows, set Operation to update and Authentication to serviceAccount.
  6. Ensure the row_number mapping uses {{ $('Retrieve Lead Sheet').item.json.row_number }} and confirm column mappings match your sheet headers.
  7. Credential Required: Connect your googleApi credentials for Update Sheet Rows.

Step 6: Set up Sheets update trigger to Supabase lead index

When the sheet updates, a vector payload is prepared, validated, and inserted into the lead index.

  1. Configure Sheets Update Trigger to watch Sheet Name gid=0 and Document ID [YOUR_ID].
  2. Credential Required: Connect your googleSheetsTriggerOAuth2Api credentials for Sheets Update Trigger.
  3. In Prepare Vector Payload, keep the existing JS so it outputs business_summary and metadata fields.
  4. In Validate Existing Entries, keep the unique ID logic based on ${data.Title}_${data.Address}.
  5. Set Supabase Lead Index to Mode insert and Table Name restaurant_leads.
  6. Credential Required: Connect your supabaseApi credentials for Supabase Lead Index.
  7. Ensure OpenAI Embedding Gen 3 is attached as the embedding model to Supabase Lead Index.
  8. Credential Required: Connect your openAiApi credentials for OpenAI Embedding Gen 3.

Step 7: Configure chat intelligence and memory

The chat layer provides intelligence using company documents and restaurant leads, with memory and reranking.

  1. Keep Chat Message Trigger enabled to receive incoming chat messages.
  2. In Chat Intelligence Agent, review the system instructions to enforce the mandatory tool usage.
  3. Ensure Chat Language Model is connected to Chat Intelligence Agent and uses model gpt-4o-mini.
  4. Credential Required: Connect your openAiApi credentials for Chat Language Model.
  5. Enable memory by keeping Chat History Memory with Context Window Length set to 20.
  6. Credential Required: Connect your postgres credentials for Chat History Memory.
Tip: The tools Company Docs Rerank Tool and Leads Rerank Tool are used by Chat Intelligence Agent—ensure their embeddings and rerankers are configured.

Step 8: Configure tools, embeddings, and rerankers for AI retrieval

This workflow uses multiple Supabase vector tools and OpenAI embedding nodes. Configure them by function rather than individually.

  1. For all Supabase vector tools (Company Docs Tool, Leads Tool, Company Docs Rerank Tool, Leads Rerank Tool), set Mode to retrieve-as-tool and Top K to 20.
  2. Credential Required: Connect your supabaseApi credentials for all vector tool nodes.
  3. Ensure embeddings are connected: OpenAI Embedding Gen 2 to Company Docs Tool, OpenAI Embedding Gen 4 to Leads Tool, OpenAI Embedding Gen 5 to Company Docs Rerank Tool, and OpenAI Embedding Gen 6 to Leads Rerank Tool.
  4. Credential Required: Connect your openAiApi credentials for all OpenAI embedding nodes.
  5. Set both Cohere Reranker A and Cohere Reranker B to Model Name rerank-multilingual-v3.0.
  6. Credential Required: Connect your cohereApi credentials for Cohere Reranker A and Cohere Reranker B.

Step 9: Configure insight agent and WhatsApp memory (optional path)

An alternate conversational path uses WhatsApp trigger, memory, and an agent configured for business intelligence.

  1. If you enable WAHA Incoming Trigger, connect it to Insight Agent as shown in the workflow.
  2. In Insight Agent, keep Text set to {{ $json.payload._data.key.id }} and Prompt Type set to define.
  3. Confirm OpenAI Chat Engine is connected as the language model for Insight Agent.
  4. Credential Required: Connect your openAiApi credentials for OpenAI Chat Engine.
  5. Set Postgres Conversation Memory Session Key to {{ $('WAHA Incoming Trigger').item.json.payload._data.key.remoteJid }} and Context Window Length to 20.
  6. Credential Required: Connect your postgres credentials for Postgres Conversation Memory.

Step 10: Test and Activate Your Workflow

Test each path to confirm data flows correctly, then activate for production use.

  1. Click Execute Workflow and trigger Manual Launch Trigger to test the scrape flow from Assign LocationMaps ScraperAppend Lead Rows.
  2. Update a file in the watched Drive folder to verify Drive Update TriggerLocate Drive FilesDownload Drive Item runs and data is inserted into Supabase Vector Index.
  3. Edit a row in your sheet to confirm Sheets Update TriggerPrepare Vector PayloadSupabase Lead Index inserts vectors.
  4. Send a test chat to Chat Message Trigger and verify Chat Intelligence Agent responds with sources from Company Docs Rerank Tool or Leads Rerank Tool.
  5. When successful, toggle the workflow to Active for production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Sheets credentials can expire or need specific permissions. If things break, check the n8n Credentials page and the sharing settings on the spreadsheet 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 Sheets WhatsApp outreach automation?

About 60–90 minutes if your accounts and API keys are ready.

Do I need coding skills to automate Sheets-to-WhatsApp outreach?

No. You’ll mostly connect credentials and edit a few fields. The included code steps are already built, so you’re not writing scripts from scratch.

Is n8n free to use for this Sheets WhatsApp outreach 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 (often a few dollars a month at modest volume) plus any scraping or WhatsApp provider costs.

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 Sheets WhatsApp outreach workflow for different industries and message styles?

Yes, but plan to spend a bit of time here. The fastest win is updating the prompts used by the Insight Agent and Chat Intelligence Agent so the tone matches your offer (more direct for agencies, more consultative for B2B services). You can also change what gets retrieved from your vector index by swapping the company docs sources in Supabase and adjusting the chunking/embedding steps. Common customizations include a “qualification first” message, a pricing-first script, and industry-specific proof points pulled from different Drive folders.

Why is my WhatsApp connection failing in this workflow?

Usually it’s credentials or session state in WAHA. Check the WAHA instance logs and confirm the account is still connected, then re-save the WAHA credentials in n8n. If messages send sometimes but not always, it can also be rate limiting from your WhatsApp setup or invalid phone formatting coming from Google Sheets (missing country code is the classic).

How many leads can this Sheets WhatsApp outreach automation handle?

If you self-host, it’s mostly limited by your server and third-party rate limits, so hundreds of leads per day is realistic with batching.

Is this Sheets WhatsApp outreach automation better than using Zapier or Make?

For AI-heavy outreach like this, n8n is usually the better fit because you can run complex logic (batching, branching, retries, memory) without fighting platform limits. Self-hosting also matters when you’re indexing documents, storing conversation memory, and running lots of executions. Zapier or Make can still work for a simpler “new row → send message” flow, and they can feel quicker at first. But once you add scraping, RAG, and reply handling, it gets expensive and brittle. If you’re on the fence, Talk to an automation expert and map your exact volume and channels.

Once this is running, your spreadsheet stops being a to-do list and becomes a system. The workflow handles the repetitive outreach mechanics so you can spend your time where it actually matters: replies.

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