Why is the raw GA4 events table so hard to query?
One row per event, with parameters packed into arrays of key-value structs — a schema built for completeness, not for analysts. Simple questions require UNNEST, grain decisions (event? session? user? day?) and knowledge of which parameters your implementation actually sends.
That knowledge is precisely what our modeling layer encodes, once, instead of every analyst rediscovering it per query. The raw export stays raw; the data models are what your team actually touches.
Why doesn’t the GA4 export have sessions — or channels?
The export has no session table and no default channel grouping. The interface’s sessions are estimated at report time; yours must be rebuilt from ga_session_id, and channel rules must be rewritten from source and medium — the export carries only the raw fields.
We rebuild sessions with one documented definition and version your channel rules in your database, so ‘Paid Social’ means the same thing in every data model, every month — and the sessionization SQL is our job to write and maintain, not yours.
Why can’t you see GA4 data from before the BigQuery link?
Because the export only flows forward — the link can’t be created retroactively, and pre-link events are gone as events; no vendor can work around that. The Data API softens the loss: GA4’s aggregated history isn’t bound by retention settings, so topline series from before the link can still be pulled at report grain.
You lose event-level detail, not the trend line. The advice is unchanged: link now, not when you need the history — every unlinked day is event-level history you never get back.
What happens when you hit GA4’s 1 million events a day export cap?
The daily batch export on standard properties caps at one million events per day, and Google pauses the export if a property consistently exceeds it — usually discovered only after the tables stop arriving.
High-volume properties need the streaming export or GA4 360. That’s a sizing conversation we have on the discovery call, before the pipeline is built, not after it breaks.
Why don’t warehouse numbers match the GA4 interface?
The interface estimates high-cardinality counts with approximation algorithms and applies privacy thresholds; the export gives you raw events that we aggregate exactly. Add late-arriving events — Google updates a daily table for roughly two days after its date — and sessions rebuilt under a different definition, and small deltas are structural, not bugs.
The data models document exactly how their numbers are counted and re-read the trailing tables until they settle, so the delta is an explanation, not an argument.