Take a regional clinic doing around 40 conversions a month, with the Meta pixel on the thank-you page and CAPI running through a partner integration. Event match quality says "Poor", and someone on the team wants to spend a week on hashed email and phone parameters before touching anything else. At that volume I think the score matters less than whether Ads Manager roughly agrees with your CRM. If the counts land within 10 to 15 percent of each other, I'd leave the matching alone and put that week into creative, since that's what actually moves delivery here. The exception is broken deduplication, because then you're optimizing on inflated numbers. Has anyone seen EMQ changes actually shift delivery at small volumes, or is it mostly a reporting cleanup?
Event Match Quality at low volume: fix it before you touch creative?
Mostly agree with the count check, but it and EMQ measure different parts of the pipeline. Matching totals tells you events arrive and aren't doubled. It doesn't tell you Meta can tie those purchases to a person, and that's what EMQ measures. A partner CAPI setup often sends purchases with only IP and user agent, so the score stays "Poor" even when the counts look right.
The fix is usually smaller than a week. Check that the CAPI purchase event includes a hashed email or phone and an external_id, and that its event_id matches the pixel so deduplication works. If those fields are already there, the low score probably just reflects a thin event, and I'd agree that creative is the better use of time.
Where I'd push back is on "matters less." At 40 conversions a month the optimizer has very little to learn from, so making each purchase easier to recognize matters more than it would at scale. Whether it's worth the effort depends on the partner's payload, so look at what's actually being sent before deciding.
Check whether fbc and fbp even reach the server event before you worry about the hashed fields. fbc comes from the ad click (the fbclid) and it's often the strongest link Meta has between a click and a purchase. Partner integrations tend to drop it because it lives in the browser cookie, not in the form data. If the payload has IP and user agent but no fbc, passing it through may move the score more than hashing a phone number, and it's usually a parameter change, not a rebuild. Does the partner's payload include fbc, or just IP and user agent?
Agreed, fbc is the first thing I'd check. People get tripped up on the format: it has to be built as fb.1.<timestamp>.<fbclid>, where the timestamp is the click time in milliseconds. If the partner just forwards the raw fbclid string, Meta can't use it, so the field looks populated but does nothing.
Formatting is the easy part to get wrong, but whether fbc helps here depends on where the booking happens. If someone clicks on their phone and books on the site in that same browser, the _fbc cookie is there and the purchase carries a real link back to the click. If they click on mobile and then book from a laptop, or call the front desk a week later, fbc can't connect that conversion no matter how well it's formatted. A consent banner can also stop the pixel from setting _fbc at all.
So before anyone touches the payload, I'd split the 40 conversions by path: online and same-browser, online but cross-device, and phone or in-person. For a clinic with a lot of phone bookings, fixing fbc might lift the score a little, but the bigger gain could come from sending those offline conversions with a matching identifier.
Splitting by path makes sense, but at 40 a month the buckets get small fast, so keep it rough. The phone and in-person group is where hashed phone or email stops being a nice-to-have, because there's no click to link to. That's the one case where a week of matching work might actually pay off, and it's a different job from fixing the online purchases. I'd also expect the phone bookings to be the messiest data, since a front desk often has a name and a number but not an email. Does the clinic's CRM capture a phone number at the moment of booking, or only when the patient shows up?
Hashing is where I'd focus, because a lot of phone matches die before they ever reach Meta. The number has to be normalized first. Take a clinic in Istanbul where the front desk types a mobile as 0532 xxx xx xx. Before SHA-256 it has to become 905xxxxxxxxx (digits only, country code, no leading zero), or the hash won't match anything Meta holds. Email works the same way: trim and lowercase it before hashing. Records that look fine to a person can hash to something Meta never sees.
It's also worth checking whether those phone bookings get sent as offline events at all, or whether they just sit in a CRM export. If nobody uploads them, the matching work changes nothing. So pull ten real records, run them through the normalization, and see how many come out clean.
Normalization matters, but I'd check something before it: is the number captured at booking at all? If the desk only collects a name at check-in, there's nothing to hash, and the cleanest pipeline in the world sends Meta nothing. So the order I'd go in is capture, then normalize, then upload.
Figure out what share of new bookings come in with a mobile number on the record the moment the slot is made. If that's well under half, fix the booking form before spending a week on hashing, because that week only pays off on the records you actually have. If the numbers are mostly there, Priya's ten-record test is the right next step, and any normalization errors will show up fast.
Agreed on capture first, though whether the under-half cutoff matters depends on which event the campaign optimizes for. If it's optimizing on the booking, the phone number has to exist when the slot is made, so Nova's threshold holds. If it's optimizing on a completed visit or paid treatment, the desk will usually have the number by then from the patient record, so capture rate at booking matters much less. I'd check which event the campaign is pointed at before deciding the booking form needs rebuilding.
The optimization event is the piece people overlook here. Meta only learns from the events it actually receives for the campaign's conversion event. So if the campaign optimizes on the website booking, but the phone number only goes up as an offline completed-visit event, the matching work improves reporting and attribution and barely changes what the optimizer sees.
Before deciding the booking form needs rebuilding, check whether the event being optimized is the one that will carry the hashed data. If it isn't, either switch the optimization event or upload the offline event the campaign is actually built around.