Meta CAPI

7 Meta CAPI Setup Errors That Tank Your Event Match Quality

Lucas Andersen·February 15, 2026·8 min read

We've audited hundreds of Meta CAPI implementations. These are the 7 errors we see most often — and each one directly tanks your Event Match Quality score, wastes ad spend, and breaks attribution.

Warning: A single misconfiguration can drop your EMQ from "Great" to "Poor", costing you 20-40% of attributable conversions.

#1 Missing Event ID Deduplication

The most common error. Your browser pixel fires a Purchase event and your server sends the same event via CAPI — but without a shared event_id, Meta counts it twice.

Double-counted conversions inflate your reported ROAS, making you think campaigns are performing better than they are. When you scale based on that inflated data, you bleed budget.

Fix

Generate a unique event_id in the browser (UUID or hash of order ID + event name), pass it via both the pixel fire and the server-side CAPI call. Meta deduplicates on exact match of event_name + event_id within a 48-hour window.

#2 Broken Advanced Matching Parameters

Advanced matching lets Meta hash and send user identifiers (email, phone, name, city) alongside pixel events for better attribution. But most implementations either don't send the parameters or send them unhashed and malformatted.

Common mistakes: sending mixed-case emails (Meta requires lowercase before hashing), including country codes in phone numbers without stripping formatting, or passing empty strings instead of omitting the field entirely.

Fix

Normalize all parameters before hashing: lowercase emails, strip phone number formatting to digits only with country code, trim whitespace. Use SHA-256 hashing on normalized values. Don't send empty strings — omit the parameter if the value isn't available.

#3 Wrong Event Names or Custom Event Misuse

Meta's algorithm optimizes based on standard event names: Purchase, AddToCart, InitiateCheckout. Sending purchase (lowercase) or completed_purchase means Meta can't optimize against it.

Custom events have their place, but using them instead of standard events for core funnel actions leaves conversion data stranded outside Meta's optimization engine.

Fix

Use Meta's 17 standard event names exactly as documented (case-sensitive). Map your platform's event names (Shopify's checkout_completed) to Meta's standard names in your sGTM or CAPI layer.

#4 No FBP Cookie Pass-Through

The _fbp cookie is Meta's first-party browser identifier. Without it in your CAPI call, Meta can't match the server event to the user's browser session — even if everything else is perfect.

This is especially common when server-side implementations bypass the browser entirely (like backend-only CAPI setups triggered by webhooks). The server doesn't have access to the cookie unless you explicitly capture and forward it.

Fix

Read _fbp and _fbc cookies client-side, store them in your session or data layer, and include them in every CAPI payload. sGTM can extract these automatically from the incoming request if configured correctly.

#5 Missing or Incorrect Currency/Value on Purchase

CAPI Purchase events without value and currency parameters break ROAS reporting entirely. Meta can track the conversion but can't calculate return on ad spend.

We also see implementations where value is sent as a string like "$49.99" instead of a number 49.99, or where tax/shipping is included inconsistently between browser and server events.

Fix

Always send value as a decimal number (not a formatted string) and currency as an ISO 4217 code (e.g. "USD"). Ensure browser and server events use the same value calculation — either both include tax or both exclude it.

#6 CAPI Events Without External ID

The external_id parameter links your internal user/customer ID to Meta's identity graph. Without it, Meta relies entirely on cookies and IP for matching — which fails for logged-in users on new devices or returning users with cleared cookies.

This is a missed opportunity: if a user purchases on mobile and you have their customer ID, passing it as external_id lets Meta connect the dots even without browser-level identifiers.

Fix

Hash your internal customer/user ID with SHA-256 and pass it as external_id in both browser (via advanced matching) and server (via CAPI) events. Consistency across channels is key — use the same ID everywhere.

#7 Server Events Arriving Too Late

Meta's attribution window for CAPI events is tight. If your server sends a Purchase event hours after the actual conversion (common with batch-processing or queued webhook pipelines), Meta may attribute it incorrectly or not at all.

The event_time parameter tells Meta when the event actually happened, but it still needs to arrive within a reasonable window. Stale events degrade match quality.

Fix

Send CAPI events in real-time (within minutes, not hours). Set event_time to the actual conversion timestamp (Unix epoch). If using webhooks, process them synchronously rather than queuing for batch processing.

The Bottom Line

Every one of these errors is fixable — and most can be resolved in a single implementation session. The difference between a "Poor" and "Great" EMQ score is often just 2-3 of these fixes applied correctly.

If you're running Meta ads and your Event Match Quality is below "Good", at least one of these issues is active on your site right now.

Need this fixed?

We fix these exact issues in 48 hours. $645 flat fee, no retainers.

Free Resource

Get the Free Tracking Health Checklist

The same 14-point checklist we run on every client audit. Check your Meta CAPI, sGTM, and GA4 setup in 10 minutes.

Stop Losing Conversions

We fix broken Meta CAPI, sGTM, and GA4 tracking in 48 hours. $645 flat fee. No retainers.

Get Your Tracking Fixed

What Comes Next

Tracking Fixed. Now What?

Clean tracking data is the foundation — but it's only valuable if you're making the right decisions from it. ScalifyGrowth provides Decision-Grade Attribution certification: we diagnose whether your measurement stack is giving you trustworthy signals, fix what's broken, and certify your data so you can scale with confidence.

If you're spending $20K+/month on ads and still not sure which channels are actually working, that's a measurement problem, not a tracking problem.