Analytics8 min
Meta ads report different purchases than your store
Your ad account reports one purchase count, the store another, GA4 a third. Usually three things are behind it: the pixel and Conversions API send the same event without a shared event_id, the consent signal never reaches Meta, and the value is sent with VAT and shipping included. Below: how to check it with one real order. Audit €200 + VAT.
In short
- The pixel and Conversions API send the same purchase with a shared event_id
- Meta merges duplicates only within 48 hours and only on a matching event name
- The consent signal has to reach both the browser and the server side
- Values go without VAT and shipping, otherwise ROAS looks too good
- One real order and ten minutes are enough to check it
Why Meta reports more purchases than your store
Almost always one of three mechanisms is at work. First: the same purchase is recorded twice, because both the browser pixel and the server send it through the Conversions API. Second: Meta attributes a purchase to a view rather than a click, so the person only saw the ad and bought a week later from search. Third: some conversions are modelled, that is calculated rather than measured.
These three differ in kind. A duplicate is a defect and needs fixing. View attribution and modelling are Meta's methodology: we cannot change them, but we can know how much they add. So the first step is never an argument about numbers, it is a check of how many events actually leave the site for one order.
How the pixel and Conversions API deduplicate on event_id
Sending a purchase both ways is correct: browsers and extensions block the pixel, while the server gets through. But Meta has to understand it is the same purchase. For that both paths send the same event name and the same event_id, usually the order number. When both match, Meta keeps one.
In practice small things break that condition:
- event_id is generated at random on each send, so it never matches
- the browser sends Purchase while the server sends purchase or its own name
- the server event leaves later than 48 hours, for example in a nightly export
- the order is paid through a bank and returns on a new page, so the pixel fires a second time
Consent: when the pixel has no right to load
Before a visitor consents, the Meta pixel must load nothing. That covers not just cookies but the request to facebook.com itself. In practice it is often the other way round: the consent banner is shown, but the pixel is already loaded, and the banner only decides afterwards whether it may run.
The server side is a separate story and the one most often skipped. The Conversions API sends from the server, so nothing shows in the browser: you can only check it by reading the code or comparing event counts. In one store we found the server sending every order regardless of what the person chose in the banner. No report shows that, and it is still a breach.
Two pixels on one page and other common faults
The second most common cause is simple: the pixel is installed more than once. In a WordPress store it can be added at the same time by the theme, a tracking plugin, Google Tag Manager and the consent platform. Each works correctly on its own, and together they double the count.
Value errors are quieter but more expensive, because they distort ROAS directly:
- the value is sent with VAT and shipping, while ad return is calculated on the goods total
- refunds and cancelled orders are never written off
- the currency is missing or wrong
- test orders from your own computer land in the same data
A ten minute check with one real order
Place one real order in a clean incognito window and follow it through every system. The steps:
- open the store, and before answering the cookie banner check how many cookies are already set and whether requests go to facebook.com
- answer the banner the way a customer would
- complete the order
- in Meta Events Manager, under Test Events, count how many Purchase events arrived for that single order
One event means deduplication works. Two mean the event_id does not match or the pixel is installed twice. Zero after consent means tracking does not work at all. Compare the same order against the store total and against GA4: if three systems show three numbers, the problem is in the sending, not in the reports.
What this work does not cover: campaigns, budget, creative
We do not run Meta ads. We do not manage campaigns, split budgets, produce creative or propose audiences. If you are looking for someone to take over ad management, that is not us.
We do a narrower thing: we check and fix the data those ads rely on. Pixel, Conversions API, deduplication, consent and values. It is one of the six parts of a website audit, priced at a fixed 200 €. If you have an ad team, their numbers will shift after the fix, so it is worth warning them in advance. Get in touch.
Related services
Services related to this topic.
- Analytics and ad trackingGA4, Google Tag Manager, Meta Pixel with the Conversions API, and ChatGPT Ads. Tracking that counts one purchase once, and only with consent. Quoted from the audit findings + VAT.
- Website auditA technical SEO audit that also checks consent, tracking, speed, security and copy. Fixed price €200 + VAT.
- GDPR and cookie consentA cookie banner that actually blocks: zero cookies before consent, withdrawal that deletes, and documents written against the real configuration. Quoted from the audit findings + VAT.
Related insights
End