All articles
9 min read

Facebook CAPI Event Matching: How It Works and Why It Matters

This article explains how Facebook CAPI event matching connects server-sent conversion events to real user profiles, covering the Event Match Quality score, common setup mistakes that hurt attribution, and how agencies can improve match rates across client accounts.

Facebook CAPI event matching is the process Meta uses to connect server-sent conversion events to real user profiles by comparing hashed customer data against its own identity graph. If you've installed the Conversions API but your ad performance hasn't improved, the problem almost always traces back to weak matching, not a broken integration. This article walks through how matching actually works, what the Event Match Quality score tells you, the setup mistakes that quietly sabotage attribution, and how agencies can check and improve match rates across every client account they manage.

How Meta Matches Server Events to Real Users

When you send a conversion event through the Conversions API, you're not sending raw personal data to Meta. Instead, you hash identifying parameters like email and phone number using SHA-256, then submit them alongside the event. Meta compares those hashed values against its own hashed user data to determine whether the event belongs to a known Facebook or Instagram user. If enough parameters line up, Meta attributes the conversion to that person and, ideally, to the ad that drove it.

The parameters that matter most include em (hashed email), ph (hashed phone number), external_id (your own customer or user ID), fbc (the click ID captured from the ad click), fbp (the browser ID set by the Meta Pixel), plus client_ip_address and client_user_agent. None of these alone guarantees a match. Meta's matching logic works probabilistically across multiple signals, so sending more of these parameters, correctly formatted, generally raises the odds that a given event gets matched to a real profile. An event with just an IP address and user agent gives Meta very little to work with. An event with hashed email, phone, external_id, and fbc gives it several independent paths to confirm identity.

It's worth being clear that CAPI is not a replacement for the Meta Pixel, even though some agencies treat it that way after seeing browser-side tracking degrade. The two are meant to work together, with server events filling in gaps left by ad blockers, iOS privacy restrictions, and cookie limitations. Because both the pixel and CAPI can report the same conversion, Meta requires deduplication using a shared event_id for the same event fired from both sources. Without proper deduplication, you risk inflating your conversion counts, which distorts both your reporting and Meta's optimization signal. Getting deduplication right is a prerequisite for trusting any match quality data you see afterward, since duplicated events can muddy the picture of what's actually happening.

What Event Match Quality (EMQ) Score Actually Tells You

Event Match Quality, shown in Events Manager as a score from 0 to 10, is Meta's own estimate of how well the parameters in your events matched to a real Facebook user. It's calculated per event type, so your Purchase event might score differently than your Lead event, even on the same pixel and dataset. A higher EMQ generally means more of your events are being tied to identifiable users, which tends to correlate with better attribution and stronger optimization, since Meta's algorithm has more confidence in who converted and can use that to find similar people.

Meta doesn't publish fixed thresholds for what counts as a "good" score, and the scoring methodology can shift over time as Meta refines its matching models. Rather than chasing a specific number you saw in a blog post or forum thread, check your own EMQ directly in Events Manager as of whenever you're reading this, and treat it as a relative indicator: is it improving or declining after changes you make, and how does it compare across your own event types and client accounts.

To make this concrete, imagine two agencies running the same CAPI setup for similar ecommerce clients. Agency A sends only client_ip_address and client_user_agent with each Purchase event because that's what came out-of-the-box with their server template. Agency B sends those same two fields plus hashed email, hashed phone, and a consistent external_id pulled from their client's order system. Agency B's EMQ score will typically land higher, because Meta has more independent data points to cross-reference against its user graph. That difference in score isn't cosmetic. It reflects a real gap in how many of Agency A's conversions are actually being credited to the right users and, by extension, used to optimize campaigns.

Common Mistakes That Lower Match Rates

Most low match rates come down to a small set of recurring errors, and they're worth checking in order of likelihood.

  • Sending unhashed or improperly formatted PII: Email and phone parameters must be hashed with SHA-256, but the hashing step itself is often done wrong. Emails need to be lowercased and trimmed of whitespace before hashing; phone numbers need to be normalized to a consistent international format. If your server code hashes "John.Smith@email.com " with the capital letters and trailing space intact, it produces a completely different hash than Meta's own record of that email, and the match silently fails.
  • Missing fbc and fbp parameters: These values are set by the Meta Pixel in the browser and need to be passed through to your server-side event, often via a cookie or a hidden form field. When the pixel and the CAPI event aren't wired through the same data source, agencies frequently ship server events with fbc and fbp blank. That removes two of the strongest identity signals available and pushes more weight onto weaker fields like IP address alone.
  • No external_id or inconsistent customer identifiers: If you don't pass a stable external_id, or if the ID changes between a user's first visit and their eventual purchase, Meta loses the thread connecting that person's actions over time. This is especially damaging for longer sales cycles where a lead comes in on one device and converts weeks later on another.

Any one of these mistakes on its own will drag down EMQ. In practice, agencies often have two or three at once, which is why match rates can look surprisingly weak even on accounts where "CAPI is installed and firing."

Setting Up CAPI for Better Matching Without Custom Code

There are two general paths to getting Conversions API events flowing with strong matching. The first is a manual server-side implementation, where a developer builds the integration directly against Meta's Conversions API endpoint, mapping each parameter by hand for every event type and every client. This gives you full control, but it also means every client onboarding involves custom mapping work, and any change to a client's checkout flow or CRM can quietly break parameter passing without anyone noticing until match rates drop.

The second path is using a CRM or gateway integration, or a partner platform built to handle the parameter mapping for you. For agencies managing several client ad accounts at once, this matters more than it might seem. Manually maintaining hashed parameter mapping across a dozen different client stacks, each with its own checkout software or lead form, multiplies the chances of a formatting error slipping through. Platforms like ClientPlug simplify Conversions API setup for agencies in this position, reducing the manual mapping work and the errors that come with it, while keeping campaign and payment data for each client visible in one place rather than scattered across separate Events Manager logins.

Whichever path you take, don't push a new or changed CAPI setup straight to production. Meta's Test Events tool, found inside Events Manager, lets you send test traffic and see exactly which parameters arrived, how they were formatted, and whether they matched expected values before any real ad spend is on the line. Running through Test Events for each client after setup or after a client changes their checkout or CRM is a cheap step that catches most formatting mistakes before they cost you weeks of degraded match quality.

How to Check and Improve Match Rates for Client Accounts

Checking match quality isn't a one-time task during setup. It's an ongoing diagnostic you should build into how you manage client accounts. In Events Manager, go to Data Sources, select the relevant pixel or dataset, and open Diagnostics. From there you can see EMQ broken down by event type, along with which parameters are present and which are missing across your recent event volume.

Once you can see the gaps, prioritize in this order:

  1. Add hashed email and phone number first if either is missing, since these tend to have the strongest impact on match quality relative to the effort involved.
  2. Add or fix external_id so that the same customer is tracked consistently across sessions and devices.
  3. Confirm fbc and fbp are being captured and passed through correctly from the browser to the server event.
  4. Recheck IP address and user agent formatting last, since these are usually already present but occasionally get stripped by proxies or server configurations.

Because checkout flows, CRM fields, and form providers change without warning, a setup that scored well three months ago can silently degrade if a client swaps ecommerce platforms or a developer tweaks a checkout page. Build a monthly match rate review into your client reporting cadence, the same way you'd review spend or ROAS. For agencies running this check across many accounts, doing it one Events Manager login at a time gets tedious fast, which is exactly the kind of recurring maintenance work a centralized dashboard is built to catch before a client asks why their cost per lead crept up.

Keeping Match Quality From Quietly Decaying

Strong Facebook CAPI event matching isn't something you set once and forget. It comes down to consistently sending complete, correctly formatted customer parameters, catching formatting errors before they go live, and watching EMQ over time rather than assuming last quarter's setup still holds. The agencies that get the most out of Conversions API are the ones treating match rate monitoring as a recurring task, not a launch checklist item.

If you're managing several client ad accounts, checking Events Manager diagnostics one login at a time doesn't scale well, and small parameter issues can go unnoticed for weeks. Learn more about our services to see how centralizing CAPI setup, campaign monitoring, and client reporting in one dashboard can help you catch match quality issues before they show up in a client's results.

Put it into practice with ClientPlug

Manage clients, payments, and Meta & Google Ads campaigns from one dashboard. Free to start.

7 days free on any plan. Cancel anytime before it ends.