Google Ads reports 4,812 conversions for October. The client opens GA4 on the review call and sees 3,104 for the same campaign, same dates. That is roughly a third fewer, and the account manager now has eleven minutes to explain a measurement gap they did not cause.
This is the most common reason client report numbers don’t match, and it is almost never a tracking bug. Two systems counted two different things, on two different dates, with two different definitions of who deserves credit. Both are internally consistent. Neither is wrong. What makes the moment uncomfortable is that the explanation arrives live, under pressure, from memory, instead of sitting in the report where the client could have read it before the call.
The fix is not a monthly reconciliation exercise. It is naming the methodology once, in writing, in a place the client sees every time.
When client report numbers don’t match, nobody is wrong yet
An ad platform and an analytics property answer different questions.
Google Ads answers: of the people who interacted with my ads, how many later did something I defined as a conversion, within the window I configured, judged by the identity graph I control. It credits that conversion back to the date of the ad interaction.
GA4 answers: of the sessions I observed on this website, how many ended in a conversion event, and which traffic source should get credit under my attribution model and my lookback window. It credits the conversion to the date the event happened.
Those two sentences produce different numbers even when every tag is perfect. A click on 29 September that converts on 3 October shows up in September in Google Ads and in October in GA4. Run that across a month boundary on an account with a long consideration cycle and you have a gap that no amount of tag auditing will close.
So the first move on the call is not to defend the number. It is to say which question your report is answering. Everything after that is detail.
Attribution windows explain more of the gap than any tracking mistake
Attribution window reporting is where most of the difference lives, and it is the part clients find easiest to accept once they hear it.
Google Ads conversion actions use a click-through window that defaults to 30 days and can be set much longer. Meta’s default is a 7-day click and 1-day view setting. GA4 applies its own model and its own lookback, usually credited to the session source that brought the user in. Three windows, three credit rules, one campaign.
Then there is the part analytics genuinely cannot see. View-through conversions exist in DV360, Campaign Manager 360, Meta and YouTube reporting because those platforms know they served an impression. GA4 has no impression data at all. If someone saw a programmatic display banner on Tuesday, searched the brand on Thursday and converted, the DSP may claim it and GA4 will file it under organic search. For display and BVOD campaigns, this single difference can account for most of the gap, which is also why the headline metric for those campaigns should rarely be a click-based one.
Cross-device is the third layer. Platforms match logged-in users across phone and laptop. GA4 only does that if User-ID is implemented. Mobile browse, desktop purchase: one conversion in Meta, two unlinked sessions in GA4.
Untagged and unconsented traffic makes the platform number look larger
The second family of causes is traffic that the platform counted and analytics never saw as paid.
UTM tracking gaps are the classic version. Auto-tagging is off while someone also pasted hand-written UTMs, so one of them wins and the other breaks. A landing page redirect strips query parameters. A vendor’s tracking template adds a hop. Someone used Paid_Social in one line item and paid-social in another, and GA4 treats them as two channels. In every one of these cases, the click is real, the session is real, and the session lands in direct or organic. The platform looks inflated only because the comparison bucket lost rows.
Consent is now the bigger half of this for European accounts. If a visitor declines analytics cookies, the ad click still happened and the ad platform still counts it, but there may be no GA4 session to count at all. Modeled conversions partly cover this on the Google side, which means you are comparing a number that includes modeling against a number that does not. Worth saying out loud rather than letting the client discover it.
Bot filtering and deduplication push the smaller number down, not the larger one up
Clients often assume the lower figure is the honest one and the higher figure is marketing optimism. That is not how the mechanics work.
GA4 automatically excludes traffic from known bots and spiders. Ad platforms filter invalid traffic too, sometimes before billing, sometimes retroactively in a later credit, on their own schedule. Those two filters never run at the same moment, which is one of the reasons a figure you reported last week can shift this week.
Deduplication does similar work. Three clicks from the same person in ten minutes are three clicks in the platform and one session in GA4. Sessions also time out after 30 minutes of inactivity or at midnight, so a long browse becomes two sessions. Clicks, sessions and users are three different units of measurement, and comparing a click count to a session count is an arithmetic mismatch before anyone discusses attribution.
Dedup across platforms matters when you report multi-channel. If a user is reached by both Meta and DV360 and you add the conversion columns together, you overstate the total. The honest presentation is per-platform figures plus a clearly labelled business outcome from one agreed source, which is the whole point of keeping a multi-channel dashboard from turning into a metric mashup.
One documented line closes the gap better than a call does
What actually ends the question is a short, fixed note attached to the metric. Not a paragraph of disclaimer. Something like:
Conversions as reported by Google Ads, credited to the date of the ad click, 30-day click window. The client’s GA4 property counts conversions on the event date using last-click attribution and excludes visitors who declined analytics consent, so GA4 will normally show a lower figure.
Two sentences, written once, correct every month. A client who reads that before the call does not open GA4 to catch you out. They open it to cross-check, which is a different conversation and a much shorter one.
This is also why the note has to live in the report rather than in an email thread or a sidebar comment in last quarter’s deck. Reporting questions repeat because the answer was delivered in a channel that nobody re-reads. Dashboards that carry their own explanations absorb the question instead of forwarding it to you.
Where to standardise so it stops repeating
Decide once, at the agency level, not per account manager:
- Which system is the source of truth for each metric. Media delivery (impressions, clicks, spend, CPM, VTR) from the platform or ad server. Site behaviour and revenue from analytics or the client’s back end. Write the split down.
- Which windows you report. If you keep Google Ads on a 30-day click window and Meta on 7-day click, say so next to the number instead of letting the client assume they are comparable.
- The vocabulary. Click, session, user, conversion, view-through conversion. A short glossary attached to the report removes half the confusion before it starts.
- Where the note renders. Next to the metric, on every report, by default.
That last point is a template problem rather than a writing problem. In Screebl, the methodology note is a text element in the reusable template, so it sits beside the KPI tile or the conversions table on every report built from that template, for every client, without anyone remembering to paste it. Templates lock once reports use them, which means the note you agreed in January is still the note on June’s report. If the agency wrote a campaign brief, the optional assistant on the shared report can answer the client’s follow-up from that report’s own content, during the week, without an email to you.
The practical test is whether a new account manager inheriting the account would explain the discrepancy the same way the previous one did. If the answer lives only in someone’s head, the question comes back next month. If it lives in the template, it does not. Agencies weighing that up usually start with the plan comparison.
Questions clients and account managers actually ask
Which number should I put in the report, the platform’s or the client’s GA4? Report the platform figure for media delivery, because that is what the platform billed and what the media plan was built against. If the client’s commercial decisions depend on their own analytics or CRM, show that figure too, labelled with its source, and never silently swap between the two from month to month.
Is a gap of 20 to 30 percent normal? There is no universal published figure, and anyone quoting one is guessing. The size depends on your channel mix, the length of the conversion path, consent rates in your market and whether view-through conversions are included. What matters is whether the gap is stable. A consistent gap is a methodology difference. A gap that doubles in one month is worth investigating as a tracking problem.
Can I make the two systems match? Not exactly, and chasing an exact match wastes time. You can narrow it: fix auto-tagging and UTM conflicts, remove redirects that strip parameters, align the comparison period, and compare like units (sessions to sessions, not clicks to sessions). Residual differences from view-through credit, cross-device matching and consent will remain by design.
Does shortening the attribution window in the ad platform fix it? It changes the number, which is not the same as fixing anything. Shortening the window may bring the platform closer to GA4 while understating campaigns with longer consideration cycles. Change windows for measurement reasons, then tell the client the window changed, because the figure will move and they will notice. Unexplained movement in a previously reported number is its own separate conversation about data freshness.



