← 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