Cross-platform ad metrics normalization: what to fix before adding Meta, Google and Snapchat
Meta, Google and Snapchat each count spend, conversions, reach and clicks their own way, in each account's own currency. What to normalize before adding them up, which figures never add, and a worked week in two currencies.
TL;DR
- Normalizing cross-platform ad metrics means putting every platform's figures into one currency, one conversion event, one credit rule and one kind of click before adding or comparing them. Spend, conversions, ROAS and clicks can be normalized; reach never adds across platforms.
- Each Meta and Google ad account keeps one currency for life. Work out ROAS and CPA inside each account first, where no currency conversion is needed, then convert money at a stated reference rate only when you add accounts together.
- Google's Conversions column sums every primary action and can be fractional. Meta credits each ad set by its own attribution setting. Snapchat defaults to 28 days after a swipe and 1 day after a view. Compare one event, with the credit rule written beside it.
- Reach is de-duplicated inside a platform, never across them. In Meta's own example, two ad sets that each reached 2 people, one of them shared, made a campaign reach of 3. Adding Meta, Google and Snapchat reach overstates it.
- overads reads Meta, Google, X and Snapchat ad accounts read-only, keeps each account's money in its own currency, labels mixed totals as unconverted, and shows a figure it never received as missing, never as 0.
What changed: updated on October 26, 2026 to add X Ads, which overads has read since October 23, 2026; the normalization steps are unchanged. It was rewritten on October 13, 2026 from each platform's own documentation. The earlier version said overads converts currencies, which it does not, stated attribution defaults without sources, and suggested estimating cross-platform reach overlap from industry benchmarks.
What cross-platform ad metrics normalization means
Cross-platform ad metrics normalization is the work of putting each ad platform's figures on one basis before you add or compare them: one currency, one conversion event, one stated credit rule and one kind of click. Meta, Google Ads and Snapchat use the same words for different things. A conversion on Google is not the same event as a conversion on Meta, and a click on Meta is not always a click to your website.
Some metrics can be normalized and then added. Others can only be set side by side. The table below shows how each platform reports the five metrics most dashboards combine, from each platform's own help and developer pages.
| Metric | Meta | Google Ads | Snapchat | To normalize |
|---|---|---|---|---|
| Spend | A decimal amount in the ad account's currency | Micros (divide by 1,000,000), in the account's currency | Micro-currency | Convert to one currency at a stated rate |
| Conversions | Action types, credited by each ad set's attribution setting; one sale can appear under several types | The Conversions column: every primary action, fractional under data-driven attribution | Purchases and other events; 28 days after a swipe-up and 1 day after a view by default | Pick one event and write the credit rule beside it |
| Revenue | Purchase value from the events your pixel or Conversions API sends | Conversion value, as the advertiser set it for each action | Purchase value, in micro-currency | Use purchase value only, in one currency |
| Reach | Accounts Center accounts reached, estimated | Modelled unique users, on some campaign types only | Unique impressions | Never add; report each platform's own |
| Clicks | Clicks (all), with link clicks reported separately | Clicks on the ad, counted even if the site does not load | Swipe-ups | Compare like with like |
Spend and currency
Ad spend arrives in each ad account's own currency, and that currency is fixed for the life of the account on both Meta and Google. Google's currency settings page says the currency is set permanently when the account is created, because it decides how you are billed, and that paying in another currency needs a new account. Meta's currency help page says choosing a new currency and time zone creates a new ad account and closes the old one. So two accounts in two currencies stay that way, and a report that adds their spend adds two units.
Each platform also writes the amount differently. Meta's Insights reference returns spend as a number in the currency the ad account uses, and calls spend an estimated metric. Google's API returns cost in micros, and its developer guide says to divide by 1,000,000 to get the currency amount. Snap's measurement API reports spend in micro-currency too. A pipeline that forgets the divisor is off by a factor of a million.
Ratios need no currency conversion when both sides come from one account. ROAS and CTR are pure ratios, and CPA is already in the account's single currency, so the safest order is to work them out per account first and convert only the amounts you need to add. For the conversion, use a published reference rate and name it. The European Central Bank's euro reference rates are updated around 16:00 CET every working day. The ECB says they are published for information purposes only and discourages using them for transactions, which suits a report and not an invoice.
Conversions and attribution settings
A conversion on Google Ads, Meta and Snapchat is three different counts, because each platform decides which events go into it and how long after an ad it gives credit. Google's primary and secondary actions page says the Conversions column holds every action marked primary. Secondary actions appear only in All conversions. So one Google figure can mix purchases, calls and sign-ups. The Google Ads API reference types conversions as a decimal number, and Google's attribution models page says data-driven attribution, the default for most conversion actions, gives each ad interaction part of the credit.
Meta counts conversions as action types, credited by each ad set's own setting. Meta's attribution settings page lists click-through within 1 or 7 days of a link click, view-through within 1 day of an impression, and engage-through within 1 day of any other click or a 5-second video play. The same page warns that results under different attribution models cannot be compared in the campaign overview. Meta's Ads Action Stats reference lists omni_purchase and lead as grouped types that combine others, so adding every purchase row in an export counts one sale more than once.
| Platform | What the conversion count holds | Default credit window | Model |
|---|---|---|---|
| Google Ads | Every primary conversion action, summed | 30 days after a click, 3 days after an engaged view, 1 day after a view; each action can be changed | Data-driven for most actions; last click also offered |
| Meta | One action type per event; grouped types such as omni_purchase combine others | Chosen per ad set: 1 or 7 days after a link click, 1 day after a view or a non-link engagement | Standard or incremental, per ad set |
| Snapchat | One field per event, such as conversion_purchases | 28 days after a swipe-up, 1 day after a view | Reported by conversion time by default |
Normalizing conversions means choosing one event, usually a purchase or a lead, and pulling only that event from each platform. Google's segments page lets you split the Conversions column by conversion action or by category, such as Purchases or Submit lead forms. Google's credit windows cannot be changed after the fact: its conversion windows page says a changed window applies only to conversions recorded from that day on. So the honest fix is to write each platform's rule next to its figure.
ROAS and blended return
ROAS is conversion value divided by spend, and it is only comparable across platforms once both the value and the spend are normalized. The value side carries the conversion problem from the section above. Google's conversion value is whatever value the advertiser assigned to each primary action, so a call or a sign-up can carry a proxy value rather than money received. Meta's purchase value comes from the purchase events you send it. Meta's Insights API guide names the Meta Pixel and the Conversions API as tools for tracking the actions it reports.
A blended ROAS adds every platform's value and divides by every platform's spend, so three rules apply:
- Convert both sides to one currency first. A ratio of euros and dollars added together means nothing.
- Use one value definition. Purchase value only, or the blended figure inherits every proxy value Google holds.
- Leave out spend with no value behind it, or say so. Spend from a platform that returns no conversion data lowers a blended ROAS without any real change in return.
Platform-reported ROAS, even blended, still carries each platform's attribution. Store revenue divided by total ad spend, which needs no attribution, is a different check. Our Meta vs Shopify ROAS guide walks through that comparison.
Reach and frequency cannot be added up
Reach cannot be added across platforms, because each platform de-duplicates people only inside its own data. Meta's guide to metrics that do not add up gives the example inside one campaign: an ad set that reached people A and B and another that reached B and C each have a reach of 2, while the campaign's reach is 3. The same page says reach and other unique metrics are estimated and may rely on sampled data, which Meta's reach page repeats.
Across platforms there is no shared unit to de-duplicate on. Meta counts Accounts Center accounts. Google's reach and frequency page says it models unique users with statistical models, and only for Display, Demand Gen, Video and App campaigns. The API reference adds that unique users cannot be aggregated and can only be asked for over 92 days or less. Snap's measurement API reports uniques and frequency, which it defines as the average number of impressions per person reached.
Frequency inherits the same limit. Meta's Insights reference defines frequency as the average number of times each person saw your ad, and calls it estimated. A cross-platform frequency would divide total impressions by total reach, and total reach is the figure nobody can count. Report reach and frequency per platform, and add only impressions, knowing that each platform defines an impression its own way.
Clicks, CTR and engagement
A click on Meta, a click on Google and a swipe on Snapchat are different actions, so a CTR is only comparable when the click definitions match. Meta's Insights API guide uses the clicks field for clicks (all). Meta's link clicks page defines link clicks as clicks to a set destination, such as a website or an app store. Its attribution page treats every other click on an ad as an engagement.
Google's click definition counts a click on the ad, such as on a text ad's headline or phone number, even when the person never reaches the website. Google filters out invalid clicks automatically. Snapchat counts swipe-ups, which Snap's measurement API reports as swipes. For a like-for-like CTR, set Meta's link clicks against Google's clicks and Snapchat's swipe-ups, each divided by that platform's own impressions.
Engagement has no shared definition at all. Meta's Insights reference defines inline post engagement as the total number of actions people take involving your ads, while Google's API reference counts an engagement when someone expands a Lightbox ad. If a report needs one engagement score, define the weights yourself, label the score as your own, and never present it as a platform metric.
A worked example: one week, two currencies, two conversion definitions
A worked week shows how far apart a naive total and a normalized one can land. The figures below are invented to show the method; they are not from any ad account. A brand runs a Meta ad account billed in euros and a Google Ads account billed in US dollars, and reports in dollars.
- Meta, in euros: €4,000 of spend, 160 purchases worth €12,000, and 40 leads.
- Google Ads, in dollars: $5,000 of spend and 250 conversions worth $13,000. The 250 are 150 purchases worth $11,000, plus 60 calls and 40 sign-ups that the advertiser valued at $2,000 in total.
The euro amounts are converted at the ECB reference rate published on October 12, 2026: 1 euro to 1.1181 US dollars. A production report would convert each day at that day's rate.
| Account | Spend | Purchases | Purchase value | Cost per purchase | Purchase ROAS |
|---|---|---|---|---|---|
| Meta (EUR) | €4,000 ($4,472.40) | 160 | €12,000 ($13,417.20) | €25.00 ($27.95) | 3.00x |
| Google Ads (USD) | $5,000.00 | 150 | $11,000.00 | $33.33 | 2.20x |
| Figure | Added as reported | Normalized: US dollars, purchases only |
|---|---|---|
| Spend | 9,000 (euros and dollars mixed) | $9,472.40 |
| Conversions | 450 (Meta purchases and leads, Google primary actions) | 310 purchases |
| Cost per conversion | 20.00 (no real currency) | $30.56 per purchase |
| ROAS | 2.78x | 2.58x |
The naive total understates the cost of a purchase by about a third and overstates return. Meta's ROAS is 3.00x in euros and in dollars alike, which is why ratios belong inside each account. The normalized totals still carry two credit rules: Meta's ad set setting and Google's 30-day, data-driven default. Write both under the table rather than pretend they match.
How to normalize a cross-platform ad report, step by step
A cross-platform ad report is normalized in seven steps, and each one is cheaper to do at the start than to fix later. The order below is this article's method, built on the platform rules above.
- List every account with its platform, currency and time zone. Both Meta and Google tie currency and time zone to the account.
- Pick one conversion event, such as a purchase, and pull only that event: one purchase action type from Meta, the Purchases category from Google, conversion_purchases from Snapchat.
- Write down each platform's credit rule beside its figures: the ad set setting on Meta, the window and model on Google, the swipe and view windows on Snapchat.
- Work out ratios inside each account, in its own currency: cost per purchase, purchase ROAS and CTR.
- Convert money to one currency at a named reference rate, day by day, and keep the rate in the report.
- Add only what adds: spend, purchase value, purchases and impressions. Keep reach and frequency per platform.
- Mark missing figures as missing. A platform that returned nothing is not a platform that spent nothing, so leave the cell empty rather than write 0.
Where overads fits
overads is an AI marketing agent for small teams: it drafts posts, reports and recommendations from your connected accounts and waits for a person to approve them. On the ad side, overads reads Meta, Google, X and Snapchat ad accounts read-only, and its reports and workflows start from the readings below. The table records what its sync did with each metric in the code on October 13, 2026, before X Ads went live on October 23, so it covers Meta, Google and Snapchat.
| Metric | What overads does | What it leaves to you |
|---|---|---|
| Spend | Keeps each account's spend in that account's currency, converting Google's and Snapchat's micros; totals across currencies carry the label N currencies, unconverted | Conversion to one currency |
| Conversions | Meta: one purchase count plus one lead count per row, never every alias added. Google: the Conversions column, rounded to a whole number for each account and day. Snapchat: none | Matching events and credit rules across platforms |
| Revenue | Meta: one purchase value per row. Google: conversion value as the advertiser set it | Store revenue; overads has no Shopify connector |
| Clicks | Meta's clicks (all) field and Google's clicks | Link clicks, for a like-for-like CTR |
| Reach and frequency | Not read | Each platform's own reach reports |
| Missing data | Shown as missing, never as 0; the API returns null | Nothing |
The Ad accounts page in overads also shows a blended ROAS, CPA and CTR across every connected account. Those tiles add each platform's figures as the platform defines them. A blended CPA therefore mixes Meta's purchases and leads with whichever Google actions are marked primary. Snapchat syncs account-level spend only, so its spend counts in the blended totals with no Snapchat conversions or clicks beside it. The Creatives view avoids the mix: it judges each ad only against its own account.
What overads does not do:
- It does not convert currencies; it labels mixed totals instead.
- It does not read reach or frequency from any platform.
- It does not read store revenue, so the store-sales check in our Meta vs Shopify guide stays a spreadsheet job.
- It cannot change ads. Access is read-only, for the reasons in our guide to why many ad tools can read campaigns but not change them.
- It does not read LinkedIn, Pinterest or TikTok ad accounts.
A team that needs every account in one currency, under one attribution model, is better served by a data warehouse or BI tool fed from each platform's API, or by a dedicated attribution tool. The overads analytics API returns daily totals split by account, platform and currency, and its summary endpoint answers null, never 0, for a window with no reading, so it can feed such a pipeline without mixing currencies. For agencies running client accounts in several currencies, that split is the starting point for the steps above.
Frequently asked questions
Should I convert ad spend at each day's exchange rate or one rate for the month?
Converting each day's spend at that day's reference rate values it at the rate of the day it was spent. One rate for the period is simpler and fine for a short report, as long as the report names the rate and its date. Neither will match your invoices, because Meta and Google bill each ad account in its own currency.
Can I compare Meta CPA with Google CPA at all?
Yes, for one event under stated credit rules: cost per purchase on each platform, worked out inside each account, with each attribution setting written beside it. Treat the gap as directional, because the two platforms still credit the same sale under different windows and models.
Does Google's All conversions column fix the mismatch?
No. All conversions adds secondary actions, which Google keeps for observation, to the primary ones, so it widens the definition instead of narrowing it. Segment the Conversions column by conversion action or conversion category instead.
Sources
- About reach metrics. Meta Business Help Centre. Accessed Oct 13, 2026.
- Troubleshoot reasons why ad metrics may not add up. Meta Business Help Centre. Accessed Oct 13, 2026.
- About link clicks and outbound clicks. Meta Business Help Centre. Accessed Oct 13, 2026.
- Change the currency that you use for Meta ads. Meta Business Help Centre. Accessed Oct 13, 2026.
- About attribution models and attribution settings. Meta Business Help Centre. Accessed Oct 13, 2026.
- Ads Insights API. Meta for Developers, Apr 27, 2026. Accessed Oct 13, 2026.
- Ad Account, Insights (Marketing API reference). Meta for Developers. Accessed Oct 13, 2026.
- Ads Action Stats (Marketing API reference). Meta for Developers. Accessed Oct 13, 2026.
- About your language, number format, time zone, and currency settings. Google Ads Help. Accessed Oct 13, 2026.
- About primary and secondary conversion actions. Google Ads Help. Accessed Oct 13, 2026.
- About conversion windows. Google Ads Help. Accessed Oct 13, 2026.
- About attribution models. Google Ads Help. Accessed Oct 13, 2026.
- Use segments in your tables. Google Ads Help. Accessed Oct 13, 2026.
- Measuring reach and frequency. Google Ads Help. Accessed Oct 13, 2026.
- Click: Definition. Google Ads Help. Accessed Oct 13, 2026.
- metrics (Google Ads API v25 field reference). Google for Developers, Sep 30, 2026. Accessed Oct 13, 2026.
- Pull geo data for experiments (Google Ads API). Google for Developers, Oct 5, 2026. Accessed Oct 13, 2026.
- Measurement (Marketing API). Snap for Developers. Accessed Oct 13, 2026.
- Euro foreign exchange reference rates. European Central Bank, Oct 12, 2026. Accessed Oct 13, 2026.
- overads product summary (llms.txt). overads. Accessed Oct 13, 2026.
- API reference: analytics. overads. Accessed Oct 13, 2026.
Drafted with AI assistance, then checked against primary sources and the product itself by the overads team.
Keep reading
Paid media · 10 min read
Meta vs Shopify ROAS: why the two rarely agree and how to reconcile them
Meta credits purchases inside each ad set's attribution setting; Shopify credits an order to the last non-direct click it saw. What Meta changed in 2025 and 2026, how Shopify's models work, and a reconciliation you can run in a spreadsheet.
Paid media · 9 min read
Real-time vs nightly ad sync: how fresh does ad data need to be?
Meta refreshes insights every 15 minutes and Google most metrics hourly, yet conversion figures keep changing for days or weeks. What each platform documents, when minutes matter, and what to ask any reporting tool about its sync.
Guides · 8 min read
The best cross-platform ad management tool in 2026, ranked honestly
Seven tools and one editorial opinion: the category has fractured. Here is what is actually worth paying for if you run paid media across more than two channels in 2026.
Let the weekly ad read write itself
overads reads Meta, Google, X and Snapchat ad accounts read-only, keeps each account's money in its own currency, writes a weekly read of your ads and proposes the changes worth making. You approve, and you apply any change in the platform.
Get started