Quick answer: To improve Facebook Event Match Quality, send more accurate customer identifiers with every event, and send them server-side through Meta's Conversions API (CAPI). Add hashed email and phone, first and last name, city/state/zip/country, an external ID, plus the fbc and fbp cookies, client IP, and user agent — all formatted and SHA-256 hashed to Meta's spec. A browser pixel alone usually scores 3–5; the same data sent server-side with several parameters routinely reaches 8–9.5.
The 2-minute fix: you take care of your landing page and funnel, Collectform takes care of the lead-gen form and the tracking. Add a Collectform lead form to the page you already have, and it captures the fields, hashes them to Meta's spec, and sends them server-side with advanced matching, so your EMQ climbs in a couple of minutes without touching code or a tag manager. Prefer to wire it up by hand? The full manual playbook is below.
What is Event Match Quality?
Event Match Quality (EMQ) is a score in Meta Events Manager, rated from 0 to 10, that measures how reliably the information you send with a conversion event can be matched to a real Meta user. When Meta can confidently match an event to a person, it can attribute the conversion, feed it back into optimization, and find more people like your converters. When it can't, that conversion is effectively wasted signal.
You'll find the score per event inside Events Manager, and Meta exposes it programmatically through the Dataset Quality API. Here's how the ratings shake out in practice:
| EMQ score | Rating | What it means |
|---|---|---|
| 8.0 – 10 | Great | Excellent matching. Keep key events (Lead, Purchase) here. |
| 6.0 – 8.0 | Good | Solid. Treat this as your minimum target. |
| ~4.0 – 6.0 | OK | Matching gaps — you're leaving delivery and attribution on the table. |
| Below ~4.0 | Poor | Serious data gaps that inflate costs and distort reporting. |
Band boundaries are approximate; Meta shows the label (Poor/OK/Good/Great) alongside the number.
The practical rule for 2026: aim for 6+ everywhere and 8+ on your money events.
Why EMQ matters for your ad spend
EMQ isn't a vanity metric. A higher match rate means Meta can attribute more of the conversions you actually generated, which does two things: it makes your reporting trustworthy, and it gives the optimization algorithm a cleaner signal to learn from. Advertisers who raise match quality generally see better delivery and lower cost per result, because Meta stops guessing and starts optimizing against real, matched conversions.
The reverse is the quiet killer: a page that genuinely converts well but reports a low EMQ will look like it's underperforming, and your campaigns will optimize against incomplete data. We cover that failure mode in depth in why your Meta Pixel fires but conversions vanish.
Why your Event Match Quality is low
Before the fixes, the usual culprits:
- You're relying on the browser pixel alone. Ad blockers, iOS App Tracking Transparency, and Safari ITP degrade browser-side events, so the pixel typically scores only 3–5.
- You're sending too few parameters. A bare
PageViewor a Lead event with only an email has little to match on. - Your data is formatted wrong. Parameters that aren't normalized and SHA-256 hashed to Meta's spec simply don't match.
- You're not collecting the data in the first place. You can't send a phone number or name you never asked for.
Every fix below targets one of these.
How to improve Facebook Event Match Quality
Step 1: Turn on the Conversions API (the biggest lever)
The single highest-impact change is to stop depending on the browser. Meta's Conversions API sends events server-to-server, so they can't be stripped by a blocker or expired by ITP — and, crucially, the server can attach the client IP address and user agent and use customer data collected at submission instead of scraped from cookies. That combination is what moves a pixel-only score in the 3–5 range up into the 8+ range.
Run CAPI alongside the pixel, deduplicated by a shared event ID, so nothing is double-counted.
Step 2: Send more customer parameters
Match quality scales with the number and quality of identifiers you attach. Stack the strongest ones first. Here's the priority order and how each must be formatted, per Meta's customer information parameters:
| Parameter | Source | Matching strength | Format before sending |
|---|---|---|---|
Email (em) | Form field | Very high — most stable ID | lowercase, trim, SHA-256 |
Phone (ph) | Form field | High | digits + country code, no +/spaces, SHA-256 |
Click ID (fbc) | _fbc cookie | Very high for attribution | sent raw (not hashed) |
Browser ID (fbp) | _fbp cookie | Medium–high | sent raw |
| External ID | Your lead/user ID | High | hashed, kept consistent |
First / last name (fn/ln) | Form field | Medium | lowercase, trim, SHA-256 |
| City / state / zip / country | Form field | Medium–low | lowercase, no spaces, SHA-256 |
| Client IP + user agent | Server (CAPI only) | Medium | sent raw |
Roughly: email + phone lands around 5–6, adding fbc pushes 7–8.5, and layering in fbp, IP, and user agent reaches 8.5–9.5. To hit "Great," aim to send 8 or more solid identifiers per event.
Step 3: Capture the automatic signals — fbc, fbp, IP, user agent
Two cookies do a lot of heavy lifting. fbc ties the event to the exact ad click that preceded it (the highest individual impact on matching), and fbp identifies the browser. Make sure both are captured and forwarded with every server event, along with the IP and user agent the server sees. If you're unsure whether you're capturing them, here's how to capture the _fbp and _fbc cookies.
Step 4: Normalize and hash correctly
This is where most manual setups quietly fail. Meta requires customer PII to be SHA-256 hashed, but only after it's normalized:
- Email: lowercase, trim whitespace, then hash.
- Phone: strip
+, spaces, dashes and brackets, include the country code, then hash (e.g.+1 (415) 555-0100→14155550100→ hash). - Names, city, state: lowercase and trim, then hash.
- Never hash
fbc,fbp, IP, or user agent — those are sent in the clear.
Send a value hashed and un-normalized, or double-hashed, and it won't match — the score won't move no matter how many fields you add.
Step 5: Collect more of the right data at capture
You can only match on what you collect. A single-field email form caps your ceiling; a multi-step lead form that also asks for phone and name gives you two or three more high-strength identifiers to send. Asking one question at a time keeps completion high while you gather the extra fields — you can map each field to the right matching parameter so the data flows straight into advanced matching.
Step 6: Verify in Events Manager
After a few live events, open Events Manager → your dataset → the event → Event Match Quality, and check that the score climbed and the parameters you expect are showing as received. Confirm your pixel and CAPI events are deduplicated by event ID so you're improving match quality, not inflating volume.
The easy way: fix it with Collectform in a couple of minutes
Doing all six steps by hand means a server endpoint, SHA-256 hashing, cookie capture, normalization to Meta's exact spec, deduplication, and ongoing verification. That's the "easily" part most guides skip.
Collectform builds it in. You keep your landing page and funnel — Collectform is the lead-gen form you embed into it, and it takes care of both the capture and the tracking. Every lead form you build:
- Sends events server-side to Meta CAPI (and TikTok's Events API) by default — Step 1 done.
- Lets you map the fields your respondents fill in — email, phone, name, city — straight to Meta's matching parameters, so richer forms mean higher EMQ (Steps 2 and 5).
- Captures and forwards
_fbp/_fbc, IP, and user agent automatically (Step 3). - Hashes with SHA-256 and normalizes to spec before anything leaves the server (Step 4).
- Deduplicates every CAPI event against its pixel counterpart with a shared event ID (Step 6).
You collect the fields; Collectform handles the matching. That's the shortcut from a 4/10 pixel to an 8+ server-side score — most teams have it live in a couple of minutes.
Common mistakes that keep EMQ low
- Hashing already-hashed data, or hashing the automatic parameters (
fbc,fbp, IP, UA) — they should be raw. - Forgetting the country code on phone numbers, so they never normalize correctly.
- Only sending email. It's the strongest single field, but one identifier caps you around 5–6.
- Sending CAPI without a shared event ID, which double-counts instead of enriching matches.
- Not capturing
fbc, which throws away the highest-impact attribution signal.
The bottom line
Improving Facebook Event Match Quality comes down to one idea: give Meta more accurate identifiers, and send them server-side where they can't be blocked. Turn on the Conversions API, send hashed email and phone plus name, location, and an external ID, forward the fbc/fbp cookies and IP, format everything to spec, and collect a couple more fields at capture. Do that and a 4/10 browser score becomes an 8+ server-side score — which means cleaner attribution, a smarter algorithm, and a lower cost per lead.
The easiest version of all of this is to add a Collectform lead form to the funnel you already have and let it handle the tracking natively, instead of wiring it together yourself — most teams have it working in a couple of minutes.
Explore lead form templates or start building for free with Collectform →
