Same store, same week, same orders. The Google Ads dashboard reports one number, GA4 reports another. The first reflex is to go looking for a bug in the tag, when the work usually starts earlier than that: bringing the two dashboards onto common ground. Common ground means three questions answered the same way on both sides: what is being counted, which day it is written to, and which orders are in scope. A difference taken before those three are aligned is a difference between definitions, not a fault in the setup.
Two numbers can also agree without any of that alignment, and that is the most misleading case of all. In one of the accounts I examined the gap between the GA4 order count and the Ads conversion count was a single digit; the order rows in an Explore report had been counted on the GA4 side, the conversion rows in the Webpages report on the Ads side, and at a glance the setup looked flawless. Yet each number had narrowed for a different reason: the GA4 side had come down to orders whose cookie still held a click ID, the Ads side to conversions where the page URL had been recorded. Two separate filters had shrunk both denominators at once, and the overlap looked better than it really was. The closeness was not a confirmation, it was a coincidence.
This piece covers the first two of those three questions: what is being counted, and which day it is written to. The third one, which orders are in scope, needs a row-level join and I take that up in a separate piece. The goal is not to make the two numbers equal. It is to break the difference down into named, measurable causes.
The Same Order, a Different Counting Unit in Every Column
The mismatch does not originate in the reports, it originates in the definitions. Across six columns in two dashboards the same order becomes six different things; until that is visible, the comparison has no meaning.
| Column | What it counts | Which day it writes to | Unit |
|---|---|---|---|
GA4 purchase | An event fired on the site | Day of the event | Whole-number event |
Ads Conversions | A conversion action, per the counting setting | Day of the click | Credit share, can be fractional |
Ads Conversions (by conv. time) | The same action | Day of the conversion | Credit share, can be fractional |
Ads All conv. | Includes secondary actions and view-through conversions | Day of the click | Credit share |
Ads Orders / Revenue | Order count and amount, only on accounts sharing cart data | Day of the click | Order |
| GA4 Advertising reports | Varies by report, there is no single counting method | Varies by report | Mixed |
The rules that follow from this:
- The Ads
Conversionscolumn is not an order count.OrdersandRevenueare separate metrics and only populate on accounts that share cart data.1 They are not present in every account.Orderscounts orders rather than items, so two products in one order are a single order, andRevenueis the order value net of any order-level discount.1 Where they are present, a gap betweenOrdersandConversionsis expected and should not be forced into agreement. - The GA4 Advertising section is not one counting method. The reports inside it behave differently from each other. Attribution reports use GA4’s own model and are not a copy of Ads. The Conversion performance report, when switched to the Ads perspective, is designed to match the
All conversionscount attributed to your Ads account.2 Without knowing which report you are reading, a number from this section cannot be compared with Ads at all. - The counting setting varies per conversion action, and its defaults are not uniform. The default is “Every conversion” for website and Analytics transactions, and “One conversion” for Analytics goals and calls from ads.3 So two different counting logics can be running side by side in the same account without anyone having chosen either. An action set to “One” will sit systematically below GA4 for any customer who buys twice off one click, and that has nothing to do with the tag.
- The gap between
All conv.andConversionsis a diagnostic. If the gap is near zero there is no view-through inflation in the account. If the gap is large, do not immediately say view-through: conversion actions marked as secondary also count only insideAll conv.and never enter theConversionscolumn.4 Separate the two before drawing a conclusion.
Five Myths in Circulation
These five beliefs are repeated constantly in industry content and all five contradict Google’s own documentation. Clear them before reading any report.
| Myth | Reality |
|---|---|
| ”The Ads conversion window defaults to 90 days” | The default is 30 days. 90 is the configurable maximum.5 |
| ”Ads uses last-click, GA4 uses data-driven” | DDA (data-driven attribution) is the default in Ads too for most conversion actions, but not universally. Last click is still supported; what was removed is first click, linear, time decay and position-based.6 |
| ”The difference comes from view-through conversions” | View-through conversions never enter the Conversions column. They count inside All conv. and in their own separate column.7 Furthermore GA4 does not support them at all,8 so no comparison you run can produce a GA4 counterpart for them. |
| ”If GA4 is higher than Ads, measurement is broken” | The default setting is already asymmetric. GA4 reports count paid and organic channels together, Ads reports count only Google paid channels.9 |
| ”You need 200 conversions and 2,000 interactions to qualify for DDA” | There is no threshold. All conversion actions are eligible regardless of volume. The 200 conversions and 2,000 interactions figure is a recommendation for the model to distinguish patterns better, not a gate.10 |
The third one is particularly insidious because it moves from a correct observation to a wrong conclusion: there is a gap between All conversions and Conversions, but for anyone comparing GA4 against the Conversions column, view-through is not part of that gap.
The Time Axis: Click Day and Conversion Day Are Not the Same Thing
Google Ads writes a conversion to the day the click happened by default.11 There is sound reasoning behind it: the cost already lands on the click day, so writing the conversion to the same day keeps daily ROAS internally consistent. GA4 writes the event to the day the event happened, because GA4 is not an ad dashboard, it keeps a behavioural record.
Within a fixed date range a clear flow forms between these two ways of writing. Orders clicked before the window and converted inside it join the conversion-time axis, while orders clicked inside the window and converted later drop out. For example, in some accounts the figure read by conversion time over the same two-month window can look roughly one third higher than the figure read by click time.
The gap also grows with funnel depth. In one example account, the divergence between (by conv. time) and click time was around thirteen percent for add to cart, eighteen percent for begin checkout and thirty percent for purchase. The direction makes sense: the later an action happens, the further the click-day convention displaces it. So in this example the time axis mainly affects the purchase action.
More importantly, that gap varies by campaign type. Brand search has a short decision period so the lag stays low, while in dynamic search and product-focused campaigns the gap can more than double. In low-volume campaigns the ratio loses mathematical meaning entirely, since a single delayed order shifts the percentage noticeably.
Three practical consequences:
- Recent days always look incomplete and fill in later. Because the conversion window can extend to ninety days, backdated writing can continue for weeks.5 Making a decision from yesterday’s ROAS is structurally wrong. DDA can also reattribute a conversion for up to seven days after it happened, so the number can still move even after it has filled in.12
- Campaigns with long consideration periods are systematically undercounted. Next to a brand campaign they look unfairly bad.
- The time zone setting widens the gap too. If the Ads account time zone and the GA4 property time zone differ, every order at a day boundary falls on the wrong side.13
Where the Report Date Range Must End
Google does not stop at “be careful with recent days” here, it gives a checkable rule: the report date range must end at least thirty days in the past, further back if your conversion window is longer.14 It is verifiable at a glance in the date picker and it is the first thing to do before sitting down to compare.
The dashboard can also quantify the shortfall for you. On accounts using Smart Bidding, when more conversions are predicted to land in the selected date range, hovering over Conversions, Cost / conv. or Conv. rate in the bid strategy report shows the average lag and the number of conversions estimated to be not yet reported; the performance chart marks the range that is still filling in.14 The condition matters: if the range ends far enough back, or no pending conversions are predicted, nothing appears at all, and that absence is itself an answer. Instead of telling a client that recent days are incomplete, you can give them the figure, with no export required.
To see the distribution of the lag itself, go to Campaigns, Ad groups or Search keywords, click the segment icon and choose Conversions > Days to conversion. It splits the conversion columns into at most nineteen rows.14
The Columns That Report by Conversion Time
The second normalisation to perform before comparing: switch to the Ads columns that report by conversion time. Those columns were added precisely so that comparisons against third-party analytics tools would be possible.11
The family is six columns and that is all of them: Conversions (by conv. time), Conv. value (by conv. time), Value / Conv. (by conv. time), All conv. (by conv. time), All conv. value (by conv. time), Value / all conv. (by conv. time).11
What the list lacks is the more useful information: there is no conversion-time version on the cost side. Neither Cost / conv. nor any other column carrying spend has a counterpart in this family. The reason is structural, cost is written to the day of the click; move the conversion to its own day and the numerator and denominator sit on two different axes. So do not compute CPA or ROAS from these columns. Use them for the comparison and read efficiency from the click-day columns instead.
Two more constraints: the data exists from March 2019 onward, and store visit and store sales conversions never enter these columns.11 In an account with physical stores the conversion-time total is therefore not a like-for-like counterpart of the click-day total; the difference comes from coverage, not from the model.
The Same Report, One Dropdown, Twenty-Six Points and Up
There is a control in the lag report that is easy to miss: whether the duration is measured from the first ad interaction or the last. I pulled the same week of the same account, at the same lookback window, twice, changing only that menu. The total conversion count is identical in both. The share of the “less than one day” bucket reads like this:
| Lookback window | From last interaction | From first interaction |
|---|---|---|
| Thirty days | 83.9% | 58.3% |
| Sixty days | 81.1% | 53.7% |
| Ninety days | 80.3% | 51.7% |
The difference comes from a single dropdown and it varies with the window: about twenty-six points at thirty days, twenty-seven at sixty, twenty-nine at ninety. Which means the sentence “our customers buy same-day” describes which control was left at its default, not customer behaviour. The gap between the two columns widens as the window widens, because a wider window keeps finding earlier first touches.
The tail carries information too. Looking at a two-month range in the same account, roughly one conversion in six did not happen on the same day: eleven percent took longer than a week, seven percent longer than two weeks, two percent longer than a month. One property of this distribution should not be skipped: the report shows all conversion actions together, and in that account two thirds of the column is add to cart. So this is not a purchase lag curve, it is a distribution dominated by a micro conversion that fires in the same session; purchases sit at its long end. That last slice still matters, because a thirty-day default conversion window never records those conversions at all; had the account’s window not been longer, those buckets would have come back empty.
The distribution itself is biased as well, and the direction is known. Pull the report up to today and the late conversions from the most recent days have not happened yet, so the short buckets are complete while the long ones are still filling. That is exactly what the rule about ending the range at least thirty days back14 is for. The same-day share therefore looks higher than it is, whichever dropdown you measure it with.
This is the whole topic in miniature: the number does not change, the definition does.
The two axes covered here, counting unit and time, close most of the difference, and both are aligned from dashboard settings alone without writing any code. Two questions remain, and each deserves its own piece.
The first is why a fractional value like 0.29 appears against a single order. The common explanation points at DDA, but it is incomplete: a fractional value has two distinct causes that get conflated, and there is a simple test for telling which one you are looking at. In fractional conversions in the Ads dashboard I go through the model comparison, the window test, and the total preservation I measured at account level.
The second is how the two dashboards are actually compared. Instead of putting totals side by side, you join at row level on an identifier present on both sides. In the row-level join I cover how the join key is chosen, why the result cannot be read as a single match rate, and the measured ceiling of the method. The fourteen-point checklist is there too.
Once the time axis and the window width are separated out, the remaining difference is usually smaller than expected. Working out where your current setup is losing data, at row level, is generally a day's work.
Describe Your SetupFootnotes
-
Conversions with cart data metrics (Google Ads Help). The prerequisite for the
OrdersandRevenuemetrics is explicit: “You must share cart data as part of your website or app conversions.” ↩ ↩2 - Conversion performance report (Google Analytics Help). “In both the data visualizations and the data table, the All conversions count attributed to your Google Ads account will match the count you see in Google Ads.” The same page notes that on some large properties, conversions that cannot be attributed to any channel may be removed from the total, in which case a data quality icon appears. ↩
- About conversion counting options (Google Ads Help). The default counting setting varies by conversion source: “Every conversion” for website, in-app actions, Analytics transactions and import actions; “One conversion” for calls from ads, Analytics goals and app installs. The same page defines the repeat rate as the every-conversion count divided by the one-conversion count, and notes that changing the setting does not change that rate. The counting choice is reflected in the “Conversions”, “All conversions” and “View-through conversions (VTC)” columns. ↩
-
Conversion goals overview (Google Ads API). Conversion actions with
primary_for_goalset tofalseappear in “All conv.” and its derivatives, never enter the “Conversions” column, and do not participate in bidding. The same page also lists the fields that remain editable via the API for conversions imported from GA4. ↩ - About conversion windows (Google Ads Help). The window is set per conversion action: “You can set different conversion windows for each of your conversion actions.” The click conversion window defaults to thirty days and, for Search and Display campaigns, can be set up to thirty, sixty or ninety days depending on the conversion source. ↩ ↩2
- About attribution models (Google Ads Help). Two models are supported in Ads: “Last click” and “Data-driven”. The page describes DDA as “the default attribution model for most conversion actions”, meaning not all of them, and states that last click is “still supported”. The removed models are first click, linear, time decay and position-based. For credit distribution itself see the DDA page. ↩
- Understand your conversion tracking data (Google Ads Help). “To compare data between Google Analytics and Google Ads fairly, go to the Google Analytics Advertising section, or filter your reports for ‘Session source / medium’ set to google / cpc… always account for the 24-48 hour processing delay before comparing final results.” The same page also states that view-through conversions never enter the “Conversions” column and are counted only inside “All conversions”. ↩
- About attribution reports (Google Ads Help). From the conversion scope row: engaged-view conversions (EVCs) are supported in both Google Ads and Google Analytics 4 properties, but conversions attributed to impressions (VTCs) are not currently supported in GA4. ↩
- Select attribution settings (Google Analytics Help). The default channel setting differs across the two products: Google paid in Ads reports, paid and organic in GA4 reports. The same page gives the key event lookback window default as thirty days for acquisition events and ninety days for all other key events, and lists the time zone difference as a source of discrepancy. ↩
- About data-driven attribution (Google Ads Help). Verbatim: “All conversion actions are eligible for data-driven attribution (DDA), regardless of conversion or interaction volume.” The 200 conversions and 2,000 interactions figures are a recommendation, not a gate; the page states the model works with less data. The model is advertiser-specific and distributes credit by comparing converting paths against non-converting ones. The same page does not present equality of totals as a guarantee, saying only that “the last click and data-driven attribution models can have the same results in certain situations.” ↩
- Understand your conversion tracking data (Google Ads Help). The by conversion time columns report to the day the conversion happened: “Conversions (by conv. time) columns report conversions based on the date the conversion occurred.” The same page notes these columns were added for comparison with third-party analytics and CRM systems. ↩ ↩2 ↩3 ↩4
- Get started with attribution (Google Analytics Help). The note on data-driven attribution states it plainly: “Conversions can be reattributed for up to 7 days after the conversion.” The same page lists the model’s inputs: time from key event, device type, number of ad interactions, order of ad exposure and creative asset type. ↩
- Data discrepancies: Factors and troubleshooting (Google Ads Help). Ads reporting uses the account time zone; where the account and the property differ, discrepancies appear in reports. The same page also lists conversion lag and invalid traffic filtering as sources of difference. ↩
- Find out how long it takes customers to convert (Google Ads Help). “To make sure your report includes complete conversion data, check that the report’s date range ended at least 30 days ago (or longer if you have a longer conversion window).” The same page gives the segment path (Conversions > Days to conversion, at most 19 rows) and how to see the number of conversions estimated to be not yet reported in Smart Bidding reports. ↩ ↩2 ↩3 ↩4
- 01 Ads writes a conversion to the click day, GA4 writes the event to the event day (a purchase, for example). Over the same window the gap between the two columns can approach one third, and it more than doubles depending on campaign type.
- 02 The Ads Conversions column is not an order count. Orders and Revenue, the metrics that do give order counts, only populate on accounts that share cart data; a gap between them and Conversions is expected and should not be forced into agreement.
- 03 The column family that reports by conversion time is six columns and has no cost-side counterpart. Computing CPA or ROAS from these columns is wrong; use them for the comparison and read efficiency from the click-day columns.
- 04 The report date range must end at least thirty days in the past, further back if the conversion window is longer. No comparison pulled without that is complete, and recent days fill in afterwards.
- 05 The same-day share in the lag report describes which control was left at its default, not customer behaviour: measuring the duration from the first ad interaction rather than the last produces a difference of twenty-six points and up on identical data.
+ Why is the Google Ads conversion count higher than the GA4 purchase count?
The single biggest reason is the time axis. Ads writes a conversion to the day the click happened by default, GA4 writes the event to the day the event happened. Within a fixed date range, orders clicked before the window and converted inside it enter on the Ads side, while orders clicked inside the window and converted later drop out. Before comparing, switch to the Ads columns that report by conversion time. The second reason is the counting unit: the Ads column carries a credit share, not an order count.
+ If GA4 shows more conversions than Google Ads, is the setup broken?
The default channel setting of the two dashboards is already asymmetric: GA4 reports count paid and organic channels together (you can see this in the GA4 model selector as 'Paid and organic channels'), Google Ads reports count only Google paid channels. On top of that: if a conversion action in Ads is fed from a GA4 key event, GA4 only sends events where Google Ads was the last non-direct click. Every order where Google Ads was on the path but not the last click appears in GA4 and not in Ads. Before comparing, read the channel setting on both sides and switch GA4 to the paid and organic last click model.
+ Does the Ads Conversions column tell me how many orders there were?
It does not. That column carries a credit share and can exceed one on a single order depending on how many conversion actions are marked primary in the account. The metrics that do give an order count are Orders and Revenue, but they only populate on accounts that share cart data. Orders counts orders rather than items, and Revenue is the order value net of any order-level discount. Where they are present, a gap between them and Conversions is expected.
+ Can I compute CPA or ROAS from the (by conv. time) columns?
No. The family has six columns and none of them carries cost; there is no conversion-time version of Cost / conv. The reason is structural: cost is written to the click day, so moving the conversion to its own day puts the numerator and denominator on two different axes. Use these columns for comparison against third-party tools and read efficiency from the click-day columns. Two more constraints: the data exists from March 2019 onward, and store visit and store sales conversions never enter these columns.
+ Why is deciding from yesterday's ROAS structurally wrong?
Because recent days look incomplete by design and fill in later. The conversion window can extend to ninety days, so backdated writing can continue for weeks, and DDA can reattribute a conversion for up to seven days after it happened. Google's own rule is that the report date range should end at least thirty days in the past. On accounts using Smart Bidding the dashboard can even give you the estimated shortfall, but only when more conversions are predicted to land in the selected range.