Skip to content
Meta Conversions API

Event Match Quality: What It Is and How to Improve It in Meta Events Manager

What Event Match Quality in Meta Events Manager measures, which customer parameters actually help matching, how to prepare them, and when EMQ does not appear at all.

Published: 8 min read
List of Meta Conversions API deliveries with the status of each event
On this page
  1. What is Event Match Quality?
  2. Which events does Meta calculate EMQ for?
  3. Which customer parameters actually help?
  4. Common causes of a low EMQ
  5. How this works in Basketly
  6. How does EMQ relate to the Pixel and deduplication?
  7. A step-by-step plan to improve EMQ
  8. Limits: what EMQ does not tell you

Event Match Quality is Meta's hint about how many of your events it can attribute to real people. An event Meta cannot match to an account will not help optimisation or attribution, even if it was accepted without errors. Treat EMQ like a thermometer: it does not cure anything, but it shows where your data is too thin. This guide explains what the score measures, which parameters matter, how to prepare them, and why you will not see it for offline events at all.

What is Event Match Quality?

According to the Dataset Quality API documentation, EMQ is a score out of 10 that indicates how effective the customer information sent from your server may be at matching an event to a Meta account. Meta considers:

  • which customer information parameters it receives through the Conversions API,
  • the quality of those parameters,
  • the share of events matched to an account.

The score is calculated in real time and shown separately for each event, such as Purchase or AddToCart. Alongside it, Meta shows diagnostics (specific integration issues with suggested fixes) and data freshness, the delay between an event happening and Meta receiving it.

Why it matters: Meta's Conversions API best practices say plainly that only matched events can be used for ad attribution and delivery optimisation. Unmatched events are useful for basic measurement at most.

Which events does Meta calculate EMQ for?

Website events only. Meta notes that EMQ is not available for offline and physical store events, app events, or the CRM integration for leads (conversion leads). This matters because many teams look for a score where none exists.

Event typeExampleEMQ?Main matching key
Website (action_source: website)ExamplePurchase from an online shopEMQ?yesMain matching keyemail, phone, IP, user agent, fbp, fbc, external_id
Offline or spreadsheetExamplea status from Google SheetsEMQ?noMain matching keyemail, phone, external_id

If you mostly send purchases made off the website (from a spreadsheet or phone orders), do not chase an EMQ score. Make sure every event carries the customer's email or phone and a stable event_id, as covered in offline conversions from Google Sheets to Meta.

Which customer parameters actually help?

Meta gives email, IP address, first and last name, and phone as examples of high-quality parameters, and recommends sending external_id and event_id with every event. The full list of fields and preparation rules is in the customer information parameters reference.

ParameterWhere it comes fromHow to prepare itHashing
Email (em)Where it comes fromcheckout form, customer accountHow to prepare ittrim spaces, lowercaseHashingSHA-256
Phone (ph)Where it comes fromcheckout formHow to prepare itdigits only with country code, e.g. 447700900123HashingSHA-256
IP address (client_ip_address)Where it comes fromthe customer's browser requestHow to prepare itthe customer's real address, not your server'sHashingnever
User agent (client_user_agent)Where it comes fromthe customer's browserHow to prepare itunchanged; required for website eventsHashingno
fbpWhere it comes fromthe _fbp cookieHow to prepare itunchangedHashingno
fbcWhere it comes fromthe _fbc cookie or fbclid from the clickHow to prepare itonly from a real ad clickHashingno
external_idWhere it comes fromyour customer IDHow to prepare itthe same for one person across all channelsHashingrecommended
First, last name (fn, ln)Where it comes fromformHow to prepare itlowercase, no punctuationHashingSHA-256

Two rules that are easy to overlook:

  • Overly broad events are rejected. If an event carries only fields such as gender, city, state and country, Meta treats it as invalid. City or postcode only help as extras.
  • Send test events with your own data. Meta says test events that do not match an account may be discarded, so test with your own email and phone, not test@test.com.

Common causes of a low EMQ

SymptomCauseFix
Email is sent, but few matchesCausecapitals or spaces before hashingFixnormalise before SHA-256
Phone adds almost nothingCausenumber without country code or with a leading zeroFixstore numbers in international format
No fbp or fbc on ordersCausebrowser identifiers never reach the orderFixpass them from the page to the order after cookie consent
IP is always the same addressCauseyour server or proxy address is being sentFixpass the customer's IP; trust proxy headers only when the proxy overwrites them
Diagnostics flag delaysCauseevents sent in a nightly batchFixsend each event right after the order
Score drops after a site changeCausea new form no longer passes email or phoneFixcheck parameter coverage after every release

How this works in Basketly

Basketly does not "boost" the score with tricks. It makes sure data is complete and correct before it leaves for Meta:

  • Email and phone are normalised and hashed on the server. An invalid email or a phone number without a country code stops the event with a clear error rather than sending a hash that will never match.
  • The shop collector gathers fbp and fbc only after consent from your CMP. It reuses an existing _fbp or creates its own identifier, and takes fbc only from a real fbclid; it never invents one without a click. It also records the customer's real IP and user agent, skipping private addresses.
  • A shop order is sent as a website event with a stable event_id, the customer's user agent and a page URL on the same domain as the source. Query parameters are stripped before sending.
  • Your own customer ID passed as user_id reaches Meta as a hashed external_id.
  • Events leave from a durable queue checked every minute, so data reaches Meta close to the time of the event.
Meta deliveries list with status and attempt count for each event
Meta deliveries list with status and attempt count for each event

How to carry the collector's identifier into the order and avoid double counting with the Pixel is covered in server-side purchase events for online shops and Pixel and CAPI event deduplication. The Meta Conversions API feature page describes delivery in general.

How does EMQ relate to the Pixel and deduplication?

EMQ rates events sent from your server, but in most shops the browser Pixel also reports the same order. If both send Purchase, Meta has to know it is one transaction. The best practices require either an event_id or a combination of external_id and fbp on both events; in practice, the simplest route is the same event name and the same event_id on both sides.

That is good news for EMQ: the identifiers that let Meta remove the duplicate also help it match. A server event carrying the customer's fbp, fbc, IP and user agent is both better matched and easier to deduplicate. The reverse holds too: a server event with no browser identifiers gives Meta less to work with on both counts.

One warning: do not invent an fbc to "fill the gap". Meta expects a value from a real ad click, and a fabricated one can distort attribution.

A step-by-step plan to improve EMQ

  1. Pick the events that matter. Usually Purchase, AddToCart and InitiateCheckout on your website. PageView normally carries little customer data and is not worth forcing.
  2. Record a baseline. The score and the coverage of each parameter from Events Manager, so you have something to compare against.
  3. Fix the format first, before adding new fields. A badly normalised email is worse than none, because it looks as though data is being sent.
  4. Add browser identifiers (fbp, fbc, IP, user agent) after cookie consent.
  5. Add external_id if customers have accounts in your shop.
  6. Cut the delay: send each event right after the order.
  7. Check the score after a few days of traffic and compare it with your baseline.

Only collect data you need to fulfil the order. Adding form fields purely to lift EMQ conflicts with the data minimisation principle. More in GDPR and the Conversions API.

Limits: what EMQ does not tell you

  • EMQ does not measure whether your event counts are right. A perfect 10 on a Purchase event that fires twice for one order still means inflated purchases.
  • EMQ does not apply to offline events. There, data quality depends on email, phone and sending regularly.
  • Basketly sends email, phone, external_id and browser data from the collector. It does not send first or last name, city, postcode or date of birth. If your approach depends on those fields, you need a different setup.
  • A higher score does not guarantee better campaigns. It gives Meta more matched events to learn from; Ads Manager shows the effect.

If you are new to server-side events, start with what the Meta Conversions API is. Plans and limits are on the pricing page.

About the author

Aleksander

Founder of Basketly.io, BooksyAudit.pl and SMSPortal.app

Founded Basketly.io, BooksyAudit.pl and SMSPortal.app. In the knowledge base he explains how to send shop purchases to Meta, how to keep a product catalogue in shape and how to measure what a purchase from ads costs.

All articles by the author

Frequently asked questions

Where do I find Event Match Quality?

In Events Manager, in the details of a website event for the relevant data source. Meta shows the score there along with which customer parameters arrive and at what coverage. The same score is available through the Dataset Quality API.

What is a good EMQ score?

Meta's developer documentation gives a scale out of 10 and recommends monitoring the score per event together with the parameters you send, but no single threshold. Targets like 'at least 6' usually come from tool vendors. Compare against your own score before changes.

Why is there no EMQ for purchases from my spreadsheet?

Because Meta only calculates EMQ for website events. Offline events (such as sales from Google Sheets), app events and CRM integrations do not have it. For those, what counts is how many customer identifiers you send: email, phone, external_id.

Will sending date of birth or city raise EMQ much?

Meta lists email, IP address, first and last name and phone as examples of high-quality parameters. City, gender or country help less, and an event with only such fields is rejected as too broad. Do not collect extra data just to raise the score.

Does a higher EMQ mean better campaign results?

Not automatically. A higher EMQ means more events can be matched to accounts, and only matched events can be used for attribution and optimisation. That is better material for Meta, not a guarantee of a lower cost per conversion.

Does hashing lower EMQ?

No, as long as the data is normalised before hashing. The problem is hashing a badly formatted value, such as an email with a capital letter or a phone number without a country code: that hash will not match anything. IP address, user agent, fbp and fbc are not hashed.

Get started in under 5 minutes

Connect your shop and Meta and see how many purchases really arrive.

  • Free up to 100 orders a month
  • No developer needed
  • Purchase balance and self-check