The Meta Conversions API (CAPI) is a server-to-server connection that sends conversion events such as leads and purchases directly from your website backend, CRM or tag server to Meta, instead of relying only on the browser pixel. You run it alongside the pixel, deduplicate the two with a shared event ID, and Meta gets a more complete and better matched picture of who converted. That improves reporting and gives the delivery system better signal to optimize against.
This guide covers why browser-only tracking undercounts, the four realistic setup paths, deduplication, event match quality, testing in Events Manager, the restrictions that apply to health and finance advertisers, and the failure modes we see most often when we audit an account.
What the Meta Conversions API actually is.
The pixel is JavaScript that runs in the visitor's browser and reports events from there. The Conversions API is an endpoint on Meta's Graph API that accepts the same kinds of events from a server you control. Each event carries an event name (Lead, Purchase, CompleteRegistration, or a custom name), a timestamp, an action source such as website, the page URL, and a block of customer information that Meta uses to match the event to a person on its platforms.
CAPI is not a replacement for the pixel. Meta's own guidance is to run both, because the browser has context the server does not (the click cookie, the user agent, on-page behavior) and the server has reliability and data the browser does not (the confirmed order, the CRM record, the hashed email). Together they cover each other's gaps.
Why browser-only pixels undercount.
A pixel only reports what the browser lets it report. Ad blockers and privacy extensions block the pixel script outright. Some browsers limit how long first-party cookies persist, which shortens the window in which a return visit can be tied to the original click. Users decline consent banners. Thank-you pages fail to load on slow mobile connections, or a checkout redirects through a payment processor and never returns to the page carrying the pixel. On iOS, app tracking choices reduce what Meta can observe inside its own apps.
The conversion still happened. Meta just never heard about it, so reporting understates results and the algorithm optimizes on a thinner, skewed sample. If your pixel is not firing at all, fix that first; our walkthrough on why your Meta pixel is not firing covers the browser side. CAPI then closes the gap the browser cannot.
“A pixel tells Meta what the browser saw. The Conversions API tells Meta what actually happened in your business.”
The four setup paths and who each fits.
There are four practical ways to get server events to Meta. They differ in effort, control and ongoing cost, and the right one depends on your platform more than your preferences.
| Path | Effort | Control over data | Best fit |
|---|---|---|---|
| Partner integration (Shopify, WooCommerce, others) | Low, mostly settings | Limited to what the partner sends | Standard e-commerce on a supported platform |
| Server-side Google Tag Manager | Medium, needs a tagging server | High, you shape every event | Sites already on GTM that want one pipeline for several ad platforms |
| Direct API from your backend or CRM | High, needs a developer | Full | Lead generation where the real conversion happens after the form |
| Conversions API Gateway | Low to medium, hosted in your cloud | Mirrors pixel events, little enrichment | Teams that want server coverage without writing code |
Partner integrations are the fastest route. On Shopify, the Facebook and Instagram sales channel app connects your pixel and dataset, and its customer data sharing setting controls whether events go only from the browser or from both browser and server. Set it to the maximum level your privacy policy supports. The tradeoff is that you get the events the partner chooses to send, in the shape it chooses.
Server-side Google Tag Manager routes browser events to a tagging server you host (on Google Cloud or a managed host), where a Meta Conversions API tag forwards them. It gives you one place to enrich and forward events to several platforms, at the cost of hosting and GTM expertise.
Direct API integration means your application posts events to the Graph API endpoint for your dataset with a system user access token. This is the only path that can send events the browser never sees, such as a lead that became qualified in your CRM two weeks later. For lead generation, that is usually where the value is.
The Conversions API Gateway is Meta's hosted option that runs in your own cloud account and mirrors pixel events to the server side. It is quick to stand up, but it only knows what the pixel knows, so it improves reliability more than it improves data.
Step by step: a direct Conversions API setup.
Partner integrations skip most of this engineering but still need steps 1, 5 and 6.
Deduplication with event_id, in detail.
When the pixel and the server both report the same purchase, Meta needs a way to know they are one purchase. It uses the combination of event_name and event_id. If a browser event and a server event arrive with matching values within Meta's deduplication window (48 hours at the time of writing), Meta keeps one and discards the other. Without a match, you double count, and your cost per result looks better than it is.
The most reliable ID is one your system already treats as unique, such as an order or lead ID. Generating a random ID in the browser and then trying to pass it to the server is where builds break, because the server never receives the same value.
Event match quality and customer information parameters.
Event match quality is a score from 0 to 10 that Events Manager shows for each server event, estimating how well the customer information you send lets Meta match events to accounts. Higher scores generally mean more conversions attributed and better optimization signal.
The parameters that move the score most are hashed email, hashed phone, the fbc click ID cookie, and IP address plus user agent sent together. External_id (your own customer ID, hashed) helps link events over time. Normalize before hashing: lowercase and trim emails, strip phone numbers to digits with country code, lowercase names. A single stray space produces a different hash and a failed match. Do not hash client_ip_address, client_user_agent, fbc or fbp; Meta expects those in plain form.
- Capture email and phone on the form or checkout and carry them to the server event.
- Read the _fbc and _fbp cookies server-side on every request, and build fbc from the fbclid URL parameter when the cookie is missing.
- Send IP and user agent from the original visitor request, not from your server or a proxy.
- Only send what your privacy policy and consent flow allow.
Restrictions for health and finance businesses.
Meta applies extra rules to businesses in sensitive categories. Advertisers Meta classifies as health and wellness have seen limits on which lower-funnel events can be shared and used for optimization, and domains flagged as sensitive can be put on a restricted data setup that strips custom parameters and detailed URL information from events. Financial products and services fall under a special ad category that limits targeting options, and some financial advertisers have also seen data restrictions.
Practically, that means three things. Never send information that reveals a health condition or financial status, in event names, URLs or custom parameters. Check the dataset in Events Manager for any notice about restricted events before you plan a campaign around purchase or lead optimization. And for regulated funnels, the more useful server-side work is often sending a clean, compliant qualified lead event from your CRM rather than trying to recover every browser event.
What usually goes wrong.
- Double counting because the pixel and server send different event_id values, or the event_name differs by capitalization.
- Hashing IP address, user agent or fbc, which makes them useless for matching.
- Sending the server's own IP and user agent instead of the visitor's, which drags match quality down.
- Stale events: event_time set to the processing time of a batch job days later, or outside the window Meta accepts for website events.
- A test_event_code left in production, so live events land in the test tool instead of reporting.
- Access tokens tied to a personal user who leaves the company, silently breaking the feed.
Where the setup stops and the ongoing work begins.
Turning on a partner integration takes an afternoon. Getting a Conversions API feed that is deduplicated, well matched, compliant for your category and connected to what happens after the form is a small engineering project, and it needs monitoring after launch because site changes, consent updates and platform changes break it quietly. The payoff is highest for lead generation businesses, where sending qualified or sold outcomes back to Meta changes what the algorithm learns to find.
Designing and maintaining that tracking layer across Meta, Google and the CRM is work Theory Road does as part of our server-side tracking and Conversions API service.
Do I still need the Meta pixel if I use the Conversions API?
Yes, in almost every case. Meta recommends running both. The pixel captures browser context such as the click cookie, user agent and on-page events, while the Conversions API adds reliability and data the browser cannot see. Running them together with shared event IDs gives the most complete, deduplicated view of conversions.
How does Meta deduplicate pixel and Conversions API events?
Meta matches the event_name and event_id on browser and server events. When both arrive with the same values within the deduplication window, which is 48 hours at the time of writing, Meta keeps one and drops the other. Use an ID your system already treats as unique, such as an order or lead ID, to make the match dependable.
What is a good event match quality score?
Meta scores match quality from 0 to 10 and describes higher scores as better, but there is no universal target. Focus on the inputs: send hashed email and phone, the fbc and fbp cookies, and the visitor's IP and user agent on every event where you have them. Improving those inputs raises the score more than anything else.
Is the Shopify integration enough for the Conversions API?
For a standard store it covers the core purchase funnel, provided the customer data sharing setting is at its maximum level and you verify deduplication in Events Manager. It will not send events that happen outside Shopify, such as subscription renewals in another system or offline sales, so those need a server GTM or direct integration.
Can health businesses use the Meta Conversions API?
Yes, but with limits. Meta may restrict which lower-funnel events health and wellness advertisers can share and optimize for, and may strip parameters on domains it flags as sensitive. Never send data that reveals a health condition, check Events Manager for restriction notices, and plan optimization around the events Meta will actually accept.