Analytics•2026-01-05
Clean Measurement: Meta CAPI + GA4 Without Double Counting
How we deduplicate events between server-side and client-side tracking to get accurate attribution.

Running Meta Conversions API (CAPI) alongside GA4 sounds simple. But if you're not careful, you'll double-count every conversion.
We've set up this stack for dozens of clients. Here's how we do it right.
The Problem
When you run both server-side (CAPI) and client-side (Meta Pixel) tracking, the same event can fire twice:
- Client-side: Browser fires pixel event
- Server-side: Server fires CAPI event
If both events count, you're seeing double the conversions you actually have. That breaks attribution, inflates ROAS, and makes optimization impossible.
The Solution: Event IDs
The fix is event deduplication using event_id. Both Meta Pixel and CAPI support an event_id parameter. If you send the same event_id from both sources, Meta deduplicates automatically.
Here's how we implement it:
1. Generate a unique event_id for each event (UUID v4)
2. Send the same event_id from both client and server
3. Meta automatically deduplicates on their end
The event_id needs to be:
- Unique per event (not per user or session)
- Consistent across client and server
- Stored so we can reference it later
We generate event_ids client-side, then pass them to the server via webhook or API call. The server uses the same event_id when sending to CAPI.
Server vs Browser: When to Use What
Not every event should fire from both places. Here's our rule:
Server-side (CAPI only):
- Purchase events (most reliable from server)
- Lead form submissions (server is source of truth)
- High-value events (we want guaranteed delivery)
Client-side (Pixel only):
- Page views (browser-only context)
- Video views (browser-only context)
- Scroll depth (browser-only context)
Both (with deduplication):
- Add to cart (we want fast feedback + reliable backup)
- Initiate checkout (same reason)
- View content (browser for speed, server for reliability)
The key is understanding which events need redundancy and which don't.
QA Checklist
Before we go live with any CAPI + GA4 setup, we run through this checklist:
1. Event IDs: Are they unique? Are they consistent across client/server?
2. Event names: Do they match between Pixel and CAPI?
3. Parameters: Are all required parameters present? Do they match?
4. Test events: Can we see test events in Meta Events Manager?
5. Deduplication: Are events being deduplicated? (Check Events Manager)
6. GA4: Are events firing in GA4? Are they not duplicating?
7. Attribution: Are attribution reports showing correct data?
We test this in a staging environment first, then validate in production with test purchases.
Common Pitfalls
We've seen these mistakes over and over:
- Missing event_id: Events fire but don't deduplicate
- Inconsistent parameters: Events deduplicate but data doesn't match
- Timing issues: Client fires before server, or vice versa
- Missing test mode: Can't validate before going live
Our solution: a unified tracking library that handles all of this automatically. Client and server use the same code, same event structure, same validation.
The Bottom Line
Clean measurement requires discipline: proper event IDs, smart server/browser split, thorough QA, and avoiding common pitfalls.
When done right, you get accurate attribution, reliable data, and the ability to optimize with confidence. When done wrong, you get double-counted conversions and broken reports.
The difference is in the details.