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.