Updated on October 29, 2026
There’s no fixed number of messages per week allowed on WhatsApp: Meta doesn’t publish a cap per business, but it limits how many marketing templates each person receives based on their recent engagement, and it lowers your number’s quality rating when blocks and reports pile up. The right frequency is the one that keeps reads and replies stable across your list. Start low, segment by engagement and slow down as soon as signs of fatigue appear, such as more blocks, “stop” requests and 131049 errors.
This guide covers the limits Meta applies, the signals that indicate overload, practical rules for setting your cadence and how to build frequency control into your system with the official WhatsApp Business API.
What Meta limits (and what it leaves to you)
Three Meta mechanisms react to frequency, each in a different way:
| Mechanism | What it measures | What happens | Where it shows up |
|---|---|---|---|
| Per-user marketing limit | Each person’s recent engagement with marketing messages | Marketing template isn’t delivered | Status webhook failed with error 131049 |
| Phone number quality | Feedback from recent days: blocks, reports and other signals | Rating drops and limit growth stalls | WhatsApp Manager and quality webhooks |
| Template pausing | Quality of a specific template | Template paused for 3 h, then 6 h, and disabled the third time | Template status webhook |
The per-user limit is the one most tied to frequency. According to the per-user limits documentation, it adapts automatically to the person’s recent engagement, considering how often they read marketing messages and how crowded their inbox is with messages from personal contacts and businesses. Meta doesn’t publish a number. The same page says WhatsApp currently doesn’t deliver marketing templates to US phone numbers. Marketing messages sent inside a customer service window opened by the customer don’t count toward this limit. The article on the per-user marketing limit explains the error in detail.
Everything else is up to you: how many campaigns per week, to whom and at what interval. Meta doesn’t do that control for you, and the cost of getting it wrong shows up later, in quality.
Why sending too much is expensive
High frequency hurts in three ways that add up:
- Less delivery. People who receive a lot and read little tend to hit the per-user limit sooner. Messages fail with
131049, and resending in less than 24 hours makes things worse: the documentation says repeated attempts can make sending to those people unavailable for up to 24 hours. - Lower quality. Blocks and reports drag down your number’s rating. The article on phone number quality rating shows how to read green, yellow and red.
- A smaller list. Each person who turns off your business’s offers stops receiving your marketing until they turn it back on themselves.
There’s also a direct cost. Each marketing template delivered to Brazil costs R$ 0.3217 (Brazilian reais) since October 1, 2026. One extra weekly campaign to 10,000 delivered contacts adds up to R$ 3,217.00 on Meta’s rate card, even if nobody buys.
Want to try it while you read? Create a Vectalk account and send your first message through the official API. Create free account →
Signs of list fatigue
Track these signals per campaign and per segment. When two or more get worse at the same time, frequency has probably gone too far.
| Signal | How to measure | What it indicates |
|---|---|---|
More 131049 errors | Status webhook failed | People receiving more marketing than they read |
More 131050 errors | Status webhook failed | People turning off your business’s offers |
| More taps on the opt-out button | Message webhook with type: "button" | Explicit opt-out |
| Replies like “stop”, “unsubscribe”, “no more” | Text message webhook | Opt-out by text, which must also be honored |
| Falling read rate | read ÷ delivered per campaign | Message ignored |
| Change in number or template quality | WhatsApp Manager and webhooks | Accumulated negative feedback |
Error 131050 appears when the person used WhatsApp’s “Offers and announcements” setting to stop marketing messages from your business. The marketing templates documentation says the API accepts the request but doesn’t deliver the message, and that you can subscribe to the user_preferences webhook to learn when the person stops or resumes.
Practical frequency rules (a starting point)
The numbers below don’t come from a Meta rule or a study. They’re a conservative cadence to start with, which you should adjust using the signals in the table above.
- Marketing to the general list: at most one campaign per week per contact.
- Highly engaged contacts (read or replied to recent campaigns): up to two per week, on strong dates such as launches and Black Friday.
- Low-engagement contacts (didn’t read recent campaigns): one every two to four weeks, with a stronger offer.
- Contacts with no reads in a long time: stop marketing and try a single re-engagement message; with no response, remove them from the list.
- Minimum interval: don’t send two marketing templates to the same person on the same day.
- Utility doesn’t count toward marketing, but it also wears people out. Bundle notices whenever possible (one summary instead of three messages).
Content matters as much as the number. One relevant campaign per week wears people out less than three generic ones. The guide on how to write WhatsApp marketing messages covers the copy, and the one on the best time to send covers timing.
Segmenting by engagement
The most effective way to control frequency is to stop treating your list as a single block. A simple three-tier model:
| Tier | Suggested criteria | Starting cadence |
|---|---|---|
| Active | Read or replied to one of the last 3 campaigns, or bought in the last 90 days | Weekly |
| Warm | Read at least 1 of the last 5 campaigns | Every two weeks |
| Cold | No reads in the last 5 campaigns | Single re-engagement, then pause |
With the status webhook, this classification is automatic. Example in SQL, assuming a sends table with one row per message:
WITH latest AS (
SELECT wa_id, read_at, replied_at,
ROW_NUMBER() OVER (PARTITION BY wa_id ORDER BY sent_at DESC) AS n
FROM sends
WHERE category = 'marketing' AND status <> 'failed'
)
SELECT wa_id,
CASE
WHEN COUNT(*) FILTER (WHERE n <= 3 AND (read_at IS NOT NULL OR replied_at IS NOT NULL)) > 0 THEN 'active'
WHEN COUNT(*) FILTER (WHERE n <= 5 AND read_at IS NOT NULL) > 0 THEN 'warm'
ELSE 'cold'
END AS tier
FROM latest
GROUP BY wa_id;
And a frequency check before each send, in Node.js:
const CADENCE_DAYS = { active: 7, warm: 14, cold: null }; // null = no marketing
async function canSendMarketing(contact, db) {
if (contact.marketing_optout) return false; // opt-out button, "stop" or 131050
const days = CADENCE_DAYS[contact.tier];
if (days === null) return false;
const last = await db.lastMarketing(contact.wa_id);
if (!last) return true;
const elapsed = (Date.now() - last.getTime()) / 86400000;
return elapsed >= days;
}
When you get 131049, schedule the next attempt for at least 24 hours later. When you get 131050, mark a marketing opt-out.
Opt-out in the template: make leaving easy
WhatsApp’s policy requires honoring all opt-out requests, made on or off WhatsApp (WhatsApp Business Messaging Policy). It sounds counterintuitive, but making it easy to leave protects your frequency: people who want out and can’t find the button block or report you, and that weighs on quality.
Best practices:
- include a quick reply button such as “Stop offers” in marketing templates;
- also handle free-text replies (“stop”, “unsubscribe”, “cancel”);
- offer options by category: someone may want to stop offers but keep receiving order updates;
- confirm the opt-out with a short message, without trying to talk them out of it.
The article on building a WhatsApp opt-in list shows how to record opt-ins and opt-outs.
How to do this with Vectalk
Vectalk delivers Meta’s status and incoming message events to your webhook, in the Cloud API format, including errors 131049 and 131050. Frequency control, segmentation and scheduling live in your system or in the campaign tool connected to the API, because the Vectalk dashboard doesn’t do bulk sending.
In the dashboard you create marketing templates with an opt-out button (the Template Library helps you get started), and track sending logs and your balance. Each delivered message is deducted from your prepaid balance, with no card registered with Meta. See the webhooks documentation or create your account at apps.vectalk.com.br/register.
Frequently asked questions
Will Meta block my number if I send more than one message a day?
There’s no such rule. What can happen is the per-user limit preventing delivery to people who’ve already received a lot of marketing, and negative feedback lowering the quality of your number and templates.
Do utility messages count toward the per-user marketing limit?
The per-user limit Meta describes applies to marketing templates. Utility has other rules, but it also leads to blocks if it’s excessive or looks like advertising.
Can I resend a campaign to people who didn’t read it?
Yes, carefully. Resends to people who got 131049 should wait at least 24 hours. For people who received it and didn’t read it, try a different offer or time instead of repeating the same message.
What should I do with cold contacts?
One re-engagement attempt with something relevant and a clear opt-out button. With no response, stop marketing to that contact. Keeping cold contacts on the list costs money and lowers quality.
Do multiple numbers help me send more often?
Not to the same customer. The per-user limit belongs to the person, and the messaging limit belongs to the business portfolio. See Black Friday on WhatsApp to plan peaks without straining your list.
Official sources consulted on October 29, 2026: Per-user marketing limits, Marketing templates, Template pausing, WhatsApp Business Messaging Policy, Pricing, Vectalk documentation: webhooks.
Put your business on the official WhatsApp
Create your account, connect your number to the official API (you can keep the app with coexistence) and start serving customers and sending messages.
