How to improve Meta Event Match Quality on Shopify

What Meta Event Match Quality measures, what score to aim for on each event, and the customer data a Shopify store should send to raise it.

Short answer

Event Match Quality is Meta's 0 to 10 score for how well the customer data sent with your server events lets Meta match them to its users. For purchases, aim for 6 or higher. On Shopify, raise it by sending hashed email, phone, name and address with each purchase, plus the fbp and fbc cookies, IP address and user agent, through a single Conversions API source.

Meta can only credit an ad with a purchase if it can work out who made the purchase. Event Match Quality, the score next to each server event in Events Manager, tells you how well the data you send lets Meta do that. A low score means some of your real conversions can't be tied to anyone, so they don't help your reporting or your campaigns.

The fix is rarely complicated. Most Shopify stores already have the customer data. It just isn't being sent, or it's sent in a format Meta can't use. This guide covers what the score measures, what to aim for and exactly what to send.

What Event Match Quality measures

When you send an event through the Conversions API, you include customer information: email, phone, name, location, browser cookies and so on. Meta compares it with its own users. Event Match Quality is a score from 0 to 10 for how likely those details are to match the event to a Meta account.

It's scored per event, so Purchase, AddToCart and ViewContent each get their own number. You'll find it in Events Manager by opening your dataset, then clicking an event in Overview. Meta also shows which customer information parameters it receives for that event and how often, which is the most useful part.

What score to aim for

The right target depends on what you know about the visitor at that point:

EventWhat you usually knowReasonable target
PurchaseEmail, phone, name, address, cookies6 or higher, 8+ is very good
AddPaymentInfo, InitiateCheckoutOften email, plus cookies5 to 7
AddToCartCookies, email for logged-in or returning customers4 to 6
ViewContent, PageViewMostly cookies, IP and user agentLower is normal

Don't chase a 9 on ViewContent. Focus on Purchase first, because that's the event your campaigns optimize for and the one where you hold the most data.

The data that moves the score

These are Meta's customer information parameters, roughly in order of how much they help:

  • Email (em). The strongest single identifier. Send it on every purchase.
  • Phone (ph). Strong when present. Shopify often has it from checkout or SMS opt-ins.
  • External ID (external_id). Your own customer ID, like the Shopify customer ID. Helps link events from the same person over time.
  • Click ID (fbc) and browser ID (fbp). The _fbc and _fbp cookies set by the pixel. fbc ties the purchase to the ad click itself.
  • IP address and user agent. Always available on web events. Meta requires the user agent for website events sent through the Conversions API.
  • First and last name, city, state, zip, country. Each adds a little, and together they help when email or phone don't match.

Format and hashing rules

Sending the data is half the job. It also has to be in Meta's format, or it won't match. Meta requires these fields to be normalized and then hashed with SHA-256:

FieldNormalize before hashing
EmailTrim spaces, lowercase
PhoneDigits only, with country code, no leading zeros: (650) 555-1212 becomes 16505551212
First and last nameLowercase, no punctuation
CityLowercase, no spaces or punctuation
StateLowercase 2-letter code for US states
ZipLowercase, no spaces or dashes, first 5 digits for US
CountryLowercase 2-letter ISO code, like us or gb

Never hash fbp, fbc, the IP address or the user agent. Meta needs those as they are. Hashing external_id is recommended. The most common silent failure is a phone number sent without its country code, which hashes fine but never matches.

How to raise it on Shopify

If you use the Facebook and Instagram app

Set customer data sharing to the highest level, Maximum, in the app's settings. At that level Shopify sends events through the Conversions API with the customer information it has, hashed for you. Then make sure nothing else sends events to the same pixel, or you'll trade a matching problem for a duplicate one.

If you use a tracking app or server-side GTM

  • Pass customer data on every checkout event, not just Purchase. Shopify's checkout_completed event includes the email, phone and billing address, and the checkout steps before it often include the email too.
  • Forward the _fbp and _fbc cookies from the browser to the server with each event. If the _fbc cookie is missing but the landing URL had an fbclid, build fbc from it in Meta's format.
  • Store the click ID with the order. Saving fbclid or _fbc as an order attribute lets server-side purchases carry it even when the purchase happens days after the click.
  • Send the real visitor's IP and user agent, not your server's. Server-side setups that forget this send the same IP for every customer.
  • Add the Shopify customer ID as external_id for logged-in and returning customers.
Want to know what your events are missing?

Our free tracking check reviews your Meta events, Event Match Quality and deduplication alongside GA4 and Google Ads, and tells you what to send and what to remove. Read-only, within 3 business days.

Get a free tracking check

Mistakes that keep it low

  • Two Conversions API sources. One sends rich data, the other sends almost none, and the average drags the score down. Worse, purchases may be counted twice. See Meta duplicate purchases.
  • Browser-only purchases. Without the Conversions API there's no server-side customer data to score.
  • Hashing twice, or hashing the wrong fields. A hashed fbp or a double-hashed email can't match anything.
  • Different event IDs on browser and server. This doesn't lower the score directly, but it creates duplicates that make everything else harder to read. Our guide to fixing event_id deduplication covers it.
  • Ignoring consent. Customers who decline tracking shouldn't be sent, and a banner that blocks the pixel before it can set _fbp lowers matching for everyone else too. Check how your banner and Shopify's customer privacy settings work together.

After changes, give it a few days. The score is calculated on recent events, so it moves gradually. Track Purchase EMQ weekly alongside the ratio of Meta purchases to Shopify orders, and you'll know both that every order is counted once and that Meta can match it.

Common questions

What is a good Event Match Quality score?

Meta scores each server event from 0 to 10 and labels it in Events Manager. For Purchase, where the customer has given you their email and address, 6 or higher is a sensible target and 8 or higher is very good. Browsing events like ViewContent naturally score lower, because most visitors are anonymous.

Does Event Match Quality affect ad performance?

Indirectly, yes. A purchase Meta cannot match to a person cannot be attributed to an ad or used to optimize delivery. Better matching means more of your real conversions count, which gives the delivery system more and better signal to learn from.

Do I need to hash email and phone before sending them?

Yes. Meta requires email, phone, name, date of birth, gender, city, state, zip and country to be normalized and hashed with SHA-256. The fbp and fbc cookies, IP address and user agent must not be hashed. Most Shopify apps and server-side GTM templates hash for you.

Why is my Event Match Quality only shown for some events?

Event Match Quality is calculated for events sent through the Conversions API. If an event only arrives from the browser pixel, there is no server-side customer data to score.

Will raising Event Match Quality fix duplicate purchases?

No. Matching and deduplication are separate. Fix duplicates first, so every purchase is counted once, then improve the data sent with each one.

ServiceMeta Conversions API setup for ShopifyMeta Conversions API set up properly on Shopify: deduplicated with the pixel, high Event Match Quality, correct values and no duplicate purchases.See what's included

Freelance data and analytics engineer and founder of Good Numbers. Top Rated on Upwork. Specializes in GA4, Google Tag Manager, BigQuery, server-side tracking and Shopify attribution.