Resources

The Conversions API for WhatsApp leads: what it is, what it needs, and what it changes

Last updated 2026-09-06

Meta's Conversions API is usually described as a website thing: a server-side replacement for the pixel. There is a second version of it, the Conversions API for Business Messaging, that does the same job for conversations that started from a click-to-WhatsApp ad. It is less documented, harder to get access to, and the most useful piece of ad plumbing a real-estate business can have.

This note is what we learned building it: what an event has to contain, the requirements that took us three wrong theories to get past, and the one thing it does not do for a click-to-WhatsApp ad today.

What it is

When someone taps a click-to-WhatsApp ad, Meta attaches a click identifier to the first message they send. It arrives in the message webhook as a referral, with a field called ctwa_clid. That identifier is the thread between the ad and everything that happens in the conversation afterwards.

The Conversions API for Business Messaging lets the business send an event back to Meta carrying that identifier: “the person from this click did this, at this time, worth this much.” Meta attributes the event to the ad, the ad set and the campaign, and the account’s learning includes it. Without the event, Meta’s knowledge of that person ends at “conversation started.”

What an event needs

A dataset. Events are posted to a dataset, not to the ad account. The dataset is created against the WhatsApp Business Account, once, and is idempotent: asking again returns the same one.
The click id. ctwa_clid, captured from the referral on the first inbound message and stored against the lead. No click id, no attribution; the event is meaningless without it.
The WhatsApp Business Account id. Required in the event's user data. Omit it and the event is rejected, and the rejection does not say why clearly.
An event name and time. Standard names (Lead, Purchase) or a custom one. The time is when the thing happened, as a Unix timestamp.
A value and currency, optionally. This is the part almost nobody sends and the part that matters most, below.
The permission. whatsapp_business_manage_events on the token, granted through the business's signup. See the traps.

The things that trip people up

The permission is not where you expect. whatsapp_business_manage_events is exposed by ticking the Conversions API for Business Messaging product on the Facebook Login for Business configuration. It is not a use case, not something App Review grants, and not a system-user setting. We tried all three first. Once the product is on the configuration, the consent screen shows it plainly: “Log events on your WhatsApp business account's behalf and send those events to Meta.”
Products on a login configuration are immutable once saved. Get the set right before saving, or create a new configuration.
The click and the WhatsApp account must match. Meta rejects an event whose click id came from an ad pointing at a different number than the WhatsApp Business Account on the event. The number the ad sends people to has to be the number that reports the outcome.
Seven days. Meta rejects events older than seven days. Send the event when the qualifying thing happened, not when the lead was created. A buyer who enquired a fortnight ago and only stated a budget today is exactly the event worth reporting, and its time is today.
Existing connections do not have the scope. A business that connected WhatsApp before the product was added to the configuration has a token without the permission. They have to reconnect. Nothing tells them; the events are silently skipped.
Values overflow. If you store the value in minor units (paise) in a 32-bit integer, ₹2.15 crore is the ceiling. A villa budget will not fit. Use 64-bit.

Why the value matters

Most implementations that exist send a Lead event with no value when a conversation starts. That gives Meta nothing it did not already have; it already counts conversations started.

The event worth sending is the one Meta cannot see: the moment the buyer stated a budget that fits the project, with that budget as the value. Two hundred of those and the account has a value-weighted picture of who a real buyer looks like, drawn from what buyers said rather than from an interest-targeting menu. A ₹1.4 crore buyer and a ₹40 lakh buyer are no longer the same “lead.”

Doing this requires the conversation to be turned into structured data as it happens: budget parsed from “1.4 Cr”, “80L” or “50-60 lakh” (take the lower bound of a range; refuse to bid on “3 BHK”), timeline and configuration captured as fields. A human reading the chat afterwards does not scale to two hundred a month. This is the part Vesma does.

What it does not do today

A click-to-WhatsApp ad set can only be optimised for conversations. Meta does not accept an offsite-conversion optimisation goal for an ad whose destination is WhatsApp, so the events you send do not directly steer that ad set’s delivery in the way a pixel-based purchase event steers a website campaign. They accumulate against the account and dataset, inform its learning, and are the data Meta’s messaging objectives are built to consume. That is the honest state of it, and a vendor page that says “optimise your WhatsApp ads for qualified leads” without this paragraph is overselling.

The Google equivalent

Google has the same shape with different names. The click id is gclid (or gbraid / wbraid on iOS), captured on the landing page and carried into the conversation. The outcome is reported through the Data Manager as a conversion with a value, against that click. Google Search and Performance Max campaigns can be optimised for that conversion directly, which is the one place Google is ahead of Meta for this use.

Where this falls down

Everything above describes the API as it behaved when we built against it. Meta changes this surface often and quietly. We keep this note current when our own integration breaks, which is a reasonable proxy; if you find it has drifted, tell us.

Skip the three wrong theories

Vesma captures the click id, parses the budget, and posts the value-weighted event at the moment the lead qualifies. In beta while Meta reviews the app; switched on per workspace on request.