Google Sheets + WhatsApp, verify leads before outreach
Your WhatsApp outreach shouldn’t feel like gambling. But if you’re working off a scraped list or old CRM exports, you already know the pain: dead numbers, wasted sends, and a spreadsheet full of “maybe” contacts.
This is where WhatsApp lead verification saves you. Marketers trying to hit weekly targets feel it first. A small business owner following up on inbound leads feels it too. Even support teams doing proactive check-ins get burned by bad data.
This workflow connects Google Sheets and WhatsApp verification, automatically labeling each number as verified or unverified before you message anyone. You’ll see how it works, what you need, and what results to expect.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + WhatsApp, verify leads before outreach
flowchart LR
subgraph sg0["Trigger Every 10 Minute Flow"]
direction LR
n0@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n1@{ icon: "mdi:cog", form: "rounded", label: "Wait", pos: "b", h: 48 }
n2@{ icon: "mdi:cog", form: "rounded", label: "Limit", pos: "b", h: 48 }
n3@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n4@{ icon: "mdi:database", form: "rounded", label: "Fetch All Pending Contacts f..", pos: "b", h: 48 }
n5@{ icon: "mdi:database", form: "rounded", label: "Change State of Rows in Chec..", pos: "b", h: 48 }
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Set Status Verified"]
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Set Status Unverified"]
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Clean WhatsApp Number"]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Verify WhatsApp Number Using.."]
n10@{ icon: "mdi:play-circle", form: "rounded", label: "Trigger Every 10 Minute", pos: "b", h: 48 }
n3 --> n6
n3 --> n7
n1 --> n0
n2 --> n0
n0 --> n8
n6 --> n5
n8 --> n9
n7 --> n5
n10 --> n4
n5 --> n1
n9 --> n3
n4 --> n2
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n10 trigger
class n3 decision
class n4,n5 database
class n9 api
class n6,n7,n8 code
classDef customIcon fill:none,stroke:none
class n6,n7,n8,n9 customIcon
The Problem: Messaging Leads That Can’t Reply
Outreach usually starts in a spreadsheet. Someone exported leads, someone else enriched them, and now you’re staring at a “WhatsApp No” column hoping it’s usable. Then the real mess begins. Numbers come in with spaces, plus signs, brackets, or random text. Some are landlines. Others are simply not on WhatsApp. You only discover that after you’ve spent time personalizing a message, sending it, and then wondering why replies are ice-cold. It’s not just the time. It’s the doubt that creeps in every time a campaign underperforms.
It adds up fast. Here’s where it breaks down in day-to-day operations.
- You end up writing messages for contacts that were never reachable on WhatsApp in the first place.
- Phone numbers aren’t in a consistent format, so even “good” leads fail because the number is malformed.
- No one trusts the sheet, so people double-check rows manually, which slows outreach to a crawl.
- Campaign reporting becomes a guess because “sent” doesn’t mean “deliverable,” and the sheet doesn’t tell the truth.
The Solution: Verify WhatsApp Numbers Inside Google Sheets
This n8n workflow turns your Google Sheet into a self-cleaning outreach queue. On a schedule (commonly every 10 minutes), it looks for rows where the Status column is set to pending. Each number gets sanitized first, which means it strips out non-digits so the API call doesn’t fail on formatting. Then n8n checks WhatsApp registration using the Rapiwa verification endpoint. If the number is verified, the workflow marks it clearly in your sheet and can optionally send a message. If the number is not verified, it skips outreach and updates the row so your team doesn’t touch it again. Batch processing and short waits are built in, so you can run it continuously without hammering the API.
The workflow starts with a scheduled trigger and pulls your pending contacts from Google Sheets. It verifies one contact at a time in controlled batches using an HTTP request to Rapiwa, then writes the result back to the same row. After that, it pauses briefly and continues until it hits your run limit.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you import 500 new leads each week into a Google Sheet. Manually checking WhatsApp registration is slow and annoying, even if you spend only about 1 minute per lead, that’s roughly 8 hours of pure verification work. With this workflow, you set Status = pending and let it run every 10 minutes, processing up to 200 rows per cycle with a short 3-second pause between checks. Your “work” becomes a quick review of the Verification column, which usually takes a few minutes.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for the lead list and status columns.
- Rapiwa API to verify WhatsApp registration via HTTP.
- Rapiwa Bearer token (get it from your Rapiwa dashboard).
Skill level: Beginner. You’ll connect Google Sheets, paste an API key, and match a few column names.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A scheduled check kicks it off. Every 5–10 minutes (10 is common), n8n wakes up and looks for new work, so you don’t need to remember to “run” anything.
Pending leads are pulled from Google Sheets. The workflow reads rows where your Status column is pending, then caps how many it will touch in one run, which keeps things stable when you add a big list.
Numbers get cleaned and verified. Each row is processed in a batch loop. n8n sanitizes the WhatsApp number (digits only), sends it to Rapiwa using an HTTP Request, then routes the result through an If condition so verified and unverified leads get treated differently.
Your sheet becomes the source of truth. n8n writes back to Google Sheets, updating Verification (verified/unverified) and Status (sent/not sent). A short wait between items reduces the chances of throttling or temporary blocks.
You can easily modify the schedule frequency to match your inbound volume based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Scheduled Trigger
This workflow runs every 10 minutes to fetch and validate WhatsApp numbers on a schedule.
- Add the Scheduled 10-Min Trigger node as your workflow trigger.
- Set the schedule rule to run every
10minutes (field: minutes, interval:10). - Connect Scheduled 10-Min Trigger to Retrieve Pending Contacts.
Step 2: Connect Google Sheets
This step pulls rows where WhatsApp numbers are pending validation.
- Open Retrieve Pending Contacts and select your Google Sheets Document and Sheet (e.g.,
Contacts FileandContacts Sheet). - In Filters, set lookupColumn to
WA Checkedto target unprocessed rows. - Credential Required: Connect your
googleSheetsOAuth2Apicredentials in Retrieve Pending Contacts. - Connect Retrieve Pending Contacts to Cap Item Count.
Step 3: Set Up Batch Processing and Throttling
This controls how many rows are processed and ensures the workflow iterates in manageable batches.
- In Cap Item Count, set Max Items to
200. - Connect Cap Item Count to Batch Iterator to split rows into batches.
- Ensure Pause Interval has Amount set to
3to pause between batch cycles. - Connect Update Sheet Status to Pause Interval, and Pause Interval back to Batch Iterator to continue processing.
Step 4: Set Up WhatsApp Number Sanitization and Verification Call
This step cleans the WhatsApp number and calls the verification API.
- Connect the second output of Batch Iterator to Sanitize WA Number.
- Confirm Sanitize WA Number uses the provided JavaScript to strip non-digits from
WhatsApp No. - Open Rapiwa Verification Call and set URL to
=https://app.rapiwa.com/api/verify-whatsappand Method toPOST. - Enable Send Query and set query parameter number to
{{ $json['WhatsApp No'] }}. - Credential Required: Connect your
httpBearerAuthcredentials in Rapiwa Verification Call. - Connect Sanitize WA Number to Rapiwa Verification Call.
WhatsApp No contains spaces or special characters, the API may reject it. Ensure Sanitize WA Number runs before the request.Step 5: Configure Verification Routing and Sheet Updates
The response is evaluated and the sheet is updated with Verified or Unverified status.
- In Verification Branch, keep the condition set to
{{ $json.data.exists }}equalstrue. - Connect Rapiwa Verification Call to Verification Branch.
- Connect the true output to Mark Verified Flag, and the false output to Mark Unverified Flag.
- Verify Mark Verified Flag returns
return { txt: "Verified" };and Mark Unverified Flag returnsreturn { txt: "Unverified" };. - In Update Sheet Status, set Operation to
updateand map: - Set row_number to
{{ $('Batch Iterator').item.json.row_number }}, WhatsApp No to{{ $('Sanitize WA Number').item.json['WhatsApp No'] }}, and Verified/Unverified to{{ $json.txt }}. - Set WA Checked to
Checked. - Connect both Mark Verified Flag and Mark Unverified Flag to Update Sheet Status.
googleSheetsOAuth2Api credentials before running.Step 6: Test and Activate Your Workflow
Run a manual test to confirm rows are updated and status values are written correctly.
- Click Execute Workflow to run a manual test from Scheduled 10-Min Trigger.
- Verify that Retrieve Pending Contacts returns rows with empty or unchecked
WA Checked. - Confirm that Rapiwa Verification Call returns a response containing
data.existsand that Verification Branch routes correctly. - Check your Google Sheet to ensure WA Checked is updated to
Checkedand Verified/Unverified reflectsVerifiedorUnverified. - Toggle the workflow to Active for scheduled 10-minute processing in production.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the Google connection in n8n’s Credentials section 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.
- Rapiwa can rate-limit you if you verify too aggressively. If verifications start failing, reduce your max items per run and increase the delay between checks.
Frequently Asked Questions
About 30 minutes if your Google Sheet is already formatted.
No. You’ll mostly connect accounts and paste your Rapiwa token into n8n credentials.
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 Rapiwa API usage costs from your provider plan.
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.
Yes, and it’s a common tweak. After the verification check, add (or enable) a send-message HTTP Request on the verified path, then leave the unverified path as “skip + update sheet.” Most teams also customize the Status values (pending, sent, not sent) and adjust the Wait time to be more conservative when sending.
Usually it’s an invalid or expired Bearer token in n8n credentials, so regenerate it in Rapiwa and update the credential. It can also fail if the request body isn’t sending the exact column you think it is (double-check the “WhatsApp No” header). If you’re verifying too many rows too quickly, rate limits can show up as intermittent errors, so slow the batch down.
Practically, hundreds per hour on a small setup, because the workflow intentionally pauses a few seconds between checks.
For this use case, n8n is usually the better fit because you can do batching, delays, and branching logic without fighting plan limits. You also get a self-hosting option, which matters if you’re running verification every 10 minutes all day. Zapier or Make can work, but multi-step looping often gets expensive and a bit awkward. Frankly, the biggest reason teams switch is control: you can cap items, tune pacing, and write back to the same sheet cleanly. If you want help choosing, Talk to an automation expert.
Your sheet stays clean, your outreach stays focused, and you stop spending good effort on bad numbers. Set it once, then let verification run quietly in the background.
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.