After a campaign, most people stare at four numbers and try to make them add up. They do not add up. That is not a bug.
Sent, Delivered, Read, and Failed are a funnel, not a pie chart. A message that was Read was also Delivered. A message that was Delivered was also Sent. Failed is the other branch: Meta did not accept or could not deliver it.
If you add the four together, you will “prove” that 100 recipients somehow produced 240 outcomes. If you treat a 46% read rate as a failed blast, you will rewrite copy that was doing its job.
This is the map we want every Samvad customer to use on the campaign report.
The four statuses, in the order they actually happen
WhatsApp itself uses ticks. The campaign report is the same lifecycle, counted.
| Status | WhatsApp equivalent | What it means | What it does not mean |
|---|---|---|---|
| Queued | Nothing yet | The recipient is in the campaign. Samvad has not finished asking Meta to send. | The campaign is stuck. Large lists, daily capacity, and retries all sit here while they wait. |
| Sent | One checkmark | Meta accepted the message. It left Meta’s servers toward that number. | The customer’s phone has it. The customer saw it. |
| Delivered | Two checkmarks | The message reached at least one of the customer’s devices. | They opened the chat. They liked the offer. |
| Read | Two blue checkmarks | The message was displayed in an open WhatsApp chat. | Everyone who got it has read it. People with read receipts off never appear here. |
| Failed | Red error triangle | Meta rejected the send, or could not deliver it. | The same as Skipped. Failed means we tried. |
There is a sixth count on the recipient list: Skipped. Skipped is not a WhatsApp tick. It means Samvad never attempted the send — the number was already known to be unreachable, the plan was out of messages, or Meta’s daily messaging limit ran out before that row was reached.
Failed = tried and lost. Skipped = never tried. Do not mix them when you clean a list.
A 100-recipient campaign that looks “wrong” and is actually healthy
You queued 100 people. The report settles at:
- Failed: 2
- Sent: 98
- Delivered: 94
- Read: 46
That is a valid, expected report.
What happened:
- Two numbers never made it out (not on WhatsApp, opted out, template blocked for that user, and so on). Those are Failed.
- Meta accepted 98. Those are Sent.
- Ninety-four of those 98 phones actually received the message. Those 94 are still inside Sent. Delivered is a subset of Sent, not a second pile.
- Forty-six people opened the chat with read receipts on. Those 46 are still inside Delivered, which is still inside Sent. Read is a subset of Delivered.
The four numbers are not 2 + 98 + 94 + 46. The unique people are:
- 2 failed
- 4 sent but not yet (or never) delivered — phone off, no data, or Meta still holding the packet
- 48 delivered but not recorded as read
- 46 read
2 + 4 + 48 + 46 = 100.
If you only remember one sentence from this post: Read sits inside Delivered, Delivered sits inside Sent, and Failed is the leftover from the attempt.
Why Sent, Delivered, and Read do not jump at the same instant
Samvad does not invent Delivered and Read. After a successful send, Meta sends webhooks:
- Send attempt succeeds → Sent
- Device confirms receipt → Delivered
- Chat is opened (and read receipts are on) → Read
- Send or delivery error → Failed, with Meta’s reason
A campaign can show Completed while Delivered and Read are still climbing. Phones come back online. People open the chat the next morning. Refresh the report before you rewrite the template.
Meta will also skip a separate Delivered webhook when the person is already in the chat: the message is delivered and read in one step. Treat every Read as Delivered. The funnel still holds.
How to calculate rates that mean something
The rate pills on the campaign report show each count as a share of total recipients. That is a snapshot of the whole list, including queued and skipped rows. Useful. Incomplete.
For the quality of the send, compute the funnel:
| Question | Formula | On the 100-person example |
|---|---|---|
| Did Meta take the message? | Sent ÷ (Sent + Failed) | 98 / 100 = 98% |
| Did it reach a phone? | Delivered ÷ Sent | 94 / 98 ≈ 96% |
| Did they open the chat? | Read ÷ Delivered | 46 / 94 ≈ 49% |
| How many attempts died? | Failed ÷ (Sent + Failed) | 2 / 100 = 2% |
Do not use Read ÷ Total as your only score. Total includes people still queued, people skipped for capacity, and people who failed. You will punish a good template for a dirty list or a daily limit.
Do not treat a 40–50% read rate as a disaster. On WhatsApp, a large share of real readers never emit a Read event because they turned read receipts off. Delivered is the honest “it reached a human’s phone” number. Read is a lower bound on attention, not the true open rate.
What each gap is trying to tell you
Failed is high (say above ~5% on a list you thought was clean)
The list, not the copy, is usually the problem. Typical Meta reasons: the number is not on WhatsApp, the user opted out of marketing, the number is the business’s own number, or the template is paused / the WABA is in a bad quality state. Open the recipient table, filter to Failed, and read the error. In Samvad, some of those rows can be retried; numbers that are not on WhatsApp cannot, and should not be, or you will grind the quality rating of your own sender.
Sent is high, Delivered lags for hours
Phones are off, out of data, or on an old WhatsApp client. Wait. If Delivered stays far below Sent the next day, Meta may be holding marketing traffic to protect its “ecosystem engagement” rules, or the template quality is sliding. That is a sender-reputation problem, not a missing comma in the body.
Delivered is high, Read looks “low”
The message arrived. The offer, the time of day, or the first line did not earn an open — or a large part of the audience has read receipts off. Fix the hook and the send window before you assume nobody saw it. Compare Read to Delivered, not to Total.
Queued stays high while the campaign is Processing
Samvad is respecting Meta’s daily messaging limit or your plan’s remaining quota. The report will say when it is waiting for capacity. Recipients still waiting after the carry-over deadline are marked Skipped, not Failed.
Skipped is high
You did not burn those people. They never left. Clean unreachable numbers, wait for the next day’s capacity, or upgrade the plan. Putting skipped contacts into Failed will make you retry people you never attempted.
A five-minute reading order
When a campaign finishes, do this in order. Do not start with Read.
- Failed + Skipped. If these are fat, the send never had a fair audience. Fix the list or the limit before you judge the template.
- Sent. Confirm Meta accepted the rest. A healthy list should show Sent close to Total minus Skipped minus Failed.
- Delivered ÷ Sent. This is delivery. It should be high (often well above 90% once phones have come back online).
- Read ÷ Delivered. This is engagement, with the read-receipt caveat. Use it to compare two templates or two send times, not to declare a campaign dead.
- The recipient table. Filter Failed and read the actual error. Filter Sent with empty Delivered if you are hunting delay. Export CSV if you need Sent at / Delivered at / Read at in a sheet.
In Samvad, Message stats are the funnel. The Recipients block underneath is the same people broken into Pending, Sent, Failed, and Skipped — the mutually exclusive send-attempt states. Use Message stats to judge performance. Use Recipients to decide who to retry, tag, or remove.
What “good” looks like (and what does not)
There is no universal WhatsApp benchmark that survives a festival blast to a cold CSV. Directionally:
- Failed under a few percent on a list you maintain is normal. Double digits usually means the file was never on WhatsApp.
- Delivered / Sent in the mid-90s after a day is a healthy pipe.
- Read / Delivered in the 30–60% band is common for marketing templates once you accept missing read receipts. Utility messages (order confirmed, appointment tomorrow) often read higher because the customer is waiting for them.
A campaign with Sent 98, Delivered 94, Read 46, Failed 2 is not “only 46% successful.” It is a 98% accept, 96% delivery, and a solid open signal on top. The two failures are the cleanup. The 48 delivered-but-not-read rows are the copy and timing conversation.
The numbers will lie if you rush them
Do not screenshot the report thirty seconds after “Campaign completed.” Sent is the only count that is mostly done at that moment. Delivered and Read are Meta confirmations. They arrive when devices and people do.
Do not add Sent + Delivered + Read + Failed.
Do not treat Read as email’s unique-open rate.
Do not retry every Failed row — unreachable and opted-out numbers should stay out.
Do not ignore Skipped because it is not one of the four ticks.
Read the campaign as a funnel: queued → sent or failed → delivered → read. Once those four words mean different things, the report stops arguing with you.
