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

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).

How to unpack nested arrays

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

event_params

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

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 to 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;

How to use this in a GA4 audit

Use this topic to support a BigQuery export audit and reporting-governance review. This article is about validating exported analytics data without assuming raw tables reproduce every GA4 reporting behavior exactly. Where possible, separate API-verified findings, browser-verified findings, and findings that depend on access to linked platforms.

What to verify

  • Use stable daily exports before drawing conclusions from intraday or best-effort tables.
  • Compare raw event and transaction slices before comparing attribution or modeled reporting outputs.
  • Confirm which fields are available only after processing delays or only in specific export modes.
  • State clearly when warehouse logic is an approximation of the GA4 interface rather than a perfect recreation.

Known limitations

  • BigQuery export, the Data API, and the GA4 interface can differ for legitimate processing reasons.
  • Attribution, identity, thresholding, and modeled features may not map one-to-one to raw export tables.

Before acting on the result

Use the visible evidence behind the finding before changing reporting, bidding, privacy controls, or executive dashboards. GA4 Audits findings should be reviewed by a qualified analyst before major business decisions are made.

Audit findings should be reviewed by a qualified analyst before they are used for major reporting, media, or implementation decisions. Review your findings

GA4 Audits Team

GA4 Audits Team

Analytics Engineering

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

Share