Skip to content
Website Technology

Meta Conversions API: Why Facebook Ads Report Fewer Sales

If Ads Manager shows fewer sales than your store, the browser pixel is probably missing some of them. Here is how the Conversions API fills the gap, and what to watch on consent and privacy.

An abstract blue network mesh
8 sections · 6 min read
In this article · 8 sections

Your store shows a good week of orders. Meta Ads Manager, looking at the same week, credits your campaigns with far fewer purchases. You start wondering whether the ads are working at all, or whether the tracking is broken.

Often it is a bit of both: the ads are doing something, and the tracking is missing a share of it. The usual fix is the Meta Conversions API. Here is what it is, why the gap happens, and how to set it up on WordPress or WooCommerce.

How the Meta Pixel works

The Meta Pixel is a piece of JavaScript that runs in the visitor’s browser. When someone views a product, adds it to the cart or completes a purchase, the pixel sends that event from their browser to Meta. Meta matches it to someone who saw or clicked your ad, and reports it in Ads Manager.

The weak point is that everything depends on the visitor’s browser running your script and being allowed to send data to Meta.

Why the pixel misses events

  • Ad blockers and privacy extensions. Many of them block requests to Meta’s tracking addresses outright. The purchase happens; the pixel never reports it.
  • Browser privacy features. Safari, Firefox and some other browsers limit tracking cookies and cross-site tracking by default.
  • iOS App Tracking Transparency. Apple requires apps to ask before tracking people across other companies’ apps and websites. When iPhone users say no to Facebook or Instagram, Meta has less permission and less data to connect an ad seen in the app with a purchase made later on your site.
  • Cookie consent declines. If your site uses a consent banner, as it should for many visitors, a properly set up banner stops the pixel from loading until the visitor agrees. That is the banner doing its job, not a fault.
  • Ordinary technical failures. A slow thank-you page that the customer closes, a payment gateway that returns them somewhere else, a theme update that removed the pixel code.

What the Conversions API is

The Conversions API sends the same kinds of events from your server instead of from the visitor’s browser. When an order is placed in WooCommerce, your site itself tells Meta: a purchase happened, at this time, for this value, with this information about the customer.

Because the message goes from your server to Meta directly, browser ad blockers and script failures on the page do not stop it. Meta’s own Conversions API documentation describes the technical side.

Two points to be clear about. First, it does not get around a visitor’s choices. If someone declined tracking on your consent banner, sending their data from the server instead is still sending their data, and the same rules apply. Second, it will not make Ads Manager match your order count exactly. People buy without ever seeing an ad, attribution has its own windows and rules, and some matching will always fail. We explain those differences in why ad numbers and website numbers never match.

Using both, and why event_id matters

Meta recommends running the pixel and the Conversions API together. The browser side captures things the server cannot easily see, such as page browsing behaviour, and the server side fills the gaps when the browser fails.

That creates an obvious problem: a single purchase might now be reported twice, once from each side. Meta handles this through deduplication. If the browser event and the server event carry the same event name and the same event_id, Meta treats them as one event and counts it once.

This is easy to get wrong in hand-built setups. If the IDs do not match, or one side does not send an ID at all, you can end up with inflated purchase numbers, which is worse than missing ones because it makes weak campaigns look good. A properly built integration generates one ID per event and sends it on both sides automatically.

Event Match Quality and customer information

For a server event to be useful, Meta has to work out which of its users it belongs to. So the Conversions API lets you send customer details with the event, such as email address, phone number, name and location, alongside technical details like the browser’s user agent.

Personal details like email and phone are normalised and then hashed before sending, which turns them into a fixed-length string that Meta compares against its own hashed records. Good integrations do this hashing for you.

In Events Manager, Meta shows an Event Match Quality rating for your server events. In general terms, it reflects how much useful customer information you are sending and how likely Meta is to match events to real accounts. Treat it as a guide to fix obvious gaps, such as checkout not passing the email, rather than a number to chase.

Hashing is not the same as anonymising. A hashed email still relates to a real person, so it remains personal data in the eyes of most privacy laws.

Ways to set it up on WordPress and WooCommerce

Meta’s official plugins

For WooCommerce, Meta’s official extension, long listed as Facebook for WooCommerce, connects your store to Meta, including the pixel, the Conversions API and your product catalogue. For a WordPress site without a shop, Meta’s own Meta Pixel for WordPress plugin can send events from both sides. These are the simplest starting points.

Partner integrations

Events Manager lists partner integrations you can connect directly, and several well-known WordPress plugins, PixelYourSite among them, handle the pixel and the Conversions API together. These can suit you if you also run Google, Pinterest or TikTok tracking and want one place to manage it. Check what the free version covers before you rely on it.

Server-side Google Tag Manager

If you already use Google Tag Manager, a server-side container can receive events from your site and forward them to Meta, Google and others. It gives you the most control, but it means running and paying for a separate tagging server, and someone has to maintain it. It suits businesses with several ad platforms and a developer on hand more than most small shops.

Whichever route you choose, test it. If the store already has other tracking plugins, check for overlap first: two plugins sending the same purchase is a simple way to end up with doubled numbers, and the kind of thing a WooCommerce support session can untangle. Events Manager has a Test Events tool that shows browser and server events arriving in real time, and whether they are being deduplicated. Place a test order and check that it appears once, not twice and not zero times.

Sending customer data to Meta from your server is still sharing personal data with a third party, and you, as the site owner, decide whether and when that happens.

  • Visitors from the EU and UK are covered by the GDPR and related cookie rules, which generally require clear consent before this kind of tracking for advertising.
  • In India, the Digital Personal Data Protection Act sets duties around consent and notice for processing personal data, and its rules are being brought into effect in stages.
  • Elsewhere, other national and state laws apply, and Meta’s own business terms require you to have the right to share the data you send.

In practice: connect your consent banner to both the pixel and the server-side events, so a declined visitor is not tracked through either route, and say clearly in your privacy policy that you share data with Meta for advertising. Our notes on keeping a privacy policy current cover the policy side. This is general information, not legal advice; if you sell into several regions, it is worth a proper check with someone qualified.

It also helps to compare Meta’s numbers against a second source. Google Analytics on WordPress will not match Meta either, but large gaps between the two and your orders show where to look.

Getting it checked

If your store is running Meta ads and the numbers look wrong, it is worth having the pixel, the server events and the deduplication checked on the real site before you change your campaigns. If you want us to look, tell us what you are seeing and we will say plainly what is set up, what is missing, and whether it is worth fixing.

Next in this series: India's DPDP Act: What It Means for a Business Website

Is Your Website Working Properly?

Get a free website health check from WebMaintor. We'll review your website's speed, security, forms, and technical health — and tell you exactly what needs attention.

No obligation. No automated reports. A real review by our team.