Tracking ad spend to revenue when sales happen on WhatsApp
The ad platform reports a chat started. Your bank reports a transfer. Nothing connects the two unless you build it.
If you sell through WhatsApp, your ad account and your bank account describe two different businesses. One says you started four hundred conversations last week. The other says some money arrived. Neither can tell you which ad paid for itself.
This is fixable without expensive software. It takes four pieces of plumbing and the discipline to keep them connected.
Where the trail breaks
On a normal online store the path is click, product page, checkout, payment. A tracking pixel sits on every step, so the ad platform sees the purchase and learns who buys.
A click-to-WhatsApp ad opens a chat instead. There is no checkout page and no purchase event. The sale closes in conversation and the money arrives by bank transfer or a payment link. As far as the platform can tell, the conversation was the result, so it goes and finds you more people who like to chat. They are cheap to reach and they are not the same people as buyers.
1. Carry the source into the chat
The first job is to know where each conversation came from. There are two ways, and they work together.
- Give each campaign its own pre-filled first message with a short reference in it. A WhatsApp link can carry the opening text, so the customer sends it without thinking and you can read the campaign off the first line.
- If you run on the WhatsApp Business Platform, read the referral data that arrives with the first message from an ad. It identifies the ad the person tapped, with no code for them to keep intact.
2. Keep one record per conversation
Somewhere there has to be a row for each person who messages you: phone number, source, date of first message, current status. A spreadsheet works at low volume. A CRM is better once more than one person is replying.
The phone number is the key that ties everything together. It is the one identifier present at the first message and at the payment.
3. Record the order where the money lands
When someone pays, write the order against their row: amount, date, what they bought. A payment link with a reference makes this automatic. A bank transfer needs a person to confirm it, so make that confirmation a single step that also records the amount.
This is the step that slips. The sale is done, everyone is busy, and nobody records it. Tie it to something that has to happen anyway, such as creating the delivery or sending the receipt.
4. Send the purchase back to the ad platform
Once orders are matched to conversations, report them. Meta's Conversions API accepts purchase events from messaging conversations, with the amount attached. The platform then stops optimising for people who start chats and starts optimising for people who pay.
What to read each week
With the four pieces in place, one table answers most questions. Per campaign:
- Spend.
- Conversations started.
- Orders, and the share of conversations that became one.
- Revenue, and cost per order.
Cost per conversation is on the list only so you can ignore it. A campaign with cheap chats and no orders is the most expensive one you run.
What stays imperfect
This will not attribute every sale, and anyone who promises that is selling something.
- People see the ad, then message you days later from your profile. They arrive with no source.
- One buyer chats from one number and pays from an account in another name.
- Customers delete the pre-filled message and type their own.
- Ads placed in WhatsApp Status do not pass a click ID with the first message.
- Pay-on-delivery orders that are refused look like sales until they come back.
Keep an honest unknown row for the orders you cannot place. If that row is small and steady, your numbers are good enough to move budget on. If it is growing, something in the plumbing has come loose, and that is worth finding before the next campaign.
Have a product in mind? Start with a two-week discovery sprint.
Book a call