Your ROAS is lying: check your tracking in 15 minutes.
Duplicate purchase events and a missing Conversions API quietly inflate results, and every budget decision built on them is wrong. Here is the self-check I run before touching any campaign.
A client once showed me a Meta Ads account with a ROAS of 9. The ads looked brilliant. The bank account did not. When we checked the tracking, every purchase was being counted twice: once by the browser pixel and once by the server, with no deduplication. The real ROAS was closer to 4.
This happens far more often than you would think. Before you scale a campaign, cut one, or decide that “ads don’t work”, run this conversion tracking check. It takes about 15 minutes and you do not need to be a developer.
1. Compare ad platforms with your real orders
Start with the simplest test. Pick the last 7 days and write down three numbers:
- Orders in your shop system (Shopify, WooCommerce or similar).
- Purchases reported by Meta Ads.
- Conversions reported by Google Ads, plus purchases in GA4.
The platforms will never match your shop exactly, because each one uses its own attribution and they overlap. But they give you a strong hint. If Meta and Google together claim more purchases than you had orders in total, something is double-counting. If GA4 shows far fewer purchases than your shop, events are being lost.
If any single ad platform reports more purchases than your shop received in the same period, stop optimising and fix the tracking first.
2. Place a test order
Numbers tell you something is wrong. A test order shows you where. Use a cheap product or a 100% discount code, and before you buy, open these tools:
- Meta Events Manager → Test Events, with your website URL.
- Google Tag Assistant, connected to your site.
- GA4 DebugView, if you can enable debug mode.
Then go through the purchase like a customer. You want to see exactly one purchase event in each tool, with the correct value and currency. Two purchase events, a value of 0, or the wrong currency are the most common problems I find.
3. Check for duplicate events on Meta
Most shops now send purchases to Meta in two ways: through the browser pixel and through the Conversions API from the server. That is good, because the server catches purchases that browsers block. But Meta must know that both signals are the same purchase.
That is done with deduplication: both events must have the same event name and the same event ID. Meta explains the setup in its guide on deduplicating pixel and server events. In Events Manager, open your Purchase event and look at the deduplication and event match quality information. If events arrive from both sources but are not being deduplicated, your reported results are inflated.
A wrong number is worse than no number. It makes you confident about the wrong decision.
4. Check what Google Ads counts as a conversion
In Google Ads, go to Goals → Conversions → Summary and look at every action marked as primary. Primary actions are the ones smart bidding optimises for. I regularly find accounts where page views, button clicks or newsletter sign-ups sit next to purchases as primary goals.
The result: the algorithm chases cheap clicks on a contact button instead of sales, and your reported cost per conversion looks great while revenue stays flat. Usually only real business results, such as purchases or qualified leads, should be primary. I explain how this affects bidding in my article on Google Ads bidding strategies and conversion goals.
While you are there, check two more things: that purchases are counted once per transaction, not every time, and that the conversion value is the real order value, not a fixed default.
5. Check consent and Consent Mode
In the EU, tags should only fire after the right consent. If your cookie banner blocks everything until a visitor clicks, and you do not use Google Consent Mode v2, you can lose a large share of conversions in Google Ads and GA4. If your banner fires tags before consent, you have a legal problem instead.
Test it: open your site in a private window, decline cookies, then accept them in a second session. Watch which tags fire in each case with Tag Assistant.
6. Your 15-minute checklist
| Check | Healthy result |
|---|---|
| Platform purchases vs shop orders | No single platform reports more than your shop |
| Test order | Exactly one purchase event, correct value and currency |
| Meta pixel + Conversions API | Same event ID on both, events deduplicated |
| Google Ads primary goals | Only real sales or qualified leads |
| Count setting for purchases | One per transaction |
| Consent behaviour | Tags respect consent, Consent Mode v2 active |
Fixing tracking is not exciting, but it changes everything that comes after it. Smart bidding, budget decisions and scaling all depend on it. If you are preparing for Black Friday, do this check before you raise a single budget.
If you would rather have someone else go through it, a tracking review is included in every free audit I do on Google Ads and Meta Ads accounts.
Frequently asked questions
Why does Meta report more purchases than my shop?
Usually because purchases are counted twice, by the browser pixel and the Conversions API, without proper deduplication. Attribution windows and view-through conversions can also make Meta's numbers higher than your shop's.
How do I test if my conversion tracking works?
Place a test order while Meta Test Events, Google Tag Assistant and GA4 DebugView are open. Each tool should show exactly one purchase event with the correct value and currency.
Do I need the Conversions API if I have the Meta pixel?
It is strongly recommended. The Conversions API sends events from your server, so it captures purchases that browsers or ad blockers stop the pixel from reporting. It must be deduplicated with the pixel.
Performance marketer running Google, Meta and TikTok Ads since 2018, with over €1M in ad spend managed for brands across Europe, the UK and the USA.
More about me