How do I track WhatsApp message delivery and read status?
Every message you send through the WhatsApp Business API reports its own lifecycle back to you through status webhooks. As the message moves from your server to Meta and on to the recipient's phone, WhatsApp fires a sequence of events — sent, delivered, read, and sometimes failed — each stamped with the message ID and a Unix timestamp. Track those events, store them against the customer and the campaign, and you stop guessing: you can see real reach (not just how many you dispatched), catch failures within minutes instead of days, and read the early signals that protect your quality rating. Here is exactly how each status is generated and how to turn the raw stream into reporting a business can act on.
Quick answer
Subscribe to WhatsApp status webhooks so every message reports back sent, delivered, read, or failed. Aggregate those events per template and per campaign to see true reach, spot failures early, and protect your quality rating.What each status actually means
WhatsApp does not just tell you a message left the building — it reports four distinct states, and the difference between them is where the insight lives. Confusing 'sent' with 'delivered' is the single most common reporting mistake, so it pays to be precise about what each ticked box represents.
- Sent: Meta accepted your message and it is on its way to the recipient. One grey tick. This only confirms your API call worked — it says nothing about the customer.
- Delivered: the message reached the recipient's device. Two grey ticks. This is your true reach denominator — the number that actually matters for open-rate maths.
- Read: the recipient opened the chat and the message was displayed. Two blue ticks. Note this only fires if the user has read receipts turned on, so read counts are always a floor, never the full picture.
- Failed: the message could not be delivered — invalid number, user blocked you, template paused, or a policy or rate issue. The webhook carries an error code and title telling you why.
- Deleted: if a recipient deletes a message you sent, a status update can reflect that too, which is useful for audit trails.
How the status stream reaches you
Delivery and read tracking is not something you poll for — WhatsApp pushes it. When you configure your WhatsApp Business Account, you subscribe your webhook endpoint to the 'messages' field, and from then on every status change POSTs a JSON payload to your server in near real time. Each payload contains the message ID (id/wamid) you received when you first sent the message, the new status, a timestamp, the recipient's WhatsApp ID, and — for a 'failed' event — an errors array with a numeric code and human-readable title. The job of your platform is to match that incoming ID back to the original send, update the record, and move on. Because statuses arrive out of order and can be retried, your handler should be idempotent: only ever advance a message forward along sent → delivered → read, and never let a late 'sent' overwrite a 'delivered' you already logged. With InfiQ this plumbing is already built — the webhook is registered, verified, and de-duplicated for you, and each status lands against the right contact and campaign automatically.
Turning raw events into campaign analytics
Per-message ticks are only half the value. The other half comes from rolling those events up so you can compare a Diwali broadcast against a re-engagement flow, or one template variant against another. Aggregate on two axes — by template and by campaign — and compute rate metrics rather than raw counts, because a 92% delivery rate on 10,000 sends tells you something a bare '9,200 delivered' does not.
- Delivery rate = delivered ÷ sent. A sudden dip usually means stale or invalid numbers in your list, or a quality problem throttling your throughput.
- Read rate = read ÷ delivered. Treat this as directional, since it depends on recipients' read-receipt settings, but big swings between templates are still a real signal about subject lines and timing.
- Failure rate and reason mix: group failures by error code so 'invalid number' (a data-hygiene fix) is separated from 'template paused' (a content fix) or 're-engagement message limit' (a policy fix).
- Time-to-delivered: if messages sit in 'sent' for a long time before flipping to 'delivered', you may be hitting messaging-limit throttling on a warming number.
- Segment by category — marketing, utility, authentication — since delivery and read behaviour, and cost, differ sharply across them.
Why this protects your quality rating and your budget
Status data is not just a vanity dashboard — it is an early-warning system. A climbing failure rate or a falling read rate on marketing sends is often the first visible sign that recipients are ignoring or blocking your messages, which is exactly what drags a number's quality rating from green toward red and, eventually, caps your messaging limit. Watching these curves lets you pause a weak template before Meta does it for you. The numbers matter for cost too: since 1 July 2025 WhatsApp bills per delivered message by category (marketing, utility, authentication), so your 'delivered' count is literally your invoice basis — the free-form 24-hour service window lets you reply to inbound conversations without a per-message charge today (service messages are free until 30 September 2026 and become chargeable from 1 October 2026), but it is a service window, not a billing unit. Reconciling delivered-message counts against your bill is the cleanest way to keep spend honest. InfiQ shows this in transparent ₹ pricing (ex-GST), so what you track and what you are charged line up.
Frequently asked questions
What is the difference between 'sent' and 'delivered' on WhatsApp?+
Can I always see whether a customer read my message?+
How do I know why a message failed?+
Do I have to build the webhook handling myself?+
Does the delivered count affect what I pay?+
How quickly do status updates arrive?+
Why would messages stay in 'sent' for a long time before delivering?+
Can I track delivery and read status per campaign, not just per message?+
See every tick in one dashboard
Book a demo with InfiQ and watch sent, delivered, read, and failed statuses roll up per campaign automatically — no webhook code, transparent ₹ pricing on Meta's rates, and full BSUID ownership from day one.