CRM & HubSpot

Send CRM Lead Quality Back to Meta with the Conversions API (Including Click-to-WhatsApp Ads)

Teach Meta which leads become customers. HubSpot’s native sync, Meta’s CRM integration and Click-to-WhatsApp ctwa_clid, with the fields each one needs.

Tony Helmy · Senior MarTech Specialistupdated · 8 min read
On this page · 8 sections
  1. Why optimising for form fills isn’t enough
  2. Pick your route
  3. Prerequisites
  4. Route 1: HubSpot’s native Meta ad conversion events
  5. Route 2: Meta’s Conversions API for CRM (Conversion Leads)
  6. Route 3: Click-to-WhatsApp ads and ctwa_clid
  7. Testing, and the mistakes that break it
  8. FAQ

To connect your CRM to Meta’s Conversions API, send an event to Meta each time a lead moves to a stage you care about, such as qualified, opportunity or customer. Each event carries a key Meta can match to the ad click: a Meta lead ID, a click ID or hashed contact details. The route depends on where the lead came from. HubSpot can sync lifecycle stages natively. Meta Lead Ads use Meta’s CRM integration. Click-to-WhatsApp ads use the ctwa_clid from the chat.

This guide covers all three routes, the fields each one needs (checked against Meta’s and HubSpot’s documentation in October 2026) and the mistakes that quietly break them.

Why optimising for form fills isn’t enough

By default, Meta optimises for the event it can see, usually a form submit or a started chat. If cheap leads and good leads look the same at that moment, the algorithm will happily buy more cheap ones. Your CRM knows what happened next: who answered the call, who booked a demo, who paid. Sending those stage changes back gives Meta a better signal, so it can look for more people like the ones who actually convert.

This is server-to-server data, and it’s separate from your website pixel. Meta’s CRM integration guide describes it as a separate integration from web Conversions API events, because the required parameters are different and the data comes from your CRM, not your web server.

Pick your route

Where the lead came fromRouteMatching keyBuild effort
Website form or landing page, CRM is HubSpotHubSpot ad conversion events (lifecycle stage trigger)Click ID, email, phoneSettings only
Meta Lead Ads (Instant Forms)Meta Conversions API for CRM (Conversion Leads goal)Meta lead ID (best), then click ID, hashed email or phonePartner integration or custom build
Click-to-WhatsApp adsConversions API for Business Messagingctwa_clid from the WhatsApp webhookCustom build, or a WhatsApp provider that supports it

Many lead-gen accounts need two or all three, because leads arrive from more than one place. Build them one at a time and check each in Events Manager before starting the next.

Prerequisites

  1. Clear CRM stages. Decide which stages count, for example Lead → Qualified → Opportunity → Customer, and make sure reps actually update them. Meta can only learn from stages that change reliably.
  2. Matching keys stored on the contact. For Lead Ads, that’s the Meta lead ID. For website leads, store the click ID and the contact’s email and phone. If your forms don’t capture click IDs yet, start with capturing click IDs in hidden form fields. For WhatsApp, store the ctwa_clid.
  3. WhatsApp leads in the CRM. CTWA tracking only works if the chat reaches a contact record, so sort out connecting WhatsApp to HubSpot first.
  4. Consent. Decide how you record consent to share data with ad platforms, and send only what your privacy policy covers.

If you aren’t sure which keys your stack captures today, I can audit how leads move from your CRM to your ads as part of the free MarTech audit.

Route 1: HubSpot’s native Meta ad conversion events

If your CRM is HubSpot, start here. HubSpot can send events to Meta through the Conversions API with no code. Per HubSpot’s documentation (last updated September 9, 2026):

  • Plans: Marketing Hub Starter (up to 5 ad conversion events), Professional (up to 50) and Enterprise (up to 100).
  • Triggers: form submission, lifecycle stage change (custom lifecycle stages included) or page view. The form trigger only works with forms built in HubSpot. The lifecycle stage trigger works on the contact record instead.
  • Data shared: for lifecycle events you choose click ID, email and phone. You also choose whether to send every contact that reaches the stage, or only contacts who interacted with your ads.
  • Pixel: the Meta pixel must be installed through HubSpot. HubSpot sends both browser and server events so Meta can deduplicate them, and it recommends removing any pixel you added manually to avoid duplicates. The pixel then goes on every page with the HubSpot tracking code.
  • Timing: only stage changes after you create the event count. There’s no backfill.

Setup lives in Marketing → Ads → Create → Event. Choose Meta, your ad account, Lifecycle stage change, then the stages to send. Your ad account must belong to a Meta Business Manager.

Watch out on WordPress sites that already load the Meta pixel through Google Tag Manager or a plugin. If you turn on HubSpot’s pixel without removing the other one, you can end up counting events twice.

Route 2: Meta’s Conversions API for CRM (Conversion Leads)

Conversion Leads is a Meta Lead Ads performance goal that optimises for leads likely to reach a later CRM stage. Meta says it currently works only with Lead Ads (Instant Forms) on Facebook and Instagram, so it isn’t the route for website-form leads.

Meta’s fit guidelines (October 2026):

  • You store the 15–17 digit Meta lead ID in your CRM. If you don’t, send click ID, phone or email instead.
  • At least 200 leads per month.
  • You can upload data at least once a day.
  • The stage you want to optimise for happens within 28 days of the lead.
  • That stage converts at between 1% and 40% of leads.

Meta estimates about three to four weeks to value. That includes a learning phase of two to four weeks after your data is validated.

The payload

Meta’s payload specification (updated June 28, 2026) requires these fields:

  • event_name: your CRM stage name, as free text. Send every stage as it happens, including the initial lead.
  • event_time: Unix seconds when the stage changed. It can be up to 7 days in the past and must be after the lead was created.
  • action_source: always system_generated.
  • user_data: at least one key. Priority order: lead_id and click ID (highest), hashed email (highest), hashed phone (high), other hashed contact details (medium).
  • custom_data.lead_event_source: the CRM name, for example HubSpot.
  • custom_data.event_source: always crm.
{
  "data": [
    {
      "event_name": "Sales Qualified Lead",
      "event_time": 1791331200,
      "action_source": "system_generated",
      "user_data": {
        "lead_id": 1234567890123456
      },
      "custom_data": {
        "lead_event_source": "HubSpot",
        "event_source": "crm"
      }
    }
  ]
}

The IDs above are dummies. In practice, a CRM workflow fires when the lifecycle stage or deal stage changes, and something posts this payload to your dataset’s events endpoint. That something can be a partner integration (Meta’s guide lists Zapier as one option), an n8n workflow or a small custom endpoint. An invalid lead_id gets the event rejected. Email and phone must be hashed, as Meta’s customer information parameters require.

Route 3: Click-to-WhatsApp ads and ctwa_clid

Some paid leads never touch a website. They tap an ad, a WhatsApp chat opens, and the sale happens in that chat. That’s a common path for advertisers in the Gulf. Meta’s Conversions API for Business Messaging (updated May 5, 2026) closes that loop with the Click-to-WhatsApp click ID, ctwa_clid.

The ctwa_clid is an identifier, unique per click, that Meta includes in the referral object of the WhatsApp Cloud API messages webhook when a conversation starts from a CTWA ad. The flow is:

  1. Capture. When the first message arrives, read referral.ctwa_clid from the webhook.
  2. Store. Save it on the contact (or deal) in your CRM, next to the WhatsApp number.
  3. Send on conversion. When the stage changes, post an event to your WhatsApp dataset with action_source set to business_messaging, messaging_channel set to whatsapp, and the WhatsApp Business Account ID plus the stored ctwa_clid in user_data.
  4. Verify in Events Manager for that dataset.
{
  "data": [
    {
      "event_name": "Purchase",
      "event_time": 1791331200,
      "action_source": "business_messaging",
      "messaging_channel": "whatsapp",
      "user_data": {
        "whatsapp_business_account_id": "<WABA_ID>",
        "ctwa_clid": "<CTWA_CLID_FROM_WEBHOOK>"
      },
      "custom_data": {
        "currency": "SAR",
        "value": 1500
      }
    }
  ]
}

The technical requirements are real. You need a dataset linked to the WhatsApp Business Account (created through Meta’s Dataset API), an app with the whatsapp_business_management and whatsapp_business_manage_events permissions, Marketing API access, and a Cloud API integration. Meta wrote the guide for Business Messaging Partners. If your WhatsApp runs through HubSpot’s native channel or a third-party app, ask whether it exposes the ctwa_clid to you or can send these events for you. If it can’t, you need a setup where your own webhook receives the referral data.

This route is a good fit for an automation layer. A webhook receives the WhatsApp message, writes the contact and ctwa_clid to the CRM, and a second flow fires the event when the deal stage changes. Connecting CRMs to Meta’s conversion APIs is part of the tracking and CRM work I do. With CTWA, the part to design carefully is keeping the click ID attached as the chat moves into the CRM.

Testing, and the mistakes that break it

  • Two pixels, double events. If you use HubSpot’s route, remove other copies of the Meta pixel (theme code, GTM, plugins).
  • Only the last stage is sent. Meta wants every stage, including the initial lead, so it can learn the funnel.
  • Stale timestamps. Events with an event_time older than 7 days, or earlier than the lead’s creation, may be discarded. Send daily at minimum.
  • No key on the record. A stage change with no lead ID, click ID, email or phone can’t be matched. Audit a sample of contacts before you build.
  • Phone formats. Normalise numbers to a full international format before hashing, or matches will fail.
  • Expecting instant results. Meta’s own estimate is weeks, not days, so judge the change on lead quality over a full learning period.

For a wider check of your setup, this sits alongside the CRM and tracking checks in the audit checklist.

FAQ

How do I connect my CRM to Meta’s Conversions API?

Store a matching key on each lead (Meta lead ID, click ID, email or phone). Define your CRM stages. Then send an event to your Meta dataset each time a stage changes, either through a native integration such as HubSpot’s ad conversion events, a partner tool, or a custom API call.

Which CRM is best for integrating with Meta Ads?

Any CRM that stores matching keys and can trigger on stage changes will work. HubSpot has a built-in Meta Conversions API sync on Marketing Hub Starter and above. Other CRMs usually connect through a partner integration or a custom build.

Does Conversion Leads work with website forms?

No. As of October 2026, Meta says the Conversion Leads goal works only with Lead Ads (Instant Forms). For website-form leads, send CRM stage events with click ID, email and phone, for example through HubSpot’s lifecycle stage events.

What is ctwa_clid?

It’s the Click-to-WhatsApp click ID. Meta adds it to the WhatsApp messages webhook when a chat starts from a CTWA ad. You store it with the conversation, then send it back through the Conversions API when that chat converts.

Part of
MarTech audit checklistSpeed, tracking, CRM lead flow and automation, in one checklist.

More in CRM & HubSpot