On this page
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.
| Option | Best for | Trade-off |
| Shopify Facebook & Instagram channel | Shopify stores | Little control over parameters |
| Conversions API with Meta (Events Manager) | Simple sites with a Pixel | Website events only |
| Conversions API Gateway | Marketers without developers | You pay for cloud hosting |
| Server-side GTM | Custom sites, multi-platform tracking | Most setup and upkeep |
| WooCommerce plugin | WooCommerce stores | Depends 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: trueStep 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 IDMeta’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.
How Do You Pass Hashed Email, Phone and External ID Without Breaking Consent Rules?
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.
| Parameter | Hash it? |
| em (email), ph (phone) | Yes |
| fn, ln, ct, st, zp, country | Yes |
| external_id (your customer ID) | Recommended |
| client_ip_address, client_user_agent | No |
| 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.
- Place a test order or submit a test lead with a real email address.
- In Events Manager, open the Pixel’s Overview and confirm the event shows both Browser and Server connection methods.
- Open the event’s details and check the Event Deduplication tab: a low deduplication rate means IDs don’t match.
- Check Event Match Quality, which Meta scores from 1 to 10; aim for 6.0 or higher.
- Compare a few days of Purchase counts with your store’s orders to spot double counting.
| Problem | Likely cause | Fix |
| Purchases counted twice | Event IDs don’t match or are missing | Send the same event_id from both sources |
| Low deduplication rate | ID only sent from one source | Add eventID to the Pixel and event_id to the server |
| Only server events show | Pixel blocked or removed | Check the Pixel loads on every page |
| Event Match Quality below 6 | Few customer fields sent | Add hashed email, phone, fbp and fbc |
| Missing user agent or IP warning | Server not forwarding browser details | Pass client_user_agent and client_ip_address unhashed |
| No server events at all | Wrong Pixel ID or expired token | Recheck the ID and regenerate the token |
| Test events still appearing | Test event code left in the tag | Remove 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.
FAQ
Frequently asked questions
Will Running Both the Pixel and the Conversions API Double Count My Conversions?
Only if the two events can't be matched. When the browser and server versions of an event share the same event name and event ID, Meta keeps one and discards the other, as long as they arrive within 48 hours of each other. Double counting almost always means the IDs are missing, different, or sent from only one side.
Why Is My Event Match Quality Stuck Below 6 Even Though the Conversions API Is Active?
Match quality depends on how many customer details come with each event, not on whether the server connection works. Sending hashed email and phone, the fbp and fbc cookie values, and the visitor's IP address and user agent usually raises it. Events from visitors who haven't logged in or entered details will always match less well.
Why Does Ads Manager Show More Purchases Than My Store?
Meta counts conversions it attributes to ads within your attribution setting, including some it models, so its numbers rarely match store orders exactly. A big gap usually points to duplicate events, a Pixel firing twice, or the Purchase event firing on page reloads. Check the deduplication tab first, then compare event counts with orders for the same days.
Is the Conversions API Gateway Worth the Hosting Cost?
It can be for businesses without developers that want a server setup without building one, since it needs no coding. You pay for the cloud hosting it runs on. If you only need website events and want no hosting at all, Meta's built-in Conversions API option in Events Manager is simpler, and if you already run server-side GTM, adding Meta's tag there avoids a second server.
What's the Easiest Way to Set Up the Conversions API Without a Developer?
On Shopify, turning on Enhanced or Maximum data sharing in the Facebook & Instagram channel is the easiest route. On other platforms, start with Meta's built-in option in Events Manager or your platform's official Meta integration. Server-side GTM gives the most control but usually needs someone comfortable with tag management.
How Should Lead Forms That Redirect to a Thank-You Page Send Server Events?
Fire the Lead event when the form succeeds, either on the thank-you page or on the form's success message, and send the server copy with the same event ID. If the form tool sends submissions to a CRM, a webhook from the form or CRM to your server container is a reliable way to send the server event, as long as the browser side passes the same ID.
6 sources & references
- Meta for Developers Handling Duplicate Pixel and Conversions API Events developers.facebook.com
- Meta for Developers Conversions API Gateway developers.facebook.com
- Meta for Developers Conversions API for Server-Side Google Tag Manager (GTM) developers.secure.facebook.com
- Meta for Developers Parameters (Conversions API) developers.facebook.com
- Meta for Developers Verifying Your Setup developers.facebook.com
- Shopify Help Center Facebook data sharing help.shopify.com
Official pages we checked when writing this article.






