TL;DR
The meta conversions api is a server-to-server signal that sends conversion data directly to Meta, bypassing browser limitations that block the Pixel. It does not replace the Facebook Pixel. Both signals run in parallel, and Meta deduplicates them server-side using the event_id parameter. Advertisers at any meaningful scale who rely on Pixel-only tracking are systematically undercounting conversions. Running both signals, correctly deduplicated, gives Meta the most complete attribution data available.
Do You Need the Meta Conversions API?
The short answer is yes, for almost every advertiser. The table below gives you the specific answer for your setup.
CAPI requirement by platform and situation
| Your situation | What you need |
|---|---|
| Running ads with Meta Pixel only | CAPI + Pixel (both, deduplicated) |
| Running ads on Shopify | Enable native Shopify-Meta integration (CAPI is built in) |
| Running ads on WooCommerce | Install the official Meta for WooCommerce plugin |
| Running ads with a custom checkout | Direct CAPI integration via Meta's API or GTM server-side |
| Spending under $1,000/mo | Pixel-only may be acceptable short-term; CAPI becomes critical as you scale |
| Pixel already installed, CAPI not set up | Fix this: CAPI dramatically improves event match quality |
Signal loss without CAPI
Without CAPI, iOS 14 restrictions and browser-level blocking cause a significant portion of conversion events to go unrecorded in Meta's system. Industry reports and vendor case studies show recovered events ranging from roughly 20% to 60% depending on browser mix, device split, and account setup. Your results will vary. That gap compounds as browsers tighten privacy controls.

Drowning in Meta Ads?
Put your campaign on autopilot with Nova.
Read moreWhat the Meta Conversions API Is (and What It Isn't)
The Meta Conversions API (CAPI) is a server-to-server integration that sends conversion event data directly from your server to Meta, without relying on the user's browser.
You may have heard that the Meta Conversions API replaces the Facebook Pixel. It doesn't. Disabling the Pixel after implementing CAPI removes browser-side matching signals. Based on how Meta's deduplication model works, this degrades rather than improves attribution because you've eliminated one of two independent measurement paths instead of adding a second.
Here's how the two systems work:
The Meta Pixel fires from the user's browser when a user takes an action: viewing a product, initiating checkout, or completing a purchase. It captures data client-side, which means it's subject to browser restrictions, iOS privacy controls, ad blockers, and ITP (Intelligent Tracking Prevention in Safari).
The Meta Conversions API (CAPI) fires from your server when a conversion event occurs. It sends the same data directly to Meta's API, bypassing the browser entirely. A server-to-server signal can't be blocked by browser extensions or iOS ATT.
Why you need both: When both signals fire for the same event, Meta deduplicates them server-side using the event_id parameter, so the conversion is counted once, not twice. The result is more complete conversion data than either signal provides alone, and your ROAS becomes more accurate because the learning algorithm has better signal to optimize against.
Pixel and CAPI are redundant measurement paths, not alternatives. Think of them as two independent witnesses to the same conversion event. Having both consistently yields more complete data than either signal alone.
purchases processed
attributed with Pixel only
attributed with Pixel + CAPI
EMQ improvement after CAPI
The Conversions API is designed to create a direct connection between your marketing data and Meta, which helps optimize ad targeting, decrease cost per result, and measure outcomes across Meta technologies.
The 'facebook conversions api' and 'capi meta' terms refer to the same system. Meta rebranded from Facebook to Meta in 2021, but the underlying API and Events Manager interface use both names.
New to Meta Ads tracking? Start with the complete guide to setting up Meta Ads for the full foundation, then follow how to set up the Meta Pixel first. The Conversions API works alongside the Pixel rather than replacing it.
Why CAPI Exists: The Browser Signal Problem
Browser-only tracking is increasingly unreliable for three compounding reasons:
Three reasons browser-only tracking fails
iOS 14+ App Tracking Transparency (ATT)
Users who opt out of tracking prevent the Pixel from firing on mobile Safari. Meta has estimated this affects 60%+ of iOS traffic (source: Meta Business Help Center). Without a server-side signal, those conversions disappear from your attribution entirely. For e-commerce accounts with a high mobile share, this alone justifies CAPI.
Ad blockers and browser extensions
An estimated 30-40% of desktop users run ad blocking software that also blocks the Meta Pixel from loading (source: Statista). A server-side signal bypasses this entirely. Your server fires the event regardless of what's installed on the user's browser.
ITP (Intelligent Tracking Prevention)
Safari limits first-party cookie lifespan to 7 days or shorter (source: WebKit blog). Longer attribution windows, like 28-day click, become unreliable because the cookie that ties a click to a conversion may no longer exist. CAPI sends hashed customer data (email, phone) directly, bypassing cookie dependency for matching.
Pixel-only accounts are systematically undercounting conversions. CAPI is a primary server-side fix that recovers many browser-blocked events. Combine it with first-party data, clean tagging, and Advanced Matching for best results. Other mitigations (consented CRM uploads, attribution modeling) also help, but CAPI is the most direct structural solution.
Why attribution quality matters for AI-assisted decisions
Poor CAPI health has a downstream effect: if your attribution signals are degraded, any AI-assisted budget or bidding recommendations you're relying on are working from inaccurate ROAS data. Attribution quality is a prerequisite for reliable automated decisions, not an afterthought.
How to Set Up the Meta Conversions API
There are three setup paths depending on your platform. Use the one that matches your stack.
Conversions API on Shopify (Native Integration)
Shopify's native Meta integration handles conversions api shopify setup automatically once connected. No developer required.
Open Shopify admin
Go to Sales Channels then Facebook & Instagram
Connect Meta Business account
Connect your Meta Business account if not already connected
Enable Maximum data sharing
Under Data Sharing, select Maximum to enable server-side event sharing (CAPI)
Deduplication is automatic
Shopify automatically passes order IDs as the event_id parameter for deduplication
Verify in Events Manager
Open Meta Events Manager, select your dataset, and confirm both browser and server events appear with an Event Match Quality score
What 'Maximum' data sharing means
Shopify sends SHA-256 hashed customer data (email, phone, name) alongside conversion events. Meta matches this against its user graph to attribute conversions even when Pixel fires were blocked. No PII is stored by Meta in identifiable form; only hashed values are transmitted.
Highest-impact fix for Shopify advertisers
If you're running Shopify and haven't selected Maximum, this is the single highest-impact tracking fix available to you right now.
CAPI on WooCommerce (Plugin-Based)
The official Meta for WooCommerce plugin handles the integration without custom code.
Add plugin
In your WordPress admin, go to Plugins then Add New
Install Meta for WooCommerce
Search for and install Meta for WooCommerce (the official plugin by Meta)
Connect Meta Business account
Connect your Meta Business account and select your pixel
Enable Advanced Matching
Enable Advanced Matching in the plugin settings
Enable server-side events
Under Events, confirm server-side events are toggled ON. The plugin sends server events for ViewContent, AddToCart, InitiateCheckout, and Purchase.
Use the official Meta plugin
Third-party WooCommerce CAPI plugins have inconsistent deduplication logic and can cause double-counting that inflates your conversion numbers. Use the official Meta plugin where possible.
Direct Server-Side Integration (Custom / Headless)
For custom checkout systems, headless commerce setups, or events beyond standard e-commerce, this is the facebook capi integration path for developers.
Access Meta's Conversions API
Access via the Meta Marketing API: https://developers.facebook.com/docs/marketing-api/conversions-api
Include required parameters
For each event, include: event_name, event_time, user_data (hashed), and event_id
Send events within 1 hour
Send events within 1 hour of occurrence (real-time is ideal; delays degrade match quality)
Match event_id across Pixel and CAPI
Generate a unique event_id for each event (UUID or order ID) and pass the same value to both the Pixel and CAPI
event_id is required for deduplication
To deduplicate browser and server events, send the same event_id (and event_name) in both Pixel and CAPI payloads. Without matching values, you risk double-counting. If you're sending server events only with no Pixel running, deduplication isn't a concern, but including event_id is still recommended for consistency and future-proofing.
Event Match Quality: What Score You Need
Event Match Quality (EMQ) is Meta's score (0-10) for how well your customer signals match Meta user profiles. Higher EMQ = more conversions attributed = more accurate signal for the algorithm.
Event Match Quality scoring
| EMQ Score | Rating | What it means |
|---|---|---|
| 0-3 | Poor | Minimal signals (IP + user agent only). Many conversions go unmatched. |
| 4-6 | Fair | Some advanced matching parameters included. Acceptable minimum. |
| 7-8 | Good | Email or phone hash included. Strong attribution coverage. |
| 9-10 | Excellent | Multiple hashed parameters (email, phone, first name, last name, zip). Maximum attribution. |
How to improve EMQ:
- Pass SHA-256 hashed email with every event where available
- Pass hashed phone number where customers provide it at checkout
- Pass first name, last name, and zip code for purchase events
- Enable Advanced Matching in Meta Pixel settings (browser-side)
- Use CAPI to send these parameters even when browser signals are blocked
Where to check: Meta Events Manager, your dataset, Event Match Quality column
Recommended EMQ targets (industry heuristic, not an official Meta threshold)
7+ for purchase events; 5+ for top-of-funnel events (ViewContent, AddToCart). Below 5 on purchase events is a strong signal that attribution is degraded and ROAS figures may be unreliable. Meta hasn't published official minimum thresholds - treat these as practitioner benchmarks.
Deduplication: How Meta Prevents Double-Counting
When both Pixel and CAPI fire for the same conversion, Meta counts it once. This works via the event_id parameter, a unique identifier you generate for each event.
Purchase occurs
|
+---> Pixel fires (browser) --+
| event_id: "order_12345" +--> Meta matches event_id --> 1 conversion
+---> CAPI fires (server) --+
event_id: "order_12345"How deduplication works
Generate a unique event_id
A purchase occurs; your system generates a unique event_id (e.g., order_12345)
Pixel fires with event_id
The Pixel fires: fbq('track', 'Purchase', {eventID: 'order_12345'})
CAPI fires with same event_name and event_id
CAPI fires for the same event with the identical event_name: 'Purchase' and event_id: 'order_12345'
Meta deduplicates
Meta matches both events by event_name + event_id together and counts the conversion once
What happens without event_id
Meta receives two purchase signals for the same order. Without a deduplication key, it may count both, inflating conversion numbers, making ROAS appear higher than it is, and degrading the algorithm's learning on false data.
Symptoms of a deduplication failure
- Conversion counts in Meta are significantly higher than actual orders
- ROAS looks unexpectedly strong while profit doesn't match
- Events Manager Activity Log shows near-identical duplicate events
In Meta Events Manager, check the Diagnostics tab. It flags duplicate events if deduplication is failing. Cross-reference your Meta-attributed conversions against your actual platform order volume as a sanity check.
The failure that looks like good news
Notice what separates this symptom list from every other tracking problem. A broken pixel shows up as a drop, and a drop prompts questions. A deduplication failure shows up as a rise: more conversions, stronger ROAS, a campaign that suddenly looks like it deserves more budget. Nobody opens Diagnostics to investigate a number that improved. The cross-check described above, Meta-attributed conversions against actual order volume, is the thing that catches it, and it is a manual check nobody has scheduled for the week it finally matters.
Running that check on a schedule is one of Nova's standing jobs. Nova is AdAdvisor's AI media buyer for Meta, and she audits your pixel, your server events, and your event match quality on a recurring basis rather than whenever someone remembers to look. Because she also holds your break-even ROAS, margins, and average order value from onboarding, a reported return that climbs while the underlying economics stay flat is exactly the kind of discrepancy she is built to raise rather than act on. In Suggest mode every action she proposes waits on your approval before it runs. Once she has earned it, Autopilot executes inside the spend caps, geographies, and exclusions you set and pings you only when she hits something she cannot decide alone.
Access to Nova is by application while the founding cohort onboards.
How to Verify CAPI Is Working
After setup, confirm CAPI is firing correctly before trusting your attribution data.
Use Test Events in Meta Events Manager
Open Events Manager, select your dataset, then Test Events. Fire a live test event and check what Meta receives. Verify: server events appear alongside browser events; event_id values match; Event Match Quality shows 7+ on purchase events; no Missing required parameters warnings.
Check the Diagnostics Tab
Events Manager Diagnostics flags three issue categories: missing parameters, high duplicate rates, and event mismatch. Resolve all warnings before running any attribution-dependent analysis.
Compare attributed conversions with actual orders
After approximately 7 days of CAPI running correctly, compare Meta's attributed purchase count against your actual order volume. If Meta is attributing more than 10-15% above actual orders under a 1-day click window, deduplication is likely failing.
Common CAPI Problems and Fixes
Common CAPI problems, causes, and fixes
| Problem | Likely cause | Fix |
|---|---|---|
| Conversion count much higher than actual orders | Missing or mismatched event_id | Ensure identical event_id passes to both Pixel and CAPI for every event |
| EMQ below 5 on purchase events | Missing hashed customer data | Add SHA-256 hashed email and phone to every server event |
| Only browser events in Events Manager | CAPI not firing | Re-check your server-side integration; re-verify with Test Events |
| Only server events in Events Manager | Pixel not loading in browser | Check Pixel installation; verify it's not blocked in your tag manager |
| Missing required parameters in Diagnostics | Incomplete event payload | Confirm event_name, event_time, user_data, and event_id are all present |
| Offline upload rejected as a whole batch | One event_time older than 7 days | Upload daily and send backdated events in a separate request |
| Offline conversions stopped arriving in 2025 | Integration still uses the retired Offline Conversions API | Move uploads to the Conversions API with a dataset ID and action_source physical_store |
How Do You Send Offline Conversions and CRM Events to Meta?
There is no separate Offline Conversions API anymore. Offline and CRM conversions now go through the regular Conversions API to a dataset, with an action_source value that tells Meta where each conversion happened.
Meta retired the standalone Offline Conversions API in May 2025, and offline event sets gave way to datasets. Meta's offline events documentation now calls the Conversions API its recommended method for sending offline and physical store events, and lists the old Offline Conversions API as a legacy integration.
In practice, every event type now uses one endpoint: POST /{DATASET_ID}/events. In-store sales go in with action_source set to physical_store. CRM lead-stage events for Conversion Leads go in with system_generated.
The Pixel was not deprecated
Some guides read the move to datasets as the end of the Meta Pixel. It isn't. A dataset groups Pixel website events, app events, offline events and messaging events under one ID, and a dataset created from a Pixel keeps the Pixel's ID. The Pixel plus CAPI setup described above stays as it is.
Why the label matters: action_source is how Meta tells a server copy of a website purchase apart from a sale that happened at a till, on a call, or inside your CRM. Meta requires event_source_url for website events sent through the Conversions API, so a store sale labelled website either fails that requirement or carries a URL where nothing happened. A mislabelled source likely leaves offline revenue counted as web revenue, which skews any channel-level ROAS comparison.
Which action_source Value Should You Use?
Pick the value that describes where the conversion happened, not where the data came from. Meta's Server Event Parameters reference lists nine values:
action_source values in the Meta Conversions API (per Meta's docs, checked October 2026)
| action_source | Meta's definition | Typical use |
|---|---|---|
| website | Conversion made on your website | Online checkout or form fill on your site. Also requires event_source_url. |
| app | Conversion made in your mobile app | In-app purchase, signup or subscription start |
| physical_store | Conversion made in person at your physical store | POS and in-store sales, retail transactions uploaded from store systems |
| system_generated | Conversion happened automatically, for example a subscription renewal on auto-pay | CRM lead-stage events for Conversion Leads, auto-renewals and other backend events |
| phone_call | Conversion made over the phone | Sales closed on a call. Meta lists this separately from physical_store. |
| chat | Conversion made via a messaging app, SMS or online chat | Orders taken in live chat or by SMS |
| business_messaging | Conversion from ads that click to Messenger, Instagram or WhatsApp | Sales from click-to-message campaigns |
| Conversion happened over email | Orders placed by replying to an email | |
| other | Conversion happened in a way not listed | Last resort, only when nothing above fits |
Rule of thumb: label the moment of purchase
A store sale exported from your CRM is still physical_store, because the purchase happened in the store. A lead stage your CRM sends for Conversion Leads is system_generated, which is the value Meta requires for every Conversion Leads event. A sale closed on a call is phone_call, not physical_store.
How Do You Send CRM Conversions to Meta?
CRM conversions go to Meta as a separate Conversions API integration built for lead generation. Meta's CRM integration guide keeps it apart from your website setup because the required parameters differ and the data comes from your CRM rather than your web servers.
Per Meta's payload specification, each CRM event needs action_source set to system_generated, a lead_event_source naming your CRM, and event_source set to crm. Meta recommends storing the 15 to 17 digit Meta Lead ID and sending it with every event. Without it, send identifiers such as hashed email or phone.
Two timing rules catch most broken CRM integrations. The event_time can be at most 7 days before you send the event, and it has to fall after the lead was created, or Meta may discard it.
{
"event_name": "qualified_lead",
"event_time": 1761040800,
"action_source": "system_generated",
"user_data": {
"lead_id": 1234567890123456
},
"custom_data": {
"lead_event_source": "Salesforce",
"event_source": "crm"
}
}For the funnel side of this setup, including which lead stages to send and how qualified-lead signals feed optimization, see our guide to AI lead generation for Meta ads.
Still on Offline Event Sets? How to Migrate to a Dataset ID
If an integration still posts to an offline event set through the old Offline Conversions API, it has most likely not delivered events since May 2025. The fix is to send the same events to the Conversions API under a dataset ID. Zapier, for example, retired its Facebook Offline Conversions app and moved users to its Conversions apps with a Physical Store action source and a new Dataset field (Zapier's notice).
Migrating from offline event sets to a dataset
Check whether your dataset is consolidated
In Events Manager, see whether your offline event set already sits inside a dataset. Developers can call the Ads Pixel endpoint with ?fields=is_consolidated_container, which Meta documents as the way to confirm a dataset is eligible for offline events through the Conversions API.
Choose or create the dataset
If you already run a Pixel, the usual path is to bring offline events into that dataset so web, app and store events share one ID. If you only have offline events, create a new dataset. Meta's help article on dataset creation options lists the route for each combination.
Point uploads at the dataset endpoint
Send events with a POST to graph.facebook.com/{API_VERSION}/{DATASET_ID}/events. The dataset ID replaces the old offline event set ID everywhere in your upload job.
Set action_source on every event
Meta requires physical_store for all offline and store events, and action_source is required on every server event. The legacy upload_tag parameter is still accepted if you used it with the old API.
Keep order IDs for deduplication
Offline events deduplicate only against other offline events, not against Pixel events. Meta matches on order_id (or on identical customer details when no order ID is sent) within a maximum window of 7 days, so send one event per order.
Test, then retire the old job
Send a test event with the Test Events tool in Events Manager and confirm it lands in the dataset before you switch off the old upload.
How Late Can You Upload an Offline Conversion?
Meta's documentation gives more than one number here, so check the current docs for your event type before you set an upload schedule. The figures below are what Meta's pages said when we checked them in October 2026. Daily uploads, which Meta recommends, keep you inside all of them.
Upload windows in Meta's documentation (checked October 2026)
| Window | Where Meta states it | What it appears to cover |
|---|---|---|
| 7 days | Server Event Parameters; Conversion Leads payload specification | event_time can be at most 7 days before you send. If any event in a request is older, the whole request errors and no events are processed. |
| 62 days | Sending Offline Events Using the Conversions API | Meta says physical_store transactions should be uploaded within 62 days of the conversion. |
| 90 days (35 if dormant) | Best practices for offline events data (Business Help Center) | Offline events are matched against impressions from the last 90 days. A dataset with no uploads for 90 days drops to a 35-day upload window until you upload again. |
The 7-day and 62-day lines sit on the same Meta page
Meta's offline events guide states both the 7-day event_time limit and the 62-day physical_store window without explaining how they interact. Until you have tested otherwise, treat 7 days as the safe ceiling for any Conversions API request. Send backdated store sales in their own batch, because one event older than the limit can reject everything sent with it.
The same offline and CRM data can also feed audiences: Meta notes that every action_source value supports both measurement and custom audience creation. Building audiences from customer data is covered in our guide to Facebook Custom Audiences, while this page stays on the measurement side.
Frequently Asked Questions
CAPI Setup Checklist
Before trusting attribution data after CAPI implementation, verify all of the following:
- Meta Pixel installed and firing on all key pages (confirmed in Test Events)
- CAPI enabled for your platform (Shopify Maximum, WooCommerce plugin, or direct API)
- event_id matching between Pixel and CAPI for every conversion event
- SHA-256 hashed email passed with every purchase event
- Hashed phone number passed where customers provide it
- Event Match Quality score 7+ on Purchase events in Events Manager
- No warnings in the Events Manager Diagnostics tab
- Both browser and server event rows visible in Test Events for the same conversion
- Attributed conversions within 10-15% of actual order volume under a 1-day click window
- Offline and CRM events sent to your dataset with the correct action_source (physical_store for store sales, system_generated for CRM lead stages)
Summary
The Meta Conversions API is a complementary tracking signal, not a Pixel replacement. Setting up both, with correct event_id deduplication, gives Meta the most complete conversion data available and improves the algorithm's ability to optimize your spend. For advertisers using AI-assisted tools like AdAdvisor, CAPI health is a prerequisite: automated budget and bidding recommendations depend on accurate ROAS data, which depends on accurate attribution. Weak CAPI health produces unreliable ROAS, which makes any AI-driven recommendations untrustworthy. Offline and CRM conversions run through the same API: send them to your dataset with the right action_source, physical_store for store sales and system_generated for CRM lead stages, and upload daily because Meta's documented windows differ.
AdAdvisor monitors Pixel and CAPI health as part of its account-level tracking diagnostics, flagging attribution signal issues before they affect your budget decisions.
Sources
- Meta for Developers: Server Event Parameters (Conversions API)
- Meta for Developers: Sending Offline Events Using the Conversions API
- Meta for Developers: Conversions API for CRM integration
- Meta for Developers: Conversions API for CRM integration, Payload Specification
- Meta Business Help Center: Best practices for offline events data
- Meta Business Help Center: Decide which dataset creation option is right for your business
- Zapier Help Center: Changes impacting Facebook Offline Conversions users




