Skip to main content
Card class: Cross-ChannelCategory: Analytics
Google Ads spend that doesn’t show up in GA4 attribution, auto-tagging broken, GCLID stripped by redirect, or cross-domain tracking gap.

At a glance

The percentage of Google Ads click-throughs that GA4 actually attributes to the Paid Search channel. Healthy stores see >70% match. A match rate <30% is the alert and means GCLID auto-tagging is broken, redirects are stripping the click ID, the GA4 ↔ Google Ads property link is misconfigured, or the customer is bouncing between domains and losing the cross-domain context. When this drops, your CPA reporting in Google Ads becomes unreliable until it’s fixed.
What it counts(GA4 sessions where sessionSource = 'google' AND sessionMedium = 'cpc') ÷ (Google Ads clicks for the same window), expressed as a percentage. The “did the click survive the journey to GA4?” rate.
Sample basisGA4 side: sessions tagged with the GCLID parameter from runReport filtered to source=google/medium=cpc. Google Ads side: clicks reported by the Ads API for linked customer accounts. Both windows aligned to the property’s timezone.
Sampling thresholdNone for the 30D window. Google Ads click data is never sampled. GA4 session-source data is sampled only with high-cardinality dimensions; sessionSourceMedium is low-cardinality enough to escape sampling.
Bot traffic filterGA4: built-in IAB Tech Lab filter applied. Google Ads: invalid-click filter applied (Google’s own click-validation pass, removes ~10% of raw clicks before billing). Both sides post-filter.
Time zoneThe GA4 property’s timezone. Google Ads data converted to the same zone for window alignment.
CurrencyBoth sides converted to the GA4 property’s reporting currency for revenue comparisons. The match-rate itself is unitless.
RefundsNot applicable, this card compares clicks/sessions not revenue. The companion ga4_xc_traffic_to_revenue card handles revenue.
Tracking-gap framingDifferent from the purchase-event tracking gap. Click-attribution loss is a first-touch tracking failure (GCLID lost in transit), not a last-touch tracking failure (purchase event blocked at confirmation). The two failures compound: a click that’s lost AND a purchase that’s blocked = double invisibility.
Time window30D vsP (30 days vs the prior 30 days).
Alert trigger<30% GA4-side utm match against Google Ads spend, OR a sustained drop of >15 pp week-over-week.
Rolesowner, marketing

Calculation

Calculated automatically from your Google Analytics 4 data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

Worked example

A US apparel brand running Google Ads at $42,000/month spend. 30-day window ending 02 May 26.
SourceClicks / SessionsMatch rateStatus
Google Ads (linked customer ID 123-456-7890)38,200 reported clicks100% (truth side)Truth
GA4 sessions, source=google/medium=cpc28,650 sessions75.0%Healthy band (>70%)
30 days prior36,100 clicks vs 30,470 GA4 sessions84.4%Higher than current
Three numbered observations:
  1. The match rate dropped from 84% to 75% in 30 days. That’s a 9 pp drop, just inside the “watch” zone but not yet at the 30% alert. The cause was traced to an A/B-test platform the brand installed on 14 Apr 26, that platform redirects landing-page hits through its own domain to assign a variant, and the redirect strips the GCLID parameter. Every customer assigned to the test variant lost their click attribution.
  2. The Google Ads CPA report is now overstated. Before the regression, GA4 attributed 14,200ofrevenuetoPaidSearchclicks;nowitattributes14,200 of revenue to Paid Search clicks; now it attributes 11,400. Google Ads’ own conversion data (uploaded back from GA4 via the property link) inherits the same gap. The CPA figure Google Ads optimises against is now ~25% high, which means the auto-bidding algorithms are working with bad data and may be over-biding because measured ROAS looks artificially low.
  3. The fix is small but the consequences accumulate. The brand’s engineering team configured the A/B-test platform to preserve URL parameters on redirect (a single config flag). Match rate returned to 84% within 48h. The 18 days of bad data don’t backfill. Google Ads’ learning algorithm carries the bias for ~30 days as it phases out old conversion data.
  4. What WOULD trip the <30% alert? The most catastrophic case we’ve seen: a merchant migrated their primary domain (from oldbrand.com to newbrand.com) without updating Google Ads’ final-URL fields, but configured a 301 redirect. Every Ads click hit oldbrand.com, redirected to newbrand.com, lost the GCLID at the redirect (because the redirect didn’t preserve query parameters), and became a “Direct” session in GA4. Match rate fell to 8%. The CPA report was effectively useless.
  5. Server-side tagging doesn’t help here. Server-side tagging fixes the last-touch tracking gap (purchase events). This card measures the first-touch tracking gap (the click attribution itself). The two are independent. A merchant can have perfect server-side tagging AND a 20% ad-attribution match rate.
Rule of thumb. Stable match rate (≥70%) = your Ads CPA reporting is trustworthy. Match rate dropping = something stripped the GCLID; investigate redirects, A/B-test platforms, third-party landing-page tools, and any URL-rewriting CDN rules.

Sibling cards merchants should reference together

CardWhy pair it with Ad Attribution Consistency
GA4 Property HealthThe composite measurement-health score. A drop here AND in Property Health = double regression. A drop here AND green Property Health = the click-attribution failure is independent of the purchase-event failure.
GA4 Revenue by ChannelA direct downstream impact: when this card alerts, GA4’s “Paid Search” channel revenue understates and “Direct” overstates. The channel mix is corrupted.
GA4 Source/MediumThe detail view of source/medium attribution; useful for spotting which redirect or third-party tool is stripping the GCLID.
GA4 Campaign PerformanceCampaign-level breakdown. If only one campaign’s match rate dropped, the issue is in that campaign’s landing-page configuration.
Google Ads SpendThe spend side. Spend × match rate = “spend GA4 actually saw”.
Google Ads ClicksThe click side, the truth denominator for this card’s calculation.
Cross-channel: Traffic to Revenue DivergenceCompanion attribution-health card; this one tracks click attribution, that one tracks purchase attribution.
Cross-channel: Revenue at Risk from IncidentWhen this card alerts during an outage, attributable revenue at risk is calculated using the corrupted channel mix; expect that card to also flicker.

Reconciling against the vendor’s own dashboard

Where to look in GA4 (this card is a Vortex IQ-only metric): GA4 doesn’t display “match rate vs Google Ads” as a single number. The reconciliation requires both connectors connected. The closest manual rebuild:
Reports → Acquisition → Traffic acquisition → Filter to “google / cpc” for the GA4 sessions side, then compare to Google Ads’ Reports → Predefined → Performance → Clicks for the same date range. Admin → Property Settings → Product Links → Google Ads links to verify the link is active and auto-tagging is enabled.
Other GA4 views that look like ad attribution but aren’t:
  • Acquisition → User acquisition: shows first source/medium per user (cohort-style), not session-level click attribution. A returning customer’s first visit was via “google / organic” but their later purchase via “google / cpc” wouldn’t show in user acquisition.
  • Reports → Advertising → All channels: GA4’s data-driven attribution model assigns fractional credit to multiple touchpoints; the headline “Conversions” number per channel can differ from raw session counts.
  • Realtime → Traffic source: 30-min lookback only.
Why our number may legitimately differ from a manual reconciliation (rare):
ReasonDirection of divergence
Click-to-session timing. A click at 23:58 may produce a session at 00:01 (next day in property timezone). Day-boundary mismatches average out over 30D.Boundary days only
Invalid-click filtering. Google Ads applies invalid-click removal after reporting raw clicks. The “clicks” number can re-state by 1, 5% within 24h. We snapshot at sync time.Up to 5% noise on most recent 24h
Cross-device journeys. A click on mobile that converts to a session on desktop may break GCLID continuity. GA4 sees a Direct session; Ads sees a click. Inflates the gap by ~3, 8% on stores with heavy cross-device traffic.Persistent ~5% structural gap
Auto-tagging vs manual UTM. If the brand has a custom URL-builder that overrides Google Ads’ GCLID auto-tagging with manual UTMs, GA4 still sees the session as “google / cpc” but the GCLID-specific match logic may flag it as a partial match.Variable
Cross-connector reconciliation, the IMPORTANT one: This card IS the cross-connector reconciliation. Expected relationships:
CardExpected match rate (healthy)Causes of expected gapWhat out-of-band signals
google_adwords.total_clicks70, 90% matchCross-device journeys (~5%), bot/invalid clicks Google filters but GA4 partially captures, PWA installs that lose query params, A/B-test redirect strippers.<30% = catastrophic GCLID loss (redirect, broken Ads link, missing auto-tagging). >100% = duplicate session attribution OR landing page firing GA4 twice.
google_ads.total_clicksSameSameSame
amazon_ads.total_clicksNot applicableAmazon Ads doesn’t share auto-tagging infrastructure with GA4Use Amazon Ads’ own attribution.
klaviyo.email_attributed_revenueNot applicable to this cardEmail attribution is governed by UTM tagging discipline, not GCLIDUse ga4_xc_email_attributed_share.
GA4 is NOT the source of truth for click counts (Google Ads is) or for revenue (the commerce platform is). This card’s job is to surface when GA4’s attribution layer between the two truth sources has degraded. When this card alerts, every downstream channel-attribution decision (which campaigns to scale, which keywords to pause, what CPA to bid) is being made on corrupted data.

Known limitations / merchant FAQs

Why isn’t my match rate 100%? Surely every click should be tracked? Cross-device, ad blockers, and auto-tagging quirks make 100% impossible. A click on mobile that converts to a session on desktop loses GCLID continuity (~5% structural loss). Some browsers strip URL parameters in private mode (~1, 2%). Some users click then immediately close and reopen, breaking the session (~0.5%). Healthy stores sit at 70, 90%, not 100%. What’s the cleanest way to fix a low match rate? Triage in this order: (1) is auto-tagging enabled in Google Ads? (Settings → Account settings → Auto-tagging “On”), (2) is the GA4 ↔ Google Ads property link active? (GA4 Admin → Product Links → Google Ads), (3) does any redirect, A/B-test platform, or third-party landing-page tool strip URL parameters? Test by clicking a real ad and watching the URL evolve, (4) does your CDN or DNS rule rewrite query parameters? Cloudflare’s “Auto Minify HTML” can sometimes do this, (5) check if Google Ads’ final-URL field matches the actual landing page (a 301 redirect from Ads-final-URL to your real landing page kills GCLID). My match rate is suddenly 95% (used to be 75%). Did I get better? Possibly, or you have a duplicate-firing tag. A match rate above the typical 70, 90% band can mean (a) you deployed enhanced conversions or server-side tagging that recovered cross-device journeys (great), or (b) GA4 is double-counting sessions, each click is producing two GA4 sessions, both attributed to “google / cpc”. Test by viewing one Ads click in GA4 DebugView; if you see two sessions for one click, that’s the cause. What’s the difference between this card and “Cross-channel: Traffic to Revenue Divergence”? Different layers of the same problem. This card measures click-attribution loss (GCLID survives the journey to GA4). Traffic to Revenue Divergence measures purchase-event loss (the customer’s checkout fires the GA4 purchase event). The two failures compound: a click that’s lost AND a purchase that’s blocked = double invisibility for that customer. Does this card work for Meta Ads / TikTok Ads / Amazon Ads? No. This card is GA4 ↔ Google Ads specific. Meta uses fbclid (different parameter, different attribution path); TikTok uses ttclid; Amazon Ads doesn’t share auto-tagging infrastructure with GA4 at all. Each platform has its own click-to-conversion stitching mechanism. We’re working on a Meta-specific equivalent for the next wave. Does Consent Mode v2 affect this card? Yes, but partially. Consent Mode v2’s modelled conversions help on the purchase-event side (last-touch). Click attribution (first-touch) still requires the GCLID to survive in the URL; modelling can’t recover a stripped GCLID. Server-side tagging via GTM Server doesn’t help either, the click parameter must be preserved at the entry-point, before any tagging layer runs. My GA4 says “google / cpc” sessions but my Ads dashboard says zero spend that day. What’s happening? Bot or invalid traffic that’s being filtered by Google Ads but not by GA4. Google’s invalid-click filter runs after the click reaches the landing page and after GA4 has fired the session event. The session sits in GA4 looking like a paid click, but Ads has voided it from billing. The 1, 5% noise from this is normal; if it’s larger, you may have a click-fraud problem worth investigating with Google’s Click Quality team. My match rate is healthy but my Google Ads CPA is climbing. Are the two related? Not directly. This card only validates that the measurement plumbing is intact. Climbing CPA can mean (a) ad-platform competition is up (rising CPCs), (b) your conversion rate dropped (test other GA4 cards), (c) your ad creative fatigue is real, (d) audience saturation is hitting. None of those are measurement-side; they’re business-side. Use this card to rule out measurement issues before chasing business causes. Why doesn’t this card cover Microsoft Ads / Bing Ads? Microsoft Ads has its own click ID (MSCLKID) and a separate auto-tagging mechanism that doesn’t integrate with GA4 by default. We don’t currently have a Microsoft Ads connector; when added, it will get its own attribution-consistency cross-channel card.

Tracked live in Vortex IQ Nerve Centre

Ad Attribution Consistency (GA4 vs Google Ads) is one of hundreds of KPI pulses Vortex IQ tracks across Google Analytics 4 and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English. Start for free or book a demo to see this metric running on your own data.