Analytics & Reporting12 min read

Meta Conversions API (CAPI): Setup, Deduplication, and Why You Still Need the Pixel

Tarek Kekhia

Tarek Kekhia

Jun 23, 2026
Share
Meta Conversions API (CAPI): Setup, Deduplication, and Why You Still Need the Pixel

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 situationWhat you need
Running ads with Meta Pixel onlyCAPI + Pixel (both, deduplicated)
Running ads on ShopifyEnable native Shopify-Meta integration (CAPI is built in)
Running ads on WooCommerceInstall the official Meta for WooCommerce plugin
Running ads with a custom checkoutDirect CAPI integration via Meta's API or GTM server-side
Spending under $1,000/moPixel-only may be acceptable short-term; CAPI becomes critical as you scale
Pixel already installed, CAPI not set upFix 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?

Drowning in Meta Ads?

Put your campaign on autopilot with Nova.

Read more

What 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.

100

purchases processed

68

attributed with Pixel only

91

attributed with Pixel + CAPI

5.1 to 8.4

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.

M
Meta
Official Conversions API Documentation

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

1
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.

2
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.

3
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.

1
Open Shopify admin

Go to Sales Channels then Facebook & Instagram

2
Connect Meta Business account

Connect your Meta Business account if not already connected

3
Enable Maximum data sharing

Under Data Sharing, select Maximum to enable server-side event sharing (CAPI)

4
Deduplication is automatic

Shopify automatically passes order IDs as the event_id parameter for deduplication

5
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.

1
Add plugin

In your WordPress admin, go to Plugins then Add New

2
Install Meta for WooCommerce

Search for and install Meta for WooCommerce (the official plugin by Meta)

3
Connect Meta Business account

Connect your Meta Business account and select your pixel

4
Enable Advanced Matching

Enable Advanced Matching in the plugin settings

5
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.

1
Access Meta's Conversions API

Access via the Meta Marketing API: https://developers.facebook.com/docs/marketing-api/conversions-api

2
Include required parameters

For each event, include: event_name, event_time, user_data (hashed), and event_id

3
Send events within 1 hour

Send events within 1 hour of occurrence (real-time is ideal; delays degrade match quality)

4
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 ScoreRatingWhat it means
0-3PoorMinimal signals (IP + user agent only). Many conversions go unmatched.
4-6FairSome advanced matching parameters included. Acceptable minimum.
7-8GoodEmail or phone hash included. Strong attribution coverage.
9-10ExcellentMultiple 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.

deduplication-flow
Purchase occurs
       |
       +---> Pixel fires (browser)     --+
       |     event_id: "order_12345"     +--> Meta matches event_id --> 1 conversion
       +---> CAPI fires (server)        --+
             event_id: "order_12345"
bash

How deduplication works

1
Generate a unique event_id

A purchase occurs; your system generates a unique event_id (e.g., order_12345)

2
Pixel fires with event_id

The Pixel fires: fbq('track', 'Purchase', {eventID: 'order_12345'})

3
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'

4
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.

1
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.

2
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.

3
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

ProblemLikely causeFix
Conversion count much higher than actual ordersMissing or mismatched event_idEnsure identical event_id passes to both Pixel and CAPI for every event
EMQ below 5 on purchase eventsMissing hashed customer dataAdd SHA-256 hashed email and phone to every server event
Only browser events in Events ManagerCAPI not firingRe-check your server-side integration; re-verify with Test Events
Only server events in Events ManagerPixel not loading in browserCheck Pixel installation; verify it's not blocked in your tag manager
Missing required parameters in DiagnosticsIncomplete event payloadConfirm event_name, event_time, user_data, and event_id are all present
Offline upload rejected as a whole batchOne event_time older than 7 daysUpload daily and send backdated events in a separate request
Offline conversions stopped arriving in 2025Integration still uses the retired Offline Conversions APIMove 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_sourceMeta's definitionTypical use
websiteConversion made on your websiteOnline checkout or form fill on your site. Also requires event_source_url.
appConversion made in your mobile appIn-app purchase, signup or subscription start
physical_storeConversion made in person at your physical storePOS and in-store sales, retail transactions uploaded from store systems
system_generatedConversion happened automatically, for example a subscription renewal on auto-payCRM lead-stage events for Conversion Leads, auto-renewals and other backend events
phone_callConversion made over the phoneSales closed on a call. Meta lists this separately from physical_store.
chatConversion made via a messaging app, SMS or online chatOrders taken in live chat or by SMS
business_messagingConversion from ads that click to Messenger, Instagram or WhatsAppSales from click-to-message campaigns
emailConversion happened over emailOrders placed by replying to an email
otherConversion happened in a way not listedLast 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.

crm-lead-stage-event.json
{
  "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"
  }
}
json

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

1
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.

2
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.

3
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.

4
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.

5
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.

6
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)

WindowWhere Meta states itWhat it appears to cover
7 daysServer Event Parameters; Conversion Leads payload specificationevent_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 daysSending Offline Events Using the Conversions APIMeta 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

No. The Meta Conversions API and the Facebook Pixel are complementary signals, not alternatives: the Pixel fires from the browser and CAPI fires from the server. Meta deduplicates them server-side using event_id. Disabling the Pixel after setting up CAPI removes browser-side matching signals and degrades rather than improves attribution. Meta hasn't deprecated the Pixel either: it now sits inside a dataset alongside app, offline and messaging events.
A score of 7 or higher on purchase events is the widely-used practitioner benchmark, though Meta hasn't published official minimum thresholds. For top-of-funnel events like ViewContent and AddToCart, 5+ is a reasonable target. Below 5 on purchase events signals that attribution may be significantly degraded.
Meta uses the event_id parameter as a deduplication key. When the Pixel and CAPI both fire for the same conversion event with an identical event_id, Meta counts the conversion once. Without a consistent event_id across both signals, Meta may count the same conversion twice, inflating your reported conversion numbers and ROAS.
In your Shopify admin, go to Sales Channels, then Facebook & Instagram, connect your Meta Business account, and select Maximum under Data Sharing. This enables server-side event sharing automatically. Shopify handles deduplication using its own order IDs as the event_id. No developer required. Verify setup in Meta Events Manager by confirming both browser and server events appear.
CAPI sends hashed customer data: typically SHA-256 hashed email address, phone number, name, and zip code. Meta uses these hashes to match against its user graph for attribution. No plaintext PII is transmitted or stored by Meta in identifiable form. The hashing happens on your server before the data leaves your system.
Yes. iOS 14's App Tracking Transparency (ATT) prevents the Pixel from firing for users who opt out on mobile Safari. CAPI is a server-to-server signal that the user's device and OS cannot block. For iOS traffic where the Pixel can't fire, CAPI provides the only path to attribution.
Server-side tagging in Google Tag Manager routes events through a server-side GTM container instead of integrating directly with Meta's Marketing API. Both send server-to-server signals. GTM server-side tagging adds flexibility for event manipulation and privacy filtering across multiple platforms; direct CAPI integration is simpler for single-platform setups.
Attribution data typically improves within 24-48 hours of correct setup, though this is an expected range rather than a guarantee. Campaign performance takes longer because the algorithm needs to relearn on better signal. Most accounts see measurable improvement within 7-14 days assuming sufficient conversion volume, but timelines vary.
No. Meta retired the standalone Offline Conversions API in May 2025, and offline event sets were replaced by datasets. Offline and in-store conversions now go through the regular Conversions API to a dataset ID, with action_source set to physical_store. Older integrations that still post to an offline event set most likely need migrating.
Send them through the Conversions API as a separate CRM integration. Each event uses action_source set to system_generated, a lead_event_source naming your CRM, and event_source set to crm. Include the Meta Lead ID where you have it, otherwise hashed email or phone. The event time must fall after the lead was created and no more than 7 days before you send it.
Use physical_store. Meta asks for physical_store on all offline and store events. Phone sales have their own value, phone_call, and automated events such as subscription renewals or CRM lead stages use system_generated.
Meta's documentation mentions three figures: an event_time no more than 7 days old for any Conversions API request, physical_store transactions uploaded within 62 days, and offline events matched against impressions from the last 90 days. They appear to cover different things and Meta doesn't fully reconcile them, so check the current docs and upload daily. Treat 7 days as the safe ceiling until you have tested a longer gap.

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

Tarek Kekhia

Written by

Tarek Kekhia

Co-Founder of AdAdvisor. Builder. AI and Data Specialist.