WebhooksHow-to

Click-to-WhatsApp ads

Someone clicks your Click-to-WhatsApp ad in Meta and messages you. We don't create the ad. The first inbound carries the click and the ad so you can save them.

Someone clicks your Click-to-WhatsApp ad in Meta and messages you. WhatsAble does not create the ad. The first inbound carries the click and the ad — the referral — so you can save them. This page is the map: where that referral lands, what each field is, and why you persist ctwa_clid and source_id yourself before later messages in the same chat drop them.

Does WhatsAble create the Click-to-WhatsApp ad?

No. A Click-to-WhatsApp ad runs in Meta Ads. WhatsAble does not create the ad.

WhatsAble forwards first-inbound referral — top-level on n8n, Zapier, Make, and a webhook you created. You persist ctwa_clid and source_id yourself because later messages in the same chat usually omit them. WhatsAble does not persist them for you.

Status ads can also send a referral; ctwa_clid may be omitted.

How do I map and persist the referral?

Here's the sequence, start to finish:

  1. 1Run the Click-to-WhatsApp ad in Meta Ads. WhatsAble does not create the ad.
  2. 2Open the WhatsAble dashboard.
  3. 3Go to Developer → add an endpoint URL, and turn on incoming. If you're creating a custom webhook instead, set incoming: true when you create it.
  4. 4When someone clicks the ad and messages you, the first inbound POSTs referral to that URL.
  5. 5Persist `ctwa_clid` and `source_id` yourself — write them to a Sheet or CRM. WhatsAble does not persist them for you.
  6. 6Do not wait for a later reply. Later messages in the same chat usually omit them.

That's the core loop for any destination. The specifics of where you point it differ slightly by tool:

A webhook you built yourself.

In the WhatsAble dashboard, open Developer, add an endpoint URL, and enable incoming. The first Click-to-WhatsApp inbound POSTs the referral to that URL. See https://whatsable.app/integrations/webhook

n8n.

n8n gets the same first-inbound referral. Map the top-level referral on that inbound, persist ctwa_clid and source_id, and write both to a Sheet or a CRM. Setup docs: https://whatsable.app/integrations/n8n

Agent Skill.

A WhatsAble Agent Skill is not a separate event. It sees the same webhook payload, including the referral, only if that Skill sits on a webhook you created. Installing a Skill by itself doesn't deliver the referral. See https://whatsable.app/vibe-code

When is the referral present?

Yes on the first inbound. Usually gone after that.

WhenPresent / absent
First inbound after CTWA ad/post tapYes typically
Later messages, same chatUsually absent. Persist immediately
Ordinary chatAbsent
WhatsApp Status adsReferral may be present; ctwa_clid may be omitted

What's actually in the referral?

Top-level referral on the WhatsAble payload (or Cloud API messages[].referral if that's the envelope you get). Do not map that unless that is the delivery. Use every row below.

FieldPlain meaningPresent / absent
referralContainer for CTWA/post attribution.First CTWA/post inbound; omit ordinary chat and most follow-ups
referral.source_typead or post.With referral
referral.source_idMeta ad or post ID.With referral. Persist
referral.source_urlAd or post URL.With referral
referral.headlineAd or post headline.With referral
referral.bodyAd or post body copy.With referral
referral.media_typeimage or video.With referral
referral.image_urlImage creative URL.When media_type is image (URLs can expire)
referral.video_urlVideo creative URL.When media_type is video
referral.thumbnail_urlVideo thumbnail URL.Video creatives
referral.ctwa_clidClick ID for Meta CAPI.Usually with ad referral; Status may omit. Persist
referral.welcome_messageOptional object. Welcome message when Meta includes it.Optional; nested keys unverified. Do not invent children.

How does this map to the inbox Ad card?

The Ad card you see in the WhatsAble inbox is chrome. It reads from the same referral fields above; it is not a new set of fields, and WhatsAble does not create the ad or persist these for you.

What you seeMaps to
Ad previewCreative (image_url / video_url / thumbnail)
See AdInbox control
Source IDsource_id
Media typemedia_type
Source typesource_type
Headline / bodyheadline / body
Customer's first linelast_message_of_user

last_message_of_user is a same-event message field, not part of referral. It already exists on the payload; this row only maps it to the card you see.

Who persists ctwa_clid and source_id?

You do. WhatsAble forwards first-inbound referral. You persist ctwa_clid and source_id yourself because later messages in the same chat usually omit them. WhatsAble does not persist them for the customer.

Status ads can also send a referral; ctwa_clid may be omitted. That is still a referral — do not treat Status ads as unrelated to this page.

What would I actually use this for?

Write those fields to a Sheet or CRM, then report which creative and which platform produced the WhatsApp lead.

A CRM row that already knows the ad.

The first inbound hits n8n, Zapier, Make, or a webhook you created. You persist `source_id` on the contact yourself, so the next person who opens the chat can see which Meta ad started it.

A Sheet you can report from.

The same first inbound appends `ctwa_clid` and `source_id`. You persist those two yourself, then group the week by ad.

A downstream automation that joins the click to the chat.

Ads Manager saw the click. WhatsApp saw the chat. The first-inbound referral is the join — only if you persisted it.

Related

Related

Webhooks

Developer → add an endpoint URL → enable incoming. The first CTWA inbound POSTs referral to that URL.

n8n

Same first-inbound referral. Map top-level referral, persist ctwa_clid and source_id yourself.

Zapier

Same first-inbound referral on the Zapier trigger.

Make

Same first-inbound referral on the Make trigger.

Vibe Code

Agent Skill only if it sits on a webhook you created.

Start Free Trial