Tracking guide

How to set up the Meta Conversions API for a landing page

Updated · 3 min read

The short answer

The Meta Conversions API sends conversion events from your server straight to Meta, next to the browser pixel. Send each event from both with the same event name and event_id, and Meta keeps one copy. That way a blocked pixel or a lost cookie no longer means a lost conversion.

Why the pixel alone is not enough

The Meta Pixel runs in the visitor's browser. Ad blockers, privacy settings, slow connections and people closing the tab can all stop it from firing. Each missed event is a conversion Meta never learns about, so your ads optimise on less data and your reports undercount.

The Conversions API sends the same events from your server, which the visitor's browser cannot block.

How deduplication works

If you send an event from the pixel and from the server, Meta needs to know they are the same event. It matches them on two fields: the event name and the event_id. Send both copies with the same pair and Meta keeps one.

The event_id must be created once, in the browser when the moment happens, and passed to the server. Making a new id on each side is the most common mistake, and it makes Meta count every conversion twice.

Browser:  fbq('track', 'Lead', {}, { eventID: 'lead-7f3a' })
Server:   { event_name: 'Lead', event_id: 'lead-7f3a', ... }

What to send with each server event

Meta matches server events to people using customer information. The more you send, hashed where Meta asks, the higher your Event Match Quality in Events Manager.

  • fbc: The click id from the ad, from the _fbc cookie or the fbclid in the landing URL.
  • fbp: The browser id from the _fbp cookie.
  • Email and phone: Normalised and SHA-256 hashed.
  • IP address and user agent: From the visitor's request, not hashed.
  • external_id: Your own id for the visitor, hashed.
  • event_source_url: The page the event happened on.

Set it up step by step

  1. 1In Meta Events Manager, open your dataset (pixel).
  2. 2Go to Settings, then Conversions API, and generate an access token.
  3. 3Keep the token on your server only. Never put it in page code.
  4. 4Create an event_id in the browser for each event and fire the pixel with it.
  5. 5Send the same event from your server with the same event_id and the customer information above.
  6. 6Use Test Events in Events Manager to check both copies arrive and are marked as deduplicated.

Common mistakes

  • Different event ids on each side: Meta cannot match them and counts both.
  • Firing on the thank-you page: Refreshes and shared links fire it again. Fire on the action itself.
  • No fbc on server events: Without the click id, Meta struggles to tie the event to the ad.
  • Token in the browser: Anyone could send fake events to your dataset.

The no-code way

Unfunnel does all of this for every funnel. Paste a pixel id and an access token, and each step, lead, booking and qualified ending is sent from the browser and the server with one shared event id. The click id is saved to a first-party cookie on landing, and the token is encrypted and never shown again. The Conversions API is on Launch and up.

Build it without code: tracking, ad tags and booking built in. Free to start.

Start for free

Questions

Do I still need the pixel if I use the Conversions API?

Meta recommends using both. The pixel catches browser signals the server does not see, and the server catches what the pixel misses.

What is a good Event Match Quality score?

Higher is better. Sending fbc, fbp, hashed email and phone, IP and user agent with every server event is the usual way to raise it.

Does the Conversions API need a developer?

On a custom site, usually. In a funnel builder that has it built in, you paste a token.

Turn ad clicks into leads you can trace.

Start for free

Start free, no card needed

Paid plans start with a 7-day trial

Start for free