Skip to main content
After a broadcast sends, DMLY reports how it went: on the Broadcasts list and on each individual broadcast. The numbers are useful, but only some of them are real on some channels. Read this first so you don’t chase a zero that was never going to be anything else.

What DMLY actually measures

A broadcast only ever counts Delivered and Opened on WhatsApp and SMS, and SMS reports Delivered but not Opened. Telegram sends no delivery confirmations at all. Facebook and Instagram do send them, and DMLY records them against the individual message in the Inbox, but it doesn’t add them up onto the broadcast, so Delivered and Opened stay at 0 on Meta channels no matter how well the broadcast performed. A paid Marketing Messages broadcast is no different here, but Meta reports its campaign totals in a separate panel: see Paid campaign results.
Two numbers work differently:
  • Replies counts contacts who sent you a message (not a comment) within 24 hours of receiving the broadcast. It works on every channel. If a contact got more than one broadcast, the reply counts toward the latest one only, and several messages in a row count once. It appears as a stat card on the list and on the broadcast, and as the last step of the funnel.
  • Engagement over time plots running totals of Delivered, Read and Replies at 1, 2, 3, 6, 12 and 24 hours after the broadcast started sending. Delivered and Read only move where the channel reports them (WhatsApp, plus SMS for Delivered). Replies moves on every channel. Broadcasts sent before this chart was measured read zero.
To see whether a campaign actually landed, use Delivered and Opened on WhatsApp, and the Inbox: every broadcast send is recorded in the contact’s conversation thread, so replies arrive there like any other message.

Where to find the numbers

1

Open Broadcasts

Go to Broadcasts. The four cards at the top (Sent, Delivered, Replies and Failed) are totals across every broadcast on the channel you’re currently working in. Switch channel and the totals change with it.The Broadcasts page with the Sent, Delivered, Replies and Failed totals cards
2

Open one broadcast

Select View analytics on any broadcast to see its own Sent, Delivered, Opened, Replies and Failed, plus the Conversion funnel.A sent WhatsApp broadcast's page showing its template, the Sent, Delivered, Opened, Replies and Failed tiles highlighted, and the Why messages failed breakdown

What each number means

Sent means accepted by WhatsApp, Meta, your SMS gateway or Telegram, not that it arrived. That is what Delivered is for, which is why a WhatsApp broadcast is the only kind where you can tell the difference. The Conversion funnel is these same numbers as a percentage of Sent. On Facebook, Instagram and Telegram the Delivered and Opened bars stay empty, for the reasons above rather than because of anything you did. The Replies bar still fills. The Conversion funnel with Sent, Delivered, Opened and Replies bars, beside the Engagement over time chart
A broadcast that reads Sent with 0 recipients isn’t broken; its audience matched nobody. Check the segment under Audiences.

Messenger delivery (Facebook and Instagram)

Facebook and Instagram broadcasts get one extra panel, Messenger delivery, and it is real. It splits recipients by how Meta let the message through: those reached inside Meta’s 24-hour messaging window, those reached because the contact had opted in to notifications, and those skipped because neither applied. This is the panel to read on Meta channels. It answers the question Delivered can’t. On a paid Marketing Messages broadcast it gains two rows: Sent as a paid marketing message, and Skipped — messaged within the last 12 hours for subscribers Meta wouldn’t let you message again yet. Skipped subscribers aren’t counted as failed, and this broadcast doesn’t send to them later.
Failed recipients count toward this panel’s total but don’t get a row of their own, so on a broadcast with failures the three percentages add up to less than 100%.
A paid Marketing Messages broadcast on Facebook gets one more panel, Paid campaign. It shows Meta’s own figures for the whole campaign: Delivered, Read rate, Spend and Cost per delivered.
  • Meta reports these, not DMLY. Meta gives no per-person receipts for paid messages, so the cards at the top only ever count Sent. Read delivery from this panel instead.
  • They refresh about once an hour. Last checked says when. A figure Meta hasn’t reported yet reads Not reported by Meta yet, not 0. DMLY stops refreshing them 28 days after the broadcast was created.
  • Money is in your ad account’s currency. It’s what Meta charged your ad account, not your DMLY bill. Spend and Cost per delivered only show to teammates with the View finance (invoices, payments, orders) permission; everyone else sees Delivered and Read rate.
See What it costs.

Per-template performance

Every WhatsApp template also tracks its own performance, separate from any single broadcast. A template can go out through a broadcast, an automation flow, a sequence step, an agent reply sent from the Inbox, or an automated notification (an appointment reminder, an invoice), and this view rolls up every one of those sends together, not just the ones sent from Broadcasts.
1

Open Templates

Go to Messaging → Templates. Each row shows lifetime Sent, Delivered and Read counts, with the read rate (against Delivered) shown alongside, plus Replied.
2

Open a template's performance

Select View performance on a template’s row. The drawer shows five lifetime totals (Sent, Delivered, Read, Replied, Failed) and a 30-day daily chart: bar height is that day’s sends, with a darker fill showing how much of that day’s sends were read.
3

Open the failures

When Failed is above zero, that tile is selectable. Select it and a Failed sends list appears below the chart: up to the 100 most recent failed sends of this template, each with the contact, the reason it failed, and the date. With nothing to show it reads No failed sends recorded.
Two things to keep in mind about that list. It is per template, not per campaign, so it spans every send of the template and a broadcast’s failures sit interleaved with failures from reminders, flows and inbox sends. And the reason beside each contact is the one WhatsApp returned, so it can be a bare error code rather than a sentence.
Sandbox and test sends never count here. A send only reaches these numbers once WhatsApp has actually acknowledged it; nothing sent on demo credentials, or before a live WhatsApp number is connected, shows up in a template’s performance.
Replied is stricter than it sounds: it only counts an inbound message that explicitly quotes the template (a button tap or a swipe-reply), not any message a contact happens to send afterward. A free-text reply that doesn’t quote the template isn’t counted, so Replied undercounts genuine engagement rather than inflating it. Failed here is narrower than the broadcast-level Failed above: it only counts a template WhatsApp accepted and then reported back as undelivered. A send that never reached WhatsApp at all (no connected number, a blank template parameter, a rejected request) isn’t counted as Sent or Failed; it simply doesn’t appear in a template’s numbers at all.
These counts start from when this feature shipped, not from when the template was created; a template you’ve used for months will only show real numbers from that point forward.

What a failure actually means

DMLY records a reason for every failed recipient. Four places show it:
  • On the broadcast itself: once anything has failed, the broadcast page has a Why messages failed panel, grouped by reason, most common first. It gives counts per reason, not names.
  • On the broadcast itself, per contact: the Recipients panel lists every recipient, 50 to a page. Filter it by status (for example Failed, with counts) to see each failed or skipped contact with its Reason and the time it was sent. This works on any channel.
  • In the app, on WhatsApp only: the Failed sends list in a template’s performance drawer, described above. It names each contact with the reason and the date, but it covers every send of that template rather than this campaign, so you have to pick your broadcast’s failures out by date.
  • Through the API, for any broadcast on any channel: one row per recipient, each with its own error. Useful if you want the list outside DMLY.
To work out why, go through the likely causes in order:
Every channel blocks opted-out contacts at the moment of sending. They receive nothing, but they still count as recipients and still increment Failed.This happens because Reachable contacts only in the broadcast’s audience step is off unless you tick it, so opted-out contacts are pulled into the audience in the first place. Tick it to keep them out and your Failed number honest. It doesn’t change who receives the broadcast; opted-out contacts were never going to get it either way.
DMLY re-checks template approval at send time, not just when you schedule. If Meta revoked or paused the template between scheduling and sending, every recipient fails. See Message templates and WhatsApp rules and limits.
If a contact hasn’t messaged you in the last 24 hours and hasn’t opted in to notifications, Meta won’t accept the message. Those recipients fail and appear as skipped in Messenger delivery.
A paid Marketing Messages send fails for a recipient when there’s no Meta ad account to pay for it, the ad account needs reconnecting, Meta refuses to create or send the campaign, or the contact stopped marketing messages (or their subscription expired) after you built the audience. If every recipient failed, suspect the ad account first. See Connect your Meta ad account.
No phone number, no identity on the broadcast’s channel, or a channel whose connection has broken. Check the channel is still connected under Channels.
If a broadcast fails 100%, suspect the broadcast rather than the contacts: a revoked WhatsApp template, a disconnected channel, or a broadcast saved with no message content at all; nothing stops you saving an empty one.
Sent plus Failed may not equal the recipient count, in either direction. It can fall short because contacts deleted between scheduling and sending are skipped without counting as failures. On WhatsApp and SMS it can also overshoot: a message accepted by the channel counts as Sent, and if the channel later reports it as undeliverable that same recipient also counts as Failed.

Getting results out of DMLY

Broadcast results are available as webhooks if you want them in another system. Note what they mean: broadcast.sent fires when sending starts, not when it finishes. The one carrying the final counts is broadcast.completed.