Guide

Facebook lead ads CRM integration: how to send leads to your CRM

Facebook lead ads CRM integration compared: manual download, native CRMs, Zapier, Google Sheets, webhooks and Graph API, plus CRM stages back to Meta.

By Simone Manto, founder of DropCPL · Published

Instant Form leads leave Meta in six ways: manual download, a native CRM integration, middleware such as Zapier, a Google Sheets or Excel connection, webhooks with the Graph API, or Graph API bulk reads. A real Facebook lead ads CRM integration is one of the last five: it runs unattended, which matters because Meta keeps leads downloadable for 90 days.

MethodSpeedEffortWhat reaches youLimits
Manual downloadwhenever someone downloadsnothing to set up, repeated by handlead ID, ad, ad set and campaign IDs, form ID, answers; Leads Center exports only contact fields, stage, source and owner90-day window; organic leads only in the Business Suite file; 10,000 leads per Leads Center export
Native CRM integrationautomatic; Meta says real timelow: connect once from Meta Business Suitewhatever the CRM maps; tracking parameters pass throughnot every CRM stores Meta’s lead ID; leads access rules apply
Middleware (Zapier, LeadsBridge, Make)automaticlow, no code, plus an account with the toolthe fields you map, lead ID included if you map itone more tool and one more mapping to maintain
Google Sheets or Excelautomaticlowa row per lead with a Lead ID and a lead_status columna spreadsheet, not a CRM
Webhooks + Graph APInear real time; Meta says pings can take up to a few minutesdeveloper, Meta app, App Review, Business Verificationlead ID, ad ID, form ID, Facebook Page ID and time, then the answersrate limit per Facebook Page; the token’s owner needs leads access
Graph API bulk readon your scheduledeveloperlead ID, created time, ad ID, form ID, answers, filtered by datesame permissions and rate limit; as fresh as your last run

Whichever route you pick, store two IDs on every lead: Meta’s lead ID, so your CRM can send stages back to Meta, and the ad ID, so you can compute CPL per ad.

How to download Facebook leads manually

Meta lets you download leads as a CSV or XLS file from three places:

  • Ads Manager: open the Ads tab, click the On-Facebook leads link in the Results column, filter by ad, location, language and date range, and download. You can pull leads from several campaigns at once.
  • The Instant forms section of Meta Business Suite: All tools, Instant forms, then Download next to the form. Download new leads exports only what arrived since your last download.
  • Leads Center in Meta Business Suite: the download icon exports your current filter, but the fields are limited to date, name, email, phone, stage, source and owner, and a file holds up to 10,000 leads.

The Ads Manager and Business Suite files carry the useful columns: the lead ID (id), creation time, ad, ad set and campaign IDs and names, form ID and name, is_organic and platform, then one column per question (Information included when you download your leads data). Meta says you need both Facebook Page admin permissions and a role on the ad account to see all of them. Ad fields come out blank for organic leads, ad preview submissions, and anyone without advertiser privileges on the ad account.

Meta’s own developer guide calls manual download “not recommended”, acceptable as a temporary solution when an integration has issues (Connecting your CRM to download leads). The reason is the clock: Meta keeps leads available for download for up to 90 days from submission, citing security and storage, and recommends downloading often or using a CRM (About expired leads).

Why your download doesn’t match Ads Manager

Example: an Instant Form ad set shows 300 leads in the Results column for March.

Where you lookLeadsWhy
Results column, March300leads that came from the ads
Business Suite download, pulled 2 April312the 300, plus 11 organic leads and 1 test lead you submitted yourself
Any download pulled in July0every March lead is past the 90-day window

The organic and test rows come from Meta’s notes on organic leads: organic leads exist only if the form’s sharing setting is Open (Restricted is the default), they’re downloadable from Business Suite but not from Ads Manager, and neither they nor test leads count in Results. The last row is the 90-day rule: Results keeps counting leads you can no longer download.

Native Facebook lead ads CRM integrations

Meta keeps a searchable directory of CRM systems with a lead ads integration. To connect one (Connect your CRM system to Meta Business Suite):

  1. In Meta Business Suite, open All tools, then Instant forms.
  2. Select the CRM setup tab and search for your CRM.
  3. Click Connect from website and finish the steps on the CRM’s side. Entries marked “through Zapier” connect through Zapier instead.

Meta’s article on CRM integration benefits says new leads then reach the CRM automatically and in real time. Only admins of the Facebook Page who have leads access permission can connect a CRM, and if someone with full control of the business portfolio has customized leads access, the CRM must be assigned there before any lead arrives (Assign or remove permissions in leads access). An integration set up from the CRM’s website can’t be edited or disconnected in Business Suite; you manage it on the CRM side.

Before you commit, check one thing: does the integration store Meta’s lead ID? Meta’s guide to finding the lead ID lists where it lands:

RouteMeta lead ID stored?
Webhook or Graph APIyes, in the lead’s id field (leadgen_id in the webhook)
Zapier or LeadsBridgeyes, in the id field, if you map it
Makeyes, in the Lead ID field, if you map it
Salesforce Lead Captureyes, in the Lead ID field; map it to a custom field
HubSpot Lead Syncno
Zoho CRM Social integrationno
Microsoft Dynamics 365no leads integration at all
Manual filefirst column, id, with a leading label you may need to strip

Without the lead ID, sending stages back to Meta later loses its best match key.

Two form settings make any integration cleaner. Both are easier to set when you build the form, because published forms may need to be duplicated and modified (About tracking parameters):

  • Field names. Under Settings, Field names, rename the columns to match your CRM’s field IDs, so Meta leads land in the same fields as leads from other channels (Change the field names).
  • Tracking parameters. Under Settings, Tracking parameters, add name and value pairs such as utm_source = Facebook. People never see them; they’re included in downloads, passed to integrated CRMs and available to webhook and API integrations. Names and values can’t be empty or reuse a form field name (Set up tracking parameters).

The rest of the form setup is in Facebook lead ads best practices.

Middleware: Zapier, LeadsBridge and Make

If your CRM has no native integration, Meta points to third-party tools such as Zapier and LeadsBridge as the easy, no-code option. Meta’s Zapier walkthrough starts from the same CRM setup tab: connect your Zapier account, pick the Facebook Page and the Instant Form, test the trigger, choose the action in your CRM (usually Create contact) and map the form fields to CRM fields.

Map three IDs on day one: lead ID, ad ID and form ID. Meta’s walkthrough is blunt about the first: storing the lead ID is required if you want to set up a Conversions API for CRM integration. And because the walkthrough has you pick a specific Instant Form, check that new forms are covered when you launch them.

Google Sheets or Excel: a two-way spreadsheet

For a small team without a CRM, Meta can write leads straight into a spreadsheet. Connect Google Sheets or Microsoft Excel from the Instant forms section of Meta Business Suite, pick the spreadsheet and the form, and new leads appear as rows. An option creates a new worksheet automatically for every new form. If you start the Sheets setup from Ads Manager instead, the spreadsheet has to be empty.

The useful part runs the other way. Each row gets a Lead ID and a lead_status column with stages such as Intake, Qualified, Converted, Lost and Not qualified. Every time you update lead_status, Meta pulls the change and creates a Conversions API event from it. And if you work your leads in Leads Center, Meta says Instant Form leads are sent automatically, with no setup required (Connect your CRM using Conversions API for CRM).

A spreadsheet won’t assign leads, remind anyone to call, or stop two people calling the same person. Move to a CRM once more than one person works the leads.

DropCPL doesn’t sync Instant Form leads: it handles the leads your landing pages collect, and forwards each one by webhook with its ad and landing page attached. The click is logged on the landing page’s own domain and the Lead event goes to Meta through the Conversions API, so those leads reach your CRM with an ad ID you can join to spend. Start free →

Send Facebook leads to a CRM with webhooks and the Graph API

This is the route for agencies with many Facebook Pages, custom routing rules, or a CRM nobody integrates with. Meta’s Retrieving Leads guide describes two methods: webhooks, which notify you of each new lead, and bulk read, which you call on your own schedule.

What you need first

  • A Meta app that has passed App Review with leads_retrieval and pages_manage_ads, followed by Business Verification. An app in Development mode can’t retrieve leads, except those submitted by people with a role on the app (Lead Ads overview).
  • A token from the right person: a Page or User access token requested by someone who can advertise on both the ad account and the Facebook Page. Prefer a Page access token: Meta warns that User tokens are rate-limited by the app’s active users, usually one for a lead ads integration. Meta also suggests a long-lived Page token, so the integration doesn’t stop when a token expires.
  • These permissions to read all lead data and ad-level data: ads_management, leads_retrieval, pages_show_list, pages_read_engagement and pages_manage_ads, plus pages_manage_metadata for webhooks.
  • Leads access for the person behind the token. If the business has customized leads access and that person isn’t assigned, the fetch fails.

The webhook flow

  1. Subscribe your app to the Page object’s leadgen field, then install it on the Facebook Page with a POST to /{page-id}/subscribed_apps?subscribed_fields=leadgen (Webhooks for lead ads).
  2. For each new lead, Meta posts a notification to your endpoint. Meta says these real-time pings can arrive with a delay of up to a few minutes.
  3. Fetch the lead by its leadgen_id.
  4. Save it, then route it.

The notification carries IDs, not answers. This is Meta’s sample:

{
  "object": "page",
  "entry": [
    {
      "id": 153125381133,
      "time": 1438292065,
      "changes": [
        {
          "field": "leadgen",
          "value": {
            "leadgen_id": 123123123123,
            "page_id": 123123123,
            "form_id": 12312312312,
            "adgroup_id": 12312312312,
            "ad_id": 12312312312,
            "created_time": 1440120384
          }
        }
      ]
    }
  ]
}

Then fetch the lead itself:

GET https://graph.facebook.com/{API_VERSION}/{LEADGEN_ID}?fields=created_time,ad_id,campaign_id,form_id,field_data&access_token={PAGE_ACCESS_TOKEN}

field_data holds the answers as name and values pairs. Responses to optional custom disclaimer checkboxes aren’t in it; request custom_disclaimer_responses separately.

Bulk read as a safety net

Bulk read pulls leads from an ad or a form, with GET /{AD_ID}/leads or GET /{FORM_ID}/leads and a filtering parameter on time_created to fetch only what’s new. A form can serve many ads, so it often holds more leads than any single ad using it. Meta’s overview suggests bulk read if you fetch a few times a day, and webhooks for anything more frequent.

The rate limit is 200 × 24 × the number of leads the Facebook Page created in the past 90 days, per 24 hours. Example: a Facebook Page with 500 leads in the last 90 days allows 2,400,000 calls a day.

My setup: webhooks for speed, plus one bulk read a day that compares lead IDs with what’s already stored. A lead the webhook missed turns up the next morning; with a 90-day window, a lead nobody notices eventually becomes a lost lead.

Test before launch

Meta’s Lead Ads Testing Tool creates a test lead for a form and shows whether your webhook received it, with the payload. You get one test lead per form at a time (delete it to create another), the tool doesn’t work in developer mode, and its leads are organic and not tied to any ad, so don’t expect an ad_id on them.

What each lead should carry into your CRM

FieldWhere it comes fromWhy you store it
Lead ID (id, leadgen_id)downloads, webhooks, the API and integrations that map itthe match key for sending stages back to Meta
ad_id, adset_id, campaign_iddownloads and the API, with advertiser access; the webhook carries ad_idjoins each lead to spend: CPL per ad
form_iddownloads, webhooks and the APIone form can serve many ads
is_organic, platformdownloadsseparates paid from organic, Facebook from Instagram
Tracking parametersset per form, in Settingsfixed labels such as a client name or an offer code
phone_number_verifieddownloads, when phone verification is onMeta warns it may not come through a CRM integration

Store the IDs as text and join on the ID, never the name: how to track the Facebook ad ID in your CRM explains why, and how to turn them into CPL per ad. If you also run landing pages, DropCPL’s lead routing sends the ad, the campaign and the landing page with each landing page lead, so both sources join to spend the same way.

Send CRM stages back with the Conversions API for CRM

Getting leads out is half the loop. The other half sends each lead’s progress back to Meta, and since April 2026 Meta requires it for the qualified leads performance goal on new campaigns, with existing campaigns affected from August 2026 (About performance goals for lead ads).

Meta’s developer guide calls it the Conversions API for CRM integration and stresses that it’s separate from a website Conversions API setup: the required parameters differ, and the data comes from your CRM rather than your web server. Each stage change becomes one event, as the payload specification shows:

{
  "data": [
    {
      "event_name": "Marketing Qualified Lead",
      "event_time": 1793787302,
      "action_source": "system_generated",
      "user_data": {
        "lead_id": 1234567890123456
      },
      "custom_data": {
        "lead_event_source": "HubSpot",
        "event_source": "crm"
      }
    }
  ]
}

event_name is your own stage name, lead_event_source the name of your CRM, and lead_id the Meta lead ID; without it, Meta accepts a hashed email or phone number, or a click ID.

The rules that trip people up, from Meta’s developer implementation and FAQ:

  • Send every stage, raw lead included. Meta’s example: 100 leads that become 70 marketing qualified leads, 30 opportunities and 15 sales mean 215 events.
  • Mind the timestamps. event_time must come after the lead was created, and no more than 7 days before you send it.
  • Batch carefully. A batch holds up to 1,000 events, and one error discards the whole batch, so keep batches small and retry.
  • Upload at least daily. If you batch, send each status change, not a snapshot of the latest one.
  • Don’t change the Pixel later. Meta says switching starts a new integration and restarts training.

Validation needs at least seven days of data and at least two funnel stages, three if possible.

You don’t need a developer. Meta’s list of Conversions API for CRM partners includes HubSpot, LeadsBridge, Make, Salesforce, Stape, Zapier and Zoho, and the Google Sheets and Excel connections do it from a column. Meta’s timeline puts a partner or Zapier setup at under a day and a developer build at 3-4 weeks, followed by 2-4 weeks of training. One HubSpot detail: since Lead Sync doesn’t store the lead ID, Meta suggests a webhook or partner integration instead, or HubSpot’s Lifecycle Stage Sync on Professional and Enterprise plans.

One boundary: Meta says this payload is for Meta lead ads only, not for website leads. Landing page leads go back as a regular website Lead event, covered in how to set up the Conversions API. Meta’s thresholds for the goal itself are in Facebook lead quality and the conversion leads entry.

Which Facebook lead ads CRM integration should you choose?

  • No CRM, one or two people calling: the Google Sheets or Excel connection, or Leads Center. Sheets turns your lead_status updates into Conversions API events, and Meta says Leads Center needs no setup for Instant Form leads.
  • A CRM with a native integration that stores the lead ID: use it, then set field names and tracking parameters on every form.
  • A CRM whose integration drops the lead ID: middleware with id mapped, or webhooks.
  • An agency with many clients and Facebook Pages: webhooks plus a daily bulk read, with a clear owner for the token, because the integration breaks the day that person loses access to the ad account or the leads.
  • Manual download: a backup for when something breaks, as Meta itself says.

Whatever you pick, send a test lead before launch, and recount against the Results column after the first week.

FAQ

How do I connect Facebook lead ads to my CRM?+

In Meta Business Suite, open All tools, then Instant forms, then the CRM setup tab, search for your CRM and follow its connection steps. If your CRM is not listed, use middleware such as Zapier, LeadsBridge or Make, or have a developer subscribe to Meta's leadgen webhook and fetch each lead through the Graph API.

How long does Facebook keep lead ads data?+

Meta says lead information is only available on Meta for 90 days from the time someone submits the form, so older leads cannot be downloaded. Ads Manager keeps counting them in the Results column, which is one reason a late download shows fewer leads than your reports.

Why does my leads download not match the Results column?+

Three documented reasons: leads older than 90 days are no longer downloadable, organic leads from shared forms appear in the Meta Business Suite download but are not counted in Results, and test leads show up in downloads without being counted. Ad IDs can also be blank for organic leads, ad preview submissions or users without advertiser access.

What permissions do I need to retrieve leads with the Graph API?+

A Page or User access token from someone who can advertise on the ad account and on the Facebook Page, with ads_management, leads_retrieval, pages_show_list, pages_read_engagement and pages_manage_ads, plus pages_manage_metadata for webhooks. Your app also needs App Review for leads_retrieval and pages_manage_ads, followed by Business Verification.

Why does my CRM need the Meta lead ID?+

It is the match key Meta recommends when your CRM sends lead stages back through the Conversions API for CRM, which the qualified leads goal now requires. Meta notes that some integrations, such as HubSpot Lead Sync and Zoho CRM's Social integration, do not store it, so check before you choose one.

Ready to find out what
converts, for real?

Free to start.

Start free →