Meta Conversions API Event Match Quality Below 6? Here Is the Fix Plan

Meta Conversions API Event Match Quality Below 6? Here Is the Fix Plan - kaaf media network

If your Meta Conversions API Event Match Quality score is below 6, It means, Meta is guessing who bought from you, and your ads are learning from a blurry picture. Fix the identity data you send with each server event (hashed email, phone, fbp and fbc) and the algorithm gets a clearer signal to optimize on. Meta’s own setup guide says a high score can help lower your cost per action.

Quick Summary:

Event Match Quality (EMQ) is Meta’s 1 to 10 score for how well the customer data on your server events matches real Meta accounts. Meta recommends 6.0 or higher where possible, and we treat 7.0 as the working floor for Purchase. This guide shows you how to read your score, find what drags it down, and raise it in 60 days without breaking your tracking.

  • Meta’s recommended floor is 6.0. Our own floor for Purchase is 7.0.
  • Hashed email, phone, fbc and fbp do most of the lifting.
  • Shopify’s January 13, 2026 App Pixel change can quietly cut your event volume.
  • A 60-day plan fixes dedup first, then identity, then browser data.
  • A high score does not prove your attribution is correct.

What Meta Conversions API Event Match Quality measures

Event Match Quality is a score from 1 to 10 that shows how well the customer data on your server events can be matched to a Meta account. Meta calculates it from three things: which customer parameters you send, how clean that data is, and how many events end up matched.

You will only see the score for events sent through the Conversions API (CAPI). To find it, open Events Manager, pick your dataset, and go to the Overview tab. Click the score to see which parameters Meta received and what it suggests you add.

Why does this matter for your ad spend? Signal loss is not just vendor talk. A 2024 NBER working paper built on Meta advertiser data found that Apple’s App Tracking Transparency (ATT) substantially reduced advertising effectiveness. The more exposed an industry was, the lower its ad spend, the fewer its businesses, and the higher its prices.

Treat EMQ as a warning light, not a trophy.


Is a 6.0 score good enough or should you aim for 7?

For Meta Conversions API Event Match Quality, Meta says to aim for 6.0 or higher where possible. We push Purchase events to 7.0 or above. That gap trips up a lot of media buyers, so here is where each number comes from.

The 6.0 figure is in Meta’s developer documentation. Several vendor blogs call 7.0 a Meta requirement. We could not find that in Meta’s docs, so treat 7.0 as an agency rule of thumb. We use it when your account leans on iOS traffic, Advantage+ campaigns, or upper-funnel optimization events, because those setups lose the most when matching is thin.

ScoreHow to read itWhat we would do
Below 6.0Under Meta’s recommended levelFix this before you touch creative or budget. Audit parameters and dedup first.
6.0 to 6.9Meets Meta’s guidance but is thinAdd phone, fbp, fbc and external_id. Re-check after a few days of fresh traffic.
7.0 to 8.4Healthy for most storesMaintain it. Re-check after any theme, app or checkout change.
8.5 and aboveStrong on PurchaseConfirm dedup and event counts before you celebrate.

Your Event Match Quality score also varies by event. Purchase usually scores highest because the customer has just typed an email and phone number. PageView and ViewContent sit lower because most visitors have not shared anything yet. Tracking vendors report well-built stores landing near 9 on Purchase and around 7 on AddToCart. Those are their own account observations, not Meta benchmarks.

A perfect 10 on every event is unrealistic. Click IDs only exist on ad traffic and emails mostly show up at checkout or login. If you see 10s everywhere, audit for duplicated or fake events before you trust them.


Why your score stays low after you install CAPI

Most low Event Match Quality scores come from missing identity data, not from a broken connection. The CAPI link can look healthy in Events Manager while every event arrives with almost nothing to match on. These are the causes we check first.

  • No email or phone on the event. Tracking vendors report that stock Shopify setups often pass browser IDs but little hashed contact data, which keeps Purchase stuck around 6 to 7.
  • Server events built from order webhooks. A webhook carries order and customer details, but not the visitor’s fbp, fbc, IP address or user agent unless your setup saved them at checkout.
  • Missing click IDs. fbc only exists on clicks from Meta ads, and Safari’s link protections can strip click IDs from some Apple traffic.
  • Bad formatting before hashing. An email with a capital letter or a phone number without a country code hashes to a value Meta cannot match.
  • Hashing the wrong fields. fbp, fbc, IP address and user agent must go out as plain values.

Pro tip. Compare your fbc coverage to the share of traffic that comes from Meta ads. Since fbc only exists on ad clicks, a 100% rate across all visitors is not the goal.


Did Shopify’s January 2026 pixel change hit your numbers?

Did Shopify’s January 2026 pixel change hit your numbers

If your events or EMQ dipped after January 13, 2026, check your App Pixel data sharing setting first. On that date Shopify changed the default for App Pixels from “Always on” to “Optimized”.

In Optimized mode, Shopify watches whether a pixel produces attribution signals. If it sees none over days or weeks, it can restrict the data flow. According to Analyzify’s breakdown of the change, you get no notification when that happens. Some stores noticed Meta purchase events falling while Shopify orders stayed flat.

Here is how to check and fix it.

  1. In Shopify admin, go to Settings, then Customer events.
  2. Open the App pixels tab and find your Meta or tracking app pixel.
  3. Click the value in the Data column. If it says Optimized, switch it to Always on.
  4. Compare Shopify orders with Meta Purchase events for the last 30 days. A gap that opened in mid-January points to this setting.

Custom Pixels and server-side tracking through CAPI are not affected by the default change. One catch. If your tracking app forwards data through its own server, Shopify cannot see that forwarding and may read the pixel as idle. Set that app pixel to Always on as well.


Pixel only, CAPI only, or both?

Run both and dedup them. That is exactly what Meta recommends: CAPI alongside the Meta Pixel, with a deduplication method so the system can tell distinct events from overlapping ones.

We know the “duplicate pixel and CAPI” advice sounds like a vendor upsell. It is not. The pixel sees the browser. The server sees what the browser misses. A shared event_id stops Meta from counting one sale twice.

SetupWhat it capturesEMQ scoreSignal loss exposureBest for
Pixel onlyBrowser events, cookies, IP, user agentNone shownHigh. Ad blockers and Safari or iOS limits hit it hardest.Small tests with a thin budget
CAPI onlyCheckout and order data, hashed email and phoneScoredLower on purchases, but blind to browsing behavior unless you send itHeadless stores with strong dev support
Pixel plus CAPI with dedupBrowser and server data on one eventScoredLowestMost ecommerce brands

Stay pixel-only for now if you are still testing Meta on a small budget and your checkout cannot pass customer data yet. Move to CAPI once Meta becomes a steady channel. That is when blind spots start costing real money.


The parameters that move your score

Email and fbc carry the most weight in Meta Conversions API Event Match Quality, so send those first. The tiers below come from patterns across tracking vendor guides, not from a weight table published by Meta. Use them to decide what to fix first, not as exact math.

PriorityParametersNotes
Highem (email), fbcEmail shows up at checkout or signup. fbc exists only on ad clicks.
Mediumph (phone), external_id, fbp, country, date of birthPhone needs a country code. external_id is your own customer ID.
Lowerfn, ln, ct, st, zpSmall gains each. Send them whenever you already have them.

Hash it the right way

Normalize first, then hash with SHA-256. Trim and lowercase emails. Strip phone numbers down to digits and keep the country code, so “+1 (555) 010-2233” becomes 15550102233. Never hash fbc, fbp, IP address or user agent.

import crypto from "node:crypto";

const sha256 = (value) =>
  crypto.createHash("sha256").update(value).digest("hex");

const hashEmail = (email) => sha256(email.trim().toLowerCase());
const hashPhone = (phone) => sha256(phone.replace(/\D/g, ""));

Match browser and server with one event_id

Give the browser event and the server event the same event_name and the same event_id. Here is the browser side, followed by a server Purchase payload.

fbq("track", "Purchase",
  { value: 89.0, currency: "USD" },
  { eventID: "order_10482" }
);
{
  "data": [{
    "event_name": "Purchase",
    "event_time": 1794441600,
    "event_id": "order_10482",
    "action_source": "website",
    "event_source_url": "https://yourstore.com/checkout/thank-you",
    "user_data": {
      "em": ["<sha256 of normalized email>"],
      "ph": ["<sha256 of digits-only phone>"],
      "external_id": ["<sha256 of customer ID>"],
      "fbp": "fb.1.1699999999999.1234567890",
      "fbc": "fb.1.1699999999999.AbCdEf123",
      "client_ip_address": "203.0.113.24",
      "client_user_agent": "Mozilla/5.0 ..."
    },
    "custom_data": { "currency": "USD", "value": 89.0 }
  }]
}

One shared event_id is the cheapest fix in the whole stack.


A 60-day roadmap to raise your score

To raise your Event Match Quality score, fix dedup first, then identity, then browser data, then the upper funnel. Doing it in this order keeps you from raising a score on top of double-counted events.

DaysFocusWhat you doHow you check
1 to 7Baseline and dedupLog the EMQ for every event. Confirm each browser event has a server twin with the same event_name and event_id.Events Manager Overview, comparing events received with events processed
8 to 21IdentitySend normalized, hashed em and ph on Purchase, InitiateCheckout and Lead. Add external_id.EMQ detail panel shows em, ph and external_id arriving
22 to 40Browser contextCapture fbp, fbc, IP and user agent at checkout, save them with the order, and pass them to the server event.fbc coverage against your Meta traffic share, plus Purchase EMQ
41 to 60Upper funnelCapture email earlier through signups, accounts and back-in-stock forms.Additional Conversions Reported and Event coverage in the Dataset Quality API

Tracking vendors describe a rough pattern. Email alone lands around 5 to 6. Adding phone pushes you to 6 to 7. Browser IDs and name or zip data reach 7 to 8, and external_id plus IP and user agent can reach 8 to 9. Those are vendor observations, not Meta data, so use them as a guide to what to expect and not as a promise. Give each change a few days of fresh traffic before you judge it.

The cheapest identity data comes from earlier capture. A newsletter signup hands you the em parameter before checkout even starts, which is why we treat email list building as part of tracking and not just a retention tactic.

Who owns what in the 60 days

Tracking projects stall when nobody owns them. Marketing owns the event list and the weekly scorecard. A developer or your tracking app owns data capture and hashing. Whoever runs the ads owns the call on whether performance changed. If you want a second set of eyes on the setup, our marketing analytics team runs this audit for ecommerce brands.


What a high score does not fix

A high Event Match Quality score proves Meta can match your events. It does not prove they are correct. You can sit at 9 while double-counting every purchase because dedup is broken, and no warning will tell you.

Matching a buyer is not the same as proving your ad earned the sale.

Two more things to expect. First, EMQ says nothing about incrementality. Meta can know exactly who converted and still be taking credit for sales that would have happened anyway.

Second, reported ROAS can move the wrong way at first. Missing conversions start landing and duplicates get cleaned out at the same time, so the numbers shift before they settle. Tracking vendors have published cases where reported ROAS dipped after a fix and then stabilized higher. Those are single-vendor stories, so treat them as a warning not to kill a good setup in week two. To judge the result, compare it against profit-adjusted numbers like the ones in our Meta ads ROAS benchmarks guide.

Pro tip. CAPI can break without any alert. Put a weekly check in your calendar that compares Shopify orders, Meta Purchase events and your EMQ for Purchase.


How consent and privacy rules change the plan

Send only the data you have consent to use, and hash everything that identifies a person. Raising Event Match Quality means sending more personal parameters, while consent settings and data minimization pull the other way. Meta’s own Overview page shows events that were discarded because of consent controls, so a consent banner can lower your event count without any bug.

If you sell in both the US and the UAE, map each parameter to the consent rules in each market before you add it. We walk through the same server-side pattern for another platform in our guide to enterprise TikTok ads tracking for US and UAE retail.


Frequently Asked Questions:

Is an Event Match Quality score of 6.4 fine?

It meets Meta’s 6.0 guidance, so nothing is broken. It is still thin for Purchase. Add phone, fbp, fbc and external_id and aim for 7.0 or higher.

Why is my PageView score lower than Purchase?

Visitors have not shared an email or phone number yet when PageView fires. Purchase happens after checkout, when you have their details. Expect the gap and focus on lifting Purchase first.

Why did my score or event count drop in January 2026?

Check Shopify’s App Pixel data sharing setting. Since January 13, 2026, new App Pixels default to Optimized mode, which can restrict data flow when Shopify sees no attribution signals. Switch the pixel to Always on and compare orders with Meta events.

Does a high Event Match Quality score mean my attribution is accurate?

No. It measures how well events match Meta accounts. Broken dedup, double counting and credit for sales that would have happened anyway all survive a high score.

Can I improve Event Match Quality without a developer?

Partly. A good tracking app can send hashed email and phone and handle dedup for you. Saving fbp, fbc, IP and user agent at checkout and passing them to the server event usually needs app settings or a developer.


Final Recommendations

For Meta Conversions API Event Match Quality, start with dedup, then email and phone, then browser IDs. Here is the short version of the plan.

  1. Open Events Manager and write down your Event Match Quality score for each event today. This is your baseline.
  2. Run the pixel and CAPI together, with one shared event_id on every event.
  3. Check Shopify’s App Pixel setting and switch it to Always on if it says Optimized.
  4. Send normalized, hashed email and phone first, then fbp, fbc, IP and user agent.
  5. Hold Purchase at 7.0 or higher, and judge results against profit, since reported ROAS alone can mislead. If you run Advantage+, our Meta ads team can audit your signal before you scale spend.
Tags

Is Meta Guessing Who Your Buyers Are? Get a Free CAPI Health Check

What to read next

We Are Trusted by Global Brands

Ready to Turn Your Marketing Into Real Revenue?

11+

Years in Digital Marketing

66+

Certified Marketing Experts

10+

Certified Platform Partners

Let's Turn Your Marketing Into Your Best-Performing Employee.

A short, no-pressure conversation about what’s working, what isn’t, and what to do next.