The Meta Conversions API (Facebook Conversions API) sends conversion events from your server to Meta, alongside the browser Pixel, so purchases and leads still reach Meta when the browser misses them. Shopify stores can turn it on in the Facebook & Instagram channel, any site can try Meta’s built-in option in Events Manager, and server-side GTM gives you full control. Whichever you choose, every event needs a shared event ID so Meta doesn’t count it twice.

Do You Need the Conversions API If Your Pixel Already Tracks Purchases?

Yes, in most cases. Meta’s deduplication guide says that for the best ad performance it recommends implementing the Conversions API alongside the Meta Pixel. The Pixel runs in the visitor’s browser, where ad blockers, privacy settings and slow pages can stop events; the server copy fills those gaps.

Running both is called a redundant setup, and it only works if Meta can tell that a browser Purchase and a server Purchase are the same order. That’s the main thing most broken setups get wrong. If your Pixel itself is the problem, start with our Meta Pixel setup guide or fixing a Pixel that isn’t tracking purchases, then come back here.

What You Need Before You Start

Which Setup Should You Use: Shopify, Meta’s Built-In Option, Gateway or Server GTM?

Use your platform’s own integration when one exists, Meta’s built-in option for simple sites, and server-side GTM when you need control over every parameter or already run a server container. The Conversions API Gateway sits in between.

OptionBest forTrade-off
Shopify Facebook & Instagram channelShopify storesLittle control over parameters
Conversions API with Meta (Events Manager)Simple sites with a PixelWebsite events only
Conversions API GatewayMarketers without developersYou pay for cloud hosting
Server-side GTMCustom sites, multi-platform trackingMost setup and upkeep
WooCommerce pluginWooCommerce storesDepends on plugin quality

Meta’s Gateway documentation describes the Gateway as a no-code, self-serve option that runs in your own cloud account on AWS or Google Cloud, so its cost is the hosting or partner fees you pay. The same page notes that if you only need to send website events, Conversions API with Meta needs no hosting and is turned on in Events Manager.

How Do You Set Up the Meta Conversions API on Shopify?

Connect your store through the Facebook & Instagram sales channel and set customer data sharing to Enhanced or Maximum. Shopify’s data sharing page explains that Standard uses the Pixel only, while Enhanced and Maximum add the Conversions API.

Step 1: Choose the Data Sharing Level

In Shopify admin, go to Sales channels > Facebook & Instagram, click Settings, then Data sharing settings. Turn on customer data sharing, choose Maximum (or Enhanced) under Choose level, and connect your Pixel if none is connected.

Step 2: Remove Duplicate Pixels

Shopify’s integration manages the Pixel and the server events together. If you also fire a Meta Pixel from GTM, a theme snippet or another app, you’ll send extra browser events that the server copy can’t be matched to. Keep one source per event. Shopify also notes that sharing data is your choice and that your privacy policy should explain it.

How Do You Set Up the Conversions API on WooCommerce?

WooCommerce has no built-in Conversions API, so you add it with Meta’s official WooCommerce plugin, a tracking plugin that supports server events, Meta’s built-in option in Events Manager, or server-side GTM.

  • Plugin route: connect your Meta Business account, Pixel and catalog in the plugin’s setup, then look for the server-side or Conversions API setting and confirm it’s on. Only run one plugin that fires the Meta Pixel.
  • Server GTM route: best if you already use GTM with a WooCommerce data layer (for example from GTM4WP) and want Meta, GA4 and other platforms fed from one place. Follow the server GTM steps below.
  • Either way: purchases should use the order ID as the event ID, so the browser Purchase on the thank-you page and the server Purchase share the same key.

How Do You Set Up the Conversions API With Server-Side GTM?

Send events from your web GTM container to a server container through GA4 tags, then forward them to Meta with the Conversions API Tag template that Meta maintains. Meta’s server-side GTM guide lays out this exact path. If you don’t have a server container yet, set one up first with our server-side tagging guide.

Step 1: Send GA4 Events to Your Server Container

In the web container, point your Google tag at the server container (Meta’s guide uses the transport_url field or the send-to-server-container setting). Meta’s guide says to set first_party_collection to true, which is required to pass user data, and to add an event_id parameter to each GA4 event tag you want forwarded.

Google tag configuration settings
transport_url: https://sgtm.example.com
first_party_collection: true

Step 2: Add Meta’s Conversions API Tag in the Server Container

In the server container’s Template Gallery, add the “Conversions API Tag” by facebookincubator. Enter your Pixel ID and a Conversions API access token, set the action source to website, and trigger it on the events the GA4 client receives. Following a clear naming convention keeps both containers easy to audit:

Tag: Meta CAPI - Purchase - Tag
Trigger: Purchase
Variable: Event ID

Meta’s guide also mentions a test event code for checking events; use it only while testing and remove it before you publish.

How Do You Fix Event Deduplication Between the Pixel and the Conversions API?

Give each event one unique ID and send that same ID with both the browser and the server event. Meta’s deduplication guide says the Pixel’s eventID must match the Conversions API’s event_id, and the event names must match too (Purchase and Purchase, not Purchase and purchase).

In practice, generate the ID once on the page, push it into the data layer, and use it in both tags. For purchases, the order ID works well because it’s already unique:

dataLayer.push({
event: 'purchase',
event_id: 'ORDER-1001',
ecommerce: { value: 120.00, currency: 'USD' }
});

fbq('track', 'Purchase', {value: 120.00, currency: 'USD'}, {eventID: 'ORDER-1001'});

Two details from Meta’s guide matter here. Events are only deduplicated if they arrive within 48 hours of the first event with that ID. And the fallback method, matching on fbp or external_id instead of an event ID, generally works only when the browser event arrives first, so treat it as a backup rather than your main key.

Send customer details only when you have them and the visitor has agreed where consent is required, and hash the personal fields before they leave your server. Meta’s parameters page lists email, phone, first and last name, city, state, zip and country as fields that must be hashed, and recommends hashing external_id.

ParameterHash it?
em (email), ph (phone)Yes
fn, ln, ct, st, zp, countryYes
external_id (your customer ID)Recommended
client_ip_address, client_user_agentNo
fbc, fbp (Meta cookies)No

For website events, Meta also requires client_user_agent, action_source and event_source_url. Platform integrations usually take care of hashing, but a custom server integration has to do it itself, so check your tool’s documentation. Your consent banner should control the server tag as well as the Pixel, so a visitor who declines isn’t tracked through the back door. If you also manage Google consent, our Consent Mode v2 guide shows how to wire the banner into GTM.

How Can You Test Whether Meta Is Receiving Browser and Server Events Correctly?

Check Events Manager after a test purchase or lead. Meta’s verification guide says events should appear on the Pixel’s Overview page within 20 minutes, where the Connection Method shows whether each event arrived from the browser, the server or both.

  1. Place a test order or submit a test lead with a real email address.
  2. In Events Manager, open the Pixel’s Overview and confirm the event shows both Browser and Server connection methods.
  3. Open the event’s details and check the Event Deduplication tab: a low deduplication rate means IDs don’t match.
  4. Check Event Match Quality, which Meta scores from 1 to 10; aim for 6.0 or higher.
  5. Compare a few days of Purchase counts with your store’s orders to spot double counting.
ProblemLikely causeFix
Purchases counted twiceEvent IDs don’t match or are missingSend the same event_id from both sources
Low deduplication rateID only sent from one sourceAdd eventID to the Pixel and event_id to the server
Only server events showPixel blocked or removedCheck the Pixel loads on every page
Event Match Quality below 6Few customer fields sentAdd hashed email, phone, fbp and fbc
Missing user agent or IP warningServer not forwarding browser detailsPass client_user_agent and client_ip_address unhashed
No server events at allWrong Pixel ID or expired tokenRecheck the ID and regenerate the token
Test events still appearingTest event code left in the tagRemove it and republish

What Does a Good Setup Look Like by Business Type?

  • Shopify fashion or beauty store: Facebook & Instagram channel on Maximum, no extra Pixel from apps or GTM, and a weekly check of Purchase counts against Shopify orders.
  • WooCommerce store selling supplements or parts: one Meta plugin or server GTM, order ID as the purchase event ID, and hashed email from checkout.
  • Lead generation site (clinic, law firm, home services): Lead event fired on the form’s success state, server copy through server GTM or Meta’s built-in option, and email and phone sent hashed to lift match quality. Matching your GA4 ecommerce setup to the same events keeps reports comparable; see our Shopify GA4 and GTM guide for the Shopify side.

If you’d rather have the Pixel and Conversions API set up and checked for you, our Meta Ads management runs month-to-month with no lock-in, and our Tracking & Analytics service can handle the tracking alone. Both start with a free audit.