← Knowledge base

Recovering attribution with server-side events

How we recovered 34% of lost conversions on Meta with a Cloudflare Worker and CAPI.

Nov 30, 2025·10 min read·Analytics / Advertising

Where the signal goes

Between iOS 14, ad blockers, and cookie expiry, the pixel now sees a shrinking fraction of your conversions. On some accounts we've measured a 40% gap between the pixel and the CRM.

Server-side events close most of that gap.

Architecture

The pattern:

  1. Fire a first-party event on your server when a conversion happens.
  2. A Cloudflare Worker enriches the event with hashed identifiers.
  3. Forward to Meta CAPI, Google Enhanced Conversions, TikTok Events API.

Everything runs on your infrastructure. Nothing depends on the browser being cooperative.

Dedupe

The trap is double-counting. Send both browser and server events, but attach a matching event ID to each. The platforms dedupe automatically.

const eventId = crypto.randomUUID();
await Promise.all([
  sendBrowserEvent({ eventId, ... }),
  sendServerEvent({ eventId, ... }),
]);

Impact

Across three accounts we implemented this on:

  • Meta reported conversions: +34%.
  • Blended CAC (from source of truth): unchanged.
  • Meta's ability to optimize the auction: visibly better within 10 days.