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.
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.
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.
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 →