---
title: "How to set up the Meta Conversions API (with or without a developer)"
description: "How to set up the Meta Conversions API: what you need, what it costs, options with or without a developer, and how to test and fix missing or duplicate events."
updated: "2026-10-05"
url: "https://ispixelworking.com/guides/general.server_side_not_detected/generic"
---

# How to set up the Meta Conversions API (with or without a developer)

Fix guide · Any website · medium · about 60 min · updated 2026-10-05


## What the Conversions API is and what it fixes

The Meta Pixel sends events from the visitor's browser. The **Conversions API** (CAPI, still often called the Facebook Conversions API) sends them from a server: yours, your shop platform's, or one run by a service. This is server-side tracking for Meta: the server sends each event to Meta's API endpoint for your pixel ID, authenticated with an access token. Meta links website events sent this way to your pixel and uses them like pixel events, for conversion tracking, Facebook ads optimization and reporting in Ads Manager and Events Manager. It recommends using both and sending the same key events through each, which it calls a redundant setup.

We report "No server-side tracking detected" when we see a Meta Pixel but no sign of server-side tracking. Server-to-server traffic is invisible from a browser, so this is not proof you have none. If you already send server events, go straight to "How to test and verify".

What the server copy helps with:

- **Events the browser loses.** Meta says Conversions API data is less affected than the pixel by browser loading errors, connectivity issues and ad blockers. A purchase your server reports when the order is created still reaches Meta if the visitor closed the tab before the thank-you page loaded.
- **Better matching.** Server events can carry customer details you already have, such as the (hashed) email from an order. Meta uses them to match events to people on its platforms, which helps it credit conversions to your ads and optimize delivery.

## What it does not fix

- **Consent.** Sending data from a server does not change which consent you need. Meta itself says the Conversions API is not designed to bypass privacy rules in Europe such as the ePrivacy Directive. Where your pixel waits for cookie consent, your server events need to respect the same choice, so check how your tool treats visitors who reject cookies. We report technical behaviour only and cannot tell you what the law requires.
- **A broken pixel setup.** Several routes below (Meta's Conversions API Gateway, its one-click option, most server-side Tag Manager setups) collect events in the browser and forward them from a server, and server events usually take the ad click ID from the `_fbc` cookie the pixel writes. If the pixel fires before consent, never fires after consent, runs twice or loses the click ID, the server copy inherits the problem. Fix those first: [fires before consent](https://ispixelworking.com/guides/meta.fires_before_consent/generic), [does not fire after consent](https://ispixelworking.com/guides/meta.not_firing_after_consent/generic), [duplicate events](https://ispixelworking.com/guides/meta.duplicate_pixel/generic), [click ID not stored](https://ispixelworking.com/guides/meta.fbc_not_set/generic).

## What you need before you start

- **Your pixel ID.** Meta asks you to use the same pixel for browser and server events. Events Manager lists it under data sources, sometimes as a dataset.
- **Access to the business portfolio that owns the pixel**, the business account you manage in Meta Business Suite (older guides call it Business Manager). Meta's guided setup asks for full control of the portfolio.
- **An access token**, if your own code or server-side Tag Manager sends the events. In Events Manager, open your pixel, go to **Settings** and, in the **Conversions API** section, click **Generate access token**. Only people with developer privileges for the business see that link. Meta says to keep the token somewhere safe: treat it like a password and keep it out of browser code.
- **An events plan.** List the events you will send: standard events such as `Purchase`, `Lead` or `InitiateCheckout`, or a custom event, which needs the same name on browser and server. Decide where each event's ID comes from and which customer details you can send. Meta's guided setup requires at least one customer information parameter.

## How much does the Conversions API cost?

Meta does not list a fee for the API itself. In its comparison of setup options, the Meta-enabled setup is free, commerce platform integrations such as Shopify and WooCommerce come "at no additional cost", and a direct integration costs your own development and maintenance. For the Gateway, Meta says cloud fees are the only cost. At the time of writing:

- **Free:** Meta's official Shopify, WooCommerce and WordPress integrations, and the Meta-enabled Conversions API.
- **From $10 a month** for the Conversions API Gateway: Stape hosts it for $10 a month per pixel. In your own cloud account, Meta quotes fees from $30 a month, depending on region and traffic.
- **From $0 a month** for server-side Google Tag Manager on Stape's free plan (up to 10,000 requests), with paid plans from $17 a month. On your own Google Cloud account, Google estimates about $45 a month per server and recommends at least two. Add the specialist's time.
- **Developer time** for a direct integration: Meta estimates 2 to 4 weeks for a new one, plus hosting and upkeep.

## Pick a setup route

If your platform has an official integration that supports the Conversions API, Meta recommends using it as the simplest option.

| Route | Fits | Cost | Developer needed |
|---|---|---|---|
| Facebook & Instagram app (Meta) | Shopify | Free | No |
| Meta for WooCommerce (Meta) | WooCommerce | Free | No |
| Meta Pixel for WordPress (Meta) | WordPress | Free | No |
| Meta-enabled Conversions API (Meta) | Any site with a working pixel | Free | No |
| Conversions API Gateway (Meta) | Any site with the pixel | Cloud fees | No |
| Stape | Any site | Free plan, then paid | No for Gateway hosting, usually for Tag Manager |
| Server-side Google Tag Manager | Any site | Cloud fees | Usually |
| Direct integration | Any site, also app and offline events | Developer time | Yes |

## Set it up without a developer

Meta says many Conversions API integrations do not require a developer.

**Shopify.** In the **Facebook & Instagram** sales channel, open **Settings**, then **Data sharing settings**, and turn on customer data sharing. Standard uses only the pixel; Enhanced and Maximum add the Conversions API. Remove any pixel pasted into your theme by hand, or events are counted twice.

**WooCommerce.** **Meta for WooCommerce** (formerly Facebook for WooCommerce). WooCommerce's documentation says the Conversions API is built in, needs no extra setting once connected, and browser and server events share a unique event ID. Keep it as your only pixel installation.

**WordPress.** **Meta Pixel for WordPress** installs the pixel and includes Conversions API support. After connecting it, check in Events Manager which events actually arrive from the server.

**Meta-enabled Conversions API.** Events Manager may offer this free, one-click option. It shares the events and parameters your pixel already sends through a server-side connection and deduplicates them automatically. It covers website events only, and only what a working pixel sends.

**Conversions API Gateway.** Meta's codeless option runs in a cloud account you own (Amazon Web Services or Google Cloud), receives events from your pixel and forwards them, adding event IDs automatically. Meta quotes setup in under 30 minutes with minimal help from IT or developers, and suggests it for advertisers who already use the pixel, spend more than $300 a month on campaigns optimizing for website events and have no commerce platform integration. It relies on the pixel, so it adds nothing where the pixel does not run. **Stape** can host the Gateway for you, so you skip the cloud account.

## Set it up with a developer

**Server-side Google Tag Manager.** A server container on your own cloud account or a host such as Stape, sending Meta events with Meta's **Conversions API Tag** from the template gallery. The tag needs your pixel ID and access token. A natural fit if you already use Tag Manager, but it needs a specialist.

**Direct integration.** Your backend sends events itself, for example a `Purchase` when payment is confirmed. It gives you the most control and, according to Meta, is currently the only route for app and physical store (offline) events.

1. In Events Manager, create personalized setup instructions: pick the events and parameters, then send them to your developer.
2. Generate an access token, as described above.
3. Send events in a POST request to `https://graph.facebook.com/{API_VERSION}/{PIXEL_ID}/events` with the token. Meta's **Payload Helper** shows how each payload should look.

A minimal website event:

```json
{
  "data": [{
    "event_name": "Purchase",
    "event_time": 1791158400,
    "event_id": "order-10482",
    "action_source": "website",
    "event_source_url": "https://example.com/thank-you",
    "user_data": {
      "em": ["SHA-256 hash of the normalized email"],
      "client_ip_address": "203.0.113.7",
      "client_user_agent": "Mozilla/5.0 ...",
      "fbp": "fb.1.1596403881668.1116446470",
      "fbc": "fb.1.1554763741205.AbCdEfGhIjKlMnOpQrStUvWxYz1234567890"
    },
    "custom_data": { "value": 49.90, "currency": "EUR" }
  }]
}
```

`event_time` is a Unix timestamp in seconds. One request can carry up to 1,000 events, but one invalid event gets the whole batch rejected, and so does an event more than 7 days old.

## Prevent duplicate events between the Pixel and CAPI

When the same action arrives from browser and server, Meta merges the two if the **event name** is the same (`Purchase` in both), the **event ID** is the same (`eventID` in the pixel call, `event_id` in the server event), and the second copy arrives within 48 hours of the first. For the purchase above, the thank-you page sends:

```js
fbq('track', 'Purchase', { value: 49.90, currency: 'EUR' }, { eventID: 'order-10482' });
```

Meta suggests order numbers or transaction IDs for purchases, and a random value (the same on both sides) for other events. Every action needs its own ID: a value reused across events makes Meta discard real events as duplicates. Meta can also deduplicate on `fbp` or `external_id`, but says this generally works only when the browser event arrives first. The integrations above set IDs for you; for your own code, see [Meta Pixel events have no event ID](https://ispixelworking.com/guides/meta.missing_event_id/generic). Keep one pixel installation and one server-side sender per pixel.

## Improve Event Match Quality

**Event Match Quality** is Meta's score from 0 to 10 for how well the customer information in your server events matches them to people on Meta. It covers standard and custom website events sent through the Conversions API, uses the last 48 hours of data, and comes with suggestions in Events Manager. With each website server event, send:

- `fbp` and `fbc`: the `_fbp` (browser ID) and `_fbc` (click ID) cookie values, unchanged and not hashed;
- `client_user_agent` (required for website events) and `client_ip_address`, both not hashed;
- `event_source_url` and `action_source: "website"` (both required for website events);
- customer information you have, normalized and hashed with SHA-256: email trimmed and in lower case, phone as digits with the country code, plus name, city, postcode and country. Your own customer ID goes in `external_id`, where Meta recommends hashing.

Meta rates email and click ID as the highest-priority parameters; phone, external ID, browser ID and country are medium; names, city and postcode are low. Sending a parameter does not guarantee a match: one detail alone may not be enough, and some buyers have no Meta account.

Meta's terms require you to have the right to share this data. Send events close to real time: Meta recommends within an hour for sales and leads campaigns.

## How to test and verify (send a test event)

1. **Test events.** In Events Manager, open your pixel (dataset) and go to **Test events**. For browser events, enter your URL and click **Open website**. For server events, add the `test_event_code` shown there to what you send, and remove it afterwards: Meta says these events are not dropped. With a plugin, place a real test action and check the overview; Meta says server events should appear within about 20 minutes. Test events also shows which events were processed and which were deduplicated: each action should count once.
2. **Event details.** Click **View details** on a key event such as `Purchase`:
   - **Event overview** shows browser and server counts. The total adds both up without deduplication, so it looks higher than reality. Meta says server events should match or exceed pixel events.
   - **Event coverage**: server events as a share of browser events. Meta suggests at least 75%.
   - **Event deduplication**: how many events carry a deduplication key, and how many arrive from both sources.
   - **Event matching**: the share of events that carry customer information, with recommendations.
   - **Data freshness**: how long events take to reach Meta.
3. **Diagnostics** lists problems Meta has detected, with steps to fix them.
4. **Re-run the check on IsPixelWorking.** If your setup leaves signs in the browser (a Conversions API tool, server-side Tag Manager, tracking requests to your own domain), the report changes to "Server-side tracking detected". A purely server-to-server setup can still show "not detected", because we cannot see it; Events Manager is the real test. Once we see such signs, Meta events without event IDs are reported as high severity.

## If events are missing or duplicated

**Server events are missing:**

- Check the payload with the Payload Helper and read the API response in your server log. One invalid event rejects its whole batch.
- Check that `event_time` is in seconds and no more than 7 days old, and that `action_source`, `event_source_url` and `client_user_agent` are present.
- Check that the pixel ID is the one your ads use, and that the access token was generated in that pixel's settings.
- With a platform integration, check its setting: on Shopify, Standard data sharing sends no server events.
- Allow time: Meta says reports can take 30 minutes or more. Visitors who reject cookies may be left out on purpose, if your tool follows their choice.

**Events are counted twice:**

- In Test events, both copies show as processed and neither as deduplicated: the event IDs or names differ.
- The **Event deduplication** tab shows few server events with `event_id`: your server or tool does not send it.
- The same browser event appears twice: a second pixel installation ([duplicate events](https://ispixelworking.com/guides/meta.duplicate_pixel/generic)). Also check for a second server-side sender.
- Server copies sent more than 48 hours after the browser copy are not deduplicated.

**Too few events after adding IDs:** the ID is probably reused. Each action needs its own value.

## Sources

- Meta Business Help Center, About Conversions API (less affected by browser loading errors, connectivity issues and ad blockers; website events linked to the pixel and used like pixel events; many integrations do not require a developer; not designed to bypass privacy rules such as the ePrivacy Directive): https://www.facebook.com/business/help/2041148702652965
- Meta Business Help Center, Prepare your business to use the Conversions API (setup can take hours, weeks or months): https://www.facebook.com/business/help/1295064530841207
- Meta Business Help Center, Best practices for Conversions API (redundant setup, 75% event coverage, real-time sharing): https://www.facebook.com/business/help/308855623839366
- Meta Business Help Center, Compare Conversions API setup options (Meta-enabled Conversions API free and automatically deduplicated, commerce platforms at no additional cost, direct integration in 2 to 4 weeks with development and maintenance costs, direct integration only for app and offline events): https://www.facebook.com/business/help/433493041367251
- Meta Business Help Center, About Conversions API Gateway (setup under 30 minutes, cloud fees the only cost and from $30 a month, AWS or Google Cloud, automatic deduplication, minimal developer support, when it fits, use your e-commerce partner if it supports the Conversions API): https://www.facebook.com/business/help/387152639648383
- Meta for Developers, Conversions API Gateway (receives events from the pixel, generates event IDs): https://developers.facebook.com/docs/marketing-api/gateway-products/conversions-api-gateway/
- Meta for Developers, Get started with the Conversions API (pixel ID, Meta Business Suite, generating an access token, developer privileges): https://developers.facebook.com/docs/marketing-api/conversions-api/get-started
- Meta Business Help Center, Implement the Conversions API using personalized instructions in Events Manager (full control of the business portfolio, at least one customer information parameter, keep the access token safe): https://www.facebook.com/business/help/232481544843294
- Meta Business Help Center, Create a business portfolio in Meta Business Suite: https://www.facebook.com/business/help/1710077379203657
- Meta Business Help Center, About deduplication for Meta Pixel and Conversions API events: https://www.facebook.com/business/help/823677331451951
- Meta for Developers, Handling duplicate Pixel and Conversions API events (event ID and name, 48 hours, fbp and external_id limits): https://developers.facebook.com/docs/marketing-api/conversions-api/deduplicate-pixel-and-server-events
- Meta for Developers, Server event parameters (event_name accepts custom events, event_id, event_time in seconds, event_source_url, action_source, 7-day limit): https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/server-event
- Meta for Developers, Customer information parameters (hashing and normalization, client_user_agent required for website events, parameters not to hash): https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/customer-information-parameters
- Meta for Developers, ClickID and the fbp and fbc parameters: https://developers.facebook.com/docs/marketing-api/conversions-api/parameters/fbp-and-fbc
- Meta Business Help Center, About Event Match Quality (score from 0 to 10, last 48 hours, parameter priority, lawful rights to share data): https://www.facebook.com/business/help/765081237991954
- Meta Business Help Center, Recommended and maximum delay times for web events: https://www.facebook.com/business/help/801591810609156
- Meta Business Help Center, View server event details in Events Manager (event overview, coverage, matching, deduplication, data freshness): https://www.facebook.com/business/help/1541268312717919
- Meta Business Help Center, Test your server events using the test events tool (payload helper): https://www.facebook.com/business/help/1624255387706033
- Meta Business Help Center, Test events tool: verify app and web browser events for Meta (processed and deduplicated events, data delays of 30 minutes or more): https://www.facebook.com/business/help/2040882565969969
- Meta for Developers, Using the Conversions API (endpoint, up to 1,000 events per request, invalid batches rejected, test_event_code events are not dropped): https://developers.facebook.com/docs/marketing-api/conversions-api/using-the-api
- Meta for Developers, Payload Helper: https://developers.facebook.com/docs/marketing-api/conversions-api/payload-helper
- Meta for Developers, Verifying your setup (server events visible within 20 minutes): https://developers.facebook.com/docs/marketing-api/conversions-api/verifying-setup
- Meta Business Help Center, About diagnostics in Meta Events Manager: https://www.facebook.com/business/help/667164051342757
- Meta for Developers, Conversions API for server-side Google Tag Manager (Conversions API Tag, pixel ID and access token): https://developers.facebook.com/docs/marketing-api/conversions-api/guides/gtm-server-side
- Shopify Help Center, Facebook data sharing (Standard, Enhanced, Maximum): https://help.shopify.com/en/manual/promoting-marketing/analyze-marketing/meta-data-sharing
- WooCommerce documentation, Meta for WooCommerce (Conversions API built in, shared event IDs): https://woocommerce.com/document/facebook-for-woocommerce/
- WordPress.org, Meta Pixel for WordPress: https://wordpress.org/plugins/official-facebook-pixel/
- Google Tag Manager, Cloud Run setup guide for server-side tagging (about $45 a month per server, at least two instances): https://developers.google.com/tag-platform/tag-manager/server-side/cloud-run-setup-guide
- Stape, pricing (free plan up to 10,000 requests, paid plans from $17 a month): https://stape.io/price
- Stape, Conversions API Gateway hosting ($10 a month per pixel, no coding needed): https://stape.io/fb-capi-gateway
