← JournalBigQuery · 14 min read

Modeling the GA4 BigQuery Export Without Losing Your Mind

A pragmatic dbt-style approach to turning the raw events_* tables into clean session, user and conversion models you can actually report on.

M

My Digital Technique

March 19, 2026

The GA4 export is powerful and brutal. One row per event, repeated records for parameters, and no session table. Here's the layered model we ship.

Layer 1 — staging

Flatten event_params and user_properties once. Cast types. Standardize timestamps to UTC and the user's local zone. This layer is partitioned by event_date and clustered on event_name.

Layer 2 — sessions

Reconstruct sessions using ga_session_id + user_pseudo_id. Compute session start, end, duration, landing page, source/medium attribution and engaged flag. One row per session.

Layer 3 — marts

Funnels, cohort retention, attribution. These models are what Looker Studio and your CRM consume — never the raw export. Costs drop 80%, query times go from minutes to seconds.

Need help shipping this in production?

Talk to the studio →