---
title: "Set up Meta Pixel"
description: "Connect a Meta Pixel so Facebook and Instagram ads can optimise on completions."
slug: "en/customs/tracking/meta-pixel"
url: "https://docs.custom.one/en/customs/tracking/meta-pixel/"
capability: "tracking"
published_at: "2026-08-27T11:46:50.532Z"
---
Connect the Meta Pixel and your Facebook and Instagram campaigns can optimise for
people who finish your quiz, rather than people who click your ad. Add an access
token as well and we send those conversions from our servers too, so you keep the
ones a browser pixel loses.

## Add your Pixel ID

- **Step 1:** Open Meta Events Manager and copy your Pixel ID — a long number.
- **Step 2:** Open your funnel's **Tracking** page.
- **Step 3:** Click **Add integration**, choose **Meta Pixel**, paste the ID and **Save**.

That's enough to start tracking. Your ads will work fine with just the Pixel ID.

## Add server-side tracking

Browser pixels lose 20–40% of conversions to ad blockers and iOS privacy settings.
An access token lets us send the same events from our backend straight to Meta, so
those conversions still reach your campaigns.

- **Step 1:** In Meta Events Manager, pick your pixel.
- **Step 2:** Click **Settings**, then scroll to **Conversions API**.
- **Step 3:** Click **Generate Access Token** and copy it.
- **Step 4:** On your custom's **Tracking** tab, click **Connect** in the row's
  **Server-side** column, and paste it there.

:::caution[Both values are required]
Server-side events only fire when the Pixel ID **and** the access token are both
set. A Pixel ID on its own is client-side only — the **Server-side** column on the
Tracking page will read **Connect** instead of **Manage**.
:::

Takes about two minutes, and it is the highest-ROI change on this page if you
spend more than a few hundred a month on ads.

## What we send

| When it happens | Meta event |
|---|---|
| Contact details are submitted | `Lead` |
| The quiz is completed | `CompleteRegistration` |
| The result page is opened for the first time | `ViewResult` |
| A CTA button is clicked | `InitiateCheckout` |

`ViewResult` is a custom event rather than Meta's standard `ViewContent`, because
the result page comes *after* the conversion rather than at the top of the funnel.

:::note[You will not see double conversions]
When both the browser pixel and the server send the same event, each one carries
the same event ID. Meta matches them and counts one conversion, not two.
:::

## What we do not send

Leads that arrive from an import — a CSV, a connected source, or the public API —
fire no Meta events at all, even when tracking is fully configured.

That is deliberate. An imported lead has no ad click behind it, so sending a
conversion for it would credit a campaign that never earned it and distort the
attribution for the ones that did.

## Your customers' data

Personal details are hashed with SHA-256 before they leave our servers: email,
phone, first and last name, and country. Meta never receives them in readable
form. IP address and browser user agent are sent unhashed, because Meta requires
both to match a conversion to a click.

If Meta is slow or unreachable, the send is abandoned after ten seconds and the
lead is saved regardless. Tracking never blocks a submission.