Meta CAPI Event Match Quality (EMQ): The Definitive Guide

What Meta CAPI Event Match Quality really is, what PixelYourSite sends on every event without setup, and the practical levers to push the score higher, form data detection, Facebook Login, URL parameters, and more.

Get expert tracking tips in your inbox

Join 65,000+ marketers and site owners who already get our best guides on Meta Pixels, CAPI, GA4, Google Ads, TikTok & Pinterest tracking, GDPR, and more.

* We don’t spam, and all our emails have an “Unsubscribe” link that works. 

You can tell how important EMQ is by the number of videos I’ve made about it over the years. On this page alone you’ll find 11 of them. And it wasn’t just videos that kept me up at night — PixelYourSite has many small tweaks and features built specifically to find and send the kind of data Meta wants for CAPI events.

Event Match Quality is Meta’s score for how well your Conversions API events can be matched to a real Meta user. A higher EMQ means more attributed conversions and better ad delivery. This guide explains how Meta scores it, what PixelYourSite does for you automatically, and what you can do to push it higher.

If you have PixelYourSite Pro installed, your CAPI events already carry the strongest matching signals available — IP, user agent, fbp and fbc cookies, and a stable External ID. For logged-in users and WooCommerce or EDD purchases, PYS adds hashed email, name, phone, and full billing address. You don’t have to set any of that up. The work in this guide is about extending that coverage to anonymous visitors and to forms that PYS can’t read out of the box.

What EMQ is

Each CAPI event carries a set of customer identifiers. Meta uses them to attach the event to a Meta account. EMQ is the 0–10 score in Events Manager that tells you how confidently Meta could do that.

EMQ is shown only for CAPI events. Browser Pixel events go through the same matching, but Meta doesn’t expose a score for them.

Different events score differently. A PageView from anonymous traffic always scores lower than a Purchase at a logged-in checkout. Focus on the score of your conversion events — those are the ones that drive delivery.

The matching signals

SignalWhat it isHashed
client_ip_addressVisitor IP (IPv4 or IPv6)No
client_user_agentBrowser UA stringNo
fbpFirst-party browser ID cookie set by the Meta PixelNo
fbcClick ID cookie, set when a visitor lands from a Meta adNo
emEmailSHA-256
phPhone, E.164 digits only (e.g. 16505551212)SHA-256
fn / lnFirst / last nameSHA-256
ct / st / zp / countryCity / state / ZIP / countrySHA-256
external_idAny stable visitor or customer IDRecommended
fb_login_idMeta App-Scoped ID from a Facebook LoginNo

PixelYourSite hashes what needs hashing before sending. Don’t pre-hash anything yourself.

fbp and fbc

_fbp (Browser ID). Set by the Meta Pixel script the first time it runs on your domain. A random first-party identifier that persists for 90 days. Every event — browser and CAPI — carries it.

_fbc (Click ID). Set when a visitor lands via a Meta ad with an fbclid URL parameter. Stored for 90 days. Without an ad click in the chain, _fbc doesn’t exist — that’s not a bug.

PixelYourSite reads both on every CAPI event and forwards them when they exist. It never fabricates a missing cookie.

Watch: FBP and FBC explained

What PixelYourSite sends on every CAPI event

No configuration needed:

  • client_ip_address — IPv6 if the visitor’s connection has one, otherwise IPv4.
  • client_user_agent — the browser’s UA string.
  • fbp — read from _fbp whenever it exists.
  • fbc — read from _fbc whenever it exists.
  • external_id — PYS issues a pbid browser ID for every visitor and sends it as External ID.

For logged-in WordPress users, PYS adds: email, first name, last name. With WooCommerce active: phone, city, state, ZIP, country (from billing). With Social Connect’s Facebook Login: fb_login_id.

For WooCommerce and EDD Purchase events, PYS uses the full billing details from the order. Purchase is almost always your highest-EMQ event.

How to push EMQ higher

The biggest gains come from identifying anonymous visitors who never log in. These levers are ordered by impact.

1. Capture identity from forms

PYS listens for blur events on input fields and stores the values in a pys_advanced_form_data cookie. Every CAPI event after that carries those identifiers, even for visitors who never log in.

Where: PixelYourSite Pro → Global Settings → Automatic data detection.

Default coverage:

  • input[type="email"] — detected automatically.
  • input[type="tel"] — detected automatically.
  • Text inputs with name matching first_name, last_name, phone, tel.

To extend it:

  1. Open one of your forms and inspect a field. Note the name attribute.
  2. Add any non-standard values to the matching list:
    • First name field names — e.g. fname, your-name, billing_first_name.
    • Last name field names — e.g. lname, billing_last_name.
    • Phone field names — e.g. your-phone, billing_phone.
    • Email field names — only needed for plain text inputs that look like email fields.
  3. Save.

Phone numbers need country codes. Meta expects E.164 format (16505551212, not 6505551212). PYS strips non-digits but does not add a country code. Use a country selector or a hardcoded prefix on the form.

Watch: Automatic form data detection

2. Add Facebook Login with Social Connect

fb_login_id is one of the strongest match signals because it identifies the user directly. The Social Connect plugin adds Facebook Login to your WordPress site and stores the App-Scoped ID in user meta. PYS sends it on every CAPI event for that user.

For sites with accounts, this typically lifts EMQ by several points on engagement events (AddToCart, Lead, ViewContent).

Setup:

  1. Install and activate Social Connect.
  2. Configure the Facebook App in Social Connect (App ID, App Secret).
  3. Place the login button using the provided shortcode or block.
  4. Verify in Events Manager → Test Events that fb_login_id appears on events fired by logged-in users.

Watch: Better EMQ with Facebook Login

3. Capture identity from URL parameters

If your traffic arrives with identifying parameters (personalised email links, SMS campaigns), PYS can save them into the persistence cookie.

Where: PixelYourSite Pro → Global Settings → Automatic data detection → URL parameters.

Add the parameter names your campaigns use. PYS saves them on the first matching page load and reuses them on every event for that visitor.

Watch: EMQ and URL parameters

4. Encourage account creation and login

A logged-in WordPress user gives PYS access to email, name, and (with Woo) the full billing address. Every event for that session carries those signals. Nothing to configure — the lever is your site’s UX.

5. Keep External ID stable across subdomains

If your site spans subdomains, turn on PixelYourSite → Global Settings → Other stuff → Track domains and subdomains together. Without it, the pbid resets at each subdomain boundary and lookback matching weakens.

Watch: External ID — how it improves matching

6. Turn on Automated Advanced Matching in Events Manager

Done outside PYS, in Events Manager → Data Sources → your Pixel → Settings → Automatic Advanced Matching → On. Meta’s pixel script then scans the page for identifiable data and sends it with browser events. It’s additive with PYS’s coded Advanced Matching.

Reading the warnings

“Missing fbc.” _fbc only exists for visitors who arrived from a Meta ad. Organic, direct, email, and other-channel traffic don’t produce it. Investigate only if you run Meta ads at scale and fbc is missing on traffic that did click an ad.

“Events not using IPv6.” PYS uses IPv6 when the visitor’s ISP provides one. WordPress can’t force it.

“PageView has low EMQ.” Expected for anonymous traffic. Look at conversion events instead.

“Score dropped suddenly.” Common causes:

  • A form’s field name attributes changed and PYS no longer recognises them.
  • A consent banner change is blocking PYS for more visitors.
  • A CDN configuration change is masking the visitor IP.
  • A login regression is breaking the WP-user identity path.

Watch:

Limits and edge cases

Things PYS can’t fix or that cap your EMQ:

  • Privacy browsers (Safari ITP, Firefox ETP) clear or partition first-party cookies. _fbp and _fbc may not persist for those visitors.
  • Ad blockers stop the Meta Pixel from loading. No _fbp, no _fbc, no Advanced Matching. CAPI still fires server-side but matches less well.
  • Full-page caching plugins (WP Super Cache, LiteSpeed full HTML, Cloudflare Cache Everything) can serve cached HTML to logged-in users and break the user-identity path. Exclude logged-in users from your cache.
  • CDN and reverse proxies. If client_ip_address is the proxy’s IP instead of the visitor’s, IP-only matching tanks. Configure WordPress to read the real IP from X-Forwarded-For / CF-Connecting-IP.
  • VPNs and Tor. The IP isn’t matchable. Nothing to do.
  • Visitors who never touch a form give you only cookies and IP/UA.
  • Phone numbers without country codes match worse than country-coded ones. Fix on the form side.
  • Consent denial. When the visitor declines ad-data consent, PYS stops sending personal data. The events for those visitors will score lower. This is a regulatory floor, not a configuration issue.

Privacy and consent

fbp, fbc, and pbid are cookies and fall under cookie consent. Advanced Matching, form data detection, URL parameters, and CAPI personal data go beyond that — they’re personal data the visitor gave you, forwarded to Meta. Under GDPR that requires explicit consent.

ConsentMagic integrates with PYS so cookies only set after cookie consent, and Advanced Matching and CAPI personal data only flow after ad/data consent. Opt-out is respected end-to-end.

Watch: Consent for Advanced Matching and CAPI

Don’t stop here!

Subscribe to get more tips on tracking, analytics, and GDPR.

We’ll send you practical guides on Meta Pixel, CAPI, GA4, Google Ads, TikTok, Pinterest, GDPR compliance, and more, right to your inbox.

* We don’t spam, and all our emails have an “Unsubscribe” link that works. 

EDD Tracking Audit with Claude, ChatGPT via PixelYourSite MCP

Before launching a campaign for your EDD store, one conversation with Claude, ChatGPT, or Gemini is enough to verify your tracking is solid. Pixel ID, CAPI, advanced matching, funnel events, content IDs, EDD feed. Fix what needs fixing, then launch with confidence.

WooCommerce Tracking Audit with Claude, ChatGPT via PixelYourSite MCP

Before launching a campaign, one conversation with Claude, ChatGPT, Gemini, or any MCP-compatible AI assistant is enough to verify your WooCommerce tracking is solid. Pixel ID, CAPI, advanced matching, funnel events, content IDs, catalog feed. Fix what needs fixing, then launch with confidence.

Track What Matters: Custom Pixel Events with PixelYourSite MCP

PixelYourSite lets you track any visitor action and send it to every ad platform at once. With an AI assistant connected via MCP, you describe what you want and it builds the event configuration, shows a preview, and waits for your confirmation. These seven examples show what you can build in a two-minute conversation. There is also a section at the end on using your AI assistant alongside Meta Ads MCP to analyse your ad account and propose what you should be tracking.

Find out when we have the next BIG OFFER!

Over 70 000 business-owners have access to our BIG DISCOUNTS. Don't miss the next one: