META PURCHASES

Meta Conversions API on WooCommerce: why server purchases are missing

In Meta Events Manager, your WooCommerce store's Purchase events come from the browser only. Or you switched the Conversions API on and the server line is still empty, or Meta now counts some orders twice. The Conversions API sends purchases from a server, so a blocked browser does not matter, but only when a few details are right.

Why it happens

Nothing sends from the server yet. The Meta pixel reports a purchase from the shopper's browser. Without a server connection, every purchase lost to an ad blocker, a declined cookie banner or a shopper who never returns from the payment page is lost to Meta. On WooCommerce you can use Meta's own plugin, Meta for WooCommerce (Facebook for WooCommerce on WordPress.org), whose documentation page, which Meta no longer updates, says the Conversions API is built in. A server-side tag manager, your own code or an app such as Tikra can do it as well.

The access token is missing or wrong. Every server request needs an access token. In Events Manager you generate it under your pixel's Settings, in the Conversions API section. Meta shows the Generate access token link only to people with developer privileges for the business, so some store owners never see it. A token made for another pixel is refused. When a token stops working weeks later, see Meta Conversions API access token stopped working.

Old or wrongly timed events are refused. Meta takes an event_time up to 7 days in the past. If one event in a request is older, Meta returns an error for the whole request. A setup that sends late, or sends the time of the request instead of the time of the order, loses purchases or puts them on the wrong day.

Browser and server copies do not share an ID. When the pixel and the server send the same purchase, Meta counts it once only when both carry the same event ID and event name, and only within 48 hours of the first one. Without a shared ID, Meta may count both.

The purchase goes out at the wrong moment. WooCommerce can create an order, with the status Pending payment, before the shopper pays. A setup that sends Purchase at that moment counts orders that are never paid. One that waits for the order received page misses shoppers who do not come back.

Check it yourself

  1. 1In Events Manager > Data sources > your pixel > Overview, open the Purchase event and read where the events came from: browser, server or both, for the last 7 full days.
  2. 2In WordPress, open WooCommerce > Orders and count orders with the status Processing or Completed for the same days.
  3. 3If the server count is zero, open your pixel's Settings in Events Manager and check that a Conversions API connection exists and which tool it belongs to.
  4. 4Open Events Manager > Test events, copy the test code into your plugin or server tool and place a test order. Check that a server Purchase arrives with a value, a currency and an event ID.
  5. 5Remove the test code again when you are done: Meta says it does not belong in live requests.
  6. 6In the Purchase event's details, check deduplication between browser and server events. A low rate means the two copies do not share an ID.
  7. 7Compare the server count with your paid orders. If it is higher, look for orders that were sent before payment, or a second server sender.
  8. 8Keep one tool that sends the server Purchase to this pixel.

On Shopify the options are different; see Meta's Conversions API options for Shopify.

Ask about your store

FAQ

Do I still need the pixel?

Usually yes. Meta's deduplication guide covers sending both and matching them by event ID. The pixel adds browser details, such as the cookie and click details, that help Meta match the buyer.

Can I send orders from last month?

No. Meta refuses events older than 7 days.

Does the Conversions API need a plugin?

No. It is an API, so any server that can call it works. A plugin or an app saves you the code.

Why does Meta count more purchases after I turned it on?

Usually the browser and server copies do not share an event ID, or two tools now send the same purchase.

Related

Problem

Meta Conversions API access token stopped working

Your Meta Conversions API access token expired or was revoked and purchases stopped. Why it happens, how to check it in Events Manager and how to make a new one.

Guide

Meta Pixel vs Conversions API on Shopify: do you need both?

What the Meta Pixel sees in the shopper's browser, what the Conversions API sends from a server, why Meta asks for both on a Shopify store, and how to stop one order from counting twice.

Guide

The Meta Conversions API access token for a Shopify store: how to make it, where it goes, how to keep it safe

How to create a Conversions API access token in Meta Events Manager for your Shopify store, what the system user route changes, which access you need, where to paste the token and how to keep it private.

Problem

Conversions API says events received, Events Manager shows nothing

Your server gets events_received from Meta but Events Manager is empty. Check the dataset ID, event time and date range before you debug anything else.

All tracking problems · All guides