← Back to blog
Engineering·July 17, 2026

How Ad Blockers Break Meta CAPI (and How to Fix It)

Meta’s Conversions API is server-side — but most CAPI setups still route through the browser first. Here’s exactly where ad blockers break the chain, and how to make purchase delivery independent of the visitor’s device.

How Ad Blockers Break Meta CAPI (and How to Fix It)

Meta’s Conversions API (CAPI) is a server-side endpoint — but most Shopify CAPI implementations still depend on the browser to capture the event first. When an ad blocker intercepts the Meta Pixel or the client-side relay, the event never reaches your server to forward. The fix is capturing purchases from Shopify’s own infrastructure (webhooks) instead of the visitor’s browser.

Why does a server-side API still get blocked?

CAPI itself cannot be blocked — it’s a server-to-server call. The problem is upstream: the standard Shopify setup fires the Meta Pixel in the browser, and a gateway (the Shopify Meta app or a tag manager) translates that browser event into a CAPI call. Block the pixel, and the trigger never fires. The server-side leg exists, but it’s waiting on a browser event that never arrives.

What exactly do ad blockers intercept?

Blockers filter requests by domain pattern (facebook.net, connect.facebook.com) and by script behavior. Modern blockers also catch first-party proxy setups that forward to Meta’s domains. What they cannot intercept is traffic between two servers — Shopify’s webhook infrastructure posting an order to your relay, and your relay posting to Meta’s graph API. Neither request touches the visitor’s device.

How do you make CAPI delivery browser-independent?

Capture the purchase from Shopify’s orders/paid webhook — the order object arrives server-side regardless of what the visitor’s browser did. Transform it into Meta’s Purchase event schema, attach the fbc click ID from your first-party cookie or attribution store, hash customer parameters, and post to the Conversions API with an event_id for dedup. PixelRelay automates this entire pipeline: webhook capture, dedup against any surviving browser pixel, and delivery with live “X of Y orders delivered” counts you can check against Shopify admin.

How do you verify the fix works?

Compare Meta’s reported purchases against Shopify admin order counts over a 7-day window. Before the fix, stores with high blocker traffic typically see 20–40% gaps. After webhook-based capture, the gap should narrow to near-zero for paid orders — verify with your own numbers rather than trusting any vendor’s published percentage.

FAQ

Does this violate Meta’s policies? No. The Conversions API is Meta’s official server-side product; sending from your own infrastructure is the intended usage.

Do I still need the browser pixel? Keeping it gives you richer behavioral events (ViewContent, AddToCart) on unblocked sessions. Just deduplicate purchases — PixelRelay does this automatically via event_id matching.

What about iOS 14+ attribution windows? Server-side delivery doesn’t change Meta’s attribution modeling, but it does ensure the purchase event actually arrives for Meta to attribute — the event volume problem is separate from the attribution window problem.