← All articles

Blog

The Complete Guide to Meta (Facebook) Conversion Tracking

meta conversion trackingfacebook pixel setupmeta capifacebook conversions

"I'm running Meta (Facebook / Instagram) ads, but whether purchases and inquiries are really being measured correctly — in the end, I just have to trust the Pixel numbers." Meta ad optimization is built on this measurement data. The delivery algorithm learns who converted and steers delivery toward similar people, so if even one place is broken, optimization drifts toward the wrong audience and every decision built on top quietly goes off course.

This guide is a "table of contents" for Meta conversion tracking, organized big picture → setup → verification → troubleshooting. It summarizes each topic and points you to a detailed article where a deeper dive is needed. Whether you're setting up for the first time or already running but unsure about your numbers, use this as the map to the place you need.

1. Meta measurement runs on two channels: Pixel + CAPI

The starting point for understanding Meta conversion tracking is that there are two ways the signal is sent.

  • The Pixel (browser side): JavaScript (the Meta Pixel) loaded in the user's browser sends events such as purchases and inquiries to Meta.
  • The Conversions API (CAPI / server side): Your server sends events directly to Meta. Because it doesn't go through the browser, it's less affected by ad blockers, tracking prevention, and iOS signal loss.

Meta's current recommendation is to use both together. But if you send "the same single result" from both the browser and the server, it will be counted twice unless you intervene. The correct approach is to give both events the same event name and event_id so Meta can deduplicate them. The details of this mechanism are in How event_id deduplication works and how to verify it.

2. The big picture: install → fire → record → deduplicate → real path

For both setup and troubleshooting, the first thing to grasp is how measurement works as a chain. Meta tracking only functions when these stages connect into a single, unbroken line. If any one stage breaks, no numbers appear.

Stage What happens Common trap
① Installed The Pixel loads on the page Missing on the completion page (purchase/inquiry done)
② Fires The event signal is sent Installed, but doesn't fire on a specific action
③ Recorded Meta accepts and stores it Consent denial / tracking prevention / iOS limits drop it
④ Deduplicated Pixel and CAPI merged into one event_id mismatch → double count or loss
⑤ Real path Holds up under real visitor conditions Fires on your machine but missing in production

This guide roughly follows that order. Just being aware of which stage you're talking about makes both setup and troubleshooting far easier.

3. Setup basics: Pixel, standard events, CAPI, domain verification

Installing the Pixel

Load the base code of the Pixel you created in Events Manager on every page. You can hardcode it or deploy via Google Tag Manager (GTM), but the rule is to standardize on one method. Putting it in both causes duplicate tracking.

Standard events (Purchase / Lead, etc.)

The moment a result occurs, send a Meta-defined standard eventPurchase for purchases, Lead for prospects, CompleteRegistration for sign-ups, and so on. Passing value (amount) and currency correctly on the purchase event is a prerequisite for ROAS optimization.

Custom conversions and custom events

Meta also supports custom conversions (URL-based rules applied to standard events) and custom events (your own event names like TrialStart or PlanUpgrade). Use standard events whenever possible — Meta's optimization algorithms are trained on them — and reserve custom events for actions that don't map to any of Meta's predefined events. When you do send a custom event, it still needs event_id for deduplication and must be registered in AEM if you want iOS measurement.

The Conversions API (CAPI)

Send events from the server side too, to make up for what browser measurement misses. The key here is to give them the same event name and the same event_id as the Pixel so they deduplicate. How to confirm CAPI is working is covered in detail in Verifying the Conversions API (CAPI).

CAPI implementation methods

There are several ways to implement CAPI, each with different trade-offs:

Method Best for Notes
Partner integration (Shopify, WooCommerce, etc.) E-commerce on a supported platform Easiest — events are predefined, but limited customization
GTM Server-Side Teams already using GTM Moderate effort; requires a server-side GTM container
Meta Conversions API Gateway Teams without server-side dev resources Meta-hosted; simpler than building your own endpoint
Direct API Full control over payloads Most flexible but requires development and maintenance

Whichever method you choose, generate a permanent access token (via Events Manager → Settings → Conversions API → Generate access token) and store it securely — treat it like a password. Tie tokens to a system user in Business Settings, not a personal account, so they don't break when team members leave.

Domain verification and AEM (Aggregated Event Measurement)

To handle ATT (App Tracking Transparency) on iOS 14.5 and later, Meta requires domain verification and Aggregated Event Measurement (AEM). You verify your domain and configure up to 8 events per domain, with priority order. The design of these 8 event slots and their priority determines whether iOS users can be measured. The background is in Why iOS 14 and AEM reduce conversions.

4. Confirming it actually works

Once setup is done, always confirm with your own eyes that the signal actually fires and reaches Meta. A green settings screen doesn't mean it fires or is received in the field. The key to diagnosis in Meta is to keep in mind that ②firing (sent from the browser) and ③recording (accepted by Meta) are different things.

Event Match Quality (EMQ)

After confirming events are firing, check your Event Match Quality score in Events Manager. EMQ is Meta's 1-to-10 rating of how well the customer data you send (email, phone, IP, click ID) matches to real Facebook users. A higher score means Meta can attribute more conversions and steer delivery more accurately.

  • Target: 6.0 or above (Meta's own internal benchmark). Scores below this mean you're sending too few or poorly formatted identifiers.
  • How to improve: Send more first-party data parameters with each event — em (email), ph (phone), fn/ln (name), fbp/fbc (click IDs). All personally identifiable data must be lowercased and SHA-256 hashed before sending.
  • Formatting matters: Phone numbers must be in E.164 format, emails must be trimmed and lowercased before hashing. Incorrect formatting causes match failures even when the data is present.

For more on using first-party data effectively, see First-party data and conversion tracking.

5. Common problems

From here, the problems that come up most often in the field, organized by topic. Each item is a summary — go to the linked article for the deep dive.

Conversions aren't tracking

Either the Pixel isn't installed/firing (install, fire), or it isn't received because of consent denial, iOS limits, or a CAPI mismatch (record) — the causes split by stage. Which one you suspect completely changes where you look. For the isolation steps, see Why Meta conversions aren't tracking, and a diagnostic procedure.

Duplicate tracking / deduplication not working

One result gets counted twice or more. In Meta especially, the typical case is sending both the Pixel and CAPI without sharing an event_id. The mechanism and how to verify it are in How event_id deduplication works and how to verify it. For the foundational way of thinking about duplicates, also see Causes and fixes for duplicate tracking.

Conversions dropped after iOS 14

Users who choose "Ask App Not to Track" under ATT have browser measurement restricted, and are only aggregated and modeled within the AEM slots. If counts fell after an iOS update, suspect this first. See Why iOS 14 and AEM reduce conversions.

Consent mode reduces conversions

Users who "deny" on a cookie consent banner may have Pixel firing or data sending restricted. If counts dropped after introducing a banner, this is another place to suspect. See Why consent mode reduces conversions.

6. Pre-launch checklist (essentials)

Before launch or go-live, at minimum knock out these. The comprehensive version is the Conversion Tracking Verification Checklist.

  • Base Pixel is on every target page, including the completion page
  • facebook.com/tr fires on the target action (confirmed with blockers off)
  • value and currency are correct on the purchase event
  • If using CAPI, it's deduplicated with the same event name and event_id as the Pixel
  • Reaches Test Events, with the status dot green (Active)
  • Domain is verified and the 8 AEM events are configured in priority order
  • Checked all three consent states (Allow / Deny / undecided)
  • Confirmed it doesn't drop under real visitor conditions, not just your one test pattern

7. Sister hubs: Google Ads and GA4 conversion tracking

The way of thinking about measurement (install → fire → record → real path) is the same across other platforms too.

Frequently asked questions

Q. Do I have to install both the Pixel and CAPI? A. It's not mandatory, but Meta's current recommendation is to use both. With the browser alone, ad blockers, tracking prevention, and iOS limits cause misses. When using both, always enable deduplication with the same event name and event_id.

Q. Conversions dropped after an iOS update. Is it broken? A. Not necessarily. Users who chose "Ask App Not to Track" under ATT are only aggregated and modeled within the AEM slots, so seeing fewer counts is the designed behavior. See iOS 14 and AEM.

Q. Is it enough if I see the event fire in Test Events? A. That confirms only "firing (②)." You can be confident only once you've also checked that it doesn't drop under real visitor conditions and that deduplication works. See Verifying the Pixel.

Q. Can I click my own Meta ad to test it? A. Clicking your own ad carries policy violation risk and incurs charges. Confirm from outside your own account — in an independent environment.

Conclusion: beyond setup, confirm Meta records it in production too

Meta conversion tracking works as a single chain: install → fire → record → deduplicate → real path. Use the Pixel and CAPI together, enable deduplication via event_id, set up domain verification and AEM, and confirm both firing and receipt, and you'll cover nearly everything you can confirm on your own machine.

But what remains at the end is the real path your visitors take. Your environment is shaped by login state, extensions, and internal IP; it can look fine on your machine yet be missing under real visitor conditions.

ConversionOK runs your live page in an independent, isolated browser and intercepts the Meta events and CAPI signals actually sent, then verifies them — with no need to click your own ad and no interference from your office environment. Start with a free static check to confirm the entry point of your measurement.