AstroDev
News

GA4 Measurement Reliability: Why Single-Source Metrics Break

GA4 measurement reliability took two hits: a Sept. 1 zero-traffic bug and AdSense's begin-to-render recount. Here is why single upstream sources break.

Carlos Arias · · 6 min read
One upstream source, two silent ways for a number to lie.
One upstream source, two silent ways for a number to lie. AI-generated illustration by Carlos Arias .
Prompt sent to Higgsfield · nano_banana_pro · 3:2

GA4 measurement reliability is not a property you can assume. You engineer around it, because the upstream source will fail without warning.

Two events in 2026 make the case. On September 1, Google Analytics standard reports showed zero or sharply reduced traffic across what looked like every install, while collection kept running underneath. Then AdSense announced that on February 17, 2027, it will change how it counts impressions, so identical ad activity will report a smaller number.

One was a bug. The other is a deliberate redefinition. Both move figures your dashboards treat as ground truth.

GA4 measurement reliability failed quietly: collection ran, reporting stopped

On September 1, standard GA4 reports stopped showing Active Users and traffic for users worldwide, per Search Engine Land and Search Engine Roundtable. Realtime kept working. Google acknowledged the fault in its Help Center community thread, confirming that “since September 1, the standard GA4 reports are not showing Active Users or traffic data.” Realtime firing while standard reports read zero is the tell: collection was healthy and the reporting pipeline was not.

A team that trusts the dashboard sees zero and acts on it. They pause a campaign or rewrite tags that were never broken. The zero was real on the screen and false in the world.

AdSense’s begin-to-render recount changes the denominator

The second change is scheduled, which makes it scarier than a bug. On February 17, 2027, AdSense switches to begin-to-render impression counting, per Search Engine Land and Google’s AdSense Help documentation. Today an impression counts the moment an ad starts to download. After the switch it counts only once the ad has loaded and begun to render on the device. Google’s stated reason is “to provide more consistent measurement and align with industry standards.”

The arithmetic is the whole story. Impression totals fall, because requests that downloaded but never displayed stop counting. Revenue does not move, since the same ads still earn the same money (ppc.land). Divide steady earnings by a smaller denominator and reported CPM climbs without a cent of new income. The change covers display banner inventory on web and mobile web. Connected-TV display is in scope too. Plot CPM across that date with no version marker and a pure accounting shift reads as a trend you might chase.

Build the second source before you need it

Start by dropping the idea that the GA4 interface shows raw counts. It does not. Every number in the standard reports has already been processed three ways:

  • Sampling. Above a property’s event limit, standard reports use a portion of the data and scale up to a directionally accurate estimate, so the figure on screen is modeled, not a full count (Google Analytics Help).
  • Thresholding. Reports withhold rows for small cohorts to stop individuals being identified from the data, so low-volume segments can read as blank (Google Analytics Help).
  • HyperLogLog++. For unsampled reports, user and session counts come from HLL++, a cardinality estimator that trades a little accuracy for speed (Google Analytics Help).

The number was modeled before you ever read it.

That is the case for a second source GA4 never touches. BigQuery export is the usual answer, because it streams the full event dataset before any sampling runs. That is also why its totals rarely tie out to the UI down to the row.

Consent mode widens the gap. When a visitor declines cookies, the export receives cookieless pings carrying no user_pseudo_id and no ga_session_id, so stitching those hits back into users and sessions gets unreliable fast (ga4bigquery.com).

Modeled data behaves the opposite way. Estimates from Google Signals and consent live only in the UI, never in the export, which is why UI volumes usually sit higher than the same query in BigQuery (Cardinal Path). Know which surface you are quoting.

None of that demands BigQuery specifically. A server-side event log or your own edge access logs does the same job: a number GA4 did not compute, owned by you, on infrastructure that fails independently. On September 1 that second source would have read normal while the standard reports read zero, and the outage would have shown up in seconds instead of a panic. This is the same reason a raw before-and-after chart is not evidence, a point we made in technical SEO testing.

Version every definition

Store each metric’s counting rule and its effective date next to the data, not in someone’s memory. When AdSense’s rule flips on February 17, 2027, a good chart annotates the step. A bad one folds it into the trend line and invites you to chase it.

The number is a claim, not a fact

A dashboard reads like truth. It is a report from one system, under one definition, on a day that system happened to be healthy. September 1 showed the definition holding while the pipeline failed. February 17, 2027, will show the pipeline holding while the definition changes beneath it. There is a wider shift underneath both: traffic has stopped being a defensible north-star metric on its own, a case we made in demand generation in the AI search era.

So make every metric that carries a decision answer three questions on its own chart:

  • What counted it?
  • When did that rule last change?
  • What does a second source say?

Ask them before the next outage, not after.

Share
Written by
Carlos Arias

Builder of AstroAgent, an AI-run website platform.

Continue reading

Stay in the loop.

One email when it’s worth it — new posts and updates, no spam.

Free. Unsubscribe in one click.