Home / Blog / Combining Ad Exports
How-to · 2026

Combining Google, Meta and LinkedIn Exports

The unglamorous step every cross-platform number assumes. Three column vocabularies, a spend figure in millionths, dates that mean different things, and one column that must not be added up.

By · Published August 20, 2026 · 9 min read

Every cross-platform question — which platform is cheaper, where the budget should move, what the blended cost of a conversion is — assumes three exports have been made comparable. That step is where the afternoon goes, and almost nobody writes about it because it is not interesting. It is, however, where the errors are.

One vocabulary, three dialects

The same five facts appear under different names in each export. Pick canonical names and map into them:

canonical      Google Ads        Meta              LinkedIn
spend          cost              amount_spent      costInLocalCurrency
impressions    impressions       impressions       impressions
clicks         clicks            link_clicks       clicks
conversions    conversions       results           externalWebsiteConversions
value          conv. value       purchase value    conversionValueInLocalCurrency

Two of those rows carry more than a rename. Meta's link_clicks excludes clicks on other parts of the ad, so it is not the same population as Google's clicks — a like-for-like CTR comparison between the two is already slightly false and there is nothing in the file that says so. And results is whatever objective the ad set was optimised for, which can be a purchase on one ad set and a video view on the next, in the same export.

Neither is fixable by mapping. Both are worth knowing before quoting a cross-platform CTR or conversion figure to two decimal places.

The units trap

Google's API reports cost in micros: millionths of the account currency. 4120000 means 4.12. Interface exports are usually converted; API pulls usually are not; connectors vary and do not always say.

A whole file in micros is obvious the moment you look at it. The dangerous case is a blended file where one platform is in micros and two are not, because then the total is not obviously wrong — it is just entirely one platform, and the other two round to nothing.

The check takes one row:

=MAX(Ads[Spend])/MIN(Ads[Spend])

A ratio in the millions across platforms that you know spend comparable budgets is the answer. Do this before anything else, every time the export source changes.

Currency, which nothing warns you about

Accounts export in their own currency. A file covering a US account and a UK account has two currencies in one column, no column saying which, and a SUM that produces a confident number with no meaning.

If you run accounts in more than one currency, the platform column is not enough — you need an account column and a conversion step, and the conversion needs a rate per period, not today's rate applied to last year. That is a real piece of work and the only thing worse than doing it is not noticing it was needed.

Dates that do not mean the same thing

Spend dates agree: the day the money was spent. Conversion dates often do not. A conversion can be attributed to the day of the click that produced it, or recorded on the day it happened — Google publishes both as separate report variants, and which one a connector pulled is rarely visible downstream.

The consequence is that a blended daily series can fail to reconcile against any individual platform's own report, for a reason nothing in the data reveals. If your numbers agree at the month level and disagree by day, this is the first thing to check.

Stack, do not join

These are the same kind of record from different sources, so the right shape is a stack with a platform column:

date | platform | account | campaign | spend | impressions | clicks | conversions | value

Joining on campaign name is the tempting mistake, because a campaign called Spring Sale exists on both Google and Meta. They are two campaigns. Joining them produces one row whose spend is right and whose every rate is nonsense, and once merged there is no way to tell from the output that it happened.

From doing this join more times than I would like

The first time I built one of these I got a blended CPA that was too good, believed it for most of a day, and eventually found that one platform's spend had come through in micros. Every campaign on that platform showed as effectively free, which pulled the blend down, and nothing anywhere errored.

Now the first thing I build is a per-platform sanity row — spend, impressions, clicks, per platform, per month — checked against what each platform's own interface says before a single blended figure is computed. It takes ten minutes and it has caught something roughly every other time.

The one column you must not add up

Spend, impressions and clicks are additive across platforms. Each is a count of something that happened once, in one place.

Conversions and conversion value are not. Each platform reports conversions it believes it caused, under its own attribution window, and one purchase seen by two platforms is claimed by both. Adding the columns produces a total larger than the number of things that actually happened, by an amount no export tells you.

This is not a data-quality problem to be cleaned. It is structural, it is covered properly in why your conversions do not match Shopify, and the honest treatment is to compare conversions between platforms rather than summing them across.

Doing it in Excel

Stack manually or with Power Query, then add a platform column per source before appending. Once stacked, everything is SUMIFS:

Spend       =SUMIFS(Ads[Spend],Ads[Platform],$A2,Ads[Month],$B2)
Clicks      =SUMIFS(Ads[Clicks],Ads[Platform],$A2,Ads[Month],$B2)
CPC         =IFERROR(C2/D2,"")

Rates computed from the sums, always — the reason is worked through in CPA vs CPL, and it is the same argument for every rate in these files.

Doing it without rebuilding the stack every month

Quiriz for paid media takes the three exports as separate uploads and maps their columns to one vocabulary, so spend and cost per conversion by platform last month is one question rather than an afternoon. In Excel that is =QUIRIZ.ASK("spend and cost per conversion by platform last month", "table").

Rows whose campaign cannot be matched come back as Unattributed rather than being dropped, so a mapping gap is visible in the answer instead of quietly shrinking the total.

The honest boundary: we do not deduplicate conversions across platforms, because it cannot be done from exports. The overlap is not in the files. Comparing platforms against each other is sound; a blended conversion total is not, and we will not present one as though it were.

Before any blended figure: check spend units per platform, check currency, and check your per-platform totals against what each interface says. Three checks, ten minutes, and they catch the errors that are otherwise invisible.

Put three ad exports in one question

Upload your Google, Meta and LinkedIn exports and ask for spend and cost per conversion by platform. Free to start.

Try Quiriz free →

Frequently asked questions

How do I combine Google Ads and Facebook Ads data in one spreadsheet?
Export both at the same grain — campaign and day — map their column names into one shared vocabulary, add a platform column, and stack the rows. Do not join them on campaign name: the two platforms have no shared key, and any campaign named the same in both will merge into one row that means nothing. Stacking is the correct shape because these are the same kind of record from different sources.
Why is my Google Ads spend a million times too big?
Google Ads API reports cost in micros — millionths of the account currency. A cost_micros value of 4,120,000 is 4.12. Exports through the interface are usually already converted, exports through the API are usually not, and a mixed file where one platform is in micros and two are not produces a blended total dominated entirely by the one, with no error anywhere.
Can I just add conversions across all three platforms?
No, and this is the one column where stacking gives an answer that is wrong rather than merely awkward. Each platform counts conversions it believes it caused, using its own attribution window, and one purchase can be claimed by two or three of them. The sum double counts by an unknown amount. Spend, impressions and clicks are safe to add; conversions and conversion value are not.
Do the date columns mean the same thing on every platform?
The spend date does. The conversion date frequently does not — a conversion can be reported on the day of the click that led to it or on the day it actually happened, and platforms differ, with Google offering both as separate report variants. A blended daily series built from mixed conventions will not reconcile against any single platform report, and the reason is invisible in the file.
Should I normalise campaign names across platforms?
Normalise within a platform, where inconsistent naming is a real problem worth fixing. Across platforms, keep them separate and keep the platform column: two campaigns with the same name on Google and Meta are two campaigns. Merging them makes campaign-level figures unusable and the merge is invisible once done.