Why does GA4 say my LinkedIn and Meta campaigns are missing cost data, and how do I import it?

TofuAnswer by the Tofu team · checked

Because GA4 doesn't pull LinkedIn or Meta costs on its own. Its campaign data import validation report, added August 10, 2026, lists your UTM-tagged paid campaigns from other platforms and marks those with no imported cost, clicks or impressions as "No campaign data." To fix it, import the costs. Meta has a direct connector in GA4's Data import settings. LinkedIn doesn't, so you upload a daily Campaign Manager export as a CSV or through Google Sheets, BigQuery or SFTP. Since July 28, 2026, every import that includes cost needs a currency.

Ask Tofu next

Pick a question and Tofu Ads Agent answers it in chat.

As of November 2026.

What is the campaign data import validation report?

It's a GA4 report Google added on August 10, 2026. Google says it "helps you pinpoint campaigns that lack useful campaign performance data, like cost, clicks, and impressions." Open Reports, then under Data Import select Campaign data import validation report. If it isn't in your menu, an Editor or higher can add it back.

The report is session scoped. By default it shows only paid manual campaigns, "excluding all google sources and search mediums." Remove that filter to see all traffic. Each row gets an import join status:

StatusWhat it means
JoinedYour imported campaign data matched GA4 sessions
No campaign dataNothing was imported for this row, or the import didn't join
No Analytics dataImported rows matched no GA4 sessions, so GA4 reports them on their own

It also shows a coverage rate: the share of rows with GA4 data that have joined campaign data. This is a different warning from GA4's "missing URL parameters" diagnostic for Google Ads clicks, which this page covers.

Why do my LinkedIn and Meta campaigns show "No campaign data"?

Usually for one of these reasons:

  • You haven't imported their costs. GA4 only shows cost for LinkedIn and Meta after a campaign data import.
  • The import didn't join. GA4 joins imported rows to sessions on utm_source, utm_medium and date, and the values must match exactly. Google's own example: "Facebook" and "facebook" aren't exact matches.
  • One platform uses several values. If Meta traffic arrives as fb/cpc, Meta/cpc and facebook/paid, Google says the automated connectors can't handle it. Use a CSV, Google Sheets or BigQuery import instead, or clean up your tags.
  • The import is new. Data can take up to 24 hours to show in reports.
  • You typed a placeholder into the import. GA4's import settings don't accept dynamic values like {{campaign.name}}. The ad platform has to fill them in on the click URL.

How do I import Meta costs?

GA4 has a direct Meta connector. You need at least the Editor role in GA4, and a Meta business and ad account.

  1. In Admin, under Data collection and modification, click Data import.
  2. Click Create import source, name it, select Campaign data, choose Meta as the import source and click Next.
  3. Click Connect and sign in to Meta.
  4. Select the Meta business and ad account. Enter the utm_source values your ads use in the Facebook, Instagram, Audience Network, Messenger and Threads source fields (the same value in all five if you use one), then your utm_medium.
  5. Review the fields and click Finish.

The connector tries to pull 24 months of history, so delete any older Meta cost imports first to avoid duplicates. Imports take up to 30 minutes and up to 24 hours to show. You can't change the ad account, source or medium later; you delete the connector and create a new one. Google says it converts Meta costs to keep currencies aligned, even if your property currency changes. To tag Meta ads properly first, see how to add UTM parameters to Meta ads.

How do I import LinkedIn costs?

GA4's direct connectors are Meta, Pinterest, Reddit, Snap and TikTok. LinkedIn isn't one, and Google's Sheets add-on only connects Meta and TikTok. So you export and upload:

  1. Export daily data from Campaign Manager. LinkedIn's steps: click Advertise, confirm the Time range, click Export, choose a Report Type, set Time breakdown to Daily, then click Export. Google suggests 12 months, with date, campaign name or ID, amount spent, clicks and impressions.
  2. Shape the file for GA4. Required columns: utm_source, utm_medium and date (YYYY-MM-DD). Recommended: utm_id and utm_campaign. Add cost, clicks or impressions (at least one), and a currency code if you include cost. Every row needs a source and medium, so fill in the exact values your LinkedIn ads use, such as linkedin and paid.
  3. Upload it. In Data import, create a Campaign data import source and pick CSV, or connect Google Sheets, BigQuery, SFTP, Amazon S3 or another supported source. Map the fields and click Finish.

Connected sources can refresh daily. Google recommends uploading fresh data for the same campaigns every day, because ad costs change as campaigns run. GA4 uses the latest values. With Google Sheets, only the first sheet is read, and you need Editor access to the file. If you'd rather not export by hand, a reporting connector can write LinkedIn spend into Sheets or BigQuery on a schedule; see cheaper alternatives to Supermetrics.

Why does GA4 now ask for a currency?

Since July 28, 2026, campaign data import requires a currency whenever you upload cost. Google says this keeps reporting accurate "even if you decide to make changes to your property's currency settings." You can set it two ways when you map fields:

  • Map from data source: pick a column with an ISO 4217 code, such as USD or EUR.
  • Hardcode currency: pick Static value and choose one currency for the whole import.

Imports created before the change keep reporting as if their cost is in your property's currency. For a LinkedIn file, use the currency your LinkedIn ad account bills in.

How should I tag LinkedIn and Meta ads so costs join?

  • One utm_source and one utm_medium per platform. For Meta, Google also accepts one source per Meta publisher platform, such as Facebook and Instagram, as long as the connector fields match.
  • Add utm_id and utm_campaign so costs split by campaign. The import's campaign ID and name must match what the URL carries.
  • On LinkedIn, use dynamic parameters. LinkedIn lets you add dynamic URL parameters at account or campaign level. Dynamic keys go in capitals inside double curly brackets, such as utm_id={{CAMPAIGN_ID}} and utm_campaign={{CAMPAIGN_NAME}}. LinkedIn says these won't replace parameters already in an ad's destination URL, so check older ads.
  • Keep names consistent. Google warns that "SpringSale" and "Spring_Sale" show up as two campaigns.

Where do imported costs show up, and what are the limits?

Google says imported data appears in Reports > Acquisition > Non Google campaign, and in the Advertising workspace under Planning > All channels. The data import details page shows "% imported" and "Match rate" for each import.

Cost data joins at report time. That means you can't use it in audiences or in Exploration segments, and deleting the import source removes it from reports.

LimitValue
Size of one import source1 GB
Uploads120 per property per day
Campaign data storage1 GB across all import sources
History a direct connector pulls24 months
History the match rate countsThe most recent 2 years

Will this make GA4 match LinkedIn and Meta?

For cost, mostly yes, because GA4 shows the cost you import even when some rows don't join. Clicks, sessions and conversions will still differ, since each platform counts them its own way. For the Meta side of that gap, see why Meta Ads Manager and GA4 results don't match.

Sources (10)

Related answers