🙌 Our latest webinar is live!
Nov 7
Attribution

Meta Conversions API (CAPI): Setup Guide for Lead Gen

Andre Sottil
Founder & CEO, Admira

The Meta Conversions API (CAPI) is a server-to-server connection that sends conversion events from your website server, CRM or backend directly to Meta, instead of relying only on the browser Pixel. Meta recommends running it alongside the Pixel and deduplicating the two with a shared event_id. For lead-gen teams, its biggest value is not the form fill itself: it is sending later CRM stages, such as qualified lead or closed sale, so Meta can optimize for people who actually buy.

This guide covers what CAPI is, the three main ways to set it up, how deduplication works, how to read Event Match Quality, and exactly which events a lead-gen business should send.

What is the Meta Conversions API?

The Pixel runs in the visitor's browser. Ad blockers, browser privacy features, consent choices and slow pages can stop it from firing. The Conversions API sends the same kind of event from a server you control, so it does not depend on the browser.

Each server event has a few required fields, according to Meta's server event parameters reference:

  • event_name: a standard event such as Lead or Purchase, or a custom name.
  • event_time: a Unix timestamp in seconds. It can be up to 7 days before you send it. If any event in a request is older than that, the whole request fails.
  • user_data: customer information used for matching, such as hashed email and phone.
  • action_source: where the conversion happened. Allowed values include website, app, phone_call, chat, physical_store, system_generated, business_messaging, email and other.
  • event_source_url: required for website events.

Because CAPI runs on your side, it can also send events the Pixel never sees: a lead marked qualified by sales, a signed contract, a payment recorded in your billing system.

Which Conversions API setup path should you choose?

There are three practical paths. They differ in effort, cost and how much control you get over the data.

PathHow it worksEffortBest forMain limit
Partner integrationA platform you already use (CRM, ecommerce, tag manager or attribution tool) connects to Meta from Events ManagerLow, often under a dayTeams without developersYou send only what the partner supports
Conversions API GatewayA Meta-provided server instance you host in a cloud account (Meta's setup guide offers a hosting region choice), which mirrors Pixel events server-sideMediumWebsites that want server copies of web events with little codeMirrors web events; does not send CRM stages by itself
Direct integrationYour developers call the API with an access token generated in Events ManagerHighCustom stacks, full control of CRM eventsNeeds engineering time and maintenance

Many teams combine two paths: the Gateway or a partner for web events, and a CRM-side integration for downstream stages. If you want to compare options for sending CRM events back to ad platforms, see our overview of connecting offline conversions from your CRM.

How does Conversions API deduplication with the Pixel work?

If you send the same event from the Pixel and from CAPI, Meta needs to know they are one conversion. Otherwise it counts two. Meta's deduplication documentation describes two methods.

  1. event_id plus event_name (recommended). Generate one unique ID per conversion, for example a lead ID. Pass it to the Pixel as eventID (the fourth argument of the fbq track call) and to CAPI as event_id. The event names must match exactly, for example Lead and Lead.
  2. fbp or external_id plus event_name. Send the same browser ID or your own user ID from both sides. This only works when the browser event arrives first. It cannot dedupe a server-only or browser-only stream.

Meta deduplicates only within 48 hours of the first event with a given event_id. When the two copies do not differ in a meaningful way, Meta generally keeps the one it received first.

A common mistake is generating the event_id twice, once in the browser and once on the server. The IDs then never match. Create the ID once (for example when the form is submitted), put it in the page so the Pixel can read it, and send the same value from your server. Our post on deduplicating conversions across ad platforms covers the wider problem of double counting.

What is Event Match Quality in the Conversions API?

Event Match Quality (EMQ) estimates how well the customer information on your server events can be matched to a Meta account. Meta's developer documentation describes it as a score out of 10, shown per event in Events Manager. Third-party guides also describe labels such as Great, Good, Okay and Poor, so check what your Events Manager shows today.

EMQ rises when you send more and better identifiers. The usual list:

  • Email and phone, normalized (lowercase, no spaces, phone with country code such as 52 for Mexico) and SHA-256 hashed.
  • fbc (built from the fbclid in the ad click URL) and fbp (the browser ID cookie), captured at form submit and stored with the lead.
  • Client IP address and user agent for website events (these are sent unhashed).
  • external_id: your own stable customer or lead ID, hashed.
  • First name, last name, city and country where you have them.

CRM events usually score lower than web events because the sale happens days later, away from the browser. The fix is to save fbc, fbp, email and phone on the lead record when the form is submitted, then send them with every later stage.

What should lead-gen businesses send through the Conversions API?

A form fill is a weak optimization signal. Many leads never answer the phone. If Meta only sees Lead events, it learns to find people who fill forms, not people who buy. CAPI lets you send the stages that matter.

Funnel stageSuggested eventSourceUse in ads
Form submittedLeadPixel + CAPI, dedupedVolume signal, early learning
Lead qualified by salesCustom event, e.g. QualifiedLeadCRM via CAPIOptimization once volume allows
Meeting or visit heldSchedule or custom eventCRM via CAPIReporting, audiences
Closed wonPurchase with value and currencyCRM via CAPIRevenue reporting, value signals

If you use Meta Lead Ads (Instant Forms), Meta also offers the Conversion Leads integration. Per Meta's guide, it needs the Meta lead ID stored in your CRM (recommended), at least 200 leads per month, uploads at least once a day, the optimized stage happening within 28 days of the lead, and a stage conversion rate between 1% and 40%. Meta estimates 2 to 4 weeks of learning after data verification.

For WhatsApp leads from click-to-WhatsApp ads, the identifier is the conversation, not a web cookie. That flow is covered in our guide to WhatsApp ads attribution. For the strategy side of feeding better signals to Meta, read how to optimize Meta Ads for qualified leads.

How do you set up the Conversions API step by step?

  1. Audit your Pixel. In Events Manager, list the events firing today and confirm each has the right name and parameters.
  2. Choose the path. Partner, Gateway or direct, using the table above.
  3. Generate an event_id per conversion and pass it to both the Pixel and the server event.
  4. Capture identifiers at form submit: email, phone, fbc, fbp, IP and user agent. Store them on the CRM record.
  5. Send the web Lead event from the server and confirm in Test Events that Meta shows it as deduplicated.
  6. Map CRM stages to events (QualifiedLead, Purchase) and send them as they happen, at least daily, within the 7-day event_time window.
  7. Check EMQ and diagnostics after a few days. Add missing identifiers before you change campaign optimization.
  8. Switch optimization gradually. Move one campaign to the deeper event once it has steady volume, and compare cost per qualified lead against the old setup.

Example: what changes when you send qualified leads

Example (hypothetical numbers): a Monterrey real estate developer spends $6,000 a month on Meta and gets 600 form leads, a $10 cost per lead. Sales qualifies 90 of them (15%). The cost per qualified lead is $66.67.

MetricPixel only, optimizing for LeadCAPI with QualifiedLead sent from CRM
Monthly spend$6,000$6,000
Form leads600450
Cost per lead$10.00$13.33
Qualified leads90 (15%)99 (22%)
Cost per qualified lead$66.67$60.61

In this illustration, cost per lead goes up while cost per qualified lead goes down. That is why you need CRM data to judge the change: Ads Manager alone would show the second setup as worse. Results vary by account; treat this as the pattern to look for, not a forecast.

Who the Conversions API is for, and when it doesn't help much

It fits lead-gen, B2B and sales-led teams whose real conversion happens in a CRM, sites with heavy iOS or ad-blocker traffic, and any advertiser spending enough on Meta that signal quality affects results.

It helps less when you have very low volume (a handful of conversions a month gives Meta little to learn from), when your CRM stages are not updated reliably, or when you cannot capture contact data at the lead stage. CAPI also does not tell you what Meta caused; for that you need lift or holdout tests, covered in our incrementality testing guide.

Admira's Conversion API feature sends CRM events back to ad platforms server-side, tied to the original ad click, for teams using HubSpot, Salesforce, Kommo or Clientify. It is one option among partners; if your CRM already has a reliable native Meta integration, that may be enough.

FAQ

Do I still need the Meta Pixel if I use the Conversions API?

Yes, in most cases. Meta describes running the Pixel and CAPI together, with deduplication, as the recommended setup.

Is the Conversions API free?

Meta does not charge for the API. Your cost is the partner tool, the cloud hosting for the Gateway, or developer time for a direct integration.

Why are my CAPI events counted twice?

Usually the event_id differs between browser and server, or the event names don't match exactly. Both must be identical and arrive within 48 hours.

What is a good Event Match Quality score?

Higher is better, and Meta does not publish one universal target. Focus on sending email, phone, fbc, fbp and external_id on every event, then watch the score trend.

Can I send events older than 7 days?

Not through a standard server event: Meta rejects the whole request if any event_time is more than 7 days old. Send CRM stages daily.

Does CAPI work for WhatsApp leads?

Yes, but matching relies on the phone number and conversation data rather than browser cookies. Use an action_source that reflects where the conversion happened.