Google Ads reports 84 conversions for last month. GA4 reports 61 for the same period. Meta claims 130 purchases, and the finance export shows 96 orders in total, from every source combined. Someone asks which number is right, and the honest answer is that they all are, which is a difficult thing to say out loud in a review meeting.
The instinct is to assume something is broken. Usually nothing is. GA4 conversions don't match Google Ads because the two are answering different questions, and the reasons are written down in each platform's own documentation. Once you know where the gaps come from, you can stop trying to close them and start using each number for the job it's actually good at.
GA4 and Google Ads aren't counting the same days
This is the biggest single source of the gap, and the least obvious.
In Google Ads, a conversion is credited back to the date of the ad click. Analytics records it on the date the event actually happened. So a click on the 28th that turns into a purchase on the 3rd shows up in last month's Google Ads report and this month's GA4 report. Run both reports on a calendar month and they will never line up. Google's own guidance is to switch the Ads column to "All conv. (by conv. time)" if you want the two to be comparable at all, and even then the models differ.
Then there are the windows. Google Ads applies a 30-day conversion window by default for Search and Display, configurable up to 90 days for website conversion actions. GA4 uses a 90-day lookback window for most key events, and 30 days for acquisition events like first_visit. Meta's default attribution setting for new ad sets is 7-day click.
Seven days versus ninety. If your buying cycle is longer than a week, Meta is structurally undercounting itself while GA4 keeps crediting touchpoints a quarter later. That is not an error in either tool.
One more thing hides in here, and it takes two minutes to rule out. Google Analytics reports in the property's time zone; Google Ads reports in the ad account's time zone. If someone set one up from a laptop in Karachi and the other from an agency desk in London, every daily figure is shifted by hours and every month boundary sits in a slightly different place. It explains a surprising number of small, persistent discrepancies that teams have quietly written off as tracking noise.
Each platform only sees its own half of the journey
Ad platforms can only credit what they can see. A Google click, or a Meta impression. Neither has any idea the other one exists.
So when a customer sees a Meta ad on Tuesday, searches your brand name on Thursday, clicks the Google ad, and buys on Friday, both platforms claim the sale. Add the platform numbers together and you get a total higher than the number of orders you actually shipped. This is why platform-reported conversions summed across channels are almost always inflated, and why the inflation grows the more channels you run.
GA4 sits in a different position. It sees the whole session history for a browser, applies a single model across every channel, and splits the credit. That is a more honest cross-channel view. It's also the reason GA4 usually reports fewer conversions per channel than the channel reports for itself.
Consent, blockers and the rest of the leakage
Beyond attribution, some conversions simply never reach the analytics tag. A visitor declines the cookie banner. An extension blocks the collection endpoint. A Safari user's identifier expires before they come back. Server-side conversion APIs recover some of that for the ad platforms, which is part of why platform numbers tend to sit above GA4 rather than below it.
You cannot eliminate this. You can measure roughly how big it is, by comparing tagged sessions against server-side order records for a period, and then hold that ratio in your head whenever you read a report.
Which number to trust, for which decision
Stop asking which platform is right. Assign each one a job instead.
- In-platform numbers drive in-platform bidding. Google's smart bidding optimises against Google's conversion data. Feeding it GA4's fractional credit would make it worse, not better. Leave it alone.
- GA4, or a warehouse, drives budget allocation. When you're deciding whether to move spend from paid social to search, you need one model applied consistently across channels. That's what GA4's cross-channel view is for.
- Your CRM or order system is the truth for revenue. Every reported conversion figure is an estimate of contribution. The order table is a count of what happened.
Once those three roles are written down, the meeting changes character. Nobody spends twenty minutes arguing about a 30% gap, because everyone already knows the gap exists and roughly how big it should be.
Make the gap a monitored constant
A gap between two systems is only alarming when you don't know what it usually is.
We treat this as a data engineering job rather than a reporting one. Pull the platform figures and the order records into the same table daily, calculate the ratio between them, and watch that ratio rather than the raw numbers. When Meta normally reports 1.35 purchases for every order in your system, a week at 1.34 is fine and a week at 2.1 means something genuinely broke: a duplicated pixel, a test order flooding the feed, a consent change that killed half your tagging.
That's the same principle behind pipelines that alert on anomalies rather than errors. A number that is wrong in a familiar way is a known quantity. A number that suddenly moves is a signal. Most teams monitor neither, then get surprised in a quarterly review.
It's also why we fix measurement before spending anything when we take on full-funnel campaign work. Optimising against numbers nobody trusts is an expensive way to feel busy.
One thing to do tomorrow
Open Google Ads and switch your conversion column to "All conv. (by conv. time)", then pull the same date range in GA4. Write both numbers down along with the ratio between them.
Do that for three months and you'll have a baseline. After that, the question in the review meeting stops being "why don't these match" and becomes "did the gap change", which is a question with a useful answer.



