How to Automate WhatsApp Broadcast Messages with n8n (2025)

WhatsApp reaches more than two billion people, and open rates routinely beat email by a wide margin. That makes it tempting to blast an announcement to your whole contact list. But the way most people imagine "WhatsApp broadcasts" is not how the platform actually works at scale in 2025 — and misunderstanding this is the fastest way to get your number banned. This guide shows you how to automate WhatsApp broadcast messages with n8n the right way: compliant, personalized, rate-limited, and logged.

Broadcast lists vs. the WhatsApp Business Cloud API

There are two completely different things people call "broadcasts," and confusing them will waste your time.

  • Broadcast lists live inside the regular WhatsApp or WhatsApp Business app on your phone. They send a message to up to 256 saved contacts at once, but only to people who have your number saved in their phone. There is no API, no automation, and no real scale. This is not what n8n automates.
  • The WhatsApp Business Cloud API (hosted by Meta) is the real automation channel. It does not "broadcast" in the app sense — instead you send an individual template message to each opted-in contact through an HTTP endpoint. This is what n8n drives: read a list, loop through it, and fire one API call per person.

So when we say "automate a broadcast," we really mean: programmatically send an approved template message to many opted-in contacts, one at a time, with personalization and logging. That distinction is the whole game.

The rules you cannot ignore

Meta enforces messaging policy aggressively, and violations get phone numbers rate-limited or banned. Before you build anything, internalize these constraints:

  • Opt-in is mandatory. You may only message people who explicitly agreed to hear from you on WhatsApp. No scraped lists, no cold outreach, no buying phone numbers. Keep a record of when and how each contact opted in.
  • Template approval. To message someone outside an active conversation, you must use a message template that Meta has pre-approved. You submit the template (with placeholders like {{1}}) in Meta Business Manager, choose a category (marketing, utility, or authentication), and wait for approval — usually minutes to a few hours.
  • The 24-hour window. Once a user messages you, you have a 24-hour "customer service window" in which you can send free-form messages. Outside that window, you must use an approved template again. Marketing templates also cost more per send than utility ones.
  • No spam. High block rates lower your quality rating and shrink your daily sending limit. Send relevant content to people who want it.

None of this is optional friction — it is what keeps your number alive. n8n makes compliance easier because you can log every opt-in and every send.

Setting up WhatsApp Business Cloud API credentials in n8n

n8n ships with native WhatsApp Business Cloud nodes. To connect them you need three things from Meta:

  1. A Meta app. In developers.facebook.com, create an app and add the "WhatsApp" product. This gives you a sandbox test number immediately.
  2. The Phone Number ID. Under WhatsApp → API Setup, Meta shows a test number and its Phone Number ID (a long numeric string). This identifies which number sends your messages — you'll paste it into the n8n node, not the phone number itself.
  3. An access token. The temporary token in API Setup expires in 24 hours — fine for testing. For production, create a System User in Meta Business Settings and generate a permanent token scoped to whatsapp_business_messaging and whatsapp_business_management.

In n8n, open Credentials → WhatsApp Business Cloud and paste the access token and Business Account ID. In each WhatsApp node you then select the Phone Number ID. Send a test template to your own number to confirm the pipe works before you loop over a real list.

Building the broadcast workflow

Here is the core structure. Every serious WhatsApp automation in n8n follows this shape:

  1. Trigger. A Schedule Trigger (e.g., every Monday 9am) or a Manual Trigger while you build.
  2. Read the contact list. A Google Sheets node (or your CRM node — HubSpot, Airtable, Postgres) reads rows. Each row should have at least: phone number in international format (e.g., 15551234567, no + or spaces), first name, and an opted_in flag.
  3. Filter. An IF or Filter node keeps only rows where opted_in is true. This is your compliance gate — respect it.
  4. Loop. The Loop Over Items node processes contacts in batches so you can control pace and avoid slamming the API.
  5. Send the template. The WhatsApp Business Cloud "Send" node, set to message type Template, with your approved template name and language code.
  6. Log the result. Append the send status and message ID back to a "log" sheet or database table.

Personalization with expressions

Your approved template might read: "Hi {{1}}, your {{2}} order ships tomorrow." In the WhatsApp node's body parameters, map each placeholder to an n8n expression pulling from the current row:

  • Parameter 1: {{ $json.first_name }}
  • Parameter 2: {{ $json.product }}

Because the loop runs one contact at a time, $json always refers to the current person. This turns a single approved template into thousands of personalized, compliant messages — without a single manual send.

Rate-limiting and delays

Meta assigns each number a messaging tier (1K, 10K, 100K, or unlimited unique contacts per day) that grows as your quality rating stays high. Even within your limit, firing hundreds of requests per second invites throttling. Add a Wait node inside the loop — 1 to 3 seconds between sends is a safe default — or use the Loop Over Items batch size to spread volume. Slower and alive beats fast and banned.

Handle the replies automatically: A broadcast is only half the loop — people will reply, and manual answering does not scale. Tie the WhatsApp AI Chatbot + RAG template to your workflow so inbound replies are answered 24/7 from your own company docs, all inside the 24-hour window. Get the WhatsApp AI Chatbot on Gumroad →

Handling replies via webhook

When a contact replies to your broadcast, Meta sends an event to a webhook URL you configure in the Meta app dashboard (WhatsApp → Configuration). Point it at an n8n Webhook node's production URL and subscribe to the messages field.

Meta first sends a verification GET request with a hub.challenge parameter — your webhook must echo that value back to confirm ownership. After that, every inbound message arrives as a JSON POST containing the sender's number and text. From there your workflow can:

  • Log the reply and update the contact's status in your sheet or CRM.
  • Route keywords like "STOP" to an unsubscribe flow that flips opted_in to false — honoring opt-out is both good practice and required.
  • Because the reply opens a 24-hour window, respond with a free-form message (no template needed) — the perfect place to plug in an AI agent that answers from your knowledge base.

This two-way loop — outbound templates plus webhook-driven replies — is what turns a one-shot blast into a genuine conversation channel.

A realistic launch checklist

  1. Collect real opt-ins and store proof.
  2. Submit and get one marketing or utility template approved.
  3. Configure Cloud API credentials in n8n and send a test to yourself.
  4. Build read → filter → loop → send → log, with a Wait node for pacing.
  5. Run against a tiny segment (10–20 people) first and watch the log.
  6. Wire up the webhook so replies are captured and answered.
  7. Scale up gradually as your messaging tier grows.

Do it in this order and you get the reach of WhatsApp without the ban risk that sinks most first attempts.

Ready to automate WhatsApp? Get this template on Gumroad →