All articles
Tracking5 min read ·

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.

M
MadalinaPerformance marketer · Google, Meta & TikTok Ads

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.

Red flag

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:

  1. Meta Events Manager → Test Events, with your website URL.
  2. Google Tag Assistant, connected to your site.
  3. 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

CheckHealthy result
Platform purchases vs shop ordersNo single platform reports more than your shop
Test orderExactly one purchase event, correct value and currency
Meta pixel + Conversions APISame event ID on both, events deduplicated
Google Ads primary goalsOnly real sales or qualified leads
Count setting for purchasesOne per transaction
Consent behaviourTags 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.

Key takeaways
Compare platform-reported purchases with real shop orders first.
A single test order shows exactly where tracking breaks.
Pixel and Conversions API events need the same event ID to be deduplicated.
Only real business results should be primary goals in Google Ads.
Consent Mode v2 protects both your data and your compliance.

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.

M
Written by Madalina

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

Keep reading.

All articles
Google Ads·5 min read

Negative keywords in Google Ads: the cheapest fix you will ever make.

Email·5 min read

The three email flows every online shop should have.

Google Ads·5 min read

Google Ads match types, explained without the jargon.

Rather have me look at your account?

Send me your website, the problem and what you want to achieve. The audit is free.