Teaching Meta which leads were actually good
If you run click-to-WhatsApp ads and you have never sent anything back to Meta, you are optimising for message volume. Not because you chose to — because that is the only signal the platform has.
What Meta can and cannot see
Meta sees the click. It sees that a WhatsApp conversation opened. That is where its visibility ends.
It cannot see that the conversation was one line and then silence. It cannot see that the person was asking about a completely different city. It cannot see that another lead, from a more expensive ad, booked a viewing and then bought.
So when you tell the campaign to optimise, it optimises for the thing it can measure: more conversations opened. Which reliably gets you more of the cheapest possible conversations.
The loop that fixes it
Three parts, and skipping any one breaks it.
Attribution on the way in. A lead arriving from a click-to-WhatsApp ad has to record which campaign, ad set and ad it came from. Without this you have a pile of leads and no idea which ad produced them.
A quality judgement. Someone or something has to decide whether the lead was good. Our concierge grades hot, warm or cold from the qualifying conversation itself, and an agent can override it at any point. The override is what counts, because the human is closer to the truth than the model.
The signal going back. The grades are pushed to Meta as conversion events. Now the campaign optimises for hot leads rather than conversations, and the auction starts finding you people who behave like the ones who bought.
What changes on your side
One number on one report: cost per hot lead instead of cost per click.
It reorders things. An ad with a cheap click and a terrible hot rate is your expensive ad — it always was, you just could not see it.
The honest caveat
The loop is built on our side and it is not switched on yet. Sending conversion events back to Meta requires their app review, and that review sits with them.
We would rather say that than let you discover it in week two. The current status is on our roadmap, and it changes there on the day it changes here.