← All Guides

Meta Conversions API Setup in 2026: One-Click, Gateway or Server-Side GTM, With Deduplication That Actually Works

Every current way to send Meta Conversions API events, from Meta's free one-click setup to full server-side Google Tag Manager, with the event ID deduplication, user data and consent handling that make server events count once and match well.

Atiqul Islam
Written by Atiqul Islam

Tracking & analytics specialist. 278+ GTM, GA4 and server-side tracking projects for clients in the US, UK and Australia.

Rather not do this yourself? I set this up for clients every week. Free 15-minute audit, no obligation.

Book a Free Audit

The Conversions API is how Meta receives events from your server instead of from the visitor's browser. It exists because browsers lose events: iOS tracking protection, ad blockers, consent declines, and tabs closed before the pixel fires. In accounts I audit, a correctly deduplicated Conversions API setup typically adds a meaningful share of purchases and leads that the pixel alone never reported, and it is the only way to tell Meta about events that happen off the website, such as a lead becoming a customer.

This guide covers the options available in 2026, when to use each, and the full server-side GTM setup with deduplication, user data and consent.

The Four Ways to Send Conversions API Events

Option Cost Control Best for
Meta one-click setup, launched April 2026 Free None Small sites with a working pixel and nothing server-side
Conversions API Gateway Cloud hosting cost Low Sites that want server events without a tag manager
Platform integrations such as Shopify's Meta channel Usually free Low Stores happy with the platform's default events
Server-side Google Tag Manager Hosting from about $20 a month Full Anyone who also runs GA4 and Google Ads server-side, or needs CRM events

My default for clients is server-side GTM, because the same container also carries GA4 and Google Ads, and because CRM events such as qualified leads need a place to arrive.

Option 1: Meta's One-Click Setup

In Events Manager, open your dataset, choose Settings, then the Conversions API section, and look for the setup option labelled Set up with Meta. It takes a click, costs nothing and mirrors your browser pixel events server-side with automatic deduplication.

Turn it on if you have nothing else. Turn it off before switching to server-side GTM, or you will send three copies of every event.

Option 2 and 3: Gateway and Platform Integrations

The Gateway deploys a Meta-managed instance in your cloud account that relays browser events server-side. Platform integrations such as Shopify's Facebook and Instagram channel include the Conversions API for the platform's standard events. Both are reasonable if you never intend to run server-side GTM. Neither can send events from your CRM.

Option 4: Server-Side GTM, Step by Step

Step 1: A server container

Create a server container in Tag Manager and host it on a subdomain of your site such as sgtm.yourdomain.com. Google Cloud Run, Stape, Addingwell and similar providers all work; the Server-Side Tracking guide on this site compares them. Point your web container's GA4 and Google tag transport to the server URL so browser events flow through it.

Step 2: Access token and test code

In Events Manager, open the dataset Settings, scroll to Conversions API, and generate an access token under Set up manually. Copy it. In the Test Events tab, note the test event code for verification.

Step 3: Event IDs in the browser

Every pixel event you plan to mirror needs an event_id. Push it in the dataLayer with the event, and use it in both the browser pixel tag and the server tag. For purchases the transaction ID is ideal. For other events generate one:

<script>
(function () {
  function uuid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
      var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8);
      return v.toString(16);
    });
  }
  window.dataLayer = window.dataLayer || [];
  window.dataLayer.push({ event: 'event_id_ready', event_id: uuid() });
})();
</script>

Better: generate the ID at the moment of the conversion and include it in the same push as the event, for example form_submit_success with event_id set to form_id + '-' + Date.now().

Step 4: Send events to the server container

If your GA4 tags already route through the server container, the GA4 client there receives every event with its parameters, including event_id, user_email and so on, and server tags can read them. This is the simplest transport: one browser request feeds GA4, Google Ads and Meta on the server.

Step 5: The Meta Conversions API tag on the server

Add the Facebook Conversions API tag template to the server container from the Community Template Gallery. Configure:

Trigger it on the events you chose.

Step 6: Cookies that improve matching

The _fbp cookie identifies the browser; the _fbc cookie carries the click ID from the ad. The server template can set and refresh both as first-party HTTP cookies, which survive longer than browser-set cookies on Safari. Enable that option in the template. Where a visitor arrives with fbclid in the URL and no _fbc cookie, create it in the format fb.1.<timestamp>.<fbclid>.

Step 7: Consent

Pass the consent state from the browser to the server. In the web container, add the consent state as event parameters or rely on Consent Mode signals forwarded by the GA4 client. In the server container, add a trigger condition so the Meta tag only fires, or only includes user data, when advertising consent is granted. Server-side does not remove the need for permission.

Step 8: CRM events the browser never sees

For a qualified lead, a booked appointment confirmed by staff, or a closed deal, send a webhook from your CRM to the server container, parse it with a Client, and fire the Conversions API tag with the hashed email, an event_id built from the CRM record ID, and action_source set to the appropriate value such as system_generated or crm. The HubSpot guide on this site shows the full flow.

Testing

  1. Browser: GTM Preview. Confirm each pixel event fires once with an event_id.
  2. Server: open the server container Preview. Confirm the incoming event, the Meta tag firing, and the outgoing request body with event_id, user_data and custom_data.
  3. Events Manager, Test Events: with the test code set, each conversion should appear twice, once from Browser and once from Server, marked as deduplicated.
  4. Remove the test event code and publish both containers.
  5. Next day, Events Manager Diagnostics and the dataset Overview should show server events with a healthy match quality and no duplicate warnings.

Common Problems

Outcome

Meta receives every meaningful event once, from the browser when it can and from the server always, with the identifiers needed to match it to a person. Campaign optimisation improves because the algorithm finally sees the full picture, and your reported purchases stop drifting from your real ones.

Frequently Asked Questions

Is Meta's free one-click Conversions API enough?

For a small site with a correct pixel and no server-side setup, it is a real improvement for zero cost: it mirrors browser pixel events server-side and deduplicates them automatically. It cannot send events the browser never fired, cannot add CRM data such as qualified leads, and gives you no control over parameters. Use it as the floor, not the ceiling.

What is the difference between the Conversions API and server-side GTM?

The Conversions API is Meta's endpoint for receiving events from a server. Server-side GTM is one way to send to it, alongside Meta's one-click option, the Conversions API Gateway, platform integrations and custom code. Server-side GTM is the option that also handles GA4, Google Ads and other destinations from the same infrastructure.

How does deduplication work?

You send the same event from the browser pixel and from the server with the same event_name and the same event_id. Meta keeps one. If the IDs differ or one side is missing the ID, you will count the event twice.

Does the Conversions API bypass consent?

No. A hashed email is still personal data. Pass the visitor's consent state to the server and only send user data when advertising consent was granted. Server-side setups reduce technical loss from blockers, not legal obligations.

Which events should go through the Conversions API?

At minimum the events you optimise campaigns for: Purchase, Lead, CompleteRegistration, StartTrial. Mirroring PageView and ViewContent is useful for audiences and match quality but adds volume. Add CRM stage events such as qualified lead or closed deal only through the API, since the browser never sees them.

Want This Done Right the First Time?

Book a free 15-minute audit call. I'll review your setup, show you what is broken, and tell you exactly what it takes to fix it.

Chat Now