Updated on October 29, 2026
The best time to send WhatsApp messages is when your audience is awake, has the phone in hand and has time to act on the message, and that varies by industry and by person. Meta doesn’t publish a recommended time, and generic studies rarely apply to your list. The reliable approach is to start from a window that fits your customers’ routine, avoid late-night hours, schedule by the recipient’s local time and test with your own list, measuring reads and replies through the status webhook.
This guide covers the principles, starting windows by industry labeled as hypotheses, and a method to find your best time with data from the official WhatsApp Business API.
Why there’s no “magic hour”
Many articles cite days and times with the “highest open rate” without saying where the number comes from. We won’t repeat that kind of data here. The reason is practical: read rates depend on who receives the message, what it offers and how many other businesses wrote to the same person that day. A neighborhood pharmacy and a B2B SaaS have audiences with opposite routines.
There’s also a factor Meta controls. The per-user marketing message limit takes into account the person’s recent engagement, including how often they read marketing messages, according to the per-user limits documentation. Sending when nobody reads isn’t just waste: it tends to hurt delivery of your next campaigns. The article on the per-user marketing limit explains error 131049.
Principles for any industry
- Follow your audience’s routine, not your team’s. If customers shop during lunch or after dinner, that’s when the message has a chance to become action.
- Use the recipient’s time zone. Schedule by the recipient’s local time, not your server’s. The continental US spans four main time zones (Eastern, Central, Mountain and Pacific), and Latin America spans several more; a campaign sent at 9 a.m. Eastern lands at 6 a.m. in California. Brazil alone has four official time zones.
- Avoid late-night and sleeping hours. Off-hours notifications lead to mutes and blocks, and blocks factor into your number’s quality rating.
- A message that asks for action needs time for that action. A coupon expiring at midnight shouldn’t go out at 10 p.m. A payment reminder makes more sense during banking hours, when the customer can pay.
- Utility follows the event, not the marketing calendar. Order confirmations, verification codes and delivery notices go out when the event happens. The “best time” mainly applies to marketing and scheduled reminders.
- Consider your support team. A campaign that triggers replies needs people (or AI) to answer them. Sending at 6 p.m. on Friday and leaving replies until Monday wastes the 24-hour window the customer opened.
Want to try it while you read? Create a Vectalk account and send your first message through the official API. Create free account →
Contact rules: what to check before choosing a window
WhatsApp’s policy doesn’t define allowed hours, but it requires messages to be expected and opt-out requests to be honored (WhatsApp Business Messaging Policy). Outside Meta, local law may have its own rules:
- United States. The federal rule on telephone solicitations (47 CFR 64.1200(c)(1)) prohibits initiating a solicitation to a residential subscriber before 8 a.m. or after 9 p.m. in the called party’s local time. Whether it applies to your WhatsApp use case is a legal question, but the window is a good common-sense reference, always applied in the recipient’s time zone. Also note that, according to the per-user limits documentation, WhatsApp currently doesn’t deliver marketing templates to US phone numbers, so for US recipients this timing applies to utility messages and reminders.
- Brazil. State laws and industry rules cover telemarketing and debt collection, and the Consumer Protection Code (Law 8,078/1990, art. 42) prohibits exposing consumers to embarrassment when collecting debts. Before setting hours for collection or offers, check with legal counsel whether a rule from your state or industry applies to messaging.
- Other countries. Check the local rules on commercial communications before an international campaign.
This article is not a substitute for advice from a lawyer.
Windows by industry: starting points to test
The table below is not based on statistics. These are windows consistent with each audience’s typical routine, for you to use as an initial hypothesis and adjust with your own data. All times are the recipient’s local time.
| Industry | Starting window to test | Reasoning |
|---|---|---|
| Retail and e-commerce | 11 a.m.–1 p.m. and 7–9 p.m. | Lunch break and evening, when people browse calmly |
| Food delivery and restaurants | 10:30–11:30 a.m. and 5:30–6:30 p.m. | Before the lunch and dinner decision |
| Clinics and healthcare (reminders) | 8–10 a.m. the day before the appointment | Time to confirm or reschedule |
| Education and online courses | 7–9 p.m. | Study time after work |
| SaaS and B2B services | 9–11 a.m. and 2–4 p.m., weekdays | The decision-maker’s business hours |
| Financial services and invoice reminders | 9 a.m.–5 p.m., weekdays | Customer can pay or call the same day |
| Real estate | 12–1 p.m. and 7–8 p.m.; Saturday morning | Breaks and weekends, when people plan viewings |
| Salons and aesthetics | 10 a.m.–12 p.m., Tuesday to Thursday | The week’s calendar is still open |
| Events and launches | 1–2 hours before start, plus a reminder the day before | Reminder close to the action |
For payment reminders, the message must be about the customer’s own invoice, which makes it utility. Collecting third-party debt is prohibited by WhatsApp’s Business Messaging Policy. The article on WhatsApp billing reminders shows where the line is.
How to find your list’s best time
The method is a simple A/B test any team can run with the data the API already delivers.
- Change one variable only. Same template, same audience, different times. If you change the copy too, you won’t know what made the difference.
- Split the list randomly. Draw contacts into two or three groups of similar size. Don’t split alphabetically or by signup date.
- Send each group at its time, always in the recipient’s time zone.
- Measure through the status webhook. Store the
wamidof each send and record whendeliveredandreadarrive. The article on message status via webhook explains each status. - Measure action, not just reads. Replies, button clicks and sales matter more than reads.
- Repeat before concluding. A single send can coincide with a holiday, a big game or a network outage. Repeat the test over different weeks.
Three caveats about read data:
- The status
timestampindicates when the webhook was triggered, which works as an approximation of when the message was read. - The
readstatus indicates the message was displayed in an open chat on the customer’s device. When delivery and read happen at the same time, Meta doesn’t send a separatedeliveredwebhook, so count as delivered every message withdelivered_atorread_at. Compare groups against each other instead of looking at the absolute rate. - Failed messages don’t count. Separate
failedby error code before comparing.
Sample query to compare groups, assuming a sends table fed by the webhook:
SELECT
time_group,
COUNT(*) FILTER (WHERE delivered_at IS NOT NULL OR read_at IS NOT NULL) AS delivered,
COUNT(*) FILTER (WHERE read_at IS NOT NULL) AS read,
COUNT(*) FILTER (WHERE replied_at IS NOT NULL) AS replies,
PERCENTILE_CONT(0.5) WITHIN GROUP (
ORDER BY EXTRACT(EPOCH FROM read_at - delivered_at) / 60
) AS median_minutes_to_read
FROM sends
WHERE campaign = 'weekly_offer_44'
GROUP BY time_group;
Time to read is a good secondary signal: at a good time, most people read shortly after delivery. At a bad time, the read slips to the next day, when the offer has lost steam.
Scheduling by time zone: an example
If your list is national or international, store each contact’s time zone (from the area code, the shipping address or a choice at signup) and schedule by local time:
// Returns the next moment when it is 'hour' o'clock in the contact's time zone
function nextSend(hour, timeZone, now = new Date()) {
const fmt = new Intl.DateTimeFormat('en-CA', {
timeZone, year: 'numeric', month: '2-digit', day: '2-digit',
hour: '2-digit', hourCycle: 'h23',
});
for (let h = 0; h < 48; h++) {
const t = new Date(now.getTime() + h * 3600 * 1000);
const parts = Object.fromEntries(fmt.formatToParts(t).map((p) => [p.type, p.value]));
if (Number(parts.hour) === hour) {
t.setUTCMinutes(0, 0, 0); // whole-hour time zones
if (t > now) return t;
}
}
}
nextSend(11, 'America/Chicago'); // 11 a.m. Central Time
To spread the volume, combine local time with your number’s sending rate. The article on throughput and rate limits shows how many messages per second to send. Timing and frequency go together; see also the guide on broadcast frequency.
How to do this with Vectalk
Vectalk delivers Meta’s status webhooks (sent, delivered, read, failed) to the endpoint you register, in the same format as the Cloud API. Scheduling, group splits and reporting live in your system or in the campaign tool connected to the API, because Vectalk has no bulk sending in its dashboard.
To get started:
- register the instance webhook (webhooks documentation);
- send the template through the messages endpoint (send template);
- check the logs in the dashboard to review sends and failures.
Each delivered message is deducted from your prepaid balance, with no card registered with Meta. Create your account at apps.vectalk.com.br/register.
Frequently asked questions
Can I send marketing messages on weekends?
Meta’s policy doesn’t prohibit it. The real question is whether your audience acts on weekends. Retail and real estate often get good responses; B2B, not always. Test before adopting it.
What time should I always avoid?
Late night and the recipient’s sleeping hours. Besides being annoying, off-hours messages lead to mutes and blocks, which weigh on your number’s quality.
Does the time of day affect the message price?
No. Meta charges per delivered message, based on category and the recipient’s country, with no difference by time of day.
What about utility messages, like order confirmations?
They go out when the event happens. Only schedule utility messages when they’re a dated reminder, such as an appointment or invoice due date, and even then at a time when the customer can act.
How long should I test before concluding?
Repeat the test for a few weeks, with groups large enough that the difference isn’t chance. If two times come out close, pick the one that makes it easier to handle replies.
Official sources consulted on October 29, 2026: Per-user marketing limits, Message status webhook, WhatsApp Business Messaging Policy, Brazilian Consumer Protection Code (Law 8,078/1990), 47 CFR 64.1200, Vectalk documentation: webhooks.
Try the official WhatsApp API today
Create your account, generate a token and send your first message with the quick-start guide. Same payloads and webhooks as Meta's Cloud API.
