On this page
- What you get
- How it works
- What exactly does Meta send in the referral, and what does VGraple CRM keep?
- How does revenue attribution connect a sale back to the ad?
- What does Meta Conversions API reporting actually send today?
- Why separate referral capture from CAPI reporting?
- Who uses it
- What Meta allows
- Plans and limits
- Recent improvements

In short
- Every conversation that opens from a Click-to-WhatsApp ad carries an ad card in the inbox: headline, ad ID and a link back to the ad, captured on the first message
- Revenue you log on that conversation attributes automatically to the ad, ad set and campaign that started it
- A logged purchase reports back to Meta Conversions API as a Purchase event, tied to the ad by its click ID, so Meta's algorithm can optimise for buyers rather than just clicks
- Ad creation, targeting and budgets stay in Meta Ads Manager; VGraple CRM does not build or manage the ad itself
Click-to-WhatsApp Ads Tracking in VGraple CRM captures the ad that started a WhatsApp conversation, attributes revenue back to it, and reports purchases to Meta Conversions API so your ad account can optimise for buyers instead of just clicks. What this does not do is build the ad: campaign creation, targeting, creative and budget all stay in Meta Ads Manager exactly as they are today. What changes is everything that happens after someone taps "Send Message" on your ad, when the click, the conversation and the eventual sale stop being three disconnected events and become one attributed thread.
What you get
- An ad card on every conversation that opened from a Click-to-WhatsApp ad, showing the ad's headline and a link back to it, captured on the first message
- The click ID (
ctwa_clid) stored against the conversation, the identifier Meta needs to connect a later purchase back to that exact ad - Automatic Purchase-event reporting to Meta Conversions API whenever revenue is logged on an ad-attributed conversation, with no separate step to remember
- Revenue and conversation counts broken out by ad-attributed versus organic in analytics
- The same referral capture pattern applied to Click-to-Messenger and Click-to-Instagram-Direct conversations, so one ad card renders the same way on every Meta channel
- A one-time setup in Settings, a dataset ID and an access token, after which reporting runs automatically on every purchase
How it works
- Run your Click-to-WhatsApp ad in Meta Ads Manager. Build the campaign, ad set and creative in Ads Manager as usual, with the WhatsApp message destination pointed at your connected number. VGraple CRM plays no part in this step; there is no ad-building surface inside the platform.

A customer taps the ad and messages you. WhatsApp opens a conversation prefilled with your ad's message, and the first message that arrives carries a
referralobject: the ad's headline, its source URL, a source type, and the click ID.The referral is captured once. VGraple CRM stores the referral on the conversation at the moment that first message lands, and never overwrites it on a later message, so the original ad attribution survives for the life of that conversation even if it goes quiet and picks up again weeks later.
Configure Meta Conversions API, once. In Settings > Integrations > Meta Conversion Tracking, paste a dataset ID from Meta Events Manager and a system-user access token with
ads_management, then switch tracking on. "Send Test Event" confirms the dataset receives events before you rely on it in production.An agent closes the sale and logs revenue. From the conversation's Info panel, logging a deal creates a revenue event, and because the conversation carries a
ctwa_clid, a Purchase event is sent to your CAPI dataset in the same request, carrying the amount, currency and WhatsApp Business Account ID.Meta's algorithm sees the purchase. The Purchase event lands against the exact ad, ad set and campaign the click came from, giving Meta's optimisation a real conversion signal instead of only a message-received signal, and the revenue shows up against that campaign in your analytics.
What exactly does Meta send in the referral, and what does VGraple CRM keep?
WhatsApp's Cloud API attaches the referral only to the very first inbound message of a new conversation, and it contains a source URL, a source type ("ADS" for a paid click), a headline, sometimes a body and media preview, and the click ID. VGraple CRM reads all of these off the first message and writes them onto the conversation record as ctwa_source, using an "only set it, never overwrite it" rule: if the conversation already has attribution from an earlier click, a subsequent message never clobbers it, even if that message technically carries its own referral (which in practice it does not, since only the first message of a thread carries one).

The same normalised shape is used for Click-to-Messenger and Click-to-Instagram-Direct conversations, where the referral can arrive in one of three places depending on how the person entered the thread: on the message itself for a brand-new thread, on a postback for an ice-breaker tap, or as a standalone messaging_referrals event when someone re-enters an existing thread through an ad or an m.me link. All three are folded into the same ad card so an agent sees one consistent attribution regardless of which Meta channel it came through.
Example
A D2C skincare brand runs a Click-to-WhatsApp ad for a bestselling serum. A customer taps it, asks two questions about ingredients, then buys three days later in the same thread. Because the referral was captured on that very first "Hi, is this serum suitable for oily skin?" message and never overwritten, the eventual purchase still attributes to that original ad.
How does revenue attribution connect a sale back to the ad?
A conversation's revenue only means something if it is tied to what produced the conversation in the first place, and the connection has to survive however long the sales conversation takes. When someone on your team logs a deal from a conversation's Info panel, entering an amount and currency, VGraple CRM creates a revenue event tied to that conversation. If a broadcast recently reached the same contact, the deal auto-attributes to that broadcast; separately and regardless of broadcast attribution, if the conversation itself carries ctwa_source, the ad's identity travels with it into analytics, so a single revenue event can show both "this contact received a broadcast last week" and "this conversation opened from an ad" without the two competing for credit.
This means the attribution answers a specific, honest question: not "did marketing cause this sale" in some abstract sense, but "which conversation, and which ad if any started that conversation, is this money tied to." A sale from someone who found you organically shows as organic revenue; nothing is force-attributed to an ad that was not actually involved.
What does Meta Conversions API reporting actually send today?
Being specific about what ships matters here because Meta CAPI supports several event types, and it is easy to imply broader coverage than exists. The integration currently fires one event automatically: a Purchase event, sent the moment revenue is logged on a conversation that carries a ctwa_clid, with action_source: "business_messaging" and messaging_channel: "whatsapp", the fields Meta's documentation specifies for chat-originated conversions rather than the standard web pixel format. The event carries the purchase amount, currency, an order ID when one is provided, and the WhatsApp Business Account ID the conversation belongs to.
The underlying event builder also supports Lead and InitiateCheckout as event names, matching the event types Meta's Conversions API for Business Messaging accepts, but no automatic trigger in the product sends those two today; the only event that currently fires end to end is the Purchase report tied to logging a deal. If your funnel depends on reporting an earlier signal, a lead captured before any purchase, treat that as on the roadmap rather than shipped.
Why separate referral capture from CAPI reporting?
Tying a useful feature to an optional integration means half your customers get nothing until they finish a setup step, which is a bad default. Referral capture, the ad card in the inbox, and revenue attribution by ad all work with zero configuration, the moment a Click-to-WhatsApp ad sends someone into your inbox. Meta Conversions API reporting is the one piece that requires you to create a dataset and a token, because it is Meta's system, not VGraple CRM's, and it is genuinely optional: an org that never configures it still gets full attribution inside its own analytics, it just does not additionally tell Meta's ad algorithm about the purchase.
sendCapiPurchaseForConversation checks for a configured dataset and token first and simply returns without sending anything if either is missing, so nothing breaks or logs an error for an org that has not set CAPI up; it is a genuinely optional layer on top of attribution that already works.
Who uses it
D2C stores run Click-to-WhatsApp ads as their primary acquisition channel for a specific SKU or bundle, and use the ad card in the inbox to spot which creative is producing conversations that actually convert to a sale rather than just clicks. See WhatsApp CRM for D2C.
Real-estate agencies run Click-to-WhatsApp ads for individual project listings, and rely on the ad attribution surviving a multi-week sales conversation, since a property enquiry rarely closes on the first message. See WhatsApp CRM for real estate.
Travel agents run seasonal package ads that drive a burst of Click-to-WhatsApp conversations, and use revenue attribution to see which specific ad, not just which campaign, produced bookings once the season is over. See WhatsApp CRM for travel agencies.
Coaching institutes running enrolment-season Click-to-WhatsApp ads use CAPI's Purchase reporting to help Meta's algorithm find more people who actually pay for a course, rather than more people who only start a chat and never enrol.
What Meta allows
VGraple CRM never attempts to reconstruct a missing referral or guess at ad attribution when Meta does not supply one; a conversation with no referral simply shows no ad card, which is the honest state rather than an inferred one.
Plans and limits
Referral capture, the ad card in the inbox and per-conversation revenue attribution to an ad are available on every plan, including Free, with no configuration required. Meta Conversions API reporting is available on every plan once configured; campaign-level reporting that breaks out ad-attributed revenue and conversation volume in the analytics dashboard requires Starter or above.
Recent improvements
- 2026-08-13: Referral normalisation unified across WhatsApp, Messenger and Instagram Direct into one shape (
ctwa_source), so the inbox renders a single consistent ad card regardless of which Meta channel the click-to-chat conversation came through. - 2026-07-11: Meta Conversions API purchase reporting shipped, sending a Purchase event with the conversation's
ctwa_clidto your configured dataset automatically whenever revenue is logged, with a "Send Test Event" button to verify the dataset wiring beforehand. - 2026-05-30: Referral capture shipped storing
ctwa_sourceon first contact only, so a later inbound message on an already-attributed conversation can never overwrite the original ad that started it.