What this does

Meta's Click-to-WhatsApp ads let people start a WhatsApp chat with your business straight from a Facebook or Instagram ad. When one of those leads lands in GHL, WAGHL can do three things with the ad's details — and each one is yours to turn on or off:

  • Conversation — add the ad's details below the lead's first message, so your team sees where the lead came from without leaving the chat.
  • Custom fields — save the ad's details onto the contact record, into fields you create (more on that below).
  • Tag — tag the contact so you can tell ad leads apart from everyone else, and filter, automate, or report on them.

You can enable all three, any combination, just one, or none — set per number in the Ad Leads column of your device list. New numbers start with all three on. Whatever you choose, the lead's own message always arrives on WhatsApp and in the conversation.

On by default — change it any time Out of the box, every number has all three switched on, so ad leads are shown in the conversation, saved to any fields you've created, and tagged. If you'd rather not see the ad block in the chat, or don't want the tag, untick it for that number — see Choose what happens below.

Choose what happens per number

The three options live in the Ad Leads column of your number list, as three tick boxes — Conversation, Custom fields and Tag. Tick any mix you like; each saves on its own. Because it's per number, a sales number can show the full ad block while a broadcast number just quietly tags, for example.

Tick boxWhat it does when ticked
ConversationShows the ad's details below the lead's first message in the GHL conversation.
Custom fieldsSaves the ad's details onto the contact, into the custom fields you've created.
TagAdds the matching ad tag to the contact (e.g. fb-ad-lead-whatsapp).
The three are independent Leaving a box unticked only skips that one thing — the other two still run. Untick all three and ad leads are handled like any other message: no ad block, no fields, no tag, but the lead's message still arrives.

Where to set it

The Ad Leads boxes sit in the same per-number settings panel as Incoming, Contact and Calls.

1

Open the sub-account's devices

Sign in at waghl.com/login. In the left menu, click Sub-accounts — you'll see a list of sub-accounts with a Users Action column. Under that column, click the view icon (the eye) for the sub-account to open its list of numbers (devices).

2

Find the Ad Leads column

Each device row has an Ad Leads column with three tick boxes — Conversation, Custom fields and Tag. Hover any box for a one-line reminder of what it does.

3

Tick the ones you want

Tick or untick each box for that number. The change saves as soon as you click it — no separate save button — and applies to that number's next ad lead.

Shared numbers If a number is shared across several sub-accounts, each mapped sub-account can keep Inherit ticked to follow the main number's choice, or untick it and set its own three boxes.

The tags

When the Tag box is ticked for a number, the contact is tagged based on where the ad ran. Existing tags on the contact are kept — the ad tag is simply added alongside them.

Lead sourceTag added
Facebook adfb-ad-lead-whatsapp
Instagram adinstagram-ad-lead-whatsapp
WhatsApp adwa-ad-lead-whatsapp
Facebook post button (boosted post)fb-post-lead-whatsapp
Use the tag to drive automations Because it's a normal GHL tag, you can trigger a workflow on it — route ad leads to a specific pipeline, send an instant reply, assign an owner, or report on ad-sourced volume. In a smart list, filter by the tag to see just your paid leads.

The ad details in the conversation

When the Conversation box is ticked for a number, the ad's details are appended below the lead's first message in the GHL conversation, so your team has full context right in the chat. The lead's own message comes first, then an ad block listing everything we captured — for example:

Hello! Can I get more info on this?

📢 Facebook Ad Lead
source_app: facebook
source_type: ad
source_id: 120200000000000000
title: Get a free quote
body: Spring sale now on — up to 30% off our full range for new customers. Fast delivery, easy returns, and friendly support whenever you need it. Message us your city and what you're looking for and we'll send yo…
source_url: https://fb.me/examplead
media_type: IMAGE
ctwa_clid: ArBxY2pQsAMPLEclid7nE3kZq0wVExmpl
greeting_message_body: Hi! Please let us know how we can help you.
lead_date: 2026-10-07

The header line (📢 Facebook Ad Lead) tells you the source at a glance — it reads Facebook Ad Lead, Instagram Ad Lead, WhatsApp Ad Lead or Facebook Post Lead depending on where the lead came from. The lines that follow carry each ad detail that was available.

A few notes on the block The lead's own message is always shown in full. Only lines that have a value appear — if the ad didn't include, say, a website or media link, that line is left out. Identifiers like ctwa_clid and source_id are always sent complete. The only line that can be shortened is a long body copy (shown trimmed with a trailing … in the conversation view only); the full copy is still saved to the body custom field if you've created it.

Capturing ad details in custom fields

With the Custom fields box ticked for a number, the ad's details are saved onto the contact record — but only into fields you've created. Create the fields below in GHL and choose which ones you care about; WAGHL fills in whichever of them exist.

You create the fields; we only fill them WAGHL does not create custom fields for you — it only writes to fields that already exist on your location. Any field you haven't created is simply skipped. Nothing is overwritten on fields you use for other purposes.

How to create a field

1

Open custom fields in GHL

In your GHL sub-account, go to Settings → Custom Fields and click Add Field (for the Contact object).

2

Type the field name exactly

Use the exact Field name from the table below (for example, source_app) — all lowercase, with the underscores — and pick the Type shown. GHL turns the name into a key automatically, matching the one in the table.

3

Repeat for each field you want

Add as many or as few as you like. New fields are picked up within about an hour, after which new ad leads start filling them in.

The fields you can create

Field name (type exactly)TypeWhat it holdsExample
source_appSingle linePlatform the ad ran onfacebook, instagram, whatsapp
source_typeSingle linePaid ad or boosted postad, post
source_idSingle lineMeta's ID for the ad120200000000000000
source_urlSingle lineLink to the ad or posthttps://fb.me/examplead
titleSingle lineThe ad's headlineGet a free quote
bodyMulti lineFull ad copySpring sale now on — up to 30% off…
media_typeSingle lineCreative typeIMAGE, VIDEO
media_urlSingle lineFacebook post or video link (when present)https://www.facebook.com/…/videos/…
ctwa_clidSingle lineMeta click ID (sent in full), usable for conversion trackingArBxY2pQsAMPLEclid7nE3kZq0wVExmpl
cta_typeSingle lineThe ad's button typeflow, url, call
website_urlSingle lineWebsite link on the ad (when present)https://www.example.com/…
greeting_message_bodyMulti lineAuto-greeting shown to the leadHi! Please let us know how…
lead_dateDateWhen the ad message arrived2026-10-07
A good starter set Most teams begin with just four: source_app, source_id, title and lead_date. That's enough to see which platform and which ad each lead came from, and when. Add more later whenever you want.

FAQ

+Do I have to set anything up?

Not to get started. New numbers come with all three Ad Leads boxes ticked, so ad leads are shown in the conversation and tagged straight away. The only part that needs setup is the custom fields — you create those in GHL (see above) for the details to be saved onto the contact. You can untick any of the three boxes per number whenever you like.

+Can I keep the tag but hide the ad block from the conversation?

Yes. The three boxes are independent. Untick Conversation and leave Tag (and/or Custom fields) ticked, and the ad block won't appear in the chat while the contact is still tagged and the fields are still filled. The lead's own message always arrives either way.

+Will this create custom fields for me?

No — you create the fields in GHL. WAGHL only writes to fields that already exist, using the exact names in the table. Any field you didn't create is skipped, and your own unrelated fields are never touched.

+I created a field but it's empty — why?

Two common reasons. First, new fields are picked up within about an hour, so a lead that arrived right after you added the field may predate it. Second, a field only fills if that detail was present in the ad — for example, website_url is blank for ads that don't link to a website. Also double-check the field name matches the table exactly.

+Is the ctwa_clid cut off? It ends in "…" in the chat.

No — the ctwa_clid is always captured and saved in full. The trailing … you might see is only in the conversation view, where a very long body line can be shortened for readability. The actual click ID written to the ctwa_clid custom field (and sent on your webhook) is the complete value, exactly as Meta provided it, so it works for conversion tracking.

+What about the campaign, ad set and ad names?

WhatsApp doesn't include those in the lead's message — only the ad's ID comes through (saved as source_id). Campaign, ad set and ad names live in Meta Ads Manager; you can look up the ad there using its ID.

+If a lead clicks a different ad later, what happens?

The contact's ad fields update to the latest ad they clicked, so the fields always reflect their most recent ad. The tag for the earlier source stays on the contact.

+Does this work with "Create Contact" turned off?

Tagging and field capture happen on a contact, so they apply when a contact exists. If a number has Create Contact set to No and the lead isn't already a contact, there's no record to tag — but the message still arrives on WhatsApp as usual.

+Can I get the ad data on my own webhook?

Yes. If you receive messages on your own endpoint via Direct WA Inbound, ad leads include an extra ad_data block in the payload whenever any of the three boxes is ticked for that number. It's additive, so existing integrations keep working unchanged.

What's next?