Robustech
Facebook Ads that track real sales: Track sales, not just clicks. An orange domino starting a chain of glass dominoes beside glowing ad panels

Performance Advertising

Meta Conversions API Setup Guide for Lead Generation

Set up Meta Conversions API step by step: choose a setup path, deduplicate pixel and server events, raise match quality and send CRM lead stages back to Meta.

By Hiba Darwish · Published · 9 min read

Meta Conversions API setup means sending your conversion events from a server, alongside the browser pixel, so Meta receives them even when the browser drops the signal. For lead generation, the job has two parts: send website events reliably with matching IDs so nothing is counted twice, then send CRM outcomes (qualified, booked, closed) back so ads learn which leads are real. One correction up front: Meta's Conversion Leads optimization goal works only with Facebook and Instagram Instant Forms, so businesses that collect leads on their own website need a different approach, covered below.

This guide walks through requirements, a decision table of setup paths, the step-by-step build, deduplication, match quality and the CRM return path.

Pixel vs Conversions API: what each one does

The pixel runs in the visitor's browser and fires when a page loads or a form is submitted. The Conversions API (CAPI) sends the same kinds of events from your server, your CRM or a partner tool. They are designed to work together: both use the same Pixel ID (Meta for Developers), and Meta merges matching pairs so one lead counts once (Meta for Developers).

Meta's own headline number is that advertisers using the Conversions API for web events "saw an average 17.8% lower cost per result compared to those without Conversions API" (Meta, April 2026). Treat that as Meta's claim: it compares advertisers with CAPI to those with none, and Meta has not published the methodology. It is a reason to test, not a promise for your account.

The bigger reason for lead generation businesses is the second half of the job. The pixel only sees what happens on your site. CAPI is how you tell Meta what happened after the form, in your CRM.

Before you start: requirements

You need three things (Meta for Developers):

  • A Pixel ID, the same one for browser and server events
  • A Meta Business Suite account with access to the pixel
  • An access token, which you generate in Events Manager

Meta does not require App Review for the Conversions API. Before touching code, also confirm your domain is verified in Business Settings and that the pixel is firing the events you care about, such as Lead or CompleteRegistration, on the right pages.

Choose your setup path

There are five common ways to set up CAPI. The right one depends on who maintains it and whether you need CRM stages, not just website events.

Setup path Best for Sends CRM stages? Effort and trade-offs
Meta-enabled one-click setup Small advertisers who want web events covered quickly No, web events only Meta describes it as needing "no technical expertise, no cost, no ongoing maintenance" (Meta); it covers web events only and does not change existing setups (PPC Land)
Partner integration (CRM, form or platform connector) Teams already on a CRM or platform with a built-in Meta connector Often, depending on the partner Meta says a Conversion Leads integration can take under a day through a Meta Business Partner, versus 3 to 4 weeks custom (Meta for Developers)
Conversions API Gateway Businesses that want server events without writing code No, web events Typically hosted in your own cloud account or by a provider, so plan for hosting to look after
Server-side Google Tag Manager Teams already using GTM who want one server pipeline for several ad platforms Possible with extra work Typically needs a hosted server container and someone comfortable maintaining tags
Direct API integration Custom CRMs, custom forms, full control of the payload Yes Most flexible, needs a developer and ongoing ownership

A practical rule: if you only need web events, start with the one-click setup or a partner. If you want ads to learn from lead quality, choose a path that can send CRM events, which usually means a partner integration or a direct build from your CRM.

Step-by-step Meta Conversions API setup

Six steps to set up Meta's Conversions API: check your pixel and domain, pick a setup, stop double counting, send more customer details, test, and send CRM stages back to Meta
The Conversions API setup in six steps.

Step 1: Audit the pixel and domain

List every conversion event the pixel sends, where it fires and what parameters it carries. Remove duplicates (for example, a Lead event firing on both the form submit and the thank-you page). Confirm domain verification. Fixing the browser side first makes server-side problems much easier to diagnose.

Step 2: Pick your path and generate the access token

Choose a path from the table above. For a direct or GTM build, generate the access token in Events Manager and store it in your server's secrets, never in front-end code.

Step 3: Deduplicate pixel and server events

Deduplication is where most setups go wrong. Meta's rules (Meta for Developers):

  1. The pixel's eventID must match the server event's event_id.
  2. The event names must match exactly (Lead and Lead, not Lead and lead_submit).
  3. Events are deduplicated only if they arrive within 48 hours of the first event with that ID.
  4. When the two are equivalent, Meta generally keeps the first one received.

There is a fallback that uses fbp or external_id plus the event name, but Meta says it generally works only when the browser event arrives first, and it does not deduplicate events from a single source. Do not rely on it.

Meta calls event_id optional but recommended, and suggests an order or transaction ID, or a random value shared by the browser and server (Meta for Developers). For lead forms, generate one ID when the form is submitted and pass it to both sides.

Illustrative example only (simplified, not production code):

// Browser: create one ID per submission and send it with the pixel event
const eventId = 'lead_' + crypto.randomUUID();
fbq('track', 'Lead', {}, { eventID: eventId });
// Also include eventId in the form data posted to your server
{
  "data": [{
    "event_name": "Lead",
    "event_time": "<current Unix time in seconds, sent as an integer>",
    "event_id": "lead_<same value as eventId above>",
    "action_source": "website",
    "event_source_url": "https://www.example.com/get-a-quote",
    "user_data": {
      "em": ["<SHA-256 of lowercase, trimmed email>"],
      "ph": ["<SHA-256 of normalized phone>"],
      "external_id": ["<SHA-256 of your CRM contact ID>"],
      "fbp": "<_fbp cookie value>",
      "fbc": "<_fbc cookie value, if present>",
      "client_ip_address": "203.0.113.10",
      "client_user_agent": "<browser user agent>"
    }
  }]
}

Two server rules from Meta's parameter reference are worth memorizing: event_time can be up to 7 days old, and if any event in a batch is older, the whole request fails. And event_source_url is required for website events (Meta for Developers).

Step 4: Maximize match keys and Event Match Quality

Meta can only use an event if it can match it to a person. Event Match Quality (EMQ) is scored from 1 to 10, Meta recommends 6.0 or higher where possible, and says a high score "can help decrease your cost per action" (Meta for Developers). You will find it on the pixel Overview in Events Manager.

Send as many of these as you lawfully can on every server event:

  • Hashed email and phone (normalize first: lowercase and trim emails, use a consistent phone format)
  • fbp and fbc from the browser cookies
  • A hashed external_id, such as your CRM contact ID
  • Client IP address and user agent

Forms that capture email and phone cleanly help here. A multi-step qualification form can collect contact details without overwhelming visitors on the first screen.

Step 5: Test before you trust

Use the Test Events tool in Events Manager. Submit a real test lead, confirm both copies were received and deduplicated rather than counted as two conversions. Then watch EMQ for a few days as real traffic flows.

Step 6: Send CRM stages back to Meta

This is the step that turns CAPI from a tracking fix into a lead quality signal. What you can do with those stages depends entirely on where the lead came from, which is the next section.

Conversion Leads works only with Instant Forms

Meta's Conversion Leads optimization goal lets ads optimize toward leads that reach a CRM stage you choose, not just form fills. Its fit criteria are strict (Meta for Developers):

Requirement Meta's rule
Lead source Facebook or Instagram Lead Ads (Instant Forms) only
Volume At least 200 leads per month
Upload frequency At least daily
Target stage timing Reached within 28 days of the lead
Target stage conversion rate Between 1% and 40% of leads

Many guides imply any CRM can feed Conversion Leads. It cannot if your leads come from your website. The goal depends on Meta's own lead ID, which only exists for Instant Form leads.

If you use Instant Forms: the CRM payload

Meta's payload specification for CRM events (Meta for Developers):

  • action_source set to system_generated
  • custom_data.event_source set to crm
  • lead_event_source set to your CRM's name
  • lead_id set to the 15 to 17 digit leadgen_id from the Instant Form; an invalid ID rejects the event
  • Send every stage, not only the one you optimize for
  • event_time must be after lead creation and within 7 days
  • Hash email and phone

Run the integration, validate the data for a while, then switch campaigns to Conversion Leads. Meta says to expect a 2 to 4 week learning phase.

If your leads come from website forms

You can still send lead-quality signals to Meta, through a different route. Send qualified and closed stages from your CRM through the Conversions API as server events with hashed email and phone, a hashed external_id and the fbc click ID you stored at form submission. Check Meta's server event parameter reference for the correct action_source for CRM or offline events, since website events require event_source_url. Name them clearly (for example, QualifiedLead and ClosedWon), then build custom conversions on them and, if you attach values, use them for value optimization.

The practical requirement is storing fbc, fbp and your own contact ID on the CRM record when the form is submitted, because you will need them days later when the lead is qualified. Remember the 7-day event_time limit: send each stage change within a week of it happening (a daily sync is the safe default), and choose a qualification stage your team reliably updates. Fast follow-up helps here too, because speed to lead determines how quickly that stage gets set.

The same pattern applies on other platforms. Google uses offline conversions and enhanced conversions for leads, covered in our Google Ads offline conversion tracking guide, and LinkedIn has its own Conversions API return path, covered in our LinkedIn Ads B2B lead generation guide.

Limitations: when this is not the right choice

CAPI is worth setting up for almost every advertiser, but some parts of this guide will not fit your business.

  • Health and wellness advertisers. Since January 2025 Meta restricts lower-funnel events for health and wellness advertisers, and the restriction also applies to CAPI (Haus). Server-side sending is not a workaround.
  • Low volume or long sales cycles. The 200 leads a month minimum and 28-day stage window rule out Conversion Leads for many B2B firms with long cycles. Optimizing toward an early stage with custom conversions is the realistic alternative.
  • Privacy. Hash personal data before sending, follow the state privacy laws that apply to you, and never put health or financial details in event parameters or URLs.
  • Expectations. The 17.8% figure is Meta's own average with no published methodology. Judge results on your own cost per qualified lead, not cost per form fill.
  • Ownership. A direct build gives you control but someone has to maintain it when Meta changes parameters or your forms change. If no one owns it, a partner integration is safer.

Putting it together

A good Meta setup sends web events from both the pixel and the server with one shared ID, carries enough hashed identifiers to score 6.0 or better on EMQ, and returns CRM stages so Meta learns which leads matter. Instant Form advertisers with enough volume can then use Conversion Leads; website-form advertisers use custom conversions and value optimization built on the same CRM events.

If you want help connecting your forms, CRM and ad accounts into one measured system, Robustech's performance advertising service builds and maintains these integrations.

Frequently asked questions

Do I still need the Meta pixel if I set up the Conversions API?

Yes, for most websites. Meta's setup uses the same Pixel ID for browser and server events, and its deduplication rules are designed around a browser event and a matching server event sharing one ID. Running both gives Meta two chances to receive each conversion while counting it once.

Why are my leads double-counted after adding the Conversions API?

Usually because the pixel event and the server event do not share a matching ID and event name. The pixel's eventID must equal the server's event_id, the event names must match exactly, and both must reach Meta within 48 hours of the first event with that ID. Check a test submission in the Test Events tool to see whether the pair is being merged.

What is a good Event Match Quality score and how do I raise it?

Meta scores Event Match Quality from 1 to 10 and recommends 6.0 or higher where possible. You raise it by sending more customer information parameters with each server event: hashed email and phone, the fbp and fbc browser IDs, a hashed external_id, IP address and user agent. You can see the score on the pixel Overview in Events Manager.

Can I optimize Meta ads for CRM-qualified leads instead of form fills?

Only through the Conversion Leads goal if your leads come from Facebook or Instagram Instant Forms and you meet Meta's volume rules, including at least 200 leads a month. If your leads come from a website form, you can still send qualified and closed stages through the Conversions API and use them as custom conversions or for value optimization, but you cannot use the Conversion Leads goal.

Is the free one-click Meta-enabled Conversions API enough for lead generation?

It is a good starting point for website events, and Meta says it needs no technical expertise, cost or maintenance. It handles web events only, so it will not send CRM stages such as qualified or closed leads back to Meta. If you want ads to learn from lead quality, you need a partner integration or a direct API connection from your CRM.

Keep reading

Ready to own your revenue engine?

Book a free strategy call. We will audit your ads, site, CRM and follow-up and show you where leads are leaking.