Launch Offer2 free audits with all 229 checks. No credit card required.Start free audit

GA4 BigQuery Schema Cheat Sheet: Every Field, What It Does (2026)

Intermediate

What's in the GA4 BigQuery export schema?

The GA4 BigQuery export contains 30+ top-level fields per event row, organised into seven groups: identity (user_pseudo_id, user_id), timing (event_timestamp, event_date), event metadata (event_name, event_params), traffic source (traffic_source.*, session_traffic_source_last_click.* added 2024), device and geo (device.*, geo.*), e-commerce (ecommerce.*, items array), and derived fields (privacy_info.*, is_active_user, session_traffic_source_last_click.*).

Three of those fields are nested arrays — event_params, user_properties, and items — which need UNNEST() to query. The schema is consistent across all GA4 properties; the only variation is whether session_traffic_source_last_click is present (depends on export configuration date).

This post is the reference. Bookmark it.

The complete schema (30+ top-level fields)

Identity fields

FieldTypeWhat it contains
user_pseudo_idSTRINGAnonymous user ID (the GA cookie value). Persistent across sessions for the same browser.
user_idSTRINGCustom user ID set via the User-ID feature. NULL if not implemented.
pseudo_user_propertiesRECORD (repeated)User-scoped properties set with set_user_properties calls.
user_first_touch_timestampINT64Timestamp of the user's first touch (first session start).

Timing fields

FieldTypeWhat it contains
event_timestampINT64Microseconds since Unix epoch when the event was logged client-side.
event_dateSTRINGEvent date in YYYYMMDD format (the table suffix).
event_previous_timestampINT64Microseconds since Unix epoch of the previous event from the same user.
event_server_timestamp_offsetINT64Difference between client and server timestamp in microseconds.

Event metadata

FieldTypeWhat it contains
event_nameSTRINGThe event name (e.g., page_view, purchase, session_start).
event_paramsRECORD (repeated)Array of key-value parameters attached to the event. Critical field — most analysis lives here.
event_value_in_usdFLOAT64Currency-converted value if event has a value parameter.
event_bundle_sequence_idINT64The sequential ID of the bundle this event was uploaded in.
stream_idSTRINGIdentifies the data stream the event came from.
platformSTRINGThe platform that generated the event (WEB, IOS, ANDROID).

Traffic source

FieldTypeWhat it contains
traffic_source.sourceSTRINGFirst-touch source (lifetime user attribution).
traffic_source.mediumSTRINGFirst-touch medium.
traffic_source.nameSTRINGFirst-touch campaign name.
session_traffic_source_last_click.manual_campaignRECORDLast-click source for the current session (added 2024).
collected_traffic_sourceRECORDSource data from the actual collected event (newer field).

The session_traffic_source_last_click field, added in 2024, gives session-level last-click attribution directly. Before this field, you had to extract source/medium from the session_start event's params.

Device and geo

FieldTypeWhat it contains
device.categorySTRINGdesktop, mobile, or tablet.
device.mobile_brand_nameSTRINGApple, Samsung, etc.
device.mobile_model_nameSTRINGiPhone 15, Galaxy S24, etc.
device.operating_systemSTRINGiOS, Android, Windows, macOS, Linux.
device.operating_system_versionSTRINGOS version string.
device.web_info.browserSTRINGChrome, Safari, Firefox, Edge.
device.web_info.browser_versionSTRINGBrowser version.
device.languageSTRINGBrowser language preference (en-us, fr-fr).
geo.continentSTRINGThe continent.
geo.countrySTRINGThe country (e.g., "United Kingdom").
geo.regionSTRINGSubnational region (state, province).
geo.citySTRINGCity.
geo.metroSTRINGMetro area code (US-specific).

E-commerce

FieldTypeWhat it contains
ecommerce.transaction_idSTRINGTransaction ID for purchase events.
ecommerce.purchase_revenueFLOAT64Revenue from the transaction (excluding tax/shipping).
ecommerce.purchase_revenue_in_usdFLOAT64Revenue in USD.
ecommerce.refund_valueFLOAT64Refund amount.
ecommerce.shipping_valueFLOAT64Shipping cost.
ecommerce.tax_valueFLOAT64Tax amount.
ecommerce.unique_itemsINT64Number of unique items in the transaction.
ecommerce.total_item_quantityINT64Total quantity across all items.
itemsRECORD (repeated)Array of items in the event (product details).

Derived and metadata

FieldTypeWhat it contains
is_active_userBOOLEANWhether the user is considered active per GA4's definition.
privacy_info.analytics_storageSTRINGConsent state for analytics_storage.
privacy_info.ads_storageSTRINGConsent state for ad_storage.
privacy_info.uses_transient_tokenSTRINGWhether the user uses a transient token (consent-denied modelled events).
app_info.idSTRINGApp package name (mobile only).
app_info.versionSTRINGApp version (mobile only).

Want to see which hidden implementation gaps are affecting your GA4 data quality?

How to unpack nested arrays

Three fields are repeated records that need UNNEST() to query:

event_params

The value.string_value, value.int_value, value.float_value, and value.double_value fields hold the actual parameter values depending on type. Use the COALESCE pattern when the type is mixed:

items

user_properties

Standard event_params worth knowing

Every GA4 event includes a default set of parameters. The most common:

Param keyValue typeWhat it contains
ga_session_idint_valueThe session identifier (used for sessionisation)
ga_session_numberint_valueSequential session number for the user (1, 2, 3...)
page_locationstring_valueFull URL of the page
page_titlestring_valueThe page title
page_referrerstring_valueThe referring URL
engagement_time_msecint_valueEngagement time in milliseconds for this event
session_engagedint_valueWhether the session is engaged (1 or 0)
entrancesint_valueWhether this is the entry event of the session (1 or 0)
source, medium, campaignstring_valueTraffic source from the URL on the event
gclid, dclidstring_valueClick ID parameters when present

For purchase events specifically, additional params:

Param keyValue typeWhat it contains
currencystring_valueCurrency code (USD, GBP, EUR)
valuefloat_value or int_valueTotal transaction value
transaction_idstring_valueTransaction ID (mirrors ecommerce.transaction_id)
couponstring_valueCoupon code applied

What changed in 2024–25

Three meaningful schema additions in the past 18 months:

`session_traffic_source_last_click` (added 2024). Top-level field giving session-level last-click attribution without needing to extract from session_start event params. Older properties may not have it for historical data — only forward.

`is_active_user` (added 2024). Boolean indicating whether GA4 considers the user active per its internal definition. Useful for filtering bot or spam events that GA4 has flagged as inactive.

`privacy_info.uses_transient_token` (added 2025). Indicates whether the user uses a transient token — the marker for consent-denied modelled events. Useful for separating modelled from observed data in BigQuery analyses.

Older properties may have legacy fields no longer documented (e.g., event_dimensions.hostname was deprecated in 2023 in favour of extracting hostname from page_location). When in doubt, query the schema directly: SELECT column_name, data_type FROM project.analytics_PROPERTY_ID.INFORMATION_SCHEMA.COLUMNS WHERE table_name LIKE 'events_%' LIMIT 100;

FAQ: GA4 BigQuery Schema Cheat Sheet: Every Field, What It Does

What should a team validate first when ga4 bigquery schema cheat sheet: every field, what it does appears?

Reproduce the problem in the live implementation, isolate whether it is scoped to one report or flow, and compare it against at least one secondary source before changing the setup.

How do I know whether the fix actually worked?

You need before-and-after evidence in the browser and in the downstream report. A clean-looking dashboard without validation is not enough.

When should this become a full GA4 audit instead of a quick fix?

If the issue touches attribution, consent, revenue, campaign quality, or data trust for more than one workflow, it is usually safer to audit the surrounding implementation than patch only the visible symptom.

Run a GA4 audit before ga4 bigquery schema cheat sheet: every field, what it does spreads into reporting decisions

Use GA4 Audits to surface implementation gaps, broken signals, and the next fixes to prioritize before the issue becomes harder to trust or explain.

These findings come from auditing thousands of GA4 properties. See how your property compares

GA4 Audits Team

GA4 Audits Team

Analytics Engineering

Specialising in GA4 architecture, consent mode implementation, and multi-layer audit frameworks.

Share