Campaign Data Import Validation For GA

September 28, 2026 | Blog Post

A native report that proves whether your imported non-Google campaign cost data actually attaches to the traffic GA4 measured. 

Since 10 August 2026 Google Analytics 4 includes a validation report for campaign data import, under Reports > Data Import. It answers a question that previously required manual spot checks in Explorations or BigQuery: did the imported cost and performance data match collected Analytics traffic, and how much of it matched. Editors and above can restore the report to the navigation if it is not visible. 

What's New

  1. Validation per campaign: Checks run per campaign, not per import job. An upload can show a healthy overall match rate while individual campaigns join nothing - the report exposes exactly those rows.

  2. Three join statuses:
    Joined - imported row matched.
    No campaign data - traffic exists, no imported row matched.
    No Analytics data - imported row exists, no session activity matched.

  3. Coverage rate: The share of rows with collected Analytics data that joined successfully. The denominator is Analytics traffic, not the upload so it measures how much measured traffic carries cost data, not how clean the file was.

  4. Grouping and metrics: Five grouping dimensions: Source/Medium (default), Campaign ID, Campaign name, Source platform, Default channel group. Alongside the validation metrics: event count, ad clicks, ad cost, ad impressions and key events.

Default filter 

Session scoped and limited to paid manual campaigns — all Google sources - and search mediums are excluded. The filter can be removed, which pulls in all traffic.

Import mechanics unchanged 

The join still happens at query time on utm_source, utm_medium and date, values stay case sensitive, and imported data still takes up to 24 hours to appear.

Related change in the same release cycle: since 28 July 2026 an ISO 4217 currency code is required whenever cost data is uploaded - either mapped from a column or fixed for the whole import. 

What you can do with it 

  • Prove inside GA4 that imported non-Google cost actually attaches to sessions, instead of inferring it from a blended ROAS figure that looks plausible. 

  • Find the specific broken campaigns: group by Campaign ID or Campaign name, sort by join status, read off the failed rows. Unmatched utm_source is the most common cause – usually a case or spelling difference between the upload and the tagged landing URLs.  

  • Separate two failure modes that used to look identical: No campaign data points at the upload or the tagging, No Analytics data at traffic that was never recorded - consent- blocked or redirect-stripped landings, for example. 

  • Set a coverage-rate threshold per channel and treat it as a gate before cost-based reporting is released, with a weekly reconciliation of GA4 cost against platform invoices. 

  • Run it as an acceptance check after any new import or connector build, and after any UTM taxonomy change. 

  • Remove the default filter for a one-off full picture when a property mixes manual imports with auto-tagged Google traffic.

Current limitations (as of 09/26)

Diagnosis only: Corrections belong in the source system - platform tagging, the export, or the connector configuration - not in GA4. 

What coverage proves: A high coverage rate only proves the matching keys lined up. It says nothing about whether the platform's cost figures are complete or whether attribution is sound. 

Scope: Session scoped - no user-level or cross-scope analysis from within the report. 

Retrospective: Problems surface after import and after up to 24 hours of processing, so the report cannot block a bad upload. There is no alerting and no scheduled export. 

Double counting: Not detected. A manual dataset and a platform connector covering the same period both feed cost without deduplication, and both show as joined. 

Unpublished by Google: No guidance on acceptable coverage thresholds, availability by property tier, backfill windows, or whether connector-fed data is treated differently from manual CSV uploads.

What We Recommend

Start with a one-off pass: Most cost imports have never been validated beyond a spot check. A single review across the affected properties establishes where coverage actually stands today, per channel.

Then make it a standing check: After every new connector or import build, after UTM taxonomy changes, and as a weekly or monthly item alongside invoice reconciliation. 

A shared number to argue from: A low coverage rate is concrete, in-product evidence that platform-side tagging needs fixing usually a conversation with the media agency rather than an analytics fix. It also quantifies the value of a strict UTM taxonomy. 

Not a warehouse replacement: Where BigQuery plus platform APIs are in place, that pipeline remains the source of truth for spend. This report is the fast in- GA4 signal that something has broken.

Watch out when migrating to native connectors: Connectors backfill at least 24 months and GA4 does not deduplicate. Overlapping manual datasets must be exported and deleted before the connector is switched on – and that deletion cannot be undone.

Related Articles

Are you interested?

Contact us today to start your journey towards digital success!