Lead Distro AILead Distro AI
DocsIntegrationsMeta Ads Integration

Meta Ads Integration

Connect Lead Distro AI with Meta Ads: sync ad spend to campaigns, track conversions via the Conversions API, connect Facebook and Instagram lead forms, and attribute revenue to traffic sources.

Last updated:

Overview

Connect your Meta (Facebook/Instagram) ad accounts to automatically sync ad spend, track conversions via the Conversions API (CAPI), and ingest leads directly from Facebook Lead Forms.

Ad Spend Tracking

  • Go to Settings → Integrations → Meta Ads and click Connect.
  • Authenticate with Facebook and select your ad accounts.
  • Map your Meta campaigns/ad sets to Lead Distro AI campaigns and suppliers.
  • Spend syncs automatically every day — costs are attributed to the correct campaigns.
  • A lead's cost is that day's ad spend split across that day's leads, so it keeps changing while new spend syncs and more leads arrive. Meta also corrects spend for about 3 days. Until then the Cost column on the Leads page shows Est. under the amount; hover it to see when spend last updated.

Conversions API (CAPI)

Using a Lead Distro AI funnel? Set up Meta on the funnel, not here. Open the funnel, go to the Integrations tab, and click the Meta card. Paste your Pixel ID and Conversions API access token. The funnel sends each conversion from the visitor's browser (the pixel) and from our server, with one shared event id, so Meta counts it once and matches more leads. The setup below sends server events only and never fires the browser pixel.

Send server-side conversion events back to Meta when lead outcomes change. This improves ad optimization by telling Meta which leads converted. Use it for leads that arrive by API or from forms that are not Lead Distro AI funnels, and to report later results (a lead accepted by a destination, or converted). Funnel users can use both: the funnel card for the submit, this one for later results. When both send the same event name to the same pixel, this one skips its copy for that funnel's leads, so Meta counts each lead once. To send a later result too, give it its own event name (for example LeadAccepted).

  • Go to Settings → Integrations, find the Meta Conversions API card, and click Add Integration. Enter your Meta Pixel ID and Conversions API access token.
  • Link the pixel to the sources that should use it. In the Manage window, use the Sources column. A pixel that is not linked to a source never sends anything.
  • Open the Event Mapping tab and click Add Event. Pick which moment sends an event to Meta: Lead Ingested, Lead Accepted, Lead Converted, Lead Rejected, or Appointment Booked. Then choose the Meta event it sends and click Save Mappings. Nothing is sent for a moment you have not mapped.
  • Events are sent automatically and include hashed PII for matching.
  • Lead Ingested is sent as a website event, because the lead came from a web page. Every later moment (Lead Accepted, Lead Converted, Lead Rejected, Appointment Booked) is sent the way Meta asks for sales-system (CRM) events: as a system event marked as coming from Lead Distro AI. Those do not need a page URL.
  • On the Connection tab, fill in Default event source URL with your website, on a domain verified in your Meta Business account. Meta needs a page URL on every website event, so this matters for Lead Ingested. Lead Distro AI uses the lead's own page first (a landing_page field, or the field you pick under Page URL field) and falls back to this box.

A Lead Ingested event with no page URL can be dropped by Meta. When a lead has no page URL of its own (common for leads sent by API) and Default event source URL is empty, the event goes out without one. Meta still replies that it received the event, but it may not count it or show it in Test Events. The Event Logs tab marks these rows No page URL, and the Connection tab warns you under the box.

Lead Converted and Lead Rejected are sent when a lead's outcome changes to Converted or Not Qualified. That happens when you set the Outcome on the lead's row in the Leads list, when your buyer sets it in the Partner Portal, or when their system reports it through the postback webhook. Setting the outcome back to Pending sends nothing. Changing outcomes with the bulk Edit button does not send an event, so set them one lead at a time.

Appointment Booked is sent when a lead's appointment is booked: on a Lead Distro AI calendar, a Great Sales AI or GoHighLevel calendar, or by a source that posts the appointment to your campaign. It defaults to Meta's Schedule event. It is sent once per lead: moving the meeting to a new time, or cancelling and booking again, does not send a second one.

Facebook Lead Forms

Connect Facebook Pages to automatically ingest leads from Lead Form ads. Leads flow directly into your campaigns without any external automation tool.

Meta integration requires a Meta Business account with active ad accounts. When you connect, Meta asks you to approve read access to your ad spend and lead forms, plus management access so Lead Distro AI can connect your Pages to lead forms and build Custom Audiences. Lead Distro AI never creates, edits, or pauses your ads.

Frequently Asked Questions

What does the Meta Ads integration do?
Three things. (1) Ad Spend Sync pulls actual Meta ad spend daily and attributes cost to the right Lead Distro AI campaigns and suppliers (powers the Variable cost mode). (2) Conversions API (CAPI) sends server-side conversion events back to Meta at the moments you choose (lead ingested, accepted, converted, rejected, or appointment booked), improving Meta's ad optimization. (3) Lead Form ingestion pulls leads directly from Facebook Lead Form ads into Lead Distro AI campaigns without needing Zapier or a custom webhook.
How does the Conversions API (CAPI) help my ad performance?
Meta's ad-optimization algorithm learns from conversion signals. iOS 14+ broke client-side pixel tracking for most users, so server-side CAPI is now the dominant signal. By sending real lead outcomes (accepted, converted, rejected) back to Meta with hashed PII for matching, you give Meta the lead-quality data it needs to find more converting users.
What Meta permissions does Lead Distro AI request?
Lead Distro AI asks for read access and some management access. Read: ads_read (your ad spend and campaign data), leads_retrieval (leads from your Lead Form ads), and pages_show_list and pages_read_engagement (the Pages you can pick). Management: pages_manage_metadata and pages_manage_ads (to subscribe a Page to its lead forms so new leads reach us), ads_management (to create Custom Audiences and add your leads to them), and business_management (to see ad accounts and Pages owned by your Business). Lead Distro AI never creates, edits, or pauses your ads, ad sets, or campaigns. You connect through Meta's standard sign-in, and you can disconnect at any time from Settings → Integrations → Meta or from Meta Business Settings.
Can my AI tell which Meta ads make money, and change them for me?
Yes, with two connectors in the same AI (Claude, ChatGPT or Perplexity). Lead Distro AI's connector shows profit per Meta campaign, ad set and ad: spend, the leads that reached you, how many were accepted or Returned, what they sold for, and profit (revenue minus spend). Meta's own ads connector is optional: add it (https://mcp.facebook.com/ads in your AI, then sign in with Facebook) only if you want the AI to pause, edit or scale ads in Meta. Lead Distro AI's connector alone is enough to see which ads make money. The setup card shows whether your AI reported having Meta's connector the last time it asked for profit per ad. Ask something like "Which Meta ads lost money last month?" and the AI ranks them by profit, proposes a change, and makes it in Meta only after you say yes. Lead Distro AI itself never changes your ads, and Meta saves new campaigns as drafts. Step-by-step: Settings → Integrations → Meta Ads in your AI. Funnel and website leads need ad_id={{ad.id}}&adset_id={{adset.id}}&campaign_id={{campaign.id}} in the ad's URL parameters to be tied to an ad; Meta lead-form leads carry these automatically.
Can I have multiple Meta pixels — one per supplier or client?
Yes. Per-supplier Meta pixel wiring lets you isolate CAPI events per traffic source. Supplier A's leads fire conversions on Pixel A, Supplier B's leads fire on Pixel B. This is critical when running attribution for multiple ad accounts or agency clients on the same Lead Distro AI infrastructure — each client sees their own clean attribution in their own Ads Manager.
How fast does Meta spend sync after a lead is ingested?
Spend syncs on a schedule set by your plan: every 6 hours on Starter, every 2 hours on Growth, and every hour on Scale and above. So on Growth, a lead that comes in now shows its cost within 2 hours. Real-time cost attribution isn't possible — Meta's reporting API has its own delay before today's spend appears. For real-time profit dashboards, the platform uses the most recently synced spend snapshot and trues up as fresh data arrives.
What happens if my Facebook Lead Form ad pulls in leads I don't want?
Use campaign Inbound Filters to reject unwanted leads before distribution. Filters run on every ingested lead — Lead Form, API, or CSV import — and check field values against rules you configure. Common filters: state allowlists, required custom field values, phone/email format validation. Rejected leads appear in the dashboard with status REJECTED and the specific filter that caught them, so you can iterate on filter rules without losing visibility.
Should I set up Meta in my funnel or in Settings → Integrations?
If your leads come from a Lead Distro AI funnel, set up Meta on the funnel: open it, go to Integrations, and click the Meta card. It fires the browser pixel and sends the Conversions API from our server at the moment of submit, with a shared event id so Meta counts each lead once. Settings → Integrations → Meta Conversions API sends server events only, when a lead comes in, is accepted, converts, or is rejected. Use it for leads that arrive by API, or to tell Meta about later results. You can use both on the same pixel. When both would send the same event name, Settings skips its copy for the funnel's leads, so Meta counts each lead once; the lead's CAPI Event cell shows it as skipped. Give a later result its own event name (for example LeadAccepted) to send it too.
Can I see and retry failed CAPI events?
Yes. There are two places to look. In the Leads list, click Columns and tick CAPI Event. Each lead then shows Sent or Not sent, and hovering it tells you why. A lead that was not sent has a retry button right there. For the full history, open Settings → Integrations → Meta Conversions API → Manage and go to the Event Logs tab, which lists recent events with the Meta response for each one. Common reasons an event is not sent: no event mapping for that moment, the pixel is not linked to the lead's source, or an expired access token. Retries are manual, so fix the cause and then click retry.
The Event Logs say success, but my event is not in Meta's Test Events. Why?
Check whether the row in Event Logs shows a No page URL badge. Meta needs a page URL on every website event (in Lead Distro AI, that is Lead Ingested). Without one, Meta still answers that it received the event, but it may drop it. Fix it on the Connection tab: fill in Default event source URL with your website (on a domain verified in Meta), or send a landing_page field with each lead. Then send the event again. Later moments, like Lead Converted, are sent as CRM events and do not need a page URL. Also check that the Test Event Code matches the one currently shown in Meta's Test Events tab. Meta builds its custom conversion list from live events, so a new event may not show there until live events arrive. Clear the Test Event Code when you finish testing.

If you have any questions, send us an email at support@leaddistro.ai