Broadcast Delivery Stats, Per-Recipient Status & CSV Export
Sent, delivered, read, failed — per contact, refreshed every 5 seconds, exportable. Plus the honest reason your read count is always too low.
A broadcast delivery report is the per-recipient record of what happened to every message in a campaign — whether WhatsApp accepted it, whether it reached the handset, whether it was marked as read, and if it failed, why. ConvoFly builds one automatically for every broadcast, refreshes it every 5 seconds while the campaign is running, and lets you download the whole thing as a CSV file.
The single most important thing to understand about this report is that the four statuses do not mean what their everyday English names suggest. In particular, "read" systematically undercounts, because any WhatsApp user can switch read receipts off in their own privacy settings — and when they do, a message they genuinely read still only ever reports as "delivered". Read is a floor, never a total, and it is the wrong number to divide anything by.
This guide explains each status precisely, the six failure reasons ConvoFly groups errors into, how to see and export the per-recipient list, and how to turn the report into your next campaign.
What each status means — and what it does not
This table is the heart of the article. The right-hand column is the one that prevents bad decisions.
| Status | What it proves | What it does NOT prove | Reported by |
|---|---|---|---|
| Sent | WhatsApp accepted the message and is attempting delivery. | That it arrived. A number can be accepted and never reach a device — the phone may be off, or the number may not be in use. | WhatsApp, on hand-off |
| Delivered | The message reached the recipient's device. | That a human saw it. It proves arrival, not attention. | WhatsApp, from the device |
| Read | The recipient opened the chat and has read receipts switched on. | Anything at all by its absence. A message with no read status may have been read attentively by someone with receipts disabled. Never use read as a denominator. | WhatsApp, only with recipient consent |
| Failed | Delivery was abandoned, with a reason attached. | That the customer did anything wrong, or that you were charged — you are only billed on delivery. | WhatsApp, as an error code |
| Queued / Sending | The message is waiting its turn or is in flight right now. | A problem. Large lists take time to work through; this is normal progress. | ConvoFly |
| Skipped | ConvoFly deliberately did not send — for example the contact hit a frequency cap or was suppressed. | A failure. Nothing was sent, so nothing was charged. | ConvoFly |
| Replied | The contact wrote back after the send. | It is not a stage of the delivery funnel — it sits alongside it. A message can be both read and replied. | ConvoFly, from the conversation |
Why the read count is not a reliable denominator
Every WhatsApp user can turn read receipts off in the app's own privacy settings. It is a normal, widely used consumer feature, not an edge case — and it is entirely outside your control and ConvoFly's. When it is off, the recipient's phone simply never sends the "read" signal back, so the message stays at delivered forever, however carefully the person reads it. see WhatsApp's privacy settings guide
Three consequences follow, and they are the difference between a report you can act on and one that quietly misleads you:
- Your read rate is a floor, not a measurement. If 940 messages were delivered and 520 show as read, the true number of people who read it is at least 520 and unknowably higher. Reporting "55% read rate" as a fact overstates your certainty.
- Never divide by read. Calculating a click rate or reply rate against reads inflates it by exactly the amount that read receipts are switched off in your audience — a figure you cannot know. Divide by delivered, which is measured consistently for everyone.
- Do not compare read rates across audiences. Two campaigns to different countries or age groups can show very different read rates purely because privacy-setting habits differ, with no difference in actual attention.
The same caveat applies wherever "read" appears elsewhere in ConvoFly, including the Didn't read option in Re-target. That audience will always contain people who did read your message but keep receipts off, so write the follow-up so it does no harm if they already saw the first one.
The numbers on the broadcast page
Open Broadcasts and click a campaign. Across the top you get a row of stat cards: Read, Delivered, Sent, Clicked, Replied, Failed, Sending, Queued and Skipped.
Two of them are commonly misread. Clicked only ever has a value if the campaign was set up with click tracking enabled — otherwise it sits at zero regardless of what customers actually did, and it is not part of the delivery funnel. Replied is likewise orthogonal to delivery: the same person can be counted in both Read and Replied, so the cards do not sum to your recipient total.
Underneath, a progress bar splits the campaign into read, delivered, sent, failed and pending, where pending is queued plus sending. While the broadcast is live the page says "live · refreshing every 5s" and updates itself; once the campaign reaches done or cancelled the polling stops and the final figures stand.
Why messages fail: the six buckets
Under the heading "Why messages failed", ConvoFly groups WhatsApp's raw error codes into six plain-English categories, so you can see at a glance whether the problem is your list, your template or your timing.
| Reason shown | What actually happened | What to do |
|---|---|---|
| Not on WhatsApp | The number is valid but has no WhatsApp account. | Nothing — remove it from your list. Never retried. |
| Invalid number | The number is malformed or does not exist. | Fix the country code and formatting at the source of your data. Never retried. |
| Outside 24h / re-engagement | You tried to send something that is only allowed inside an open customer service window. | Use an approved template for the message instead of free text. |
| Rate limited | You pushed against WhatsApp's pacing or your daily cap. | Usually self-correcting — see messaging limits and tier caps. |
| Template issue | The template was rejected, paused, or the variables did not match its structure. | Fix the template and re-approve. A test send catches most of these first. |
| Other | Anything ConvoFly could not confidently classify. | Open the per-recipient view — the raw error text from WhatsApp is shown there. |
The first two are permanent and the rest are usually temporary. That distinction drives the retry behaviour described below, and it is also why a rising Not on WhatsApp count is a list-hygiene problem rather than a technical one.
How to see every individual recipient
- Open Broadcasts and click the campaign you want to inspect.
- Click View recipients.
- Use the tabs across the top — All, Sent, Failed, Queued, Skipped — to narrow the list.
- Read across the columns: Phone, Status, Delivery, Reason, Tries, Sent and Replied. The Reason column shows the category plus the raw error text from WhatsApp, which is where you look when the category says "Other".
One practical limit: this on-screen table shows up to 2,000 rows. For a campaign larger than that, use the CSV export, which has no row limit.
Exporting the full report to CSV
- Open the broadcast, or its recipients page.
- Click Export CSV.
- Open the downloaded file in Excel, Numbers or Google Sheets.
The file has 8 columns: phone, status, delivery_status, failure_reason, error, attempts, sent_at and replied_at. Note what is not there: there is no clicks column, so the CSV is a delivery record rather than a full engagement record.
Two useful things to do with it. Sort by failure_reason and count the rows marked not-on-WhatsApp or invalid — those are numbers to correct or delete in whatever system your contacts come from, and every campaign you send to them is wasted work. Then filter to rows with a value in replied_at: that is your engaged list, and it is worth keeping outside ConvoFly as a record of who actually talks to you.
Exporting is restricted to admin users, so if you cannot see the button, ask whoever administers your account.
Retrying the failures worth retrying
When a campaign finishes with failures, the detail page offers ↻ Retry failed, with the count of eligible messages shown in the button itself. Clicking it asks you to confirm: "Re-queue recoverable failures for another attempt? Numbers not on WhatsApp / invalid are skipped automatically."
That exclusion is the important part. Retrying a number that is not on WhatsApp achieves nothing and repeatedly sending to bad numbers is exactly the behaviour that damages a sender's standing, so ConvoFly refuses on your behalf. Meta ties your ability to grow your messaging limit to sending high-quality messages across your numbers and templates (Meta, WhatsApp messaging limits), which makes list hygiene a growth issue rather than a tidiness one.
The same page also has ⏸ Pause, ▶ Resume, ✕ Cancel and Duplicate. Cancelling warns that unsent recipients will be skipped — useful if you spot a mistake in a long-running send rather than watching it finish.
What failures cost you
Nothing, directly. Under Meta's per-message pricing, in force since 1 July 2025, "You are only charged when a template message is delivered" (Meta, WhatsApp pricing). A failed message is not billed, and neither is a skipped one. Rates differ by country and Meta publishes them in downloadable rate cards rather than on the page itself, so check there for your own market.
The real cost of failures is reputational rather than financial: they signal a list that has not been maintained, and that is what eventually shows up as a quality problem. See managing opt-outs, frequency and quality for the controls that keep this in check.
What a healthy report looks like
- Delivered close to sent. A gap of a few percent is normal; 20% is a list problem. Compare the two cards directly.
- Failures concentrated in one bucket. Scattered failures across all six categories usually means a template or account issue; a single tall bucket is a specific, fixable cause.
- Replies present at all. A campaign with 0 replies from 1,000 delivered messages has an offer problem, and no amount of list work will fix it.
- Read treated as a floor. If you are reporting a read rate to anyone, say "at least" in front of it.
- Rising failures over successive campaigns. The clearest early warning you have. Audit opt-in and list source before it affects your quality rating.
Turning the report into your next campaign
The report is not just a record — it is the audience picker for your follow-up. Rather than exporting a CSV and re-uploading a filtered version, use Re-target, which reads these same outcomes directly: pick the past broadcast, then choose Replied, Didn't reply, Didn't read, Wasn't delivered or Failed to send.
A sensible default rhythm is to send the campaign, wait 24 to 48 hours for statuses and replies to settle, then read the report once and build exactly one follow-up from it. Reading it obsessively in the first hour tells you little, because a large list is still working through the queue and the read counts lag behind reality by design.
Frequently asked questions
Why is my read count lower than my delivered count?
Mostly because recipients can switch read receipts off in WhatsApp's privacy settings. When they do, a message they genuinely read still only ever reports as 'delivered'. Treat read as a floor, never a total, and never use it as the denominator for a click or reply rate — use delivered instead.
Can I see delivery status for each individual recipient?
Yes. Click 'View recipients' on any broadcast for a table of phone, status, delivery, reason, tries, sent and replied, filterable by All / Sent / Failed / Queued / Skipped. The on-screen table shows up to 2,000 rows; the CSV export has no limit.
Can I export broadcast results?
Yes — click 'Export CSV'. The file has 8 columns: phone, status, delivery_status, failure_reason, error, attempts, sent_at and replied_at. There is no clicks column, so it is a delivery record rather than a full engagement record. Export is admin-only.
Why did some of my broadcast messages fail?
ConvoFly groups WhatsApp's error codes into six categories: Not on WhatsApp, Invalid number, Outside 24h / re-engagement, Rate limited, Template issue, and Other. The first two are permanent and are never retried; the rest are usually temporary.
Am I charged for a message that failed?
No. Meta's per-message pricing states you are only charged when a template message is delivered, so failed and skipped messages are not billed. Per-country rates are published in Meta's downloadable rate cards rather than inline.
How often does the broadcast report update?
Every 5 seconds while the campaign is live — the page shows 'live · refreshing every 5s'. Polling stops once the broadcast reaches done or cancelled.