Most. Help

How to Improve Facebook Event Match Quality (EMQ) Score

Published Sep 13, 20267 min readIntermediate
Hand-drawn gauge with the needle pointing into the orange zone, showing a high event match quality score
What you'll learn
  • What EMQ measures and how Meta calculates the composite score
  • Which customer information parameters have the biggest impact on match rates
  • How to check EMQ in Events Manager and programmatically via the Dataset Quality API
  • Step-by-step fixes for hashing, normalization, and missing-parameter gaps
Intermediate

How to Improve Facebook Event Match Quality (EMQ) Score

What Is Event Match Quality and Why It Matters

Meta compares the hashed identifiers in your event payload against its account database. If the payload carries only a vague combination (say, country plus gender), Meta marks the event as unmatched. Unmatched events do not count toward attribution, so your ad account reports fewer conversions than actually happened.

The score appears per event name inside Events Manager under the dataset quality tab. It currently applies to web events only.

A low EMQ directly inflates your cost per result because the delivery algorithm receives weaker optimization signals. Media buyers who raised EMQ from 4 to 8+ routinely report 10-20% CPA improvement on the same budget.

For a broader look at why server events complement the browser pixel, see server-side tracking vs browser pixel.

Which Customer Parameters Affect EMQ

Meta scores events based on the quantity and quality of identifiers in the user_data object. The official hierarchy from the customer information parameters docs:

ParameterKeyHashingNormalization rule
EmailemSHA-256Trim, lowercase
PhonephSHA-256Digits only, include country code, strip leading zeros
First namefnSHA-256Lowercase, no punctuation
Last namelnSHA-256Lowercase, no punctuation
CityctSHA-256Lowercase, no punctuation
StatestSHA-2562-letter ANSI code, lowercase
ZipzpSHA-256Lowercase, no spaces or dashes (5 digits for US)
CountrycountrySHA-2562-letter ISO code, lowercase
External IDexternal_idSHA-256 recommendedAny unique advertiser ID
Click IDfbcNever hashCookie value fb.1.{timestamp}.{fbclid}
Browser IDfbpNever hashCookie value fb.1.{timestamp}.{random}
IP addressclient_ip_addressNever hashValid IPv4 or IPv6
User agentclient_user_agentNever hashFull browser UA string

Events that rely only on geo and gender are considered invalid and score near zero. Aim to send at least email or phone plus two additional identifiers on every event.

Sending both the client_ip_address and client_user_agent parameters increases match rates significantly, even when other identifiers are missing.

- Meta for Developers, https://developers.facebook.com/documentation/ads-commerce/conversions-api/best-practices

How to Check Your EMQ Score

In Events Manager

Navigate to Events Manager, pick the relevant data source, and open the overview or quality tab. Each event name shows a composite EMQ score out of 10 plus a breakdown of which identifiers contributed.

Via the Dataset Quality API

The official Dataset Quality API returns per-event scores programmatically:

bash
curl -G \
  graph.facebook.com/v25.0/{dataset_id} \
  -d "fields=web{event_name,event_match_quality}" \
  -d "access_token={access_token}"

The response includes a composite_score and match_key_feedback showing coverage percentages for each identifier type. Use this in a scheduled script to alert when scores drop below your threshold.

If you are just getting started with sending server events, follow the Conversions API setup guide first.

Step-by-Step Fixes for Low EMQ

1. Fix normalization before hashing

The most common cause of low EMQ is hashing dirty data. A single trailing space or uppercase letter produces a completely different hash.

python
import hashlib

def hash_email(raw: str) -> str:
    return hashlib.sha256(raw.strip().lower().encode("utf-8")).hexdigest()

def hash_phone(raw: str) -> str:
    digits = "".join(c for c in raw if c.isdigit())
    digits = digits.lstrip("0")
    return hashlib.sha256(digits.encode("utf-8")).hexdigest()

2. Add missing identifiers

Audit your payload. If you send only email, add phone, name, and location fields. Every additional matched key raises the composite score.

3. Pass click and browser cookies

The fbc and fbp cookies tie the server event to a specific browser session. Without them, Meta loses the link between the ad click and the conversion. Read the cookie values server-side from the request headers or store them in a first-party cookie on the landing page.

4. Always include IP and user-agent

These two fields are never hashed and require no normalization. Forward them from the incoming HTTP request. They alone can lift match rates by several points.

5. Deduplicate properly

If you fire both pixel and CAPI for the same event, include a shared event_id so Meta deduplicates rather than double-counting. See Facebook pixel and CAPI event deduplication for the exact pattern.

Common Mistakes That Tank Your Score

MistakeSymptomFix
Uppercase or spaces in email before hashingEMQ stuck at 3-4Trim and lowercase before SHA-256
Phone without country codePartial matches onlyPrepend country code, strip leading zeros
Only country + gender sentEvent marked invalidAdd email or phone plus name
fbc/fbp missingClick-to-conversion link brokenRead cookies server-side on every request
IP/user-agent omittedLower match rate than peersForward from HTTP request headers

If you manage multiple ad accounts or pixel destinations manually, Pixel Activator lets you activate and audit pixel events without writing code. For teams that need automated routing across trackers and platforms, MOST handles normalization, hashing, and deduplication in one pipeline.

Frequently asked questions

Sources

Sources

value optimization with purchase value.

Was this guide helpful?
Author
Most Team
Справочная служба

Официальные руководства и глоссарий для платформы Most и Активатора пикселей.

Topic
Meta Conversions API: The Complete Guide
Main article of the topic
Related articles

Related guides