In this article
- The number is not wrong. It is answering a different question.
- What each platform is allowed to claim
- Meta
- Google Ads
- TikTok
- Microsoft Ads
- GA4
- Why the platform totals overshoot your real revenue
- The view-through asymmetry nobody adjusts for
- What server-side tracking does not fix
- Deduplication runs inside each platform, never between them
- Which number to use for which decision
- How to reconcile your ad platform ROAS each month
- How TrueTracked reports this
- Sources
You open Meta Ads Manager and purchase ROAS reads 2.9x. Google Ads says 5.1x. TikTok says 3.2x. Every dashboard is above break-even, so the month looks fine.
Then you add up what each platform says it earned you, compare it to what the business actually banked, and the numbers are nowhere near each other. The platforms claim more revenue than existed.
This is not a broken pixel and it is not a setup mistake. It is what happens by design when several independent measurement systems are each asked to grade their own work on the same set of orders.
The number is not wrong. It is answering a different question.
ROAS is revenue attributed to ads, divided by ad spend.
The denominator is not in dispute. You spent $18,000 on Meta last month and every system agrees on that.
The numerator is where it falls apart. "Revenue attributed to ads" is not a fact about your store. It is the output of a policy, and each platform writes its own. That policy has three parts. How far back the platform is willing to look. What kind of interaction counts. And how it decides that the person who converted is the person it showed the ad to.
Change any one of those and the number changes, without a single order changing.
So when someone says their ROAS is 4x, the question that actually matters is: according to whose policy?
What each platform is allowed to claim
Meta
Meta's standard attribution settings for website conversions count events in three buckets. Within 1 day or 7 days after a link click, within 1 day after an impression (view-through), and within 1 day after a non-link click (engage-through).
That last bucket is new. In its announcement of the change, Meta says it is "renaming engaged-view attribution, and going forward, it will be known as engage-through attribution". The same announcement updates the engaged view definition for video ads "from 10 seconds to 5 seconds". Meta's stated reasoning: "46% of online purchase conversions with Reels now happen within the first 2 seconds". Conversions from a "share, save, or other non-link click actions" now count too.
Meta did not change its windows. It widened what counts as a claim inside them, which moves the gap this article is about in one direction only.
Seven days is the longest click window Meta offers. That is worth sitting with, because Meta is usually the platform accused of over-claiming, and it is working from the shortest lookback of the three.
Meta is explicit that its own reporting is not the way to answer whether an ad caused a sale. In the same announcement it calls incrementality experiments "the gold standard in measurement", naming Conversion Lift. That is a test you run, not a setting you switch on, and it is a different question from the one the ROAS column answers.
Meta is also, in its words, "starting to partner with third party analytics providers, such as Northbeam and Triple Whale, to incorporate both clicks and views into their attribution model". Which is Meta acknowledging that the cross-platform view has to live somewhere other than Meta.
Google Ads
Google Ads defaults to a 30-day click-through conversion window, configurable from 1 to 90 days depending on the conversion source. Its default view-through window is 1 day.
Thirty days is more than four times Meta's maximum. A customer who clicks a Shopping ad, disappears for three weeks, then comes back through a bookmark and buys is a Google Ads conversion. The same journey is invisible to Meta by day eight.
TikTok
TikTok lets you set click-through attribution to 1, 7, 14 or 28 days, and view-through to off, 1 day or 7 days, at the ad group level. The setting is locked once the ad group is published, so a mid-flight change means building a new ad group.
That matters for a reason that is easy to miss: two ad groups in the same TikTok account can be reporting under different windows. Comparing them is not like for like either.
Microsoft Ads
Microsoft Ads sets the window per conversion goal rather than per campaign. Its API reference for the conversion goal object states that "the minimum value supported is 1 minute", and that "the maximum value supported is 129600 minutes (90 days)". Thirty days is the working default. That puts it alongside Google Ads rather than Meta.
Its view-through handling is where it separates from both. Microsoft's documentation states that "by default, view-through conversions are counted the same as other conversions, and are therefore included in the figure you see in the All conv. column". The default view-through window is 1 day, and the maximum is 30.
So Microsoft includes view-through credit in its headline figure by default, where Google Ads deliberately keeps it out of the Conversions column. Two platforms, opposite defaults, and no label on either dashboard telling you which convention you are reading.
GA4
GA4 does not claim orders on behalf of a channel. It distributes them.
Its data-driven model splits credit for a single conversion across the touchpoints on the path, which is why GA4 shows decimals where the ad platforms show whole numbers. One order can land as 0.4 to paid social, 0.4 to paid search and 0.2 to organic. The total across all channels still comes to one conversion and one order value.
Its lookback is longer than any ad platform's. 90 days by default for most key events, with 30 and 60 as options, and 30 days for acquisition events like a first visit.
A long lookback only helps if GA4 can still tell it is the same person. That is where a store loses sales, more often than at the window.
GA4 resolves identity by User-ID first, which requires the visitor to be logged in. Most stores have no account for the majority of their buyers, so GA4 falls back to a first-party cookie tied to one browser. Safari caps cookies written by JavaScript at seven days, and that is what a standard gtag install writes. A Safari visitor who clicks an ad, returns three weeks later and buys arrives as a new user carrying no memory of the UTM. The sale is credited to whatever brought them back that day, usually direct or organic search. A phone click and a laptop purchase are two unrelated users for the same reason.
So UTMs label the arrival. They do not preserve identity between the arrival and the purchase, and that is the half that decides whether a campaign gets the sale. Setting that cookie from your own server rather than from JavaScript recovers part of it, and it is worth doing.
| Platform | Longest click window | View-through | Counts an order as |
|---|---|---|---|
| Meta | 7 days | 1 day, included in results | One whole conversion |
| Google Ads | 30 days default, up to 90 | 1 day, reported separately | One whole conversion |
| TikTok | up to 28 days | off, 1 or 7 days | One whole conversion |
| Microsoft Ads | 30 days default, up to 90 | 1 day default, included by default | One whole conversion |
| GA4 | 90 days lookback | n/a, click-based | A fraction of a conversion |
Three windows, one purchase. Everything inside the shaded band is contested territory.
Why the platform totals overshoot your real revenue
The month below is a composite, built from a typical three-platform spend split. The amounts are constructed. The arithmetic is the point, and it is the arithmetic that repeats in every account running all three.
| Platform | Spend | Revenue it claims | Its ROAS |
|---|---|---|---|
| Meta | $18,000 | $52,200 | 2.9x |
| Google Ads | $12,000 | $61,200 | 5.1x |
| TikTok | $4,500 | $14,400 | 3.2x |
| Combined | $34,500 | $127,800 | |
| Actually collected | $34,500 | $98,000 | 2.8x |
The platforms between them claim $127,800. The store collected $98,000. That is 30% more revenue reported than the store ever received, and $29,800 of it does not correspond to money that exists.
The mechanism is not complicated. It is one order at a time.
Nobody is lying. Each platform is answering honestly about the only part of the journey it can see.
A customer clicks your TikTok ad on Tuesday and browses without buying. On Friday evening an Instagram ad appears in her feed; she scrolls past it without clicking. On Saturday afternoon she searches your brand name, clicks the Google ad at the top, and buys.
Google Ads claims it: there was a click, that same day. TikTok claims it: there was a click four days earlier, inside its window. Meta claims it: the ad was on screen the previous evening, inside its 1-day view window. One order, three full claims, and none of the three is misreporting what it saw.
They cannot deduplicate because they cannot see each other. There is no mechanism, no shared identifier and no commercial reason for one ad platform to tell another that it already took credit.
The view-through asymmetry nobody adjusts for
There is a second-order effect in that example that is worth isolating, because it makes cross-platform comparison worse than the window lengths alone suggest.
Meta counts that Friday evening impression. The customer scrolled past without clicking, and Meta still counts it in the results you see.
For most standard web campaigns, Google Ads does not do this. Its documentation is explicit: "view-through conversions are for reporting only and aren't included in the 'Conversions' column, only in the 'View-through conversions' and 'All conversions' columns." Three campaign types are exempt: Performance Max for store goals, App, and Demand Gen.
So Meta's headline number includes a category of credit that Google Ads' headline number deliberately excludes. Before you have adjusted for anything, you are comparing a figure that counts non-clickers against a figure that does not.
Microsoft Ads sits on Meta's side of that line, including view-through in the All conversions figure by default. So of the four, one platform excludes a category of credit from its headline number and the others include it.
This is a large part of why Meta looks like it over-claims relative to Google, and it is fixable in your reading rather than in your setup. If you want the two closer to comparable, look at Meta's results with the view-through window set to off, and compare that against the Google Ads Conversions column.
What server-side tracking does not fix
There is a version of this article that ends with "install server-side tracking". That version is wrong, and it is worth being precise about why.
Server-side tracking fixes delivery. When an ad blocker, Safari's cookie limits or a redirect through a payment provider stops a browser pixel from firing, the conversion happened and the platform never heard about it. Sending the event from your own server closes that gap, and platforms typically report more conversions afterwards.
What it does not touch is the attribution policy. After you install it, Meta still looks back 7 days, Google Ads still looks back 30, and neither knows the other exists.
The counterintuitive result: your platform totals usually move further from your real revenue after a good server-side implementation, not closer. Each platform now receives more events, so each has more orders it is entitled to claim. If you install Meta's Conversions API expecting your dashboards to converge, you will read a genuine measurement improvement as a regression.
The other thing server-side tracking cannot do is link a journey where nothing is shared between the sessions. A phone click at lunch and a laptop purchase that evening can be connected when the order carries an email address that matches earlier activity. Where no such identifier exists, no architecture recovers it.
Deduplication runs inside each platform, never between them
Deduplication is a real mechanism and it solves a real problem, so it is worth being clear about its boundary.
When both a browser pixel and a server-side event fire for the same purchase, the platform needs to recognise them as one conversion. Meta does this by matching an event_id you supply on both, combined with the event name. TikTok's Events API works the same way. Google Ads relies on click identifiers captured at the click and matched at conversion, with hashed customer data as a secondary signal.
Microsoft states its own version plainly. Click any Microsoft ad and you are "automatically excluded from your view-through conversion metric so they won't be counted twice", in its words. Note the scope of that sentence. Across Microsoft Advertising.
Every one of those runs entirely inside a single platform. Meta deduplicating its own pixel against its own server events has no bearing on whether Google Ads also claimed that order.
Cross-platform deduplication has to happen somewhere that can see all of them at once, which means your own data. That is what first-party tracking is for.
Which number to use for which decision
Stop trying to find the correct ROAS. There isn't one number, and the search for it is what wastes the month.
Each source answers a question well, and the trick is to only ask it that question.
| Source | Answers well | Do not use it for |
|---|---|---|
| Your store | What the business actually earned | Which channel earned it |
| Platform ROAS | Which campaign beats which, inside that platform | Splitting budget between platforms |
| GA4 | Cross-channel comparison under one consistent model | Financial reporting, and matching any platform's number |
| Independent attribution tool | Cross-channel comparison, and sizing each platform's over-claim | Financial reporting, and matching any platform's number |
| Blended ROAS | Whether total ad spend pays at all | Which campaign to turn off |
| Incrementality tests | Whether an ad caused a sale at all | Day-to-day budget decisions, because they are slow and expensive |
Two rules follow from that table and they cover most of the damage.
Inside one platform, the comparison is valid. If your Meta prospecting shows 2.1x and your Meta retargeting shows 8.4x, both were measured by identical rules, and retargeting really is claiming more per dollar. Act on it.
Across platforms, the comparison is not valid. A 5.1x on Google Ads and a 2.9x on Meta tells you almost nothing about which deserves the next $1,000. Google is working from a 30-day click window on traffic that was often already searching your brand; Meta is working from at most 7 days. The gap between those two figures is partly a gap between two policies, not two performances.
How to reconcile your ad platform ROAS each month
This is a routine, not a project. Half an hour a month.
- Take your real revenue from the system that handles the money. This is the only figure in the exercise that is not an estimate.
- Sum what every platform claimed. Meta plus Google Ads plus TikTok plus anything else running.
- Divide claimed by real. In the month above that is $127,800 / $98,000 = 1.30. Write it down.
- Track that ratio over time. The absolute value matters less than its movement. A ratio drifting from 1.2 to 1.6 tells you something changed: usually a new campaign type leaning on view-through, or a broad-targeting push generating credit it did not earn.
Also compute blended ROAS, real revenue divided by total spend, which was 2.8x in the example against platform figures of 2.9x, 5.1x and 3.2x. That single number is harder to argue with than any dashboard, and it is the one to take into a budget conversation.
What the routine gives you is the size of the gap, not its owner. You will know the platforms over-claimed by 30%, and still not know which of the three earned the order. Splitting that gap needs every channel attributed under one ruleset, applied by something that can see all of them at once.
How TrueTracked reports this
TrueTracked puts the platform's claim and its own attribution on the same row, per platform, rather than in two systems you reconcile by hand. Platform-reported revenue and ROAS sit next to the sessions, orders and revenue attributed from first-party data. The gap in the reconciliation above becomes a column rather than a spreadsheet exercise.
View-through is broken out separately, which is what makes the asymmetry above measurable rather than theoretical. You can see how much of a platform's claim rests on people who never clicked.
Five attribution models are available, and they are applied identically across every channel: TrueTracked, TrueTracked with view-through, first click, last click and linear. Lookback windows can be set to 1, 7, 14 or 28 days, or left unbounded. That consistency is the whole point. One ruleset applied to every channel is what makes two channels comparable, which is precisely what platform-reported figures cannot give you.
That consistency holds one level down. Reporting runs to campaign level under the same models, so a Meta campaign and a Google Ads campaign can be set against each other on one basis. That is the comparison platform-reported figures cannot support at any level.
It will not tell you the metaphysically true origin of every sale. Nothing will. It gives you one consistent basis for the comparison, and an honest view of how far each platform's claim sits from it.
If you want to see the shape of it, the attribution dashboard is the page to start on.
Sources
- About attribution models and attribution settings, Meta Business Help Centre, for Meta's click-through, view-through and engage-through settings
- About conversion windows, Google Ads Help, for the 30-day default click-through window
- About view-through conversions, Google Ads Help, for their exclusion from the Conversions column and the three campaign types that are exempt
- How to create attribution windows for your ad group, TikTok Ads Manager Help, for the 1, 7, 14 and 28 day options
- Select attribution settings, Analytics Help, for GA4's data-driven model and lookback windows
- Simplifying ad measurement for a social-first world, Meta for Business, for the engage-through rename, the 10 to 5 second change, and Meta's own framing of incrementality and third-party attribution partners
- What are view-through conversions?, Microsoft Advertising documentation, for view-through being included in All conversions by default and for the click exclusion
- ConversionGoal data object, Microsoft Advertising API reference, for the 1 minute to 90 day conversion window range
All eight sources checked September 2026.
Frequently asked questions
About the author

Founder of TrueTracked · Tracking, Attribution and Paid Ads Specialist
Seven years implementing conversion tracking and attribution for businesses running paid ads, most of it fixing measurement that was already broken.



