Event Match Quality (EMQ) is Meta’s 1-10 rating of how well your server-side events match to real Facebook users. A low score means Meta can’t connect your CAPI data to user profiles — which means your conversion data is partially useless even though you’re sending it.
If your EMQ is below 6, your Conversions API is functioning but underperforming. Here’s how to fix it.
What EMQ Actually Measures
EMQ scores how many customer information parameters you send with each event, weighted by their matching effectiveness:
| Parameter | Match Power | EMQ Impact |
|---|---|---|
| Email (em) | Highest | +3-4 points |
| Phone (ph) | High | +1-2 points |
| fbp cookie | High | +1-2 points |
| fbc cookie | Medium-High | +1 point |
| External ID | Medium | +0.5-1 point |
| First name (fn) | Low-Medium | +0.5 point |
| Last name (ln) | Low-Medium | +0.5 point |
| City (ct) | Low | +0.25 point |
| State (st) | Low | +0.25 point |
| Zip (zp) | Low | +0.25 point |
| Country (country) | Low | +0.25 point |
| IP address | Low | +0.25 point |
| User agent | Low | +0.25 point |
The big three: Email, phone, and fbp cookie. Getting these three right typically moves EMQ from 3-4 to 7-8.
Checking Your Score
- Go to Meta Events Manager
- Select your pixel
- Click Overview tab
- Scroll to the Event Match Quality section
- Click each event type to see its individual EMQ score
EMQ is scored per event type. Your Purchase event might score 8 while PageView scores 3 (because page views rarely have email/phone data). Focus on getting purchase and lead events to 6+.
Score Interpretation
| Score | Meaning | Action |
|---|---|---|
| 8-10 | Excellent match rate | Maintain. Your CAPI is well-configured. |
| 6-7 | Good | Add phone number or address data |
| 4-5 | Fair | Email likely not being sent or not properly hashed |
| 1-3 | Poor | CAPI is sending data but Meta can’t match anyone |
Common Reasons for Low EMQ
Problem 1: Email Not Being Sent
The most common issue. Your CAPI sends purchase events but without the customer’s email — so Meta has no way to match the conversion to a Facebook user.
Where to get email:
- Shopify:
order.emailororder.contact_emailin the webhook payload - WooCommerce:
$order->get_billing_email()in the order hook - Custom: Whatever field captures the customer’s email at checkout
Verification: In Events Manager → Test Events, complete a purchase. Click the server event and check “Customer Information Parameters” — is em (email) listed?
Problem 2: Email Not Properly Hashed
Meta requires SHA-256 hashed, lowercase, trimmed email:
Input: " Customer@Example.com "
Step 1: trim → "Customer@Example.com"
Step 2: lowercase → "customer@example.com"
Step 3: SHA-256 → "b4c9a289323b21a01c3e940f150eb9b8c542587f..."
Common mistakes:
- Hashing before lowercasing (different hash)
- Not trimming whitespace (different hash)
- Double-hashing (already hashed, then hashed again)
- Sending raw email (Meta rejects unhashed PII)
Problem 3: fbp Cookie Not Forwarded
The _fbp cookie (Meta’s first-party browser ID) is one of the highest-value parameters. It connects server-side events to browser-side pixel events for deduplication.
How to capture it:
- At checkout time, read
document.cookieand find_fbp - Pass it to your server (via hidden form field, data layer, or checkout attributes)
- Include it in the CAPI event as
fbp
On Shopify, the cookie bridge pattern captures _fbp during pixel events and forwards it to the webhook handler.
Problem 4: fbc Cookie Not Forwarded
The _fbc cookie contains the Facebook click ID (fbclid). It’s set when a user clicks a Facebook ad. Forwarding it to CAPI connects the server event to the specific ad click.
How to capture:
- Same as
_fbp— read from cookies at checkout time - Or extract
fbclidfrom the URL query string and format asfb.1.{timestamp}.{fbclid}
Without _fbc, Meta can’t attribute the conversion to a specific ad click — your ROAS reporting suffers.
Problem 5: No External ID
External ID is your internal customer identifier (Shopify customer ID, WooCommerce user ID). It helps Meta match across sessions when cookies are cleared.
Implementation: Hash the customer ID (SHA-256) and send as external_id in the CAPI event.
Step-by-Step Fix: 3 to 8+
Step 1: Add Email (Biggest Impact)
Make sure every purchase and lead event includes the hashed email. Verify:
- The email is from the ORDER, not from the logged-in user (they may differ)
- It’s SHA-256 hashed AFTER lowercasing and trimming
- It appears in Events Manager → Test Events → Customer Information Parameters
Expected improvement: EMQ jumps from 3-4 to 5-6.
Step 2: Add fbp and fbc Cookies
Capture these from the browser at checkout time and forward to your server:
// In browser at checkout
const cookies = document.cookie.split(';').reduce((acc, c) => {
const [k, v] = c.trim().split('=');
acc[k] = v;
return acc;
}, {});
// Pass cookies._fbp and cookies._fbc to your server
Expected improvement: EMQ goes from 5-6 to 7-8.
Step 3: Add Phone and Address
If available at checkout:
- Hash phone number (remove spaces, include country code, SHA-256)
- Hash first name, last name, city, state, zip (all lowercase, trimmed, SHA-256)
- Send country code as ISO 2-letter code (unhashed)
Expected improvement: EMQ goes from 7-8 to 8-9.
Step 4: Add External ID
Hash your customer ID and include as external_id. This helps Meta match users across devices and sessions.
Expected improvement: EMQ goes from 8-9 to 9-10.
Monitoring EMQ Over Time
EMQ can change when:
- Your site updates break cookie capture (shop redesign, theme update)
- iOS changes degrade cookie availability
- Your checkout flow changes (adding/removing fields)
- A plugin update breaks data forwarding
Check EMQ monthly. If it drops by 2+ points, something broke. Common culprits:
- Cookie banner blocking
_fbp/_fbccapture - Checkout theme update removing email forwarding
- Server-side code change breaking hash function
For a complete CAPI implementation guide, see Meta CAPI Setup Guide.
Not sure if your CAPI is configured correctly? Run a free tracking scan — we check your Meta Pixel, CAPI implementation, dedup, and customer parameter coverage.