What are my ads actually producing, and do you support CAPI?
The problem every advertiser has: money goes out, chats come in, and then it goes dark. Nobody knows which chat ended in a sale. The Ads page answers that, and more importantly it reports back to Meta and Google so the ad algorithm learns to look for people who resemble your buyers rather than your clickers.
For those who know the terminology: yes, this is CAPI, the
Meta Conversions API for Business Messaging, sending a LeadSubmitted
event with the ctwa_clid from Click-to-WhatsApp ads, plus Google Ads offline
conversion import for the click-website-then-chat path. The difference from wiring up CAPI
yourself: here there is nothing to set up.
Meta CAPI for Click-to-WhatsApp, automatic, nothing to install
Every chat arriving from a "Send WhatsApp Message" ad on Facebook or Instagram is tracked automatically and appears on the Ads page with the ad name attached. When that chat becomes a buyer, click π― Mark as customer, optionally entering the value. That is all.
Report lead status to Meta from the inbox
The ad algorithm learns fastest when every change in a lead's status is reported, not just purchases. Turn it on once under Ads β Report lead status to Meta, and your team simply works from the inbox:
| Stage | How to mark it | Event sent to Meta |
|---|---|---|
| Real chat | Automatic: the lead sends another message after the first one from the ad | LeadSubmitted |
| Hot / qualified | Label hot, or type /hot in a private note | QualifiedLead |
| Closing | Label closing, or /closing 1500000 in a private note | Purchase + value |
The value can be written as 1500000, 1.500.000, 1,5jt, or
250rb. Every report leaves a private note "π€ Reported to Meta β" in the
conversation, and each stage is reported only once per contact, toggling a label on and off does
not duplicate data. The hot and closing labels are created for you when
the feature is turned on.
When your team's labels are not "hot" and "closing"
Your team may already name labels its own way: panas, deal, paid. No need to change them. Under Ads β Label β Meta event rules, map the labels you already use to the events Meta understands:
LeadSubmitted, the lead genuinely replied (real chat).QualifiedLead, a serious lead worth chasing.Purchase, became a buyer; the value goes along when you have one.
Each label may hold only one rule, and every rule can be set to automatic (sent
the moment the label is applied) or not. Until you create rules of your own, the defaults
hot β QualifiedLead and closing β Purchase stay in effect.
Proving the connection inside Meta
The Test the connection button has two optional fields:
- Test Event Code: copy it from Events Manager β Test Events. The test event lands in that tab rather than in production data, so you see the proof yourself.
- Real ctwa_clid: paste one from an actual ad click less than 7 days old if you want to test with real data.
The last test result and its timestamp are kept on the page, so the rest of the team can see when the connection was last checked.
Build Custom Audiences & Lookalikes per stage
The Ads page has CSV downloads for all ad leads, real chat, hot, and purchased (with a value column). Upload them in Meta Ads Manager β Audiences β Create audience β Custom Audience β Customer list, then build Lookalikes from them. A common pattern:
- Week 1: broad ads to find new leads, with the team marking status diligently. The more marks, the sooner the next step can start.
- Week 2 onward: 5% Lookalikes of the real chat and hot audiences, stepped down to 1%; the real chat audience itself is used for retargeting.
- After roughly 100 purchases with values: a value-based Lookalike from the purchased file, then optimise for ROAS.
Not every business performs best at 1%; compare results before deciding.
Google Ads: paste one line into your website
Google ads land on a website first, and the visitor then presses a WhatsApp button. Paste one line of our snippet into your site, available on the Ads page, and it links the Google ad click to the chat that arrives. Then in Google Ads create a conversion action of the Import from clicks type and schedule an import from your private CSV URL, also on the Ads page. Set up once, automatic forever, with no API and no OAuth.
For developers
POST https://waco.id/api/v1/konversi
Authorization: Bearer waco_xxxx
{ "nomor": "628123456789", "event": "Purchase", "nilai": 150000 }
-> { "ok": true, "sumber": "meta", "status": "terkirim" }
-> { "ok": false, "alasan": "tanpa_klik_iklan" } // organic chat, not from an ad
Call it from your point of sale or order system when payment lands, and conversions are marked without anyone touching the dashboard.