The CPL on your dashboard is telling half the story
Ads Manager does not measure how many people actually enquired. It measures how many conversion events it received and could attribute to a click. Those are not the same number, and for a business where a large share of enquiries land in WhatsApp rather than a web form, the gap between them can be large.
This is not a measurement inconvenience. It changes the number you use to judge whether an ad is working, and it changes what the algorithm learns.
Where the gap comes from: ctwa_clid
Every tap on a Click-to-WhatsApp ad generates a unique identifier, ctwa_clid. It travels into the conversation the moment it opens, arriving inside the referral object of the first webhook message the business receives. To credit that conversation as an ad conversion, a system has to read that field out of the webhook and send it back to Meta through the Conversions API, with action_source set to business_messaging.
Most small and medium Malaysian businesses run WhatsApp through the plain WhatsApp Business app, replying to enquiries by hand. That app has no Conversions API connection, so even a lead that started from a paid ad click and carried a valid ctwa_clid is never reported back. The click happened. Meta just never finds out what it turned into.
Two kinds of invisible inquiries, and they are not the same
It matters to separate them, because only one is fixable. An inquiry from a Click-to-WhatsApp ad carries a ctwa_clid whether or not anyone captures it. Wire up the Conversions API and that conversion becomes visible retroactively for future reporting. An inquiry where a customer saves the number and messages later, from a caption, a Google Business listing or a past conversation, was never issued a click ID in the first place. No integration will ever attach that one to a specific ad, because there is nothing to attach.
How to calculate your real CPL
Real CPL = Total ad spend ÷ (leads Meta reports + WhatsApp leads confirmed by CRM tagging that Meta did not report)
- Tag every inbound WhatsApp lead in the CRM with how it arrived: which ad, which campaign, or "organic" if there is no ad link at all.
- Reconcile that tagged list against what Ads Manager reports as conversions on a regular cycle, weekly is usually tight enough to catch drift early.
- Divide total spend by the deduplicated combined total, not by whichever number is more flattering.
Why this makes your ads perform worse over time
Meta's delivery system optimises toward whatever conversion signal it can see. If half the real conversions never get reported, the algorithm is not learning from your actual customers, it is learning from the subset of customers who happen to complete a trackable action. Over successive campaigns it tends to push spend toward audiences that generate more form-fills, which are visible, and away from audiences that generate more direct messages, which are not, whether or not those audiences convert into paying customers at a similar or better rate.
What this means for your CRM and ad setup
- Run WhatsApp ads through Click-to-WhatsApp objectives, not a phone number pasted into ad copy, so a ctwa_clid actually exists to capture.
- Connect a system that reads ctwa_clid from the inbound webhook and can send it back through the Conversions API when the conversation turns into a real lead.
- Keep tagging what the integration cannot see. No system will ever recover the organic, number-saved conversations, so manual source tagging in the CRM stays part of the process, not a stopgap you retire later.
- Report the reconciled CPL to whoever is making budget decisions, not the Ads Manager number alone.
Disoft's CRM captures enquiries from Meta Ads, forms and WhatsApp into one pipeline and feeds key conversion signals back to Meta, closing exactly this loop. If you want a straight answer on whether your current setup is capturing ctwa_clid and reporting it back, see All-in-One CRM or book a free audit and we will check your ad account and WhatsApp setup together.
