Bulk WhatsApp Campaign System — 40-node workflow with kill switch, dedup, reply tracking

I built a production-grade bulk WhatsApp campaign system in n8n and wanted to share it with the community.

**What it does:**

  • Reads contacts from Google Sheets

  • Normalizes phone numbers (multi-country support)

  • Filters blocked/opted-out contacts

  • Deduplicates with SHA256 keys (never double-message anyone)

  • Sends WhatsApp template messages via Meta Cloud API in throttled batches

  • Kill switch auto-stops if too many contacts already received the message

  • Inbound webhook captures every reply and correlates it to the campaign

  • Auto-detects opt-out keywords and adds numbers to a permanent blocklist

**The stack:**

  • n8n (37 nodes, fully connected)

  • Meta WhatsApp Business Cloud API

  • Google Sheets (5 tabs: Contacts, Blocklist, Dedupe, Sends, Replies)

**Bonus:** It comes with a browser-based configurator (HTML file) — you fill in a form with your API credentials,

spreadsheet ID, and campaign details, and it generates a ready-to-import JSON. No manual JSON editing.

I’ve used this to run real campaigns with 5,000+ contacts across Colombia, Mexico, Peru, Ecuador, and Chile.

I packaged it with full documentation (setup guide, feature guide, customization guide, architecture diagrams) and put it on

Gumroad:

:backhand_index_pointing_right: WA Campaign Lean — Bulk WhatsApp Campaign System for n8n

Happy to answer any questions about the architecture or how specific nodes work!

The kill switch + dedup combo is the key piece. how do you handle meta rate limiting on the cloud api — static batch size or you throttle it dynamically?

1 Like

You can adjust it to what you want, botch batch size and interval between sets (eg. 50, 5s).
But for a lot of messages I do divide the lists of numbers that I put on the sheets file.

Makes sense — splitting the list at the sheet level is a clean approach, keeps the workflow itself stateless and lets you tune batch size and interval independently. Thanks for clarifying!

1 Like