WhatsApp Zapier Integration: Webhook Zaps That Work
You want a WhatsApp message to go out when a form is submitted, a payment lands or a deal moves, and you want WhatsApp replies to show up in a sheet, a CRM or Slack. Zapier is where most teams try this first, and searching for WhatsApp Zapier turns up a confusing mix: a Zapier-built app, a dozen vendor apps, and forum threads about webhooks.
This guide sorts out what exists on Zapier for WhatsApp in 2026, which route fits which number, and how to build the two zaps every setup needs: one that sends, one that receives. The examples use Webhooks by Zapier with Tenashi's API, which has no app in the Zapier directory; the pattern works for any HTTP API.
Three ways WhatsApp connects to Zapier
There are three routes, and the first question is which kind of WhatsApp number you have.
| Route | Works with | What you get | Watch out for |
|---|---|---|---|
| Zapier's WhatsApp Business app | A number registered on Meta's WhatsApp Business Platform (Cloud API) | Triggers: New Message Received, Message Status Updated. Actions: Send Freeform Message, Send Media Message, Send Template Message | Premium app; needs a Meta business portfolio, a WhatsApp Business Account and an approved display name |
| A provider's own Zapier app | Numbers hosted by that provider (many BSPs publish one) | Whatever that vendor built | Tied to that vendor's account and pricing |
| Webhooks by Zapier | Any API that speaks HTTP, including Tenashi's | Send with a POST action; receive with a Catch Hook trigger | You map the JSON yourself |
Zapier's WhatsApp Business app connects to Meta's platform directly. Zapier's setup guide lists the requirements: a paid Zapier plan (it is a premium app), a Meta Business Manager account, a WhatsApp Business Account with a registered phone number, an approved display name and opt-in from every recipient. A personal WhatsApp number will not work. Freeform and media messages only go through within 24 hours of the person's last message, and outside that you must use Send Template Message with an approved template.
One line in that guide is worth knowing before you rely on it: Zapier says runs of this app always appear successful, even when the send fails. Confirm delivery from the Message Status Updated trigger or in Meta's tools, not from Zap history.
Webhooks by Zapier is the general-purpose route, for Tenashi and any provider without its own app. It is not on the Free plan either.
Still deciding between Meta's platform and your existing number? The complete guide to the WhatsApp API lays out the trade-offs.
Zap 1: send a WhatsApp message with Webhooks by Zapier
This zap sends from your own WhatsApp number through Tenashi whenever the trigger fires: a form response, a new row, a payment, a booked call.
- Trigger. Pick the app and event, for example a new form response. Make sure it gives you a phone number and something unique, like a response ID.
- Format the phone number. Add Formatter by Zapier, Numbers, Format Phone Number, with E.164 as the output and your default country code. People type numbers in every format, and this step turns
098111 22233into+919811122233. - Action. Add Webhooks by Zapier with the POST event and fill in:
- URL:
https://usetenashi.com/api/v1/messages - Payload Type:
json - Data:
tomapped to the formatted phone,textmapped to your message with the person's name in it - Headers:
Authorizationset toBearer tk_live_...andIdempotency-Keymapped to the response ID
- URL:
What Tenashi receives looks like this:
{
"to": "+919811122233",
"text": "Hi Priya, thanks for booking. Your demo is on Thursday at 4 pm. Reply here if you need to move it."
}
To attach a file, add a Data row named media__url with a public file URL. Zapier builds nested objects from double underscores, so that becomes a media object with a url inside. If you prefer writing the body by hand, the Custom Request event sends your JSON exactly as typed, but Zapier won't validate it for you.
A successful call returns 202 with the message queued; it leaves your number 4 to 12 seconds later and appears in your team's inbox like any other reply. Errors come back with a code such as invalid_phone or new_chat_limit, visible in the step's output in Zap history.
Three details keep this zap healthy:
- The idempotency key. Zapier can replay a step or a whole run. With a key mapped from the trigger's unique ID, a repeat within 24 hours returns the first response and sends nothing.
- Personalise the text. Tenashi pauses the exact same text once it has gone to 5 chats within 10 minutes (
422 send_blocked). A name or date in the message avoids it. - The key's owner. A key acts as the teammate who created it and stops working if they leave (
401 key_owner_removed). Use a long-lived admin's key; anyone who can edit the zap can see it.
The form submissions to WhatsApp guide goes deeper on the form-trigger version, including double opt-in.
Zap 2: receive WhatsApp messages with a Catch Hook
The reverse direction starts with a webhook from Tenashi into Zapier.
- Trigger. Webhooks by Zapier, Catch Hook. Copy the URL Zapier gives you.
- Register it. In Tenashi, open Settings, API and webhooks, add the Zapier URL as an endpoint and subscribe it to
message.received. Zapier URLs work as they are. Use the Send test button so Zapier has a sample to map from. - Filter. Add Filter by Zapier so the zap only continues for what you care about, for example
data.message.chat.typeisdm, or the text contains a keyword. - Action. Send the message wherever it should go: a new sheet row, a CRM note, a Slack post.
The event Zapier catches has the message under data.message: text, sender (phone and name), chat (type and name), conversationId and the number it arrived on. Group messages arrive too.
Zapier answers webhooks with a 200 straight away, so Tenashi's 10-second deadline is never a problem. Deliveries are at least once, though, so if a duplicate would hurt (creating the same deal twice), use a find-or-create action in the destination app rather than a plain create.
Routing those messages to a channel is common enough that we wrote it up separately: WhatsApp to Slack.
Checking the signature inside Zapier
A Catch Hook URL is a secret, but anyone who learns it can post fake events. If that matters, switch the trigger to Catch Raw Hook, which gives you the unparsed body (up to 2 MB) and the request headers, and add a Code by Zapier step running JavaScript:
// Code by Zapier (JavaScript). Input Data: rawBody, timestamp, signature, secret
const crypto = require('crypto');
const expected = crypto
.createHmac('sha256', inputData.secret)
.update(`${inputData.timestamp}.${inputData.rawBody}`)
.digest('hex');
const received = String(inputData.signature || '').replace(/^v1=/, '');
const fresh = Math.abs(Date.now() / 1000 - Number(inputData.timestamp)) < 300;
const valid = fresh && received.length === expected.length &&
crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected));
const event = valid ? JSON.parse(inputData.rawBody) : {};
const msg = (event.data && event.data.message) || {};
output = {
valid,
eventId: event.id || '',
type: event.type || '',
chatType: (msg.chat && msg.chat.type) || '',
conversationId: msg.conversationId || '',
phone: (msg.sender && msg.sender.phone) || '',
name: (msg.sender && msg.sender.name) || '',
text: msg.text || '',
};
Map the raw body, the X-Tenashi-Timestamp and X-Tenashi-Signature headers and your whsec_... secret into Input Data, then Filter on valid being true. Code steps run Node.js with its standard library, which includes crypto. The WhatsApp API webhooks guide explains each header.
Why Meta's webhooks can't point at a Catch Hook
Pasting a Catch Hook URL into Meta's App Dashboard fails. Meta verifies a callback URL by sending a challenge the endpoint must echo back as the response body, and Zapier does not let you customise a webhook's response. Use the WhatsApp Business app's New Message Received trigger instead, or put a small server in front.
Three zaps worth copying
Demo booked, WhatsApp confirmation. Trigger: new booking in your scheduling tool. Formatter: phone to E.164. Webhooks POST: confirmation text with the date, Idempotency-Key set to the booking ID. For a reminder, subtract two hours from the start time with Formatter's date tools, wait with Delay by Zapier (Delay Until), then send a second POST with a different key.
WhatsApp lead to sheet and CRM. Trigger: Catch Hook on message.received. Filter: chat.type is dm. Actions: add a row with phone, name and text; find-or-create the contact in your CRM. The team still answers in the shared inbox; the zap keeps records in step.
Invoice overdue, polite nudge. Trigger: an invoice becomes overdue. Webhooks POST with to, a personalised text and media__url pointing at the PDF.
Mind the volume. Each number can open 50 new chats a day through Tenashi's API (people who have never written to you), then gets 429 new_chat_limit. A zap firing for 500 imported rows at once is the wrong tool. Zapier also counts every action step as a task.
The same patterns carry over to other no-code tools: see WhatsApp with Make, or skip the automation platform entirely and send WhatsApp messages from Google Sheets.
Where Tenashi fits
The zaps that matter most for small teams are confirmations, nudges and lead capture on the number customers already have saved, and the hard part is what happens after the customer replies. With Zapier's WhatsApp Business app, the number must be on Meta's platform, freeform replies are limited to 24 hours, and the team still needs somewhere to answer.
Tenashi links your existing WhatsApp or WhatsApp Business number with a QR scan and gives your team one shared inbox for DMs and groups, with a CRM under every chat. Zapier sends through its API with a Webhooks step and catches every message through a webhook. There is no native Tenashi app in Zapier's directory, no templates or buttons, and sends are paced to protect the number, which reduces ban risk without guaranteeing anything. Plans start from $18/mo.
Read the API docs · Get started
FAQ
Does Zapier have a WhatsApp integration?
Yes. Zapier's own WhatsApp Business app works with numbers registered on Meta's WhatsApp Business Platform, with triggers for new messages and status updates and actions for freeform, media and template messages. It is a premium app and needs a WhatsApp Business Account. Many providers also publish their own Zapier apps for numbers they host.
Is there a Tenashi app on Zapier?
No. Tenashi has no app in the Zapier directory. Use Webhooks by Zapier instead: a POST action to https://usetenashi.com/api/v1/messages with your API key as a bearer token to send, and a Catch Hook trigger registered as a Tenashi webhook endpoint to receive. Zapier webhook URLs work without changes.
Can I use my personal WhatsApp number with Zapier?
Not with Zapier's WhatsApp Business app, which requires a number on Meta's platform; Zapier states a personal number will not work. A service that links your existing number, such as Tenashi, can be driven from Zapier through webhooks instead, so the messages come from the number your customers already know.
Why does my zap show success but the message never arrived?
For Zapier's WhatsApp Business app, Zapier notes that runs appear successful even when a send fails, so check the status trigger or Meta's tools. For Tenashi, a 202 means queued, not delivered; look up the message ID with the API or subscribe to message.failed. Common causes are a missing country code or a closed 24-hour window on Meta's platform.
Do I need a paid Zapier plan for WhatsApp?
Yes, for both routes in this guide. Zapier's WhatsApp Business app is a premium app, and Webhooks by Zapier is not available on the Free plan. Zapier lists both on Professional, Team and Enterprise. Code by Zapier, used for signature checks, has its own plan-dependent limits on run time and memory.
Two zaps, one to send and one to receive, cover most of what teams want from WhatsApp and Zapier. If you also use other automation tools, compare the n8n version and the Make version, and when you are ready to wire up your own number, read the Tenashi API docs.