BlogAttribution
Attribution8 min18 Apr 2026

Why your Google Ads ROAS is lying to you — and what to do about it

Platform self-reported ROAS consistently overstates performance by 25–60%. Here's exactly how the double-counting works and how to measure what's real.

Google Ads shows you a ROAS figure. You trust it. You optimize towards it. You report it to your client or your CFO. But that number is wrong — consistently, systematically, and by a lot.

01

What your Google Ads ROAS actually measures

The ROAS in your Google Ads dashboard measures conversions that Google’s system can observe and attribute to a click in their network. It does not measure your actual revenue return for every euro spent.

The distinction matters enormously. Google can only see conversions that are reported back through a tracking mechanism they control — a browser pixel, a GA4 import, or a server-side conversion API. When tracking is incomplete, the denominator (cost) is accurate, but the numerator (revenue) can be dramatically wrong.

But here’s the counterintuitive part: the problem isn’t that Google undercounts. It’s that Google overcounts — through a mechanism called double-counting.

02

How double-counting inflates your reported ROAS

Most advertisers run both browser-based conversion tracking (the gtag.js pixel) and imported goals from Google Analytics 4. Both report to the same ad account. Both attribute to the same click.

The result: a single purchase is reported as two separate conversions — doubling the revenue signal that Google’s algorithm uses to make bidding decisions.

32–51% of e-commerce conversions are counted more than once across at least two attribution windows or tracking sources. For advertisers running both GA4 goals and a site tag, the inflation ratio commonly reaches 1.4–1.8×.

On top of that, Google’s default attribution window is 30 days for purchase events. A customer who clicks your ad, browses, then returns two weeks later via direct or organic search — Google still claims full credit for that conversion through view-through or assisted attribution.

03

The three specific mechanisms driving the inflation

Understanding exactly where the overcounting happens makes it possible to fix. There are three main sources.

1

Pixel + GA4 import duplication

If you have a gtag.js purchase event firing on your thank-you page and you’ve also connected GA4 goals to your Google Ads account, that single purchase fires two conversion events to the same campaign. This is the most common source of ROAS inflation — and it’s often configured this way by default.

2

Cross-device attribution overlap

Google’s logged-in attribution — powered by Gmail, YouTube, and Search sign-in data — can track a user across devices. When a mobile click leads to a desktop purchase, both device sessions may generate a conversion event. The revenue is counted once, but the attributed conversion can appear in multiple places.

3

View-through attribution by default

By default, any user who sees (but doesn’t click) a Display or YouTube ad and then converts within 24 hours is counted as a view-through conversion. If that same user also clicked a Search ad earlier in their journey, both campaigns claim 100% of the credit — and both count the full revenue value.

04

Calculating your real ROAS

The formula is deceptively simple. Getting the right data to feed it is where most advertisers fall short.

Real ROAS = Verified Revenue ÷ Ad Spend

Verified revenue must come from a single source of truth — your CRM, your Shopify admin, or your payment processor. Not Google Ads. Not GA4. Those are attribution tools, not revenue ledgers.

Once you have your real revenue figure for a given period, compare it to what Google Ads reported for the same window. The ratio between them is your inflation factor — and the gap is your Attribution Gap.

If your Google Ads dashboard shows ROAS 6.4× and your verified calculation shows 3.8×, your measurement is inflated by 68%. Every smart bidding decision your campaigns make is trained on that wrong number.

05

What to actually do about it

Fixing inflated ROAS is a three-step process. None of these steps are difficult — but skipping any one of them leaves the problem partially intact.

Step 1: Audit and remove duplicate conversion actions

Go to your Google Ads account → Tools → Conversions. For every purchase or lead action, check whether the same event is also being imported from GA4. Keep only one source per event type. If you have both a tag-based purchase event and a GA4 goal import for the same action, disable the GA4 import.

Step 2: Switch to server-side conversion tracking with deduplication

Browser-based pixels are blocked by ~35% of users — ad blockers, iOS Safari’s ITP, Firefox Enhanced Tracking Protection. Server-side tracking fires from your own infrastructure and cannot be blocked by the browser.

More importantly, server-side events let you enforce deduplication before the conversion reaches Google. The Google Ads Enhanced Conversions API supports a transaction_id field — if you include the order ID here, Google will automatically reject any duplicate event with the same ID within 24 hours.

A minimal server-side Enhanced Conversions payload looks like this:

json
{
  "conversion_action": "purchase",
  "order_id": "ORD-8821",
  "currency_code": "EUR",
  "value": 249.95,
  "user_data": {
    "email": "<sha256-hashed-email>",
    "address": {
      "country": "NL"
    }
  },
  "transaction_id": "ORD-8821"
}

The transaction_id is your deduplication key. If your browser pixel and your server both fire for the same purchase, Google will merge them into a single conversion event — eliminating the double-count.

Step 3: Track the gap as an ongoing metric

Even after you fix the tracking setup, measure the inflation ratio weekly. Your verified revenue versus platform-reported revenue is a leading indicator of tracking drift — and it catches issues like a broken server-side integration before they compound for an entire month.

06

The bottom line

A reported ROAS of 6.4× that’s actually 3.8× is not a vanity problem. It means your smart bidding campaigns are training on inflated signals. It means you’re allocating budget based on fictitious performance data. And it compounds: as you shift spend to campaigns that look stronger, you’re often shifting to campaigns that are better at double-counting — not better at driving actual revenue.

The fix requires no new channels, no new budget, and no agency retainer. It requires accurate measurement infrastructure — which is exactly what server-side tracking with proper deduplication provides.

Fix the measurement first. Then let the algorithm do its job on clean data.

Key takeaways

  • Platform ROAS is overcounted — not undercounted — primarily through pixel + GA4 import duplication.
  • The three main inflation mechanisms are: duplicate tracking sources, cross-device overlap, and view-through attribution.
  • Your real ROAS comes from verified revenue (CRM / payment processor) divided by actual ad spend.
  • Server-side Enhanced Conversions with a transaction_id deduplication key eliminates double-counting at the source.
  • Track the gap between platform-reported and verified ROAS weekly — it's your most important measurement health signal.