← blog/capi-trackingPT
    // blog/capi-tracking.md

    CAPI — Server-Side Tracking

    Why most agencies are losing 30–40% of their conversion data — and how to fix it.

    2026-05-02·6 min read·paid media·POSTEP Digital

    Pixel = fires in browser (blockable) · CAPI = fires on server (not blockable) · event_id = deduplicates both

    // 01

    The problem

    Most agencies are optimizing campaigns with half the data.

    When you only install the Meta Pixel on your site, events are sent through the user's browser. But browsers have ad blockers, cookie restrictions, iOS 14, Safari ITP. Depending on your audience, 30 to 40% of events disappear before reaching Meta.

    The campaign algorithm learns from what it receives. Less data means worse optimization and higher CPL — even without changing copy, creatives, or budget.

    // 02

    What is the Conversions API

    The Conversions API (CAPI) is a server-side integration launched by Meta in 2021. Instead of relying on the browser to send events, you send them directly from the server to Meta via an HTTP call. No ad blocker can intercept that.

    // pixel vs capi
    Pixel only (browser)
    ✗blocked by ad blockers
    ✗iOS 14 limits tracking
    ✗Safari ITP deletes cookies
    ✗30–40% event loss
    ✗algorithm with weak signal
    Pixel + CAPI
    ✓server-side, not blockable
    ✓browser-independent
    ✓event_id deduplicates both
    ✓near 100% coverage
    ✓algorithm with complete signal
    // 03

    How it works in practice

    The critical point is deduplication. Since the Pixel and CAPI both fire for the same event, Meta needs to know they're the same — otherwise it counts twice and distorts the data. The solution is a unique event_id generated on the frontend and sent to both channels.

    // full flow
    →user visits the page
    →frontend generates unique event_id
    →Pixel fires with that event_id (browser)
    →N8N webhook receives the same event_id
    →N8N calls the Graph API with the event
    →Meta receives both, deduplicates by event_id

    → If the Pixel is blocked, only CAPI counts. If both arrive, Meta uses event_id to avoid duplication.

    // 04

    What needs to be sent

    CAPI requires some mandatory fields and accepts optional data that improves match quality — the more user data you send, the better Meta can attribute the event to a real person.

    ✓
    event_name— PageView, Lead, Purchase, ViewContent…
    ✓
    event_time— Unix timestamp of the event moment
    ✓
    event_id— Unique ID for deduplication with Pixel
    ✓
    action_source— always 'website' for site events
    ·
    client_user_agent— browser user agent of the user
    optional
    ·
    client_ip_address— IP extracted from x-forwarded-for header
    optional
    ·
    fbp / fbc— Meta Pixel _fbp and _fbc cookies
    optional

    → Optional fields increase the Event Match Quality Score — Meta's metric for measuring the quality of the received signal.

    // 05

    Our implementation

    On the POSTEP site itself we use N8N as a relay between the frontend and the Graph API. The frontend sends a POST to an N8N webhook, which builds the correct payload and calls the Meta API server-side.

    // architecture
    frontend (React)
    fetch(CAPI_WEBHOOK, { event_name, event_id, fbp, fbc, ip })
    ↓ POST
    N8N webhook
    extracts IP from x-forwarded-for
    validates event_name against allowed list
    builds payload and calls Graph API v25
    ↓ HTTP POST
    Meta Conversions API
    events_received: 1

    No external SDK dependency. N8N is already in the infra — the relay adds no cost, it just connects what already exists.

    // 06

    Is it worth implementing?

    Depends on your audience. If most of your traffic is mobile iOS or uses ad blockers, the difference is immediate. If it's Android traffic without blockers, the gain is smaller — but the signal still improves.

    mobile iOS audience

    high — 30–40% of events recovered

    users with ad blockers

    high — 100% of blocked events recovered

    Android / desktop without blocker

    medium — improves Event Match Quality

    any conversion-objective account

    high — algorithm receives more complete signal

    // conclusion

    If you're running conversion campaigns on Meta and don't have CAPI configured, you're optimizing with incomplete data. Implementation takes less than a day. The impact is immediate.

    written by
    POSTEP Digital
    ← all posts