📣 WhatsApp Broadcasts

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.

StatusWhat it provesWhat it does NOT proveReported 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:

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 shownWhat actually happenedWhat to do
Not on WhatsAppThe number is valid but has no WhatsApp account.Nothing — remove it from your list. Never retried.
Invalid numberThe number is malformed or does not exist.Fix the country code and formatting at the source of your data. Never retried.
Outside 24h / re-engagementYou 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 limitedYou pushed against WhatsApp's pacing or your daily cap.Usually self-correcting — see messaging limits and tier caps.
Template issueThe 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.
OtherAnything 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

  1. Open Broadcasts and click the campaign you want to inspect.
  2. Click View recipients.
  3. Use the tabs across the top — All, Sent, Failed, Queued, Skipped — to narrow the list.
  4. 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

  1. Open the broadcast, or its recipients page.
  2. Click Export CSV.
  3. 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

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.

Need help? Message us