The Meta CAPI setup mistakes that cost Shopify stores 30% of attribution
When CAPI works, it adds 15-30% of recovered attribution back to your Meta reporting. When it's misconfigured, it doubles up your Purchase events or worse, sends them with wrong values and you lose Meta's optimization trust.
Four mistakes I see most often on Shopify stores running CAPI.
Mistake 1: Missing event_id deduplication
The Pixel and CAPI both fire Purchase. If they share an event_id, Meta dedupes them server-side and counts them as one conversion. If they don't share an event_id (or use a different format on each side), Meta counts them as two conversions and your ROAS reporting doubles. Worse, Meta eventually flags your account for suspicious data and downgrades signal quality.
Fix: in your Customer Events pixel, generate a single event_id (typically the Shopify order_id) and pass it on both the Pixel call and the CAPI payload. The Shopify Meta channel app does this for you; custom setups often miss it.
Mistake 2: CAPI fires on Order Status but Pixel fires on Thank You
Some Shopify themes fire the Pixel Purchase event on the cart-thank-you page, but custom CAPI scripts attached to Shopify Flow webhooks fire on the order/created event. Different timing, different event_ids, no dedupe. Same doubling problem.
Mistake 3: Sending unhashed customer parameters
Meta requires customer parameters (em, ph, fn, ln) to be SHA-256 hashed before sending. Some custom CAPI implementations forget this and send raw values. Meta rejects the parameters silently, your match rate stays low, and you can't tell from Events Manager why.
Mistake 4: Sending events without action_source
Every CAPI event needs an action_source: website, app, email, etc. Without it, Meta treats the event as ambiguous and either drops it or refuses to dedupe against the matching Pixel call. Always set action_source: 'website' for Shopify Purchase events.
How to audit your CAPI setup
Open Meta Events Manager → Test events → look at the most recent Purchase. The right side panel shows whether the Pixel and CAPI both fired with matching event_id. If you see only one, you have a dedupe gap. If you see both with different event_ids, that's the doubling bug.
DataGap reads your Pixel feed via the Marketing API and reports CAPI status, match rate, and which customer parameters are being hashed. Ten-minute audit, $167 one-time.
DataGap connects to your Shopify store via read-only OAuth and returns a ranked list of tracking gaps in 10 minutes. $167 one-time. No subscription.
Run a free auditFrequently asked
Mostly yes. It handles event_id dedup and hashing automatically. The mistakes above usually come from teams that built custom CAPI on top of the channel app or replaced it entirely.
Events Manager → Data Quality tab. If you see warnings about duplicate events or low match rate, those are the signals Meta uses to downgrade your trust.