Home/Blog/How to Track WhatsApp Delivery and Read Receipts for Broadcasts: Every Status Explained (2026)

How-to guide

How to Track WhatsApp Delivery and Read Receipts for Broadcasts: Every Status Explained (2026)

Every WhatsApp message status on the API explained: sent, delivered, read, failed, suppressed, held, skipped; what the ticks mean, why read undercounts.

By Chirag Darji · Updated 26 Aug 2026 · 7 min read

On this page
  1. The statuses, in the order they happen
  2. Sent, delivered, read: what to trust
  3. Failed: the error code is the instruction
  4. Suppressed is not failed
  5. Held and skipped
  6. The funnel ratios
  7. How the statuses reach you
  8. Reading a campaign page in two minutes
  9. Statuses on other channels
  10. What changes when read receipts are off
  11. What to do after a campaign
  12. Timestamps that tell a story
  13. What VGraple CRM does here
A WhatsApp broadcast report in VGraple CRM with the delivery funnel from audience to read, the reason each send failed, attributed revenue and cost

Too long? Read this

  • Meta reports four message statuses through webhooks: sent, delivered, read and failed (with an error code); a platform adds its own: suppressed, held, skipped, cancelled
  • Ticks on the phone map to the same statuses: one grey (sent), two grey (delivered), two blue (read); read is undercounted by users with receipts off
  • Failed carries the reason (131049 cap, 131026 not on WhatsApp, 132015 template paused); suppressed means the platform refused to attempt, which is different and never billed
  • What to do with each status, and the funnel ratios that matter

Every message sent through the WhatsApp Business API reports back through webhooks: sent when Meta accepts it, delivered when it reaches the phone, read when it is opened, failed with an error code when it is not. A platform adds statuses of its own for the messages it decided not to attempt or that Meta is holding. Reading those statuses correctly is the difference between a campaign you can improve and a number you damage by retrying the wrong rows. This guide explains each status, what the ticks on the phone correspond to, why read undercounts, how the statuses arrive, and what to do with each.

The statuses, in the order they happen

StatusWho sets itMeaningPhone ticks
PendingPlatformQueued, not yet sentNone
SentMetaAccepted by WhatsApp's serversOne grey
DeliveredMetaReached the recipient's phoneTwo grey
ReadMetaOpened by the recipientTwo blue
FailedMetaRejected, or delivery failed later; carries an error codeNone
SuppressedPlatformRefused to attempt: opt-out, blocked, no WhatsApp, marketing-stopped, capped window, US pauseNone
HeldMeta, surfaced by platformAccepted but withheld by template pacing; resolves on its ownNone until released
Skipped (quota)PlatformDaily tier ran out and auto-continue is offNone
CancelledPlatformCampaign stopped before this row ranNone

Sent, delivered, read: what to trust

Sent is near-instant and near-certain; a message that stays at sent for hours means the phone is offline or the number is dead. Delivered is reliable. Read is a floor: recipients with read receipts off never register it, and some people read from the notification without opening the chat. Report reads as a trend across campaigns, not as an absolute, and make decisions on replies, button clicks and revenue.

The recipient list of a WhatsApp broadcast in VGraple CRM filtered to failed sends, with the Meta error code for each one

Meta policy

Meta sends message status updates as webhooks (statuses: sent, delivered, read, failed) with a timestamp, the message id and, for failures, an error code and title. Read receipts depend on the recipient's privacy setting; there is no way to force them.

Failed: the error code is the instruction

CodeMeaningAction
131049Recipient at Meta's per-user marketing capDo not retry; use utility, engaged segments
131047Re-engagement outside the 24-hour window without a templateSend a template
131026Not a WhatsApp user or cannot receiveRemove the number
132015Template pausedWait; the campaign resumes automatically
132016Template disabledNew template
132000 / 132001Parameter mismatch or template missingFix variable mapping or language
130429Rate limitPacing handles it; nothing to do
131048 / 131056Spam rate or pair rate limitStop sending to that segment; review quality
190Token expiredReconnect the channel

The error code guides cover each in detail.

Suppressed is not failed

A suppressed row was never sent: the platform saw an opt-out, a block, an invalid number, a marketing-stopped preference from Meta's user settings, a recent 131049 cap, or a US number during Meta's marketing pause, and refused to attempt. It is not billed, it is not counted as sent, and "Retry failed" leaves it alone, because Meta has enforced account-level penalties since April 2026 for retrying recipients who signalled no. Treat the suppressed count as list information, not as a loss.

Held and skipped

Held rows were accepted by Meta but withheld by template pacing: Meta releases a small share of a new marketing template first, watches complaints, then releases the rest. They carry a real message id and resolve to delivered or read on their own; they count as sent. Skipped (quota) rows hit the daily tier with auto-continue off; turn auto-continue on and the campaign parks and resumes instead.

The funnel ratios

RatioHealthyDiagnoses
Delivered / sent92 to 97 percentList quality, caps, dead numbers
Read / delivered60 to 80 percent in 24 hoursTiming, first line, list freshness
Replied / delivered3 to 10 percent (marketing)The ask, the button
Failed 131049 / sentUnder 10 percentSegment temperature
Suppressed / audienceWhatever it isConsent hygiene (not a problem)

How the statuses reach you

Meta posts each status to the platform's webhook within seconds. VGraple CRM updates the recipient row, the campaign counters and the conversation, and can forward the event to your own systems through outbound webhooks (signed, with retries) so an order system or a dashboard sees delivered and read in real time. The campaign page is filterable by status and exportable as CSV with every timestamp and error code.

Reading a campaign page in two minutes

The counters at the top give the funnel: recipients, sent, delivered, read, replied, failed, with held and suppressed shown separately. The tabs filter the recipient table by status; the search finds a name or number; each row shows the timestamps and, for failures, the Meta error code and its plain-language meaning. Export gives the whole table as CSV with every column, which is what finance wants for billing reconciliation and what marketing wants for the next segment. The retarget button turns any filtered view (read but not replied, clicked, replied) into a new audience, and "Retry failed" attempts only rows whose cause is retryable.

Statuses on other channels

Instagram DMs and Messenger report sent, delivered and read through the same webhook pattern with their own timing; web chat reports delivered when the widget receives it and read when the tab is focused. In the shared inbox the ticks under each outbound message reflect the channel's own statuses, so an agent reads the same three ticks regardless of where the customer is.

What changes when read receipts are off

Nothing about delivery. The message is delivered, the customer reads it, and the status stays at delivered forever. Campaign read rates carry an invisible undercount of a few percent (higher for B2B and privacy-conscious audiences). Two consequences: never set a business rule on read alone (for example "resend to non-readers"), and report read rates as a trend, not a number to defend.

What to do after a campaign

  1. Read the delivered / sent ratio first; if it is low, look at the failed codes before touching anything else.
  2. Never retry suppressed or 131049 rows. Retry only failures whose cause you fixed (a bad variable, a paused template that resumed).
  3. Retarget readers who did not reply, two days later, with a different first line.
  4. Move repliers into the inbox and the pipeline; that is where the revenue is.
  5. Note the send hour and first line against the read ratio for next time.

Timestamps that tell a story

Sent to delivered under a minute means the phone was online; hours means it was off or the number is dormant. Delivered to read under ten minutes means the notification worked and the first line landed; read hours later means the message waited in a stack. A campaign where reads cluster at 9 pm although you sent at 11 am tells you when that audience actually looks at WhatsApp, which is the input for send-time optimisation.

What VGraple CRM does here

Per-recipient statuses with timestamps and Meta error codes, the suppressed and held distinctions, filters and CSV export, retarget cohorts, auto-continue on quota, and signed outbound webhooks for every status are on every plan including Free.

Frequently asked questions

What do the ticks mean on WhatsApp?
One grey tick: sent to WhatsApp's servers. Two grey ticks: delivered to the recipient's phone. Two blue ticks: read. On the API these arrive as sent, delivered and read webhook statuses with timestamps.
Why does a message show delivered but not read?
Either it has not been opened yet, or the recipient has read receipts turned off (then it never shows read), or they read it from the notification without opening the chat. Read is a floor, not a truth.
What is the difference between failed and suppressed?
Failed means the message was attempted and Meta rejected it or delivery failed later, with an error code. Suppressed means the platform refused to attempt it (opt-out, blocked, no WhatsApp, capped, marketing-stopped) so it was never sent, never billed and should never be retried.
Can I see delivery per recipient?
Yes, on the API. VGraple CRM's campaign page lists every recipient with status, timestamps and the Meta error code where there is one, filterable and exportable as CSV. The WhatsApp Business app shows ticks per chat only.
Does a failed message cost money?
No. Meta bills delivered template messages. Failed and suppressed rows are not billed.
How long until statuses arrive?
Sent within a second; delivered as soon as the phone is online, usually seconds to minutes; read when opened, from seconds to days; failed immediately for rejections or within hours for delivery failures.
What is 'held'?
Accepted by Meta but withheld by template pacing: Meta samples new marketing templates and releases the rest once quality looks fine. Held messages resolve to delivered or read on their own and count as sent.
Why did my broadcast show fewer recipients than my segment?
Suppression removed contacts who should not be messaged before sending: opted out, blocked, invalid, capped. The review screen shows the count and reasons; that is the platform protecting the number.

Chirag Darji

Founder, VGraple CRM

Founder of VGraple CRM and of the VGraple digital agency (Ahmedabad, est. 2011). Builds and operates the platform, runs WhatsApp Business API onboarding for customers, and writes the guides here from first-hand support and product work.

Run your WhatsApp on VGraple CRM

Free forever plan, official Meta WhatsApp Business API, set up in 15 minutes. No card needed.