For the complete documentation index, see llms.txt. This page is also available as Markdown.

Limits and best practices

Limits at a glance

Limit
Value

Max recipients per broadcast

10,000

Recipients per broadcast vs. daily messaging tier

Cannot exceed your WhatsApp tier's daily limit

Per-contact template cooldown

24 hours

Marketing template footer

Fixed opt-out line, not editable

US numbers (+1)

Excluded from all broadcasts

Plan requirement

Pro or Advanced, not on free trial

Maximum recipients

A single broadcast can reach at most 10,000 recipients. This applies to all three targeting modes — send to everyone, targeted filters, and CSV upload. If your audience is larger, split it across multiple broadcasts, ideally on different days.

Don't exceed your daily messaging tier

Meta caps how many unique contacts you can start conversations with in a rolling 24-hour period. Every WhatsApp Business phone number sits in a tier:

Tier
Unique contacts per 24 hours

50

50

250

250

2K

2,000

10K

10,000

100K

100,000

Unlimited

No cap

Zaapi blocks a broadcast at creation if the recipient count would exceed your tier. You'll see "This would exceed your daily template limit" and nothing is sent.

Tiers scale up automatically as you build a good sending history, and scale back down if your quality rating drops. To move up: send consistently to opted-in contacts, keep engagement high, and keep blocks and reports low.

Your phone number's quality rating

Meta rates each phone number High (green), Medium (yellow) or Low (red) based on recipient feedback — blocks, reports, and "not interested" responses.

Zaapi blocks template sends, including broadcasts, when your rating is medium or low. This is deliberate: it protects you from the next step, which is Meta restricting or disabling your number. A broadcast that hits this check is marked Failed and no messages go out.

If this happens: stop broadcasting, review what you last sent and to whom, and let the rating recover. Refresh the account in Zaapi once Meta's rating improves. Individual templates are also rated — a template rated medium or low is blocked on its own, even if your number is healthy.

Only broadcast to contacts who opted in

This is the rule that matters most. Meta requires explicit opt-in before you send a marketing template, and it must be clear:

  • the customer actively agreed (ticked a box, replied to a request, submitted a form)

  • they knew it was your business asking

  • they knew what they were agreeing to receive

Buying a list, scraping numbers, or importing everyone who ever transacted with you is not opt-in. The consequence isn't lower open rates — it's blocks and reports, a falling quality rating, a tier downgrade, and eventually a disabled number. Businesses do lose their WhatsApp numbers this way, and the bans are not always reversible.

Good ways to collect opt-in:

  • A tick box at checkout or on a sign-up form, worded as "Yes, send me offers on WhatsApp"

  • A WhatsApp link or QR code where the customer messages you first

  • Asking in an existing conversation and recording the answer with a chat label

  • A Zaapi chat widget or click-to-WhatsApp ad with clear consent wording

Track it. Use a label like whatsapp-marketing-opt-in on every contact who consents, then target that label in your broadcasts. It makes your audience defensible and your filters simple.

Opt-outs are excluded automatically

When a contact replies STOP, or sets their marketing preference to stop in WhatsApp, Zaapi records it and permanently excludes them from every future broadcast — send-to-everyone, targeted, and CSV alike. You don't have to maintain a suppression list, and you can't accidentally re-add them by re-uploading a CSV. If they later opt back in through WhatsApp, they become eligible again.

You can see opt-out status on a contact, and include it in contact exports.

Every Marketing-category template you create in Zaapi carries a fixed opt-out footer. See The mandatory opt-out footer for details.

The 24-hour per-contact cooldown

Zaapi only sends one template per contact per 24 hours. Contacts still inside that window are silently skipped — they aren't added as recipients and the broadcast doesn't fail.

This is why your actual recipient count can come in below the estimate, and it's the most common reason a contact "didn't get" a broadcast. If you sent a template yesterday morning, ran a test to your own number an hour ago, or another team member broadcast to an overlapping segment, those contacts are on cooldown.

For scheduled broadcasts the check runs at the scheduled time, so contacts whose cooldown will have expired by then are included.

Best practices

Segment rather than blast. A 300-person targeted broadcast with relevant copy outperforms a 3,000-person generic one, and it protects your quality rating. Use labels, last-message date and conversion history to send to people the message actually applies to.

Warm up gradually. New numbers start at the lowest tier. Send small, high-quality broadcasts to your most engaged contacts first, and grow from there.

Always send a test first. Check the rendered copy, image, buttons and links on a real device. Use your own number — a test consumes that contact's 24-hour cooldown.

Set real fallback values. Every dynamic variable needs one. "Hi ," is the fastest way to look like spam.

Give people something to do. A clear call to action — a reply prompt, a quick-reply button, a link — is what converts a broadcast into a conversation. Broadcasts with buttons consistently outperform plain text.

Send at sensible local times. Broadcasts arrive as personal messages. Use scheduling and the country-code filter to avoid landing at 3am, and target one region per send when your audience spans time zones.

Watch your rates, not just your sends. Aim to keep blocks, reports and opt-outs under 1% of recipients. Rising opt-out rates are the earliest warning you're over-messaging — cut frequency before Meta cuts your tier.

Space out your campaigns. The 24-hour cooldown is a technical floor, not a recommendation. For most businesses, marketing broadcasts more than once or twice a week to the same segment is too much.

Review analytics before the next send. Compare read, replied and converted across campaigns. Export the recipients who read but didn't reply, and follow up individually in the inbox rather than broadcasting again.

Handle the replies. A broadcast that works generates a wave of inbound chats. Make sure someone is assigned, quick replies are ready, and AI handling or auto-assignment rules are configured before you send to thousands of people.

Troubleshooting

Problem
Cause and fix

"This would exceed your daily template limit"

Your recipient count is above your tier's daily cap. Reduce the audience or split the broadcast across days.

Broadcast status is Failed

Usually your phone number's quality rating dropped to medium/low, or the template's quality score did. Check both, let the rating recover, then retry.

Fewer recipients than the estimate

Contacts on the 24-hour cooldown, opted-out contacts, and US numbers are excluded at send time.

Analytics tab is empty

Stats take about a day to appear, then update daily for 30 days.

A contact says they didn't receive it

Check whether they're opted out, on cooldown, or a US number. Look them up in the recipient table on the Analytics tab.

Template isn't in the picker

Only approved templates appear. Check its status in Template Manager, and that it belongs to the selected account.

CSV upload rejected

The first header must be exactly Phone Number, and every number needs a country code. Row-level errors tell you which rows to fix.

Can't click Send Broadcast

Something required is missing — account, template, title, at least one recipient, all variables filled, or a schedule date if you chose Set schedule.

Last updated