Official API

Campaign metrics in the official WhatsApp API: from sent to sale, what to measure and where the campaign leaks

By VeyloCRM · · 11 min read

WhatsApp campaigns are often evaluated by the most attractive but least useful report number: how many messages were sent. The official API returns much more than that — delivery, read status, failure reasons, clicks, and responses — and with this organized data, the company discovers at which stage it lost people and how much each sale cost. This guide shows what each status means, the seven-number funnel that allows campaign comparison, and how to link the message to revenue.

The problem with measuring campaigns by “sent”

Almost every company starting campaigns with the official WhatsApp API measures the same thing: how many messages were sent. “We sent to 8,000 contacts” becomes the report number. But sent does not mean delivered, delivered does not mean read, read does not mean someone responded, and response does not mean sale. There is usually a huge gap between the first and last numbers — and it is in this gap that everything the company needs to fix lies.

The official API has a big advantage over any informal broadcast: it returns the status of each message. With this organized data, the company can know exactly at which stage the campaign lost people, what each response and sale cost, and whether it is worth repeating.

The rule of this guide: a WhatsApp campaign is only evaluated by cost per result — response, opportunity, sale — never by volume sent. A campaign with 10,000 sends and 30 sales can be worse than another with 2,000 sends and 25 sales.

Message statuses and what each means

Each message sent through the API goes through statuses reported to the platform the company uses:

Additionally, what happens after reading needs to be captured by the platform: button clicks, text responses, unsubscribe requests, and later, opportunities and sales recorded in the CRM.

Reading enabled

Continue reading for free

Fill out once and unlock this and all other blog articles. We charge nothing — we just want to know who we are writing for.

Takes 20 seconds. Prefer to talk directly on WhatsApp?

The Seven-Number Funnel

The method organizes every campaign into seven numbers, always in the same order. With them, any campaign can be compared to any other.

  • 1. Selected audience: contacts who meet the campaign criteria and have consent to receive messages.
  • 2. Sent: messages accepted by Meta.
  • 3. Delivered: reached the device.
  • 4. Read: opened, with the read receipt caveat.
  • 5. Interactions: button clicks or responses.
  • 6. Opportunities: conversations that became real interest — quote requests, appointments, carts, meetings.
  • 7. Sales: with value, attributed to the campaign within a window defined before sending.

Each transition between two numbers is a rate, and each rate points to a different type of problem.

Where the campaign leaks: diagnosis by stage

Audience → Sent

Difference here indicates failure before delivery: paused or rejected template, account message limit reached, payment problem in the business account, or list with numbers in invalid format.

Sent → Delivered

Significant loss indicates numbers without WhatsApp, outdated numbers, devices turned off for a long time, or marketing messages blocked by Meta. Meta limits how many marketing messages a person can receive from companies in a period to protect user experience — and when this happens, the message returns with an error and is not delivered. Old lists and frequent sending to the same contacts worsen the problem.

Delivered → Read

Low rate points to an unrecognizable profile name and photo, bad sending time, or weak relationship with the contact — they don’t open because they don’t know who it is or don’t expect anything useful from that company.

Read → Interactions

Here the problem is the message: weak first line, unclear offer, missing button, confusing call to action, or wrong audience for that offer.

Interactions → Opportunities

Loss here is customer service: slow response, agent without campaign context, automation that doesn’t understand the reply, or lack of next step.

Opportunities → Sales

Classic commercial problem: price, terms, follow-up, objections. The campaign did its part; the sales process needs to do its.

The cost that counts

Meta charges for template messages by category and destination country, and billing happens on delivered messages. But the real cost of a campaign is higher than Meta’s invoice:

  • Messages: the amount charged for delivered template messages, in the category used.
  • Platform: the proportional part of the tool that sends and organizes.
  • Team: the hours of customer service to respond to those who interacted.
  • Production: time to create the template, image or video, and list segmentation.

Ignoring the team is the most common mistake. A campaign generating 400 responses needs people to attend them — and this cost decides whether the campaign is profitable.

Example with numbers: two campaigns compared

Two campaigns from an online store, with illustrative numbers and a hypothetical marketing message cost of R$ 0.35:

Campaign A — general list of 8,000 contacts, 15% discount storewide:

  • Delivered: 6,800 (85%) — message cost of R$ 2,380.
  • Read: 4,080 (60% of delivered).
  • Interactions: 410 (10% of read).
  • Opportunities (cart started): 160.
  • Sales: 48, average order value of R$ 180 — R$ 8,640, already discounted.
  • Cost per sale considering only messages: R$ 49.58.

Campaign B — 2,000 customers who bought a category in the last 90 days, replenishment with free shipping:

  • Delivered: 1,880 (94%) — message cost of R$ 658.
  • Read: 1,410 (75%).
  • Interactions: 280 (20%).
  • Opportunities: 130.
  • Sales: 52, average order value of R$ 160 — R$ 8,320.
  • Cost per sale considering only messages: R$ 12.65.

Similar revenue, one quarter of the sends, one quarter of the cost, less customer service, and less list wear. By “sent,” campaign A seemed four times bigger. By the funnel, B is much better.

Frequency and list fatigue

An isolated campaign can have great numbers and still be part of a routine that wears out the base. Three signs show fatigue:

  • Delivery rate drops from campaign to campaign in the same audience, with more marketing messages blocked by limits.
  • Read rate decreases even with better messages.
  • Unsubscribes increase with each send.

The fix is to space out sends to the same contact, alternate offers with useful content, segment by behavior — who bought, who opened, who never responded — and remove from routine those who haven’t interacted for many sends. A smaller, active base yields more than a large, tired one.

Time and day: measure before believing

There are many ready-made rules about “the best time to send,” and almost none apply to all businesses. Fashion stores, clinics, and B2B companies have audiences with different routines. The way is to test two or three times with comparable groups from the same list and watch reading and interaction in the first hours. One extra caution: a time that generates many responses outside business hours is only good if there is someone — or well-made automation — to attend at that moment.

Attribution: how to link the message to the sale

Without attribution, the last step becomes guesswork. Four practices solve most cases:

  • Campaign parameter link on URL buttons, so the website and store system record the source.
  • Exclusive coupon per campaign, when commercially sensible.
  • Campaign tag on the conversation, applied automatically to those who interacted, so the sale closed by the agent is recorded with the origin.
  • Attribution window defined before sending — for example, sales within 7 days of interaction. Defining afterward by looking at results is choosing the number that pleases.

Number quality: the metric that protects future campaigns

Besides the funnel, every campaign affects the number’s health. Meta evaluates quality based on user signals like blocks and reports, influencing sending limits and possibly pausing templates. After each campaign, check:

  • Number quality rating and template used.
  • Unsubscribe requests and negative responses — “don’t want,” “stop,” “who is this?”.
  • Sending limit changes on the account.

A campaign that sold well but dropped number quality can cost much more in the following weeks than it earned on the day.

How to test to truly improve

  • One variable per test: first line, image, offer, button, or time. Changing everything at once teaches nothing.
  • Comparable groups: randomly split the same list, not comparing customer lists with cold leads.
  • Control group when possible: part of the list receives nothing, to measure what would have sold anyway.
  • Sufficient size: with a few hundred sends, small differences are noise.
  • Record the learning: a simple campaign history with the seven numbers and what was tested is worth more than any intuition.

The minimal campaign dashboard

One line per campaign, with columns:

  • Date, time, audience, and template category.
  • The seven funnel numbers and the rates between them.
  • Message cost and estimated customer service cost.
  • Attributed revenue, cost per sale, and return on cost.
  • Unsubscribes and number quality variation.
  • What was tested and the conclusion in one sentence.

And the “normal” rates?

It’s natural to want to know if a read rate of 60% is good. But numbers vary so much by segment, relationship with the base, offer type, frequency, and country that any market average misleads more than helps. The important comparison is the company’s own: today’s campaign against previous ones, customer audience against leads, new message against old. In three or four well-recorded campaigns, the company already has more useful references than any published table.

Errors that distort measurement

  • Reporting sent as a result.
  • Treating read rate as exact, ignoring those who disabled read receipts.
  • Not separating failures by reason and treating all as “invalid number.”
  • Forgetting customer service cost in the campaign account.
  • Attributing sales without a defined window or attributing the same sale to multiple campaigns.
  • Resending to those who didn’t receive due to marketing limits, insisting on those Meta is already protecting — this doesn’t solve and can worsen number signals.
  • Ignoring number quality in evaluation.
  • Sending to the entire base instead of segmenting and then concluding “WhatsApp doesn’t work.”

Where to start

In the next campaign, before sending, write three things: the audience and criteria, the attribution window, and the result that defines success. After sending, fill in the seven numbers within seven days, calculate cost per sale including customer service, and record number quality. Repeat in the next campaign changing only one variable. In a month, the company stops debating if the campaign “did well” and starts knowing exactly which audience, message, and time bring sales at the lowest cost.

Frequently asked questions

How to know if a WhatsApp API message was read?

The official API reports the status of each sent message: sent, when Meta accepts the message; delivered, when it reaches the device; read, when the customer opens the conversation; and failed, with an error code explaining the reason. The platform the company uses receives these statuses and can show them by message and campaign. However, there is an important limitation: if the customer disabled read receipts in WhatsApp privacy settings, the read status is not reported. Therefore, the measured read rate tends to be lower than the real one and should be used to compare campaigns with each other, not as an exact number.

Why are marketing messages on WhatsApp not delivered?

The most common reasons are numbers without WhatsApp or outdated, devices turned off for a long time, templates paused due to low quality, account sending limit reached, and payment issues in the business account. Additionally, Meta limits how many marketing messages a person receives from companies in a period to protect user experience, and when this limit is reached, the message returns with an error and is not delivered. Old lists and very frequent sends to the same contacts increase this type of failure. Persistently resending to those who didn’t receive doesn’t solve it; the way is to segment better and space out sends.

Which metrics to track in WhatsApp campaigns?

The most useful is to organize each campaign into a seven-number funnel: selected audience with consent, messages sent, delivered, read, interactions like clicks and responses, opportunities like quote requests or carts started, and sales attributed within a window defined before sending. The rates between each stage show where the problem is: list, company profile, message, customer service, or sales process. Along with the funnel, it’s worth tracking total campaign cost, including messages and service hours, cost per sale, unsubscribe requests, and number quality rating after sending.

Campaign measured through to sale, not just sending.

VeyloCRM sends campaigns via the official WhatsApp API, tags who interacted, brings the conversation to the team with campaign context, and monitors the quality of each number.