Read your send, click and sales figures in order, like the links of a chain: put the sent, delivered, read, clicked and ordered counts side by side. Divide delivered by sent, and divide read, clicked and ordered by delivered. Compared with your previous campaigns, the link where the rate drops most tells you where to look: the list and consent, whether the message reaches the phone, the sender name and first line, the offer and link, or the landing page and the site. Measure the campaign’s return by the orders that arrive within a window you set before sending, by revenue per delivered message and by cost per order, and record opt-outs on the same row.
At the end of this guide you will be able to check whether every rate in your report sits on the right base, and to decide what to change first based on the weakest link. You will also see how many days to count orders for, why your messaging tool, your analytics and your ad platform credit the same order differently, under which conditions two campaigns can be compared, and which columns to fill in on a monthly sheet.
Match the report’s columns to the links in the chain
Messaging tools may label the same step differently: “delivered” may appear as “received”, “read” as “seen”, and “order” as “conversion”. Before you interpret any figure, match each column to a link and note which system it comes from. Your messaging tool supplies the sent, delivered and read counts. Orders and revenue are either matched to the message by the same tool using its own rule, or taken by you from your e-commerce platform’s order report. In marketing, this sequence from send to order is also called the message’s conversion funnel.
The chain starts with the group you select for the campaign. People without consent, people who have asked to leave the list and people with wrong numbers should be removed before sending, so not everyone in the group can receive the message. In Pushouse, when you describe the group you want in one sentence in Website AI Reporting, the number of people, how many of them can be messaged and the group’s net revenue appear side by side. The gap between the first two numbers is the people you lose before the message even leaves. In automated flows such as cart reminders, win-back or birthday messages, the group is the customers who triggered the flow in that period; build the chain for them month by month. For cart reminders, we cover which carts to count in our article on how to calculate the cart recovery rate.
The next three links come from WhatsApp’s message statuses. According to Meta’s status webhook reference, “sent” means the message left Meta’s servers, “delivered” means it reached the customer’s device, and “read” means it was displayed in an open chat on the customer’s device. Do not treat the read count as exact. The WhatsApp Help Center notes that the recipient may have turned off read receipts in their privacy settings, and that a read receipt may not be sent the first time someone receives your message. The read count in your report tells you that at least this many people opened the message.
In the click column, use the number of people who tapped rather than the number of taps; the same customer can tap a link three times. Meta’s template analytics documentation also reports total clicks separately from the number of distinct WhatsApp accounts that tapped a button. According to the same document, these clicks are reported only for URL and quick-reply buttons in the template. If you put the link in the message text instead, the click count comes from your tool’s link tracking or from visits in your analytics, if either exists; otherwise the column stays empty. Because these sources can give different figures for the same campaign, note in your sheet which one you used.
The last link is the order; which orders are credited to the campaign depends on the counting window and rule described below. Add one more line next to the chain: the people who asked to leave the list. Opt-outs come from the same send as the orders and are part of what the campaign costs you.
Which number should each rate be divided by?
A rate only tells you something if everyone counted in the numerator is also counted in the denominator. When you ask how to read a WhatsApp campaign report, the first job is to decide once what each number is divided by, and to use the same base for every campaign. Because read receipts do not come from every customer, some customers appear to have clicked without reading; divide clicks by reads and the rate comes out higher than it really is. If your count includes every order placed by message recipients, dividing orders by clickers causes a similar error: a customer who came to the site without tapping the link and then ordered is in the numerator but not in the denominator. Use these bases:
- For the delivery rate, divide delivered messages by sent messages. If your report lists messages by their latest status, get the delivered count by adding the “delivered” and “read” columns; according to Meta’s status reference, no separate “delivered” status is sent for a message that is read immediately.
- For read and click rates the denominator is again delivered messages; for clicks, the numerator is the number of people who tapped the link.
- If your count includes every order placed by message recipients, divide orders by delivered messages as well. If you count only orders that came through the link, you can divide orders by the number of people who clicked; that rate shows how the landing page and the site perform.
- Record opt-outs per 1,000 delivered messages; that is the only way to put sends of different sizes side by side.
Here is a fictional example; the figures were chosen only to show the division and are neither a target nor an industry average. A store sends a campaign message to 5,000 people, 4,600 messages are delivered, 368 people tap the link, and recipients place 46 orders within seven days. A report that divides orders by sent messages shows 0.92%, one that divides by delivered messages shows 1%, and one that divides by the people who tapped the link shows 12.5%. All three figures describe the same campaign. The third is also inflated, because some of the 46 orders may have come from customers who never tapped the link. Before you copy a “conversion rate” from an agency or a tool into your own sheet, ask what it was divided by.
The wrong base misleads even more when you compare two campaigns. Suppose a second campaign also goes to 5,000 people, but because some of the numbers come from an old list, only 3,500 messages are delivered and 45 orders arrive. Divided by sent messages, the two campaigns look almost identical: 0.92% and 0.90%. Divided by delivered messages, the picture changes. In the second campaign about 1.3% of delivered messages turned into orders, but 30% of the messages never reached the customer. A report based on sent messages hides this list problem; judge the list by the delivery rate and the message by rates based on delivered messages, and you can tell the two problems apart.
The link where the rate drops shows what to fix
Compare each link’s rate with your previous sends to the same kind of group, and start wherever you see a clear drop.
From list to send: consent and record quality
The gap between the number of people in the group you selected and the number of messages sent shows whom you are able to message; the text of the message has no effect on it. In Pushouse’s WhatsApp bulk messaging module, the reason is recorded for every recipient left out of a send: consent withdrawn, inactive membership, a number that could not be resolved, or caught by a filter. Count the reasons separately for each campaign. If consent withdrawals are rising, look at the frequency and content of your previous sends; if unresolved numbers are piling up, look at the phone field on your sign-up and checkout forms. If most of the gap is customers who never gave consent, review at which step and with what wording you ask for it before you touch the message text.
From send to delivery: numbers and reach limits
A message sent to a number that is not on WhatsApp, or that is incomplete, is not delivered. Even with a correct number, a message does not always arrive. According to Meta’s documentation, a customer can switch off a business’s marketing messages, after which campaign messages sent to them are not delivered. WhatsApp can also limit the number of marketing messages a person receives from businesses within a given period, and a message that hits this limit is not delivered either. If your tool shows Meta’s error code for undelivered messages, 131050 means the customer has stopped marketing messages from you and 131049 means the message hit the per-user limit.
If the delivery rate is low on the first campaign to a new list, check the numbers first. If it falls from campaign to campaign for sends to the same group, more customers may be switching off marketing messages or hitting the limit. We cover how both relate to sending frequency in detail in our guide to campaign message frequency.
From delivery to read: sender name, first line and timing
Before opening the chat, the customer often sees only the notification: who sent the message and how it begins. If the read rate is clearly below your previous campaigns to the same kind of group, check these two first. The business name in the notification should match the name the customer sees on your site and on the parcel. The first line should state the offer and its scope in concrete terms; you will find ten texts written this way in our campaign message examples. Of the two openings below, the first tells the customer nothing in the notification; the second gives the offer and the end date in the first line:
Hi {{customer name}}, as the {{store name}} family we have special offers for you. Take a look: {{link}}
{{customer name}}, the {{discount rate}}% discount on winter boots ends {{end day}} at 11:59 pm. Pick your size: {{category link}}
Tap the button below to stop promotional messages.
Send time can affect reads as well. If your tool shows how reads spread over the hours after sending, check when your customers open messages most and move your next send closer to those hours. Because reads are undercounted, compare read rates only between campaigns sent to similar groups; the share of customers who have turned off read receipts can vary from one group to another.
From read to click: the offer and the link
A customer who opens the message but does not tap the link may not have found the offer worth it, or may not have seen the next step. If the click rate is low, check whether the offer suits this group, whether the message has a single, visible link or button, and whether the link opens the page it promises. Packing three products, two categories and a coupon code into one message can scatter clicks; tie the campaign to one category and make the link open that category’s page. Before sending, open the link inside WhatsApp on your own phone and make sure the right page loads.
From click to order: the landing page and the site
If many people tap the link but few order, the message has most likely done its job and the loss starts on the landing page or the site. The first places to look are a price on the page that differs from the message, a code that does not apply in the cart, the wanted size being sold out, and a checkout step that is hard to complete on a phone. For the order in which to look for these obstacles and how to test the click count, see our article on what to check when a campaign gets clicks but no sales. We explain how to measure at which step visitors drop out between the product page and the order in our guide to increasing e-commerce sales.
Read opt-outs next to every link
If opt-outs per 1,000 delivered messages rise along with orders, the gain may not last: a customer who leaves the list drops out of the recipients of later campaigns. If opt-outs creep up with each send while clicks fall, you may be writing to the same group too often; weigh this together with the other signs in the frequency guide. Count customers who ask to leave by writing to you, rather than by tapping the button, as well.
Set the order-counting window before you send
There are two common ways to count orders after a message. In the first, every order a recipient places within the window you set is credited to the campaign, even if the customer came from your app or a search engine without tapping the link. In the second, only orders from visits opened through the link in the message are counted. The first does not miss customers who saw the message and came in another way, but it also takes in orders that have nothing to do with the message; the second is narrower. If you used a campaign-only discount code, counting orders that carry the code is a third way with its own error: a recipient who orders without entering the code is left out, and a customer who heard about the code from someone else gets in. Write the method you use at the top of your sheet and always count campaigns the same way.
The length of the window changes the result too. Tying the window to the campaign’s own length is a reasonable start: until the night the campaign ends for a three-day sale, and, for example, seven days for a new-product announcement with no end date. The longer the window, the more unrelated orders enter the count; the shorter it is, the more you miss customers who take a few days to decide. Write the window down before sending. A window chosen after you have seen the results may, without your noticing, be the one that makes the campaign look best.
When the window closes, enter the first result in your sheet. Once cancellations and returns are final, for example when your return period has passed, add net orders and net revenue to the same row. Use one definition of revenue for every campaign, such as the amount after discounts and excluding shipping.
Why does the same order look different in three reports?
Your messaging tool, your analytics and your ad platform credit an order to a source using different rules. The messaging tool uses its own counting window and rule. Google Analytics credits the order to one or more of the visitor’s touchpoints before the purchase, according to its attribution model; according to Google’s attribution settings page, for key events other than acquisition events, the window that sets how many days back touchpoints are considered is 90 days by default. Depending on the attribution setting, Meta’s ad platform can credit a purchase to an ad if it happened within 1 or 7 days of a click on the ad’s link, or within 1 day of the ad being shown.
Picture this customer: on Monday they tap your Instagram ad and look at a product, on Tuesday they receive your WhatsApp campaign, and on Wednesday they search for your store’s name on Google and place the order. If your messaging tool counts recipients’ orders, it credits this order to the campaign. If the ad platform counts seven days after a link click, it credits the same order to the ad. Analytics credits only the touchpoints it recorded; since the customer never tapped the link in WhatsApp, WhatsApp gets no share. Add up the channels’ results and a single order is counted more than once.
Rather than adding up channel results, use each report for its own question. The message report is for comparing a campaign with another of the same kind; analytics is for following the visitor’s path through the site. If you add source and campaign parameters to the link in the message, for example utm_source=whatsapp and a utm_campaign that carries the campaign’s name, you can see that campaign’s visits separately in analytics. Our guide to digital marketing tools covers how to check day by day why the order count in your platform’s panel does not match analytics, and how to ask a vendor what window they count orders in.
Calculate revenue per delivered message and cost per order
To compare campaigns of different sizes, divide revenue by delivered messages. Delivered messages are also the base for the WhatsApp message fee: Meta’s pricing documentation states that template message fees are charged only for delivered messages and that every marketing template message is charged. In Pushouse’s bulk message report you can also follow how many messages arrived and how many orders came in after the send; credits for messages that did not arrive are refunded.
Again with fictional figures, consider two campaigns. The first brings in 55,200 Turkish lira (TL) from 4,600 delivered messages: 12 TL per delivered message. The second goes to a narrower group and brings in 30,000 TL from 2,000 delivered messages: 15 TL per message. On total revenue, the first campaign stands out. Revenue per delivered message shows that the second campaign’s group and offer produced more sales from each message; at your next send you can try writing to similar customers with a similar offer.
Calculate cost per order from two items: what you paid your messaging tool for the campaign, and the total discount used in the orders. Divide the sum of the two by the number of orders within the counting window, and compare the result with the gross profit an order leaves you. Do not skip the discount: customers who would have ordered without the message can use the code too.
None of these calculations tells you how many orders came because of the message. To see the extra orders, you leave a small, randomly chosen part of the group without a message and compare the order rates of the two parts over the same window; the difference shows the extra orders the campaign brought in. Divide the cost by these extra orders and the figure comes out higher than the cost per order; that is the campaign’s real cost. You can find step by step how to set aside a control group, and when to treat a difference in small groups as chance, in the mistakes section of our customer segmentation article.
Compare two campaigns under the same conditions
To say that one campaign worked better than another, the only difference between the two sends should be the thing you are testing. Before comparing, check these conditions:
- Both campaigns should have gone to the same kind of group. In most stores, customers who bought in the last three months shop more often than members who have never ordered; part of the difference between campaigns sent to these two groups comes from the group itself.
- The groups should be of similar size. The rate of a campaign sent to a few hundred people swings much more than that of one sent to a few thousand.
- The sends should fall on the same day and at the same hour. You cannot credit the text with the difference between a Monday-morning message and a Friday-evening one.
- Orders should be counted with the same window and the same rule.
- A normal week should not be compared with a sale week. In most stores, orders from customers who received no message also rise in weeks such as 11.11 and the late-November sales; compare those weeks’ results with another sale week or with the same week last year.
- An automated message should not be compared with a bulk campaign. A cart reminder goes to someone who has already picked a product on the site; expecting the same order rate from a general announcement means weighing two different jobs on the same scale.
The fairest comparison is to split one group randomly in two and send the two texts at the same hour. The group, day, hour and counting rule stay the same; the only difference comes from the first line, the offer or the link you are testing. Change one thing at a time: if both the first line and the discount rate differ between the halves, you cannot tell which one produced the result.
If order counts are small, do not decide on a single send. If each half brought in around twenty orders, a difference of three or four orders may be chance; repeat the test over several sends, and make the change permanent if the difference keeps pointing the same way. To read a campaign’s results separately by customer group, you can use the splits in our article on dividing customers into groups before a campaign.
Fill in one sheet every month
If campaign results stay scattered across screenshots and different panels, a few months later you will not be able to compare any of them. In a spreadsheet, open one row for each bulk send and one row per month for each automated flow. Use these columns:
- Date, weekday and time of the send
- Message type, target group, number of people in the group and how many of them could be messaged
- Sent, delivered and read counts
- Number of people who tapped the link, and where that figure came from
- Counting window and rule, orders and revenue within the window; net figures once cancellations and returns are final
- Number of people who left the list
- Message fees and total discount used
- The control group’s order rate, if you set one aside
- Notes such as a sale week, a problem on the site, a sold-out product or another campaign sent the same week
At the end of the month, calculate four numbers for each row: delivery rate, revenue per delivered message, cost per order and opt-outs per 1,000 delivered messages. Put the months side by side and trends appear that no single campaign shows. If the delivery rate falls month after month, your list may be ageing or more customers may be switching off marketing messages. If revenue per delivered message falls while opt-outs rise, you may be writing to the same groups too often. Read and click rates are for finding the weak link; use them when you compare campaigns sent to similar groups.
Mark sale weeks in the notes column and leave them out of the monthly average. Compare the rows for weeks such as 11.11 and the late-November sales with one another, and compare the first normal month after a sale with the normal months before it. If you would like to build the sheet with your own order and message data, write to us.



