Home/Features/CTWA Tracking

Ad Attribution

Click-to-WhatsApp Ads Tracking

See which Click-to-WhatsApp ad started every conversation, attribute revenue to the exact ad, and report purchases to Meta Conversions API so campaigns optimise for buyers.

By Chirag Darji · Updated 26 Aug 2026 · 11 min read

Plans: All plans, including Free. Referral capture, the ad card in the inbox and revenue attribution ship on every tier; Meta Conversions API reporting and campaign-level attribution reporting require Starter or above.

On this page
  1. What you get
  2. How it works
  3. What exactly does Meta send in the referral, and what does VGraple CRM keep?
  4. How does revenue attribution connect a sale back to the ad?
  5. What does Meta Conversions API reporting actually send today?
  6. Why separate referral capture from CAPI reporting?
  7. Who uses it
  8. What Meta allows
  9. Plans and limits
  10. Recent improvements
Integrations settings in VGraple CRM: Facebook Lead Ads, Calendly, Meta Conversion Tracking and payment collection

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

  1. 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.

VGraple CRM analytics dashboard with delivery rates, flow performance and revenue attribution

  1. 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 referral object: the ad's headline, its source URL, a source type, and the click ID.

  2. 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.

  3. 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.

  4. 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.

  5. 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 VGraple CRM dashboard with contact and conversation counts, active flows and messages sent this month

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.

Meta policy

Meta Conversions API for Business Messaging expects a dataset created in Meta Events Manager and a system-user access token with ads_management. Events use action_source: "business_messaging" rather than a standard web action_source, and identify the customer by ctwa_clid plus the WhatsApp Business Account ID rather than by email or phone hash. A dataset with no events for an extended period can be flagged as inactive in Events Manager, which is what "Send Test Event" exists to prevent you from discovering the hard way.

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

Meta policy

Click-to-WhatsApp ads are created and managed entirely inside Meta Ads Manager; no third-party tool, including VGraple CRM, can create or edit them through the WhatsApp Business API. The referral object is only guaranteed on the first message of a new conversation, and Meta does not reliably deliver it for Click-to-Messenger ads opened on the Android Messenger app, a known platform limitation rather than a VGraple CRM gap. Reporting events to Meta Conversions API for Business Messaging requires an access token with ads_management scope on a system user tied to the ad account that owns the dataset.

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_clid to 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_source on first contact only, so a later inbound message on an already-attributed conversation can never overwrite the original ad that started it.

Frequently asked questions

Does VGraple CRM let me create Click-to-WhatsApp ads?
No. You build and run the ad in Meta Ads Manager, exactly as you do today. VGraple CRM's job starts the moment someone taps that ad and lands in your WhatsApp inbox, from there it captures, attributes and reports the conversation back to Meta.
How does VGraple CRM know a conversation started from an ad?
WhatsApp attaches a referral object to the first message of a Click-to-WhatsApp conversation, carrying the ad's headline, source URL, source type and a click ID (ctwa_clid). VGraple CRM stores this on the conversation the moment that first message arrives, and only ever sets it once, so a later message from a returning customer never overwrites the original attribution.
What is a ctwa_clid and why does it matter?
It is Meta's click ID for that specific ad tap, attached to the referral on the first message. It is the identifier Meta Conversions API needs to connect a Purchase event back to the exact ad, ad set and campaign, the same way a Google Click ID (gclid) connects a web conversion back to a Google Ads click.
What events does VGraple CRM send to Meta Conversions API?
A Purchase event, fired automatically whenever revenue is logged on a conversation that carries a ctwa_clid. It carries the amount, currency, an order ID when you provide one, and the WhatsApp Business Account ID, using the business-messaging action source Meta's CAPI expects for chat-based conversions.
Do I need to set anything up for CAPI to work?
Yes, once. Create a dataset in Meta Events Manager, generate a system-user access token with ads_management permission, and paste both into Settings > Integrations > Meta Conversion Tracking, then switch it on. A "Send Test Event" button confirms the wiring shows up in Events Manager before you rely on it.
What happens if CAPI is not configured?
Nothing breaks. Referral capture, the ad card in the inbox and revenue attribution to the ad all work regardless. Reporting to Meta Conversions API is a separate, optional step, it simply does not fire until a dataset ID and access token are saved and the toggle is on.
Does this work for Instagram Direct ads too?
Referral capture for Click-to-Messenger and Click-to-Instagram-Direct ads uses the same underlying pattern as WhatsApp's, normalised into one shape so the inbox shows an ad card the same way on every channel. Meta does not reliably deliver the referral for Click-to-Messenger ads opened on Android, so attribution there is best-effort and its absence never blocks the conversation.
Can I see which ad drove the most revenue?
Yes. Every revenue event logged on a conversation carries the conversation's ad attribution through to the analytics dashboard, and campaign-level reporting on ad-attributed conversations and revenue is available from the Starter plan.
What if someone messages my WhatsApp number directly, not through an ad?
The conversation simply has no referral and no ad attribution, which is expected and correct. Nothing about direct or organic conversations changes; ad attribution only appears where Meta actually reports it.
Is the click ID stored per contact or per conversation?
Per conversation. If the same phone number later opens a second, separate conversation, for example after the first was closed and a new one starts, the new conversation's own referral, if any, is captured independently rather than reusing the first one's attribution.

Run your WhatsApp on VGraple CRM

Free forever plan, official Meta WhatsApp Business API, set up in 15 minutes. No card needed.