Skip to content

Server-Side Purchase Tracking (Meta Conversions API)

Your Meta Pixel reports sales from the customer's browser. Some of those reports never arrive: ad blockers stop them, Apple's privacy settings weaken them, and a customer who closes the tab the instant their payment goes through was never on the page long enough to send one.

Server-side tracking reports the same sale a second way, straight from your site's server, where none of that can interfere. Meta matches the two reports and counts the sale once.

The practical effect is that Meta sees more of the sales your ads actually produced, so it optimises and reports against better numbers. The same ad budget tends to go further.

Where to set it up: Admin → Settings, then the Advanced tab (/admin/settings), under AnalyticsMeta Conversions API.

Turn on your pixel first

This works alongside your Meta Pixel, not instead of it. You need your Meta Pixel ID entered on the same page — the setting immediately above. Without it nothing can be sent.

Set it up

You need an access token from Meta. It is separate from your Pixel ID and you only do this once.

Two things to check before you start

You need to be an Admin or Developer on the Meta business portfolio that owns the dataset. Anything less and Meta greys out the token button with "Missing prerequisite". If that happens, ask whoever owns the business portfolio to raise your role, or have them generate the token for you.

The dataset must be a website dataset, not an app one. App datasets have no Conversions API section at all, so if you cannot find it, check you are on the right one. In Events Manager a website dataset shows a browser icon and has no "Facebook SDK" tab.

  1. Open Meta Events Manager and select the dataset that matches your Pixel ID.
  2. Go to the dataset's Settings tab and find the Conversions API section.
  3. Choose Set up direct integration, then Generate access token. Copy the token it gives you.

Do not accept Meta's recommended setup

Meta may offer to set this up through a partner such as Madgicx, through its own hosted gateway ("Set up with Meta"), or through a partner integration, and it often marks one of those Recommended. Do not pick any of them. Your site is already the sender. Adding one of Meta's options creates a second sender reporting the same sales, which is the most common cause of purchases being counted twice.

The only options you want are direct integration or Set up manually.

  1. In your site's Admin → Settings → Advanced, scroll to Meta Conversions API.
  2. Paste the token into Access token.
  3. Paste your test code into Test event code (the next section explains where to get it).
  4. Switch Send purchases from your server on, and click Save.

Copy the token before you close Meta's window

Meta shows the token once. Your site stores it securely and will never show it back to you either — after saving you will only see the last four characters, which is enough to tell which token is installed. If you lose it, generate a new one and paste that in instead.

Check it is working before you go live

Do this before you rely on the numbers. It takes a few minutes and costs you nothing.

This is two separate checks, and they cannot be done at the same time. The first proves your server is reaching Meta. The second proves the two reports are being matched.

Check one: is the server reaching Meta?

  1. In Meta Events Manager, open the Test Events tab. It shows a test event code near the top.
  2. Copy that code into Test event code in your site settings and save.
  3. Place a small real order on your site. Accept the cookie banner when it appears, because without it nothing is tracked at all.
  4. Watch the Test Events stream. Your purchase should appear, with the right value.
  5. Clear the Test event code field and save.

You will only see one purchase here, and that is correct

Test Events shows the report from your server, not the one from the browser. Only the server report carries the test code, so the browser's copy goes to your live dataset instead and never appears in this view. Seeing a single purchase here tells you the server is working. It does not tell you anything about whether the two reports were matched, which is the next check.

Check two: are the two reports being matched?

  1. With the test code now cleared, place another small order, again accepting the cookie banner.
  2. Wait up to 30 minutes. Events Manager takes that long to process, and the Overview tab says so.
  3. Open the Overview tab and find the Purchase row. Meta reports a deduplication rate against it, which is the share of browser and server reports it matched into single events. That figure, not the Test Events view, is what tells you matching is working.

Clear the test code when you are done

While a test code is set, purchases go to the Test Events page instead of counting as real conversions. Leave it in place and your ad reporting will show no sales at all.

What gets sent

One event, when a customer's payment is confirmed: the purchase, its value, and the competitions they bought tickets for.

To help Meta match the sale to the right person, their email address and phone number are sent scrambled — converted into a fingerprint that Meta can compare against its own records but cannot read or reverse. Their plain email address and phone number are never sent.

Nothing is sent for a customer who declined marketing cookies. That is not a filter applied at the end: their advertising details are never recorded in the first place, so there is nothing to send. Exactly as with the browser pixel, this means your reported conversions will sit below your real order count, and that is compliance working as intended.

Nothing is sent for orders that failed or were refunded.

Switch it off

Turn Send purchases from your server off and save. Your saved token stays where it is, so you can switch it back on later without pasting it again. Your Meta Pixel carries on reporting from the browser as before.

When something looks wrong

Purchases are counted twice in Meta. Almost always a second sender. The usual cause is accepting one of Meta's own setup offers in Events Manager, such as a partner platform like Madgicx, the hosted "Set up with Meta" gateway, or a partner integration. Those are separate connections that report the same sales again, and Meta has no way to match them against yours. Remove the extra one under the dataset's Settings or Integrations. Also check that nobody has pasted a Conversions API integration into Custom Scripts, and that your ad agency has not wired up its own server-side connection. Your site is the sender. One sale should appear as one event.

Nothing arrives in Test Events. Work through these in order: the toggle is on and saved; your Meta Pixel ID is filled in above it; the test code matches the one currently shown in Events Manager (it changes); and you accepted the cookie banner before ordering.

It worked, then stopped. Usually the token. It can be revoked in Meta by someone removing an app, changing permissions, or a business account change. It can also simply expire: tokens tied to a person rather than to the business run out after about two months, and nothing warns you when they do. A token generated the way this page describes belongs to the business and does not expire on a schedule. Either way the fix is the same, so generate a fresh token in Events Manager and paste it in.

Your numbers are lower than your real sales. Expected, and not a fault. Customers who decline cookies are invisible to Meta by design. Server-side tracking narrows that gap, it does not close it.