Browser vs server, at a glance
| Meta Pixel | Conversions API (CAPI) | |
|---|---|---|
| Where it runs | Visitor's browser (JavaScript) | Your server |
| Relies on | Cookies (_fbp), fbclid | Server-to-server request; independent of cookies |
| Blocked by | Ad blockers, ITP, cookie restrictions | Not blocked by browser tools |
| Strength | Rich in-session/browser context | Durable, complete event coverage |
| Best used | Together — same events through both, deduplicated | |
Why Meta says run both
It's tempting to read "server-side is better" and drop the Pixel. Don't. Meta's guidance is a redundant event setup: send the same conversion events through both the Pixel and CAPI.
- The Pixel captures browser context you can't easily reconstruct on the server.
- The CAPI recovers the events the browser loses — to ad blockers, dropped connections, and privacy restrictions like Safari ITP and third-party cookie deprecation.
Run only the Pixel and you leak conversions as browsers tighten. Run only CAPI and you lose browser signal and complicate setup. Run both and you get the widest coverage and the best match quality — which is why the Pixel is not deprecated; it's one half of the recommended pair.
How deduplication keeps it honest
If you send the same purchase from both the browser and the server, won't Meta count it twice? No — as long as you deduplicate correctly:
- Meta deduplicates on
event_name+ a sharedevent_id. Send the sameevent_idfrom the Pixel and CAPI for the same event, and Meta counts it once while enriching from both sources. - The match applies when the two events arrive within a 48-hour window.
fbp(from the_fbpcookie) andfbc(derived from the fbclid click ID) are user-matching signals — not the primary dedup key.event_idis. Andfbp/fbcmust be sent unhashed.
The one thing to get right: generate a single event_id per event and pass the identical value through both paths. Skip that and you either double-count or fail to merge.
What this means for affiliates
If you run paid traffic to a bridge page, the Pixel alone will under-report as browser signals decay. Add the Conversions API, preserve the click ID so CAPI can match on the ad click, and share one event_id across both. Most affiliate trackers (Voluum, RedTrack, and others) can fire server-side events for you; a custom stack has to handle the event_id and click-ID plumbing explicitly.
This browser-tag-plus-server-API pattern isn't Meta-only — Google, TikTok, Microsoft, and LinkedIn all do the same. See the click ID reference for each platform's identifier, and the tracking-setup playbook for the end-to-end build.