The Deduplication Audit: Catching a Double-Counted Conversion Before It Skews Your CPA
Objective: Given a set of paired browser-Pixel and server-CAPI event logs for the same purchases, identify which events are missing a matching event_id (and will double-count) versus which are correctly deduplicated, and quantify the CPA distortion caused by the gap.
You're auditing tracking health for a mid-market DTC brand's Meta ad account after a developer rolled out server-side CAPI last month, and CPA has mysteriously dropped 35% in the dashboard with no change in spend or targeting.
Pair every Pixel event against its CAPI counterpart by order ID, check for matching event_id, and calculate the real (deduplicated) purchase count versus the dashboard's reported count.
Before you start
What you'll need
Free path (everything below is enough to finish)
Free, handles VLOOKUP-based pairing without a paid analytics tool
The process
2 steps
Step 01 of 02
The lesson's Meta CAPI section explains that running Pixel and CAPI in parallel requires an identical event_id on both payloads for the same event, or Meta counts it twice, artificially lowering apparent CPA and causing Smart Bidding to over-spend chasing a target that isn't real.
Of 15 purchase events logged this week, 15 fired from the Pixel and 15 fired from CAPI. Pairing them by order ID, 4 pairs share no matching event_id. What does the dashboard report versus what actually happened?
Procedure
- Import both event logs and match rows on order_id using VLOOKUP or a join
- Compare the event_id value on each matched pair
- Flag pairs where event_id differs or is blank on one side, these count as 2 conversions instead of 1
- Recalculate true purchase count and the resulting real CPA
order #4471: pixel event_id 'evt_a1' | capi event_id 'evt_a1' MATCHED, counts once order #4472: pixel event_id 'evt_b2' | capi event_id (blank) NOT MATCHED, counts twice order #4473: pixel event_id 'evt_c3' | capi event_id 'evt_c9' MISMATCHED, counts twice ... Dashboard-reported purchases: 19 Actual deduplicated purchases: 15 Inflation: +26.7%
Healthy
Deduplicated purchase count matches order volume exactly; dashboard CPA and real CPA are the same number.
Unhealthy
Dashboard shows 19 purchases against 15 real orders because 4 CAPI events fired without the Pixel's event_id, so Meta's bid strategy is optimizing toward a CPA that's 27% too optimistic.
What this means
A missing or mismatched event_id isn't a tracking inconvenience, it directly corrupts the number Smart Bidding optimizes against, which means the algorithm will keep spending as if it's hitting a target CPA it's actually missing.
So what do I do about it?
| Symptom | Action | Effort |
|---|---|---|
| CPA drops sharply right after a CAPI rollout with no other change | Audit event_id pairing before trusting the new lower CPA, don't just celebrate it | 30 min |
Step 02 of 02
The lesson cites Workshop Digital's case studies: 4 of 5 client accounts saw a lift in tracked conversion volume after enabling Enhanced Conversions, averaging 6-10% recovery, because hashed first-party data gives Google a second matching attempt when cookies fail.
After enabling Enhanced Conversions, weekly tracked conversions rose from 210 to 226 with no change in spend or creative. Is this a real recovery signal or noise?
Procedure
- Pull weekly tracked conversions for the 4 weeks before and after enabling Enhanced Conversions
- Confirm spend and campaign structure didn't change in the same window
- Calculate percent lift: (post-avg minus pre-avg) / pre-avg
- Compare the lift against the lesson's 6-10% benchmark range
Pre-launch 4-week avg: 210 conversions/week Post-launch 4-week avg: 226 conversions/week Lift: +7.6%, within the 6-10% typical recovery range cited in the case studies
Healthy
A 6-10% lift with stable spend, consistent with previously-unmatched cookieless conversions now being recovered via hashed data.
Unhealthy
Treating any conversion increase as proof of a random creative or targeting change when spend and creative were both held constant.
What this means
A lift in this specific range, with everything else held constant, is the expected signature of Enhanced Conversions recovering matches Google previously missed, not a coincidence worth re-attributing to something else.
So what do I do about it?
| Symptom | Action | Effort |
|---|---|---|
| Conversions rise right after enabling Enhanced Conversions | Check the lift against the 6-10% benchmark before crediting an unrelated campaign change | 5 min |
Final deliverable
A deduplication audit spreadsheet showing true purchase count vs. dashboard-reported count, plus an Enhanced Conversions lift calculation with a verdict on whether it matches the expected benchmark range.
See a reference example
Duolingo Plus, Meta Ads tracking audit (excerpt) DEDUPLICATION CHECK Dashboard purchases (7 days): 142 Deduplicated purchases: 131 Inflation: +8.4%, 11 events missing matched event_id ENHANCED CONVERSIONS LIFT Pre-launch avg: 580/week Post-launch avg: 621/week Lift: +7.1%, within expected 6-10% recovery range
Success criteria
You're done when you can:
- Correctly identifies every mismatched/missing event_id pair
- Calculates a real deduplicated CPA distinct from the dashboard number
- Correctly judges whether the Enhanced Conversions lift falls inside the benchmark range