How do I send HubSpot or Salesforce lead stages back to Meta so it finds better B2B leads?

TofuAnswer by the Tofu team · checked

Grey pigeon in flight over a lake with blurred hills behind

Use Meta's Conversions API for CRM. Run lead ads with Instant Forms, keep each lead's Meta Lead ID in your CRM, create a CRM dataset in Events Manager, and send an event every time a lead changes stage, at least once a day. HubSpot does this with its Meta ad conversion events; Salesforce Sales Cloud uses Meta's free AppExchange app or Salesforce Webhooks. Then optimize for "Maximize number of qualified leads." A partner setup takes under a day, then Meta learns for 2 to 4 weeks or longer. Meta set the Offline Conversions API to end in May 2025.

As of October 2026.

Doing the same for other platforms? See how to send MQLs and SQLs from your CRM to LinkedIn and how to upload offline conversions to Google Ads.

Before you start

  • Lead ads with Instant Forms. Meta's developer guide and payload specification say this optimization supports only Instant Form leads. Meta's help page on lead ad performance goals and its developer FAQ (updated March 2026) say website forms work too, but the Lead ID matching below is for Instant Form leads.
  • Leads flowing into your CRM automatically, through a partner, a webhook or the Graph API. Meta doesn't recommend manual CSV downloads.
  • A business ad account and admin access. The goal isn't available in personal ad accounts. You need admin access to create the CRM dataset.
  • Enough leads, and a stage that happens fast. Meta's developer guide asks for at least 200 leads a month, an optimization stage that happens within 28 days of the lead, and a conversion rate to that stage between 1% and 40%. On October 30, 2025, Meta said it was removing the minimum monthly lead volume requirement. Its developer FAQ (updated March 2026) no longer lists one, but the main developer guide (updated October 19, 2026) and its data check step still list 200. Treat 200 a month as a safe target.
  • Don't build on the Offline Conversions API. Meta said it would discontinue that API when Graph API v16.0 expired in May 2025 (Meta's version table gives May 14, 2025), and told advertisers to move to the Conversions API.

Step 1: Check that you can pick the qualified leads goal

In Ads Manager, create a campaign with the Leads objective and set the conversion location to Instant forms. Meta's help center has you go to Conversions, open the Leads dropdown and choose Qualified leads. The performance goal is listed as Maximize number of qualified leads. Meta's developer docs and HubSpot call the same goal "Conversion Leads."

Meta's help center says that from April 2026, the qualified leads goal isn't available for new campaigns without a Conversions API integration, and existing campaigns are affected from August 2026. Meta's developer guide, in a step last updated in February 2026, still says the integration isn't required to start. If you don't see the goal, finish the integration first.

You can't change the optimization goal on a published campaign. Duplicate it and change the copy.

Step 2: Store the Meta Lead ID in your CRM

Each Instant Form lead has a Meta Lead ID, a 15 to 17 digit number (one Meta help page says 15 or 16). Meta recommends it as the match key and rejects events with an invalid one. Map it to a CRM field first.

How leads reach your CRMWhere the Lead ID is, per Meta
Webhook or Graph APIThe lead's id field, or leadgen_id in the webhook
Zapier, LeadsBridge or MakeThe id (or Lead ID) field; map it to a Lead ID or custom field
Salesforce Lead CaptureThe Lead ID field; map it to a custom field you create
HubSpot Lead SyncNot stored (see Step 4a)
Manual CSV downloadThe first column, id

Without a Lead ID, you can match on click ID or hashed email (which Meta also rates highest priority) or hashed phone number (high).

Step 3: Create a CRM dataset in Events Manager

  1. In Events Manager, click Connect data, select CRM and click Next.
  2. Read the Connect your CRM for conversion leads message and click Next.
  3. Pick a dataset or click Create new dataset. Meta suggests a new one, so CRM events don't mix with website events.
  4. Choose Connect with a partner and search for your CRM, or Connect manually.

Keep this dataset. Meta says switching to a different one restarts training.

Step 4a: Connect HubSpot

HubSpot's built-in route is ad conversion events, which send lifecycle stage changes to Meta through the Conversions API. You can also start it from Events Manager: choose Connect with a partner, search HubSpot, then pick Hubspot via Meta.

  1. Connect your Meta Ads account (it must be in a Business Manager) and install the Meta pixel through HubSpot, which HubSpot requires. The pixel goes on every page with HubSpot's tracking code and starts sending page views right away, so remove any pixel code you added by hand.
  2. Go to Marketing > Ads, click Create, then Event.
  3. Choose Meta as the ad network, pick the ad account, and choose Lifecycle stage change as the trigger.
  4. Select the lifecycle stages to send. HubSpot says to create an event for each stage, including Others.
  5. Pick the data to share (Click ID, Email address, Phone number) and whether to share all contacts who reach the stage or only those who interacted with your ads.
  6. Click Create event.

What to know:

  • Limits. Marketing Hub Starter allows 5 ad conversion events, Professional 50 and Enterprise 100, and each stage counts as one. Free HubSpot accounts can't create them. (Meta's older Lead ID guide says HubSpot's lifecycle stage sync is Professional and Enterprise only; HubSpot's own page, updated October 2026, includes Starter.)
  • Timing. Only stage changes after you create the event count. Meta says events reach Events Manager about 20 to 30 minutes after a status change.
  • Scope. HubSpot says Meta only syncs lifecycle data from contacts who interacted with your lead generation campaigns, and those campaigns must use Instant Forms.
  • The Lead ID gap. Meta's Lead ID guide says HubSpot's Lead Sync doesn't store the Meta Lead ID, yet Meta's HubSpot setup page lists Lead ID and Click ID as required. HubSpot's event setup, lead sync and field mapping pages don't list a Lead ID. If your match rate is low, download leads through a webhook or partner that stores it.

Step 4b: Connect Salesforce

Meta documents two routes for Salesforce Sales Cloud. Meta also lists Salesforce Data Cloud as a partner.

Meta's AppExchange app (Meta Conversion Leads Integration for Salesforce, published by Meta, free, listed November 2025). Meta says it may not be available to you yet.

  1. Make sure Meta leads sync into Sales Cloud with the Meta Lead ID (or at least email or phone) in a field, using Salesforce's Lead Capture app or a third party.
  2. Install the app from AppExchange: Get it now, pick the org, Confirm and install.
  3. A Salesforce admin assigns the Meta Conversion Leads User permission set to the people and automation users who update leads.
  4. Open Meta conversion leads from the App Launcher, click Connect, and choose your business and dataset.
  5. Confirm the fields to send. Meta recommends the Lead ID field; otherwise email or phone.
  6. Optional test: in Events Manager, open Test events, choose your CRM, create a test lead, change its stage in Salesforce and check that the event arrives.

Salesforce Webhooks (no code, more Salesforce setup). Pick the Salesforce Webhooks partner in Events Manager. In Salesforce, create a Lead outbound message to the endpoint URL Meta gives you, sending Status, LastModifiedDate, your Meta Lead ID field, email and phone, then a record-triggered flow with the formula Meta provides. Repeat it for Opportunity if you convert leads to opportunities. You need System Administrator in Salesforce and full control of the ad account and business in Meta.

Step 4c: Or build it yourself

Send events to https://graph.facebook.com/API_VERSION/PIXEL_ID/events with an access token from the dataset's settings. Each event needs:

FieldValue
event_nameThe CRM stage, in your own words (for example "MQL")
event_timeUnix time of the stage change, after the lead was created
action_sourcesystem_generated
user_datalead_id, plus hashed email or phone if you have them
custom_data.lead_event_sourceYour CRM's name, such as "Salesforce"
custom_data.event_sourcecrm

Events missing the last two fields show in Events Manager but don't count for this integration. Meta estimates 3 to 4 weeks for a developer build, against under a day with Zapier (free for up to 100,000 lead events, Meta said in October 2025) or another partner.

Step 5: Send every stage, at least once a day

  • Send all stages, including the raw lead. Meta's example: 100 leads that become 70 MQLs, 30 opportunities and 15 sales means 215 events.
  • Upload at least daily. Real time is best. Batches work if they include every status change, not a snapshot.
  • Keep batches small. A batch holds up to 1,000 events, and one error discards the whole batch.
  • Backfill 7 days at most. Don't change event_time to go further back; Meta may discard all of it.
  • Cover your leads. Meta wants lead coverage of at least 60%: matching events for 60% of the leads you get from Meta.

Step 6: Map your funnel and wait out learning

Meta validates your data first: its FAQ asks for at least seven days of events and two stages (three is better). Then the dataset's Overview tab lets you configure the funnel. Remove events that don't belong, order the rest, mark the stages that signal a quality lead, and pick the earliest stage to optimize for (Meta may pick another if it performs better). In October 2025, Meta said advertisers would also be able to pick a single conversion event in ad creation instead.

Meta gives two learning times: 2 to 4 weeks in its setup guide, and 1 to 2 months in its FAQ. You can run qualified leads campaigns meanwhile, but the full effect comes later. Share the dataset with every ad account that will use it.

Common problems

ProblemWhy it happensFix
Events rejectedInvalid lead_idSend the Lead ID exactly as Meta issued it, or match on hashed email or phone
Events show in Events Manager but the integration ignores themlead_event_source or event_source: crm missing, or a website payloadUse the CRM payload fields in Step 4c
Stuck on "Wait for 7 days of CRM events"Under seven days of data, one stage only, too few leads matched, or errorsCheck the Diagnostics tab and send a raw lead event for every lead
HubSpot events match poorlyHubSpot Lead Sync doesn't store the Lead ID; only changes after setup countStore the Lead ID through a webhook or partner, and give it time
No qualified leads goalNo Conversions API integration, a personal ad account, or a published campaignFinish the integration, use a business ad account, or duplicate the campaign
Offline Conversions API calls failMeta set it to end in May 2025Send events through the Conversions API
Sources (24)

Ask Tofu next

Pick a question and Tofu Ads Agent answers it in chat.

Related answers