Measurement · Attribution
Marketing attribution: why every tool gives you a different number
Marketing attribution is the set of rules that decides which touchpoint gets credit for a conversion, and every platform ships different ones. Google Ads credits the date of the click. Analytics credits the date of the conversion. Before you argue about models, check that you aren't comparing two rulers and calling it a discrepancy.
Almost nobody has an attribution problem.
Almost everybody has a definition problem.
The meeting sounds the same either way: the number moved, somebody asks why, and three tools give three answers. So the conversation goes straight to the model (last click, data-driven, should we test something else). It skips the four settings underneath, which are what produced the gap.
What is marketing attribution, actually?
Marketing attribution is how a platform decides which touchpoint gets credit for a conversion. That's the textbook line, and it's the reason people think attribution is a model you pick once. It isn't. It's four dials, and the model is only the second one.
- 1. What counts as a conversion at all. Which conversion actions or key events are included in the headline number, and which are recorded but ignored. This is the dial that moves the number most and gets audited least.
- 2. Which model shares the credit. Last click, data-driven, and so on. The dial everyone argues about.
- 3. How long the credit lasts. The conversion window: how many days after a click or a view a sale still counts.
- 4. Which date the credit lands on. The day of the click, or the day of the sale. Nobody talks about this one, and it silently reshapes every chart you've ever put in a report.
Two platforms can agree perfectly on dial 2 and still disagree by 40% because they differ on 1, 3 and 4. That's most "attribution discrepancies" I've ever been asked to explain.
Why do Google Ads and Analytics never show the same number?
Because they are not answering the same question. Google says so itself, in plain language, in its own help documentation. This is the single most useful paragraph in the whole topic:
“Google Ads reports conversions against the date/time of the click that led to the conversion. Analytics uses the date/time of the conversion itself.” And: “Google Ads uses the last Google Ads click, but Analytics uses the last click across all channels.”
Google Analytics Help, Data discrepancies between Ads and Analytics (retrieved 29 July 2026)
Read that twice, because it has a consequence people miss. A sale on Tuesday that came from a Friday click is on Friday in Google Ads and on Tuesday in Analytics. Not a rounding error. A different row of your chart.
It also explains something that gets blamed on tracking every quarter: Google Ads figures for the last few days keep going up after the fact. They have to. A conversion that happens next week gets credited back to a click that already happened, so recent days are always incomplete until the window closes. Anything you decide on a two-day-old number is a decision on a partial number.
See which of your conversions land on which date, on your own accountsWhere does the gap actually come from?
Here are the four dials side by side, so you can see where a gap comes from before you go looking for a bug.
| The dial | Google Ads | Google Analytics 4 | What a gap here usually means |
|---|---|---|---|
| What counts | Conversion actions marked primary and included in the account's default goals | The events marked as key events in the property | Check this first. Two systems counting different events will never reconcile, and no model change will fix it |
| Who gets credit | Last click or data-driven. Google states first click, linear, time decay and position-based are no longer supported | Data-driven, paid and organic last click, or Google paid channels last click. Direct visits get no credit unless the whole path is direct | Expect a permanent gap on non-Google traffic. One tool can only see Google clicks; the other sees every channel |
| How long it lasts | Click-through window default 30 days (settable 1–90), view-through default 1 day, engaged-view default 3 days | Its own windows, plus conversions can be reattributed for up to 7 days after the fact | A long window flatters the last 30 days. Changing it applies going forward only, so before and after are not comparable |
| Which date it lands on | The date of the click | The date of the conversion | The one nobody checks. Same sale, two days, two charts, and the daily shapes never line up |
Which attribution model should you actually use?
Short answer: the model matters far less than the three dials around it, and the honest options are fewer than they were two years ago. Google removed most of them.
| Model | What it does | Where it misleads you | Best for |
|---|---|---|---|
| Last click (Google Ads) | All credit to the last-clicked ad and keyword | Systematically starves everything upstream: awareness, broad terms, anything that starts a journey it doesn't finish | Short, single-touch buying cycles. Also a stable baseline you can explain to anyone |
| Data-driven (Google Ads) | Splits credit using your own past data for that conversion action | You cannot audit it. It's the default and it's usually the better call, but you're trusting a model you can't inspect, on data the same company sells you | Most accounts, most of the time, provided you never use it to settle a channel-versus-channel argument |
| Paid and organic last click (GA4) | All credit to the last channel clicked, across every source | Direct gets nothing unless the whole path is direct, so "direct" traffic quietly subsidises whatever came before it | Cross-channel reporting where you need one rule that treats every channel the same way |
| Google paid channels last click (GA4) | All credit to the last Google Ads channel clicked | Deliberately blind to non-Google channels. Useful for reconciling with Ads, useless as a view of the business | Reconciling GA4 against Google Ads when you're chasing a discrepancy, not reporting performance |
| A holdout or geo test | Withholds ads from a comparable group and measures the difference | Slow, needs real budget and real discipline, and it dies the moment someone senior switches the ads back on early | The only thing that answers "did the ad cause it?" No model can |
| Your own before-and-after log | You write what you changed, what you expected, and when you'll check | Records intent, not truth. Only as good as your discipline, and it proves nothing on its own | Judging whether the decision was any good. The one thing no platform stores for you |
If you take one thing from that table: changing the model changes the story, never the sales. The business did what it did. The model only decides who in your spreadsheet gets the applause.
See which model and which window your account is running right now, freeWhat breaks first: the model, or the definition?
The definition. Every time. And I'm not the only one who thinks so, which is the part worth showing rather than asserting.
And it is not just my opinion
We run a small research engine that reads public discussions where operators and analysts talk shop, and keeps what they say in their own words. Over the last two weeks the most repeated problem in that bank wasn't a model. It was a version of: the number moved and I can't tell whether the business changed or the measuring stick did.
Two lines from the field
Two lines from r/analytics in late July say it better than a paragraph of mine could. One person points out that half the "why did revenue drop" threads are really why did our definition of revenue change
. Another warns that once a definition shifts underneath you, the chart silently compares two different rulers
. The same thread lands on a fix I've since stolen: treat a metric definition change as a release gate, not a memory test. Something announced and dated, not something one person is expected to remember in a meeting.
What this evidence is, and what it isn't. It comes from people who post publicly about their work. Not a sample of the market, and not the same thing as our own clients. We haven't interviewed anyone, so we can't ask a follow-up question. The counts behind "most repeated" come from a few weeks of one engine, not a historical dataset. It's a signal about what practitioners are wrestling with. It is not a statistic, and we won't dress it up as one.
What we found reading real conversion setups
I'm building an open-source console that reads my Meta and Google accounts and changes nothing I haven't approved. One of its screens does nothing but answer a single question: can you trust the conversion counter? Building it meant reading conversion configuration out of real accounts through the API, and that turned up things I had genuinely assumed were rare.
- "Primary" is not the same as "counted". An action can be marked primary and still sit outside the account's default goals, which means Google isn't optimising toward it and it isn't driving the headline number. In one account we read, exactly one action was both primary and in goals, while five more enabled actions sat in the same lead-form category. Same event, measured several ways. That's how a conversion count inflates without anyone changing a bid.
- Currencies drift, and the value column stops meaning anything. One account carried conversion values in more than one currency, plus an action with no currency set at all. The API hands that back as a placeholder code rather than an error. Nothing breaks. The values just quietly stop being comparable, and the total is nonsense.
- Names are the tell. In the same account, GA4 had six key events, four of them differently-named variants of "someone filled in a form". Nobody set out to build that. It accretes, one campaign at a time, and then a report adds them up.
- Not every metric is allowed to be split. We built a traffic view broken down by paid, organic and other, and summing GA4 users by channel came out roughly 3% above the property total. GA4 deduplicates users at property level, so a person who arrives by both paid and organic gets counted twice. Sessions and conversions are additive. Users are not. We deleted the code that made the wrong split possible rather than leave the trap lying around, and the gap grows exactly as paid and organic overlap grows.
- The window I shipped and couldn't show. I built the per-action conversion window into the interface, and it rendered nothing. The field exists in the API resource, but the stored read of that account predated the enrichment, so it wasn't in the data. Worse: our query has a fallback that drops the attribution model, the value settings and the lookback windows entirely when an account won't return them. When that fires, the tool still renders a clean screen. It just knows less than it looks like it knows.
The lesson that outlives this page
That last one is the general lesson, and it applies to every reporting tool you'll ever buy: a screen that renders cleanly is not a screen that has the data. Ask any vendor what their tool does when a field is missing. If the answer is "it hides it", ask how you're supposed to know.
One more piece of honesty from our own build. The flag we show as "included in account goals" is inferred from what the API returns, not read as a single field. Our code records that it was inferred. It would have been easier to just print it. Recording where a value came from is the difference between a report and a claim.
The same read, on your accounts: which conversion actions actually countHow do you read your own attribution setup in one query?
If you have Google Ads API access, this pulls the four dials for every conversion action in the account. It's the same query our own importer runs, and it is yours, no email required.
Google Ads Query Language: the attribution setup of every conversion action
Three things that will save you an hour
Three things that will save you an hour. Some accounts will not return the optional fields (attribution model, value settings, lookback windows). The whole query then fails rather than returning partial rows, so keep a stripped-back version as a fallback. And counting_type tells you whether an action counts every conversion or one per click. That distinction matters enormously for lead gen. And read primary_for_goal together with include_in_conversions_metric, never separately: that pair is what decides whether an action is actually driving the number.
No API access? The same four dials are readable by hand, in about ten minutes. The conversion actions list in Google Ads (Goals → Conversions) gives you what counts, the model and both windows per action. GA4's key events list and its attribution settings give you the other side.
Or skip the query and get the four dials back as an answer, freeThe definition sheet
This is the artefact that ends the argument, and it's eight lines. Write it once per account, keep it next to the report, and update it with a date whenever a dial moves. It costs ten minutes and it converts "the number looks wrong" from a debate into a lookup.
Measurement definition sheet: one per account
The line that earns its keep
The last line is the one that earns its keep. A dial change makes every earlier month a different measurement, and six weeks later nobody remembers. Writing it down is the release gate those analysts were asking for. It is the same argument I made in you're deciding from memory. The looking-back is the only job in ad ops with no owner, so it only happens if you make it cheap.
What attribution still can't tell you
Three limits I'd want stated on any page that sells you a measurement tool, including mine.
- It can't tell you what caused the sale. Attribution divides credit among the touchpoints it can see, for conversions that already happened. It cannot tell you whether the sale would have happened anyway. Only incrementality testing answers that, and even a good test dies if the organisation switches the ads back on in week two. Judging by what analysts say in public, that is how most of them die.
- Some of the number is modelled, and you can't see how much. Where consent or signal is missing, platforms estimate. That's a defensible engineering choice and it's also a company grading its own homework. I don't know the modelled share of any number I'm shown, and neither does any dashboard reselling it.
- I don't have a clean answer for cross-platform. Google's rulers and Meta's rulers are different instruments, and adding their conversion columns together produces a number that describes nothing. I report them separately and use one business-side figure as the tiebreaker: sales, or qualified leads out of the CRM. That's a workaround, not a solution, and anyone selling you a single unified conversion number should be asked exactly which four dials they harmonised.
What I'd do differently, in one sentence
Audit what counts before touching how it's credited.
I spent years being the person who changed the attribution model when a report looked wrong. The model was almost never the problem. Six conversion actions measuring one form was the problem. A currency nobody set was the problem. A window someone widened in March was the problem.
Pick one source of truth. Write down its four dials. Date every change to them. Then, and only then, argue about models. You will find you barely need to.
Related reading. Google Ads change history: how to prove when a dial moved. What is a good ROAS: whether your volume can read the ratio at all. Marketing report template: where these four dials get written down so a client can check them. You're deciding from memory: the looking-back nobody owns. What not to automate: the three jobs the platform did not take.
What is marketing attribution?
Marketing attribution is the set of rules that decides which touchpoint gets credit for a conversion. In practice it is four settings, not one. Which conversions are counted at all. Which model shares the credit. How long after a click or view it still counts. And which date the credit lands on. Change any one and the number changes.
What attribution models does Google Ads offer?
Two: last click and data-driven. Google states that first click, linear, time decay and position-based are no longer supported, and that conversion actions using them were upgraded to data-driven. GA4 is separate, with data-driven, paid and organic last click, and Google paid channels last click.
Why do Google Ads and Analytics conversions never match?
Mainly because they credit different dates and different clicks. Google documents both. Ads reports conversions against the date of the click that led to them; Analytics uses the date of the conversion itself. And Ads uses the last Google Ads click, while Analytics uses the last click across all channels.
What is a conversion window?
The period after an ad interaction during which a conversion still counts for that ad. Google's defaults are 30 days click-through, 1 day view-through and 3 days engaged-view, and click-through can be set from 1 to 90 days depending on the source. Changes apply going forward only, so before and after a change are not comparable.
Is attribution the same as incrementality?
No. Attribution divides credit for conversions that already happened among the touchpoints it can see. Incrementality asks whether the conversion would have happened anyway without the ad, and only a holdout or geo test answers that. No attribution model proves causation, whichever one you pick.
Which conversion actions actually count?
Only the ones marked primary and included in the account's default goals drive optimisation and the headline conversions column. An action can be primary and still sit outside the account goals, and secondary actions are recorded for observation only. Auditing that list usually beats changing the model.
Which conversion number should I report to a client?
Pick one source, write down its four settings, and report the same one every month. The number you can define beats the number that looks best. If you switch source, model, window or date basis, say so on the report - otherwise the chart compares two different rulers without telling anyone.
Last updated:
Still unsure which number to report? We will tell you which one your account can defendWho wrote this
I'm Manu. Eight years buying media, and enough hours lost to "these two tools disagree" that I started building something. An open-source console that reads my Meta and Google data and never changes anything I have not approved. The screen that audits conversion setup exists because of the six-actions-one-form account described above. It's Apache-2.0, with a runnable demo on synthetic data.