This workflow allows you to:
Send approved WhatsApp template messages in bulk
Pull contact data from Google Sheets or CSV upload
Automatically loop through each contact
Track delivery success or failure
Prevent duplicate sending
All powered by n8n and WOZTELL.
It is built for teams that need to send WhatsApp template messages to a contact list for campaigns, outreach, or announcements. Suitable for event organisers, marketing, sales, or agencies managing bulk messaging.
This template sends WhatsApp template messages to a list of contacts stored in:
Google Sheets
or
A CSV file uploaded via n8n form
For each contact, the workflow:
Reads unsent records
Loops through contacts one by one
Sends an approved WhatsApp template
Updates the delivery status in the sheet
Waits briefly before sending the next message
This ensures campaign control and tracking reliability.
Before starting, make sure you have:
An n8n account
A WOZTELL account with WhatsApp channel configured
An approved WhatsApp template in WOZTELL
Google Sheets access or a properly formatted CSV file
Your WhatsApp Business Platform must already be connected inside WOZTELL.
This template includes two possible entry points:
Manual execution using Google Sheets
CSV upload using n8n Form trigger
Both follow the same logic after contact retrieval.
Click “Execute workflow” in n8n. This triggers the bulk sending process.
The Google Sheets node reads rows where the “Sent” column is empty. Only contacts that have not been processed will be selected. This prevents duplicate sending.
Set up Google Sheets credentials following the official n8n documentation.
Make a copy of this sample sheet template, or make sure your sheet includes:
Phone number column
Name column
Sent column
Phone numbers must include country code without symbols.
The Split In Batches node processes contacts one by one. Nothing needs to be set up here.
The “Edit Fields” node prepares the required fields for template sending.
It extracts:
Phone number
Name
Row number
These values will be mapped into WhatsApp template variables. Nothing needs to be set up here.
You must:
Connect your WOZTELL credentials. To generate the access token, follow the step-by-step guide here.
Generate an access token with these permissions:
channel:getBasicInfo
bot:sendResponses
channel:getEnvironmentInfo
channel:getDetails
For the WOZTELL Channel API field, follow this guide to create a new token. If you have already generated a token, you may reuse it.
Select your WhatsApp channel
Select an approved template
Map sheet columns into template variables
After sending, the workflow updates the sheet.
The “Sent” column is marked as:
success
failed
This allows:
Campaign tracking
Delivery auditing
Prevention of duplicate sending
Since you configured the credentials before, all you need to do now is choose the right credential to connect with.
The Wait node pauses briefly before processing the next contact.
This helps to avoid rate limits and maintain WhatsApp quality rating
You can adjust the delay duration as needed.
Instead of Google Sheets, you can upload a CSV file.
The Form Trigger node allows uploading a CSV file containing contact details.
Make a copy of this sample csv template, or make sure your file includes:
Phone number column
Name column
The “Extract from File” node converts CSV rows into structured data items.
Each row becomes one contact for processing.
After extraction, the workflow follows the same loop and sending logic as the Google Sheets version.
This template is intentionally modular. You can extend it in many directions.
Replace the CSV source with other supported inputs such as n8n Form upload, Google Sheets, OneDrive, or Zoho Sheet
Adjust the field mapping logic or add code nodes to match your data schema
Send messages through different WOZTELL channels or multiple sender numbers based on routing rules
Add opt in validation before sending
Schedule automatic campaign execution instead of manual trigger
Add campaign tags or tracking columns