Limits and best practices
Limits at a glance
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:
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.
The mandatory opt-out footer
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
"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