Help Center / Integrations / Site Scripts

All about: Conversion Events and Thank you page Pixel

Conversion Events, Thank You Page Pixels, and the Conversions API

Conversion Events, Thank You Page Pixels, and the Conversions API

Quick navigation: How conversions are tracked · Metadata site script · Facebook & Instagram · LinkedIn · Google Ads · Microsoft Ads · Reddit · Embedding pixels with a tag manager · Good to know

How conversions are tracked

Three separate mechanisms are involved when someone sees an ad, clicks, and fills in a form on your landing page. They answer different questions and don't replace each other.

Mechanism What it records Where you see it
Metadata site script The lead itself — the form fields (email, name, company…) plus which campaign and ad drove it Metadata → Converted Leads, then enrichment, MA/CRM push, reporting
Channel conversion pixel / tag (Facebook Pixel, LinkedIn Insight Tag, Google tag, Microsoft UET, Reddit Pixel) on your thank-you page An anonymous "conversion happened" signal sent from the browser to the channel The channel's own reporting; used by the channel to optimize delivery
Conversions API (CAPI) — Facebook/Instagram, LinkedIn (beta) The same conversion signal, sent server-to-server by Metadata when a lead is captured or progresses in your MA/CRM, matched on hashed email The channel's Events Manager / conversion reporting; more resilient than browser pixels

The channel pixel does not carry the lead's email — it only tells the channel a conversion happened. The Metadata site script does capture the email, which is why Converted Leads can be enriched and pushed downstream. Metadata does not import the channel's pixel conversion counts as leads.

The Metadata site script (Converted Leads)

The site script is installed once, on every page of your site (or at least every landing page). Copy it from Integrations → Site Script, or let Metadata install it into your Google Tag Manager container. It loads https://cdn.metadata.io/site-script.js and initializes with your account ID.

How a lead is captured:

  1. Every ad Metadata launches carries a metadata_cid (and md_nid on Channel First campaigns) parameter in its landing page URL. Keep those parameters intact — redirects, vanity URLs, or consent tools that strip them break attribution.
  2. When a visitor submits a form on the page, the script sends the form fields plus the campaign identifiers to Metadata.
  3. Metadata creates the Converted Lead and attributes it to the campaign and ad. Leads that arrive without a resolvable campaign are kept under Unmapped Leads rather than discarded.

The script hooks native HTML forms and HubSpot, Marketo, Drift and Qualified embeds; forms inside a cross-origin iframe need to post their submission to the parent page. Use Submit a Test Lead and Verify Installation on the offer to confirm the page is capturing before you launch. Details: Metadata Site Script installation.

Everything below is about the channel-side conversion events, which are separate from this.

Facebook & Instagram (Meta)

Thank-you page pixel

Open Integrations → Meta settings → Pixel Parameters ("Thank you Page Pixel and Event"). Metadata lists the pixels on your connected ad account; choose one and set the Conversion Event (default Lead; any Meta standard event or a custom event name is accepted). Click Copy Script and place it on your thank-you page — the script is your own Meta pixel snippet with the event set to what you chose.

At launch, Landing Page campaigns with a website-conversion goal are created on Meta with your pixel and this event as the ad set's conversion event, so Meta optimizes delivery towards it. Changes to the pixel or event apply to newly launched campaigns only; if you change the pixel you also need to update the script on your thank-you page.

Per-campaign override. When the campaign's Meta performance goal is a website-conversion goal, the campaign settings show a Conversion Event picker where you can choose a different standard event or one of your Meta Custom Conversions for that campaign.

Check it fires. Meta Events Manager → your pixel → Overview shows the events received; the Lead event (or the one you configured) should appear after a test submission on the thank-you page. If it doesn't, see Verify Domain and create Lead Facebook Event.

  • Lead — used by default by Metadata for Landing Page campaigns.
  • PageView — fires on every page for retargeting; usually already installed site-wide (Meta instructions).

Meta no longer requires Aggregated Event Measurement configuration or event prioritization (retired in 2025); all events are processed automatically. Verifying your domain in Meta Business settings is still recommended.

Conversions API (CAPI)

CAPI sends conversion events from Metadata's servers directly to Meta, so they don't depend on the visitor's browser or cookie consent. Enable it under Integrations → Meta settings → Conversion API:

  1. The pixel is inherited from Pixel Parameters. Optionally add a Dataset ID to route events to an offline conversion dataset, and a Test Event Code from Meta Events Manager → Test Events while you validate.
  2. Switch on Enable Conversion API and save. Authentication uses your existing Meta connection — no extra token is needed.
  3. Click Apply Defaults to create the event mappings, then adjust them if needed:
Metadata event Default Meta event Fires when
Lead created Lead A Converted Lead is captured — landing-page form submit, or a LinkedIn / Meta lead-gen form lead
Pushed to marketing automation CompleteRegistration The lead is successfully pushed to Marketo / HubSpot
Opportunity stage changed InitiateCheckout (with value) An opportunity linked to the lead changes stage in your CRM
Closed won Purchase (with value) The opportunity closes as won

Each row can be switched off, mapped to a different standard or custom event, and set to forward the deal value. Send Test Event posts a test Lead so you can confirm it appears in Events Manager → Test Events.

Events are matched to Meta users on hashed email, phone, name, IP address and user agent, deduplicated with a unique event ID, and shown in Events Manager as server events. Because CAPI events describe the same conversion as your thank-you page pixel, keep the pixel event name and the CAPI mapping consistent (Lead by default) so Meta can deduplicate browser and server events.

LinkedIn

Insight Tag conversion (automatic)

LinkedIn tracks website conversions with the Insight Tag, which should be installed on every page of your site. Metadata does not add extra script for LinkedIn; Integrations → LinkedIn settings → Pixel Parameters simply lets you copy the Insight Tag snippet.

When you launch a Landing Page campaign, Metadata creates a conversion rule on your LinkedIn ad account and attaches it to the campaign:

  • Name: Conversion for <landing page name>; type: Lead; LinkedIn's default attribution windows.
  • Rule: URL starts with the offer's Thank You Page URL.
  • One rule per offer per ad account — every campaign that uses the same offer reuses it.

You can see it in LinkedIn Campaign Manager on the launched campaign under Conversion tracking. Lead Gen Form campaigns don't get a website conversion (the lead is captured natively).

Choosing your own conversion. On Precision (1x1x1) campaigns with a Landing Page offer, the channel's Advanced Settings show LinkedIn Conversion Action, a multi-select of the enabled conversions on your ad account. When set, Metadata attaches those instead of creating the automatic rule.

If your thank-you URL is the same as the landing page URL, the automatic rule fires on every landing page visit and LinkedIn over-counts conversions. Use a dedicated thank-you page, or pick a Conversion Action you configured in LinkedIn.

Conversions API (beta)

LinkedIn CAPI sends conversions server-side, matched on hashed email. It's available in beta — ask your CSM to enable it. Once enabled, LinkedIn settings show a Conversion API tab where you enable it, map Metadata events (lead created → Lead, pushed to MA → Sign Up, opportunity stage changed / closed won → Purchase) to LinkedIn conversion rules, create rules inline, and send a test event. Rules created here use a 90-day click / 30-day view window, last-touch attribution, and apply to all campaigns.

Google Ads conversion tracking is configured on your Google Ads account, not per campaign. Metadata can create the conversion action for you and hand you the tag:

  1. Integrations → Google Ads settings → Pixel ParametersSetup Conversion Action: choose the name, category, primary/secondary, value, counting method, click/view-through windows and attribution model. Metadata creates the conversion action on your account.
  2. Click Copy Script — Metadata returns Google's tag and event snippet for that conversion action. Install the Google tag on all pages and the event snippet on the thank-you page (or via Google Tag Manager, below).

If you already track conversions in Google Ads, keep using yours: campaigns launched from Metadata use the account's default conversion goals. Performance Max campaigns can't launch until the account has at least one active conversion action.

Checklist:

Google Tag Manager setup: create a Google Ads Conversion Tracking tag with the Conversion ID and Label; trigger it on form submission or on the thank-you page URL; add a Conversion Linker tag; publish. Use the "Troubleshoot" link on the Conversions summary page to debug a tag that isn't recording. Metadata does not upload offline or enhanced conversions to Google Ads.

Microsoft Ads

Metadata does not create or attach Microsoft conversion goals; configure them in Microsoft Advertising:

  1. Create the UET tag and install it on all pages.
  2. Conversion goals → create a goal (for example Lead submission): track as Website, goal type Submit lead form, Destination URL = your thank-you page URL. The URL must match exactly where you want the conversion recorded.

If the UET tag is already on all pages, that's the whole setup.

Reddit

Reddit requires a conversion pixel on every ad group. Install the Reddit Pixel from Reddit Ads → Events Manager on all pages, with a conversion event (for example Lead or SignUp) on the thank-you page. In Metadata, the Reddit channel settings of a campaign show a Conversion Pixel picker listing the pixels on your ad account; if you don't pick one, Metadata uses the account's first pixel, and if the account has none the launch fails with "Reddit requires a conversion pixel to launch a campaign". Metadata does not provide a Reddit script and does not send Reddit conversions server-side.

Embedding pixels with a tag manager

Using Google Tag Manager (or any tag manager) to place the channel scripts on your thank-you page:

  1. Log into Tag Manager, open your account and container.
  2. Triggers → New → Form Submission (or Page View restricted to the thank-you page URL).
  3. For Form Submission, choose Some Forms and identify the form with a built-in variable (Form ID, Form URL, …).
  4. Create the tag (Custom HTML with the copied script, or the channel's template) and attach the trigger.
  5. Publish.

The tag must fire on form submission or on the thank-you page — a page-view trigger on the form page itself records a conversion for every visitor.

Good to know

  • Channel conversion events carry no email or identity — they signal that a conversion happened. Only the Metadata site script captures the lead itself.
  • A visitor refreshing the thank-you page fires the browser pixel again; Metadata counts the same email once per campaign within 24 hours, and CAPI events carry a unique ID for deduplication.
  • Metadata's Converted Leads come from landing-page form submits and lead-gen forms; channel-reported conversions are visible in the channel and are not imported as leads.
  • Server-side matching (CAPI) uses hashed contact data, not ad click IDs — the more complete the lead's email, name and company, the better the match rate.
  • No thank-you page? You can set the thank-you URL equal to the landing page URL, but for LinkedIn the automatic conversion will then count every page visit — choose a LinkedIn Conversion Action or a real thank-you page instead.