foco
Back to Intelligence

The 3 Meta CAPI Mistakes That Are Costing You Conversions

Published: 3/28/2026
3 min read

This is a draft outline. Full article coming soon.

The Promise

Meta's Conversions API (CAPI) sends conversion data directly from your server to Meta, bypassing ad blockers and browser restrictions. In theory, this means Meta's algorithm sees more conversions and optimizes better.

In practice, most CAPI implementations make the algorithm dumber, not smarter.

Mistake 1: No Event Deduplication

When you run both the Meta Pixel (browser) and CAPI (server), Meta receives two signals for every conversion. Without proper deduplication via event_id, Meta counts every conversion twice.

What this looks like: Your Meta Ads Manager shows 2x the conversions you actually got. ROAS looks incredible. You scale spend. Actual revenue doesn't follow.

The fix: Generate a unique event_id on the client side, pass it to both the Pixel and your server, and include it in the CAPI payload. Meta deduplicates automatically if the IDs match.

Mistake 2: Sending Browser-Quality Data via Server

The whole point of CAPI is to send richer, more accurate data than the browser can. But most implementations just relay the same data the Pixel would have sent, via a server-side GTM tag that reads the same dataLayer values.

What this looks like: Your Event Match Quality score in Events Manager is low (under 6). Meta keeps warning you about "poor data quality." Your cost per acquisition is higher than it should be.

The fix: Enrich the CAPI payload with server-side data. Match the conversion to a customer record. Send hashed email, phone, and external_id from your CRM or database, not from a browser cookie.

Mistake 3: Not Sending Revenue Values (Or Sending Wrong Ones)

Meta's algorithm optimizes toward the signal you give it. If you're sending Purchase events without a value, or with a placeholder value like $1.00, the algorithm can't distinguish a $50 order from a $5,000 contract.

What this looks like: Meta optimizes for volume of conversions, not value. You get a lot of low-value leads or small orders. High-value customers are underrepresented in your optimization signal.

The fix: Send actual revenue values with every conversion event. For B2B, this might mean delayed reporting. Send the initial lead event when it happens, then use the Conversions API to send an updated event with the actual deal value when the opportunity closes.

How to Check Your Implementation

  1. Go to Meta Events Manager → Test Events. Fire a test conversion. Does one event arrive or two?
  2. Check your Event Match Quality score. Below 6 means your data enrichment is insufficient.
  3. Look at your Purchase or Lead events. Do they have value and currency parameters? Are the values real?

Most of this is fixable in a week with the right sGTM setup. The hard part is knowing what's broken.

Share this article