Pular para o conteúdo

Blog

GA4 and Meta Ads Show Different Conversions: Which One Is Right?

You open Meta Ads and see 100 sales.

Then you open GA4 and find 63.

Your checkout recorded 81 sales.

Which number is right?

Possibly all three.

That’s because Meta Ads, Google Analytics, and your checkout aren’t necessarily trying to answer the same question.

Your checkout answers something close to:

How many sales actually happened?

Meta Ads tries to answer:

How many of those sales can be attributed to Meta ads according to my rules?

And GA4 tries to reconstruct:

Where did the sessions and conversions I was able to observe come from, and how should I attribute them according to my model?

It sounds like a small difference.

In practice, it completely changes how you should interpret the numbers.

The same sale can appear differently across platforms

Imagine this journey:

Day 1
Instagram Ads
    ↓
Customer discovers the brand

Day 7 Organic Google search ↓ Customer searches again

Day 15 Organic Instagram ↓ Another interaction

Day 25 Google ↓ Customer returns to the website

Day 30 Meta Ads — Remarketing ↓ Customer sees the ad

Day 32 Direct visit ↓ Purchase

There is only one sale.

But there are several touchpoints.

Meta has information about some of those interactions.

Google Analytics has information about others.

Your checkout, on the other hand, may simply know:

Order #9281
Product: Premium Kit
Value: R$ 897
Status: Approved

Each system is observing a different part of the same story.

Your checkout is usually the best reference for how many sales actually happened

Before discussing attribution, it’s useful to separate two questions.

The first is:

How many sales happened?

The second is:

Where did those sales come from?

Those are different problems.

If we’re talking about revenue and orders that were actually approved, it usually makes more sense to start with the system where the transaction actually exists:

  • checkout;
  • payment platform;
  • e-commerce platform;
  • ERP;
  • order management system.

If 81 sales were approved, you had 81 sales.

The fact that Meta Ads reports 100 attributed conversions doesn’t create another 19 sales in your database.

Likewise, if GA4 only observed 63, the other 18 sales didn’t stop existing.

This gives us an important rule:

an attributed conversion and an actual sale are not necessarily the same metric.

So why can Meta Ads report more sales?

Because Meta doesn’t necessarily need to be the last click to attribute participation in a conversion.

Imagine:

Meta Ads
   ↓
Customer discovers the brand
   ↓
3 days later
Google
   ↓
Website
   ↓
Purchase

Depending on the conditions and attribution rules used by the platform, Meta may recognize that the customer interacted with an ad before converting and attribute the sale to that campaign.

GA4 may interpret the same sequence differently.

Now add more channels:

Meta Ads
   ↓
Google
   ↓
Email
   ↓
Instagram
   ↓
Remarketing
   ↓
Sale

The question “who generated this sale?” no longer has an obvious answer.

And each platform has different available data and models for answering it.

Platforms don’t see exactly the same data

This is one of the most important things to understand when trying to explain why the numbers don’t match.

Meta Ads has deep visibility into interactions that happen within Meta’s ecosystem.

GA4 observes what reaches your Analytics implementation.

Your checkout knows about the transaction.

None of these systems necessarily has a perfect view of everything.

Imagine a journey like this:

Instagram
   ↓
Website
   ↓
Leaves the website
   ↓
Google
   ↓
Website
   ↓
WhatsApp
   ↓
3 days later
Direct visit
   ↓
Checkout
   ↓
Sale

The checkout knows the end of the journey very well.

Meta knows about certain interactions with Instagram and its ads.

GA4 knows about the events it was able to record on the website.

But the real journey is bigger than any of those individual views.

Attribution windows change the result

There is also a time component.

Imagine someone clicks an ad today and buys 20 days from now.

The question is:

Should the ad from 20 days ago still receive credit for that sale?

That depends on the attribution window being used.

Now imagine the purchase happens 45 days later.

Or 90 days later.

The longer the buying cycle, the more important this discussion becomes.

For a direct sale:

Ad
   ↓
5 minutes
   ↓
Purchase

the discrepancy tends to matter less.

For a longer journey:

Ad
   ↓
Content
   ↓
Search
   ↓
Email
   ↓
Remarketing
   ↓
45 days
   ↓
Purchase

the attribution window can significantly change which campaigns receive credit.

First click, last click, and other models also change the answer

Even if two tools had exactly the same data, they could still reach different conclusions.

Imagine:

Meta Ads
   ↓
Organic Google
   ↓
Email
   ↓
Google Ads
   ↓
Sale

Under first-click attribution:

Meta Ads → Sale

Under last-click attribution:

Google Ads → Sale

If we look at the journey:

Meta Ads
→ Organic Google
→ Email
→ Google Ads
→ Sale

all four participated.

So it’s not enough to ask:

Which tool is right?

We also need to ask:

What rule is each tool using to decide who gets the credit?

The same sale can be claimed by two platforms

This is one of the biggest problems when analyzing performance directly from advertising dashboards.

Imagine a single R$ 1,000 sale.

Before purchasing, the customer interacted with both Meta Ads and Google Ads.

Meta may report:

Attributed revenue: R$ 1,000

And Google may report:

Attributed revenue: R$ 1,000

If you simply add the two dashboards together:

Meta:   R$ 1,000
Google: R$ 1,000
----------------
Total:  R$ 2,000

But your checkout says:

Actual sale: R$ 1,000

There isn’t R$ 2,000 in revenue.

There is one R$ 1,000 sale with a journey in which more than one platform participated.

That’s why adding attributed conversions from different platforms can create an inflated view of your business.

50 Meta sales + 50 Google sales doesn’t mean you know the source of all 100 sales

There is another consequence of this problem that causes a lot of confusion.

Imagine your checkout has exactly 100 sales:

Actual sales: 100

When you open the advertising platforms, you see:

Meta Ads:   50 attributed sales
Google Ads: 50 attributed sales

It’s tempting to think:

50 + 50 = 100

Therefore, we know the source of all 100 sales.

But that conclusion can be completely wrong.

The 50 sales attributed by Meta and the 50 attributed by Google don’t have to be 100 different sales.

They could be the exact same 50 sales.

For example:

100 actual sales

├── 50 sales with observed journeys │ ├── Meta participated in all 50 │ └── Google participated in the same 50 │ └── 50 sales with no identified journey

In this scenario:

Meta reports:   50
Google reports: 50

Apparent total: 100

But your actual tracking coverage could be:

50 out of 100 sales = 50%

The other 50 sales still don’t have enough acquisition information.

Now imagine even larger numbers:

Actual sales: 100

Meta Ads: 80 Google Ads: 60

Adding the dashboards gives you:

80 + 60 = 140

Obviously, you didn’t have 140 sales.

What’s less obvious is how much those two populations overlap.

Without identifying the individual sales behind those numbers, the aggregated platform reports don’t reveal that overlap.

And that means they don’t reveal your actual tracking coverage either.

Tracking coverage and attribution are different things

This distinction deserves its own section.

Imagine 100 actual sales again.

If you were able to connect 75 of them to their respective journeys, your observable coverage is approximately:

75 sales with identified journeys
---------------------------------- = 75%
100 actual sales

That’s different from saying:

Meta attributed 80 sales.

The number of sales a platform attributes to itself doesn’t necessarily represent the number of sales whose journeys you can reconstruct.

One thing is attribution reported by the platform.

Another is observable coverage of your actual sales.

Mixing these concepts can lead to incorrect conclusions.

Do you need to track 100% of sales to make decisions?

Not necessarily.

Technically, it would be ideal to connect every sale to its respective journey.

In practice, tracking systems operate in an imperfect environment.

Users may block certain tracking mechanisms.

Identifiers can be lost.

People may switch browsers or devices.

Some journeys simply can’t be reconstructed.

That’s why requiring 100% coverage before considering any analysis useful can create an unrealistic expectation.

Imagine:

100 actual sales

80 sales with identified journeys 20 sales without enough information

The 20 sales without a known journey don’t stop existing.

And we shouldn’t invent a source for them either.

They are simply:

Unknown source

But that doesn’t automatically make the other 80 analytically useless.

If the observed portion is large enough and isn’t heavily biased compared with the rest of the sales, it can provide a useful sample of acquisition behavior.

Among the observed journeys, for example, you may discover that:

  • certain campaigns frequently appear in sales journeys;
  • one channel participates mostly in discovery;
  • another appears closer to conversion;
  • certain combinations of channels occur repeatedly;
  • some campaigns receive many clicks but rarely appear in journeys that end in a sale;
  • certain pieces of content repeatedly appear before purchase.

That can already produce much more useful information than simply comparing aggregated dashboard numbers.

Is 70% or 80% tracking coverage always enough?

There is no magic percentage.

Having 80% coverage sounds excellent, but we still need to ask an important question:

Are the sales we can observe reasonably representative of the sales we can’t observe?

Imagine you’re able to track 80% of total sales but lose almost every sale originating from one particular channel.

In that case, your sample has an important bias.

On the other hand, if tracking losses are distributed relatively normally across the operation, partial coverage can still provide very useful signals.

So the goal shouldn’t simply be:

100% or nothing

A more useful question is:

Do I have enough data, and is it representative enough, to make this decision?

This also avoids a common analytics mistake: spending enormous amounts of effort trying to recover the final few percentage points of coverage without first asking whether doing so would actually change a marketing decision.

Unknown is also data

Good analysis doesn’t need to pretend it knows what it couldn’t observe.

You may have:

100 actual sales

├── 78 with identified journeys └── 22 without reliable attribution

That’s healthier than forcing the remaining 22 sales into a channel just to reach 100%.

“Unknown” is a valid answer.

More importantly, tracking this percentage over time helps you understand the health of your measurement itself.

If you normally connect 80% of sales to a journey and suddenly that falls to 45%, there may be a tracking problem that needs investigation.

Tracking coverage therefore becomes a measurement-health metric as well.

Does this mean Meta’s ROAS is wrong?

Not necessarily.

It means we need to understand what that ROAS represents and, more importantly, which part of the journey we’re analyzing.

There is an additional complication when multiple campaigns from the same platform participate in the same acquisition.

Imagine a 45-day journey:

Meta Ads
Discovery Campaign
        ↓
Organic content
        ↓
Meta Ads
Consideration Campaign
        ↓
Google
        ↓
Email
        ↓
Meta Ads
Remarketing Campaign
        ↓
R$ 1,000 sale

There is only one R$ 1,000 sale.

But three different Meta campaigns participated in that journey.

When we look at each campaign in isolation inside the platform, we can lose that relationship.

Depending on the attribution rules and how the reports are analyzed, the same conversion may appear associated with different interactions or campaigns, creating the impression that each campaign has its own independent economic result.

The risk is interpreting something like:

Discovery Campaign
→ participated in R$ 1,000 in revenue

Consideration Campaign → participated in R$ 1,000 in revenue

Remarketing Campaign → participated in R$ 1,000 in revenue

as if it meant:

R$ 1,000
+
R$ 1,000
+
R$ 1,000
=
R$ 3,000 in revenue

But the business didn’t generate R$ 3,000.

It generated:

ONE SALE
R$ 1,000

All three campaigns participated in the acquisition of the same sale.

To understand the real economics of that journey, one possible approach is to reverse the calculation.

Instead of asking each campaign individually:

How much revenue did this campaign attribute to itself?

we can ask:

How much did all the marketing actions involved in acquiring this sale cost?

Imagine:

Discovery Campaign
Cost: R$ 80

Consideration Campaign Cost: R$ 50

Remarketing Campaign Cost: R$ 70

The observed cost of that journey would be:

R$ 80 + R$ 50 + R$ 70
=
R$ 200

for one actual sale of:

R$ 1,000

So, from this journey perspective:

Actual revenue: R$ 1,000
Cost of participating campaigns: R$ 200

Journey ROAS = 5

That’s conceptually different from assigning the same R$ 1,000 in full to each campaign and calculating three independent returns.

And this problem doesn’t happen only between different platforms.

You can have overlap between:

Meta × Google

but also between:

Meta Campaign A
      ×
Meta Campaign B
      ×
Meta Campaign C

and even between different ads, ad sets, and touchpoints within the same platform.

The longer the journey, the greater the possibility that different marketing actions participated in the same sale.

That’s why a particularly useful question stops being:

Which campaign won this sale?

and becomes:

Which campaigns participated in this sale, and how much did it cost to build this acquisition?

That doesn’t make the ROAS reported by the platform useless.

It remains an important metric for optimization within that ecosystem.

The important thing is not to automatically interpret:

ROAS reported for each campaign
=
independent financial return generated by each campaign

when several of those campaigns may be participating in the same sales.

For a simple operation:

Campaign
   ↓
Ad
   ↓
Purchase

that difference may be small enough not to matter.

But in an operation involving discovery, consideration, content, remarketing, and multiple touchpoints, analyzing the journey reveals something an isolated campaign cannot:

the combined cost of the marketing actions required to turn someone who wasn’t ready to buy into an actual sale.

What if GA4 reports fewer conversions than your checkout?

That doesn’t automatically mean GA4 is “wrong” either.

GA4 depends on its ability to observe events.

There are several reasons why an actual sale may not appear correctly in an analytics tool:

  • incomplete implementation;
  • tagging problems;
  • domain changes;
  • external checkout;
  • blockers;
  • consent;
  • lost identifiers;
  • failures when sending events;
  • users returning in a different context or on another device.

The important point is:
an analytics tool shouldn’t automatically be treated as your financial database of sales.

If your checkout has 81 approved sales and GA4 recorded 63 purchase events, the first question should be:

Why weren’t we able to observe or connect the other 18?

not:

Did those other 18 sales actually happen?

Comparing Meta Ads directly with GA4 may be the wrong question

When someone puts both dashboards side by side:

Meta Ads: 100 conversions
GA4:       63 conversions

it’s tempting to conclude that there’s a 37% error.

But that comparison mixes different problems.

Before looking for an error, we need to know:

  • are both looking at the same period?
  • is the conversion definition the same?
  • are both using the same date to record the sale?
  • are the attribution windows equivalent?
  • is the attribution model the same?
  • are events reaching both systems correctly?
  • is there deduplication?
  • does the sale happen on another domain?
  • are we comparing actual sales or attributed conversions?
  • how many sales appear in both platforms?

Without answering those questions, the numerical difference alone tells us very little.

The first number I would check is the number of actual sales

A safer way to begin the analysis is to reverse the logic.

Instead of starting with the media dashboards:

META ADS
   ↓
how many sales?

GOOGLE ADS ↓ how many sales?

GA4 ↓ how many sales?

start with transactional reality:

CHECKOUT / PAYMENT SYSTEM
        ↓
81 actual sales
        ↓
Which journeys resulted in these sales?

Now we can analyze those 81 sales.

For each one, we want to understand things like:

Sale #9281
R$ 897

First touch: Meta Ads

Intermediate touchpoints: Organic Google Email

Last touch: Google Ads

Time to conversion: 37 days

And some may simply look like:

Sale #9304
R$ 597

Journey: not identified

That doesn’t invalidate the others.

The question stops being:

How many sales does Meta say it generated?

and becomes:

Of the sales that actually happened, which journeys can we observe and which channels participated in them?

It sounds like a small change, but it completely changes how acquisition is analyzed.

This is where an independent attribution layer makes a difference

In a direct sale:

Meta Ads → Checkout → Purchase

you may not need any of this.

If practically all acquisition happens within a single channel and the conversion occurs shortly after the click, the advertising platform’s own dashboard may provide enough information to make decisions.

Now consider:

Meta Ads
   ↓
Organic Instagram
   ↓
Google
   ↓
Blog
   ↓
Email
   ↓
Google Ads
   ↓
Meta Remarketing
   ↓
Sale 60 days later

In this scenario, relying exclusively on each platform to explain acquisition means asking every participant to tell its own version of the story.

An independent layer allows you to start with the actual conversion and reconstruct the journey that led to it.

And there is another important difference: it allows you to know which sales you’re actually able to observe, instead of inferring coverage by adding up numbers reported by different platforms.

How Vestige Metrics approaches this problem

Vestige Metrics starts from the relationship between the acquisition journey and the actual conversion.

A sale received through an integration doesn’t have to exist only as an aggregated number inside a dashboard.

It can be connected to the visits that happened before it.

For example:

SALE #9281
R$ 897
        ↓
37-day journey
        ↓
Meta Ads
        ↓
Organic Google
        ↓
Email
        ↓
Google Ads
        ↓
Sale

This allows you to analyze different perspectives without pretending that only one point in the journey existed.

You can ask:

  • who started the acquisition?
  • what was the last touchpoint?
  • which channels participated in between?
  • how long did it take to convert?
  • which campaigns appear in journeys that convert?
  • how many actual sales included participation from a specific channel?
  • what percentage of sales have an identified journey?
  • how many sales still don’t have enough information?

The goal isn’t to decide that Meta or GA4 is “wrong.”

And it isn’t to promise that every journey can be known perfectly.

The goal is to have an independent reference for understanding what we can observe before actual conversions, how much coverage that information provides, and which patterns appear across those journeys.

So which one is right: GA4 or Meta Ads?

If the question is:

How many sales actually happened?

start with the system where the transaction actually happened.

If the question is:

How many sales did Meta attribute to my campaigns?

look at Meta Ads.

If the question is:

How did GA4 attribute the conversions it was able to observe?

look at GA4.

And if the question is:

What journeys did my customers take before purchasing, and which channels participated?

then you need to connect actual conversions to the touchpoints that came before them.

You don’t need to pretend you know 100% of those journeys before you can start learning from them.

Some sales may remain unattributed.

What matters is knowing your coverage, understanding potential biases, and having a sample that is representative enough for the decision you want to make.

Most importantly, don’t confuse:

Meta: 50 sales
+
Google: 50 sales

with:

100 different identified sales

The same sales may be present in both groups.

Likewise, multiple campaigns within Meta itself may have participated in the same sale.

That’s why, when GA4 and Meta Ads report different numbers, the most useful question usually isn’t:

Which one is wrong?

It’s:

What exactly is each number measuring, which sales are behind it, and how much do those populations overlap?

Once you can answer that, the discrepancy stops looking like a mysterious defect.

Instead, it reveals the difference between actual sales, tracking coverage, and attribution — three things that may look the same when you’re only looking at dashboard numbers, but represent completely different problems.