WhatsApp number verify & confirmation system with Rapiwa API and Google Sheets

Go to Workflow
451 views
Built by SpaGreen Creative SpaGreen Creative
Created on June 15, 2026

Description

WhatsApp Number Verify & Confirmation System with Rapiwa API and Google Sheets
Who is this for?
This n8n workflow makes it easy to verify WhatsApp numbers submitted through a form. When someone fills out the form, the automation kicks in—capturing the data via a webhook, checking the WhatsApp number using the Rapiwa API, and sending a confirmation message if the number is valid. All submissions, whether verified or not, are logged into a Google Sheet with a clear status.

It’s a great solution for businesses, marketers, or developers who need a reliable way to verify leads, manage event signups, or onboard customers using WhatsApp.

How it works?
This n8n automation listens for form submissions via a webhook, validates the provided WhatsApp number using the Rapiwa API, sends a confirmation message if the number is verified, and then appends the submission data to a Google Sheet, marking each entry as verified or unverified.

Features
Webhook Trigger**: Captures form submissions via HTTP POST
Data Cleaning**: Formats and sanitizes the WhatsApp number
Rapiwa API Integration**: Checks if the number is registered on WhatsApp
Conditional Messaging**: Sends confirmation messages only to verified WhatsApp users
Google Sheets Integration**: Appends all submissions with a validity status
Auto Timestamping**: Adds the submission date in YYYY-MM-DD format
Throttling Support**: Built-in delay to avoid hitting API or sheet rate limits
Separation of Verified/Unverified**: Distinct handling for both types of entries

Nodes Used in the Workflow
Webhook**
Format Webhook Response Data** (Code)
Loop Over Items** (Split In Batches)
Cleane Number** (Code)
check valid whatsapp number** (HTTP Request)
If** (Conditional)
Send Message Using Rapiwa**
verified append row in sheet** (Google Sheets)
unverified append row in sheet** (Google Sheets)
Wait1**

How to set up?
Webhook

Add a Webhook node to the canvas.
Set HTTP Method to POST.
Copy the Webhook URL path (/a9b6a936-e5f2-4xxxxxxxxxe0a970d5).
In your frontend form or app, make a POST request to:
The request body should include:
{
"business_name": "ABC Corp",
"location": "New York",
"whatsapp": "+1 234-567-8901",
"email": "[email protected]",
"name": "John Doe"
}

Format Webhook Response Data

Add a Code node after the Webhook node.
Use this JavaScript code:
const result = $input.all().map(item => {
const body = item.json.body || {};
const submitted_date = new Date().toISOString().split('T')[0];

return {
business_name: body.business_name,
location: body.location,
whatsapp: body.whatsapp,
email: body.email,
name: body.name,
submitted_date: submitted_date
};
});
return result;

Loop Over Items

Insert a SplitInBatches node after the data formatting.
Set the Batch Size to a reasonable number (e.g. 1 or 10).
This is useful for processing multiple submissions at once, especially if your webhook receives arrays of entries.

Note: If you expect only one submission at a time, it still helps future-proof your workflow.

Cleane Number

Add a Code node named Cleane Number.
Paste the following JavaScript:
const items = $input.all();
const updatedItems = items.map((item) => {
const waNo = item?.json["whatsapp"];
const waNoStr = typeof waNo === 'string' ? waNo : (waNo !== undefined && waNo !== null ? String(waNo) : "");
const cleanedNumber = waNoStr.replace(/\D/g, "");
item.json["whatsapp"] = cleanedNumber;
return item;
});
return updatedItems;

Check WhatsApp Number using Rapiwa

Add an HTTP Request node.
Set:
Method: POST
URL: https://app.rapiwa.com/api/verify-whatsapp
Add authentication:
Type: HTTP Bearer
Credentials: Select or create Rapiwa token
In Body Parameters, add:
number: ={{ $json.whatsapp }}
This API call checks if the WhatsApp number exists and is valid.

Expected Output:
{
"success": true,
"data": {
"number": "+88017XXXXXXXX",
"exists": true,
"jid": "88017XXXXXXXXXXXXX",
"message": "✅ Number is on WhatsApp"
}
}

Conditional If Check

Add an If node after the Rapiwa validation.
Configure the condition:
Left Value: ={{ $json.data.exists }}
Operation: true
If true → valid number → go to messaging and append as "verified".
If false → go to unverified sheet directly.

Note: This step branches the flow based on the WhatsApp verification result.

Send WhatsApp Message (Rapiwa)

Add an HTTP Request node under the TRUE branch of the If node.
Set:
Method: POST
URL: https://app.rapiwa.com/api/send-message
Authentication:
Type: HTTP Bearer
Use same Rapiwa token
Body Parameters:
number: ={{ $json.data.phone }}
message_type: text
message:
Hi {{ $('Cleane Number').item.json.name }},
Thanks! Your form has been submitted successfully.

This sends a confirmation message via WhatsApp to the verified number.

Google Sheets – Verified Data

Add a Google Sheets node under the TRUE branch (after the message is sent).
Set:
Operation: Append
Document ID: Choose your connected Google Sheet
Sheet Name: Set to your active sheet (e.g., Sheet1)
Column Mapping:
Business Name: ={{ $('Cleane Number').item.json.business_name }}
Location: ={{ $('Cleane Number').item.json.location }}
WhatsApp Number: ={{ $('Cleane Number').item.json.whatsapp }}
Email : ={{ $('Cleane Number').item.json.email }}
Name: ={{ $('Cleane Number').item.json.name }}
Date: ={{ $('Cleane Number').item.json.submitted_date }}
validity: verified

Use OAuth2 Google Sheets credentials for access.

Note: Make sure the sheet has matching column headers.

Google Sheets – Unverified Data

Add a Google Sheets node under the FALSE branch of the If node.
Use the same settings as the verified node, but set:
validity: unverified

This stores entries with unverified WhatsApp numbers in the same Google Sheet.

Wait Node

Add a Wait node after both Google Sheets nodes.
Set Wait Time:
Value: 2 seconds

This delay prevents API throttling and adds buffer time before processing the next item in the batch.

Google Sheet Column Reference
A Google Sheet formatted like this ➤ Sample Sheet

| Business Name | Location | WhatsApp Number | Email | Name | validity | Date |
|---------------------|--------------------|------------------|----------------------|------------------|------------|------------|
| SpaGreen Creative | Dhaka, Bangladesh | 8801322827799| [email protected] | Abdul Mannan | unverified | 2025-09-14 |
| SpaGreen Creative | Bagladesh | 8801322827799| [email protected]| Abdul Mannan | verified | 2025-09-14 |

> Note: The Email column includes a trailing space. Ensure your column headers match exactly to prevent data misalignment.

How to customize the workflow
Modify confirmation message with your brand tone
Add input validation for missing or malformed fields
Route unverified submissions to a separate spreadsheet or alert channel
Add Slack or email notifications on new verified entries

Notes & Warnings
Ensure your Google Sheets credential has access to the target sheet
Rapiwa requires an active subscription for API access
Monitor Rapiwa API limits and adjust wait time as needed
Keep your webhook URL protected to avoid misuse

Support & Community
WhatsApp Support: Chat Now
Discord: Join SpaGreen Community
Facebook Group: SpaGreen Support
Website: spagreen.net
Developer Portfolio: Codecanyon SpaGreen

Nodes Used (3)

Code
n8n-nodes-base.code
Google Sheets
n8n-nodes-base.googleSheets
HTTP Request
n8n-nodes-base.httpRequest