Back to blog
·3 min read

WhatsApp Broadcast API — Send Personalized Messages to 1000s of Users

A complete guide to WhatsApp broadcast messaging. Send personalized template messages to thousands of users at once, with rate limits and delivery tracking.

whatsappbroadcastapimarketing

Broadcasting is where WhatsApp marketing really shines — 98% open rates, 45-60% click-through rates. Compared to email's 20% open / 2% CTR, it's a different universe.

Here's how to send broadcast messages to thousands of users using the Gavi WhatsApp API.

The basics

A broadcast in WhatsApp = sending a pre-approved template message to many recipients. You can either:

  1. Send the same template to everyone (with the same variables), or
  2. Send personalized versions (different variables per recipient)

Step 1: Create and approve a template

Before you can broadcast, you need a Meta-approved template.

Go to Settings → Message Templates in Gavi and create one:

Name: weekly_newsletter
Category: MARKETING
Language: en
Body: Hi {{1}}, here's this week's update from {{2}}. Read more: {{3}}

Submit for Meta approval. Takes 15 minutes to a few hours.

Step 2: Send the broadcast

Same variables for everyone

import { WhatsApp } from '@gaviwhatsapp/whatsapp'

const wa = new WhatsApp({ apiKey: process.env.GAVIWHATSAPP_API_KEY })

const result = await wa.broadcast({
  recipients: ['+919876543210', '+919876543211', '+919876543212'],
  template: 'weekly_newsletter',
  language: 'en',
  variables: {
    '1': 'friend',
    '2': 'Gavi',
    '3': 'https://example.com/newsletter'
  }
})

console.log(`Sent: ${result.sent}, Failed: ${result.failed}`)

Personalized per recipient

await wa.broadcast({
  recipients: ['+919876543210', '+919876543211'],
  template: 'promo_offer',
  language: 'en',
  variables_per_recipient: [
    { '1': 'Alice', '2': '20%' },
    { '1': 'Bob', '2': '15%' }
  ]
})

The variables_per_recipient array must match the recipients array length.

Step 3: Track delivery

Register a webhook to receive delivery events:

await wa.webhooks.create({
  url: 'https://yourapp.com/webhook',
  events: ['message.sent', 'message.delivered', 'message.read', 'message.failed']
})

Now you get real-time events:

{
  "event": "message.delivered",
  "to": "+919876543210",
  "message_id": "wamid.abc123",
  "timestamp": "2026-04-10T12:00:05Z"
}

Rate limits & best practices

Meta's rate limits

WhatsApp Business accounts have messaging tiers that cap how many unique users you can message per day. The exact thresholds vary by country and Meta updates them periodically — check the official Meta docs for current values. New accounts start at the lowest tier and Meta auto-upgrades you as you build a track record of quality messages with high delivery rates.

Quality rating

Meta tracks your phone number's quality rating:

  • Green = healthy
  • Yellow = declining
  • Red = paused (can't send)

How to stay green:

  • ✅ Send only to users who opted in
  • ✅ Use templates that match what you'll actually send (don't submit "order update" and send promotions)
  • ❌ Don't spam. Block rates matter.

Timing

  • Send between 9am–7pm recipient's local time
  • Avoid Sunday mornings, weekday late nights
  • Space out broadcasts if sending > 1000 messages

Opt-in is non-negotiable

Meta is strict: you must have proof of opt-in for every recipient. Typical ways:

  1. Checkbox on a signup form: "I agree to receive WhatsApp updates at this number"
  2. User messaged you first (implicit opt-in within 24h)
  3. Opt-in via landing page with WhatsApp link

Keep records. Meta can audit.

Pricing math

Meta bills you directly per template message — rates depend on the template category (Marketing, Utility, Authentication) and the recipient's country, and Meta updates them periodically. Always check the latest rates on Meta's official page before you budget: business.whatsapp.com/products/platform-pricing.

Gavi charges a flat $9.99/mo on top — no per-message markup. You pay Meta directly for every send.

MCP / AI workflow

Using an AI coding tool (Cursor, Claude Code)?

Read users.csv. For each row, send the "promo_weekly" template with first name and discount code.

Done.


Try it: gaviventures.com · API docs · Templates guide

Ready to try Gavi WhatsApp?

Send WhatsApp messages from your code, AI agent, or CRM in under 5 minutes.