Google

GA4 Raw Event Data Sample CSV (Dirty + Clean)

A production-realistic Google Analytics 4 event export (15,000 rows) mirroring the BigQuery export schema. The GA4 quirk: event_timestamp is stored in microseconds (16-digit integers), not milliseconds. Data engineers who treat these as Unix epoch milliseconds will shift all event dates to year 53,000+, destroying time-series analysis. The 'dirty' version includes microsecond timestamps, null user_pseudo_id rows (bot traffic / consent denied), and event_params encoded as nested JSON strings that break flat-file parsers. Perfect for testing analytics engineering workflows, dbt model validation, and Looker Studio dashboards. Process everything locally — your analytics data never leaves your browser.

Live Interactive Preview

Live Data Preview

See how this messy google data looks before downloading. All processing happens locally in your browser.

💡 Pro Tip: GA4's nested event_params just broke your flat-file parser. Flatten it with JSON to CSV to extract keys like page_location into discrete columns. Zero data loss.

⚡ Next Step: Need to reconstruct sessions from raw events? Query this CSV directly with SQL in your browser — no BigQuery bills, zero cloud uploads.

Data Schema Definition

ColumnTypeDescription
event_datestringYYYYMMDD string partition key. Derived from event_timestamp in UTC; may differ from local calendar date.
event_timestampinteger⚠️ CRITICAL: Microseconds since epoch (16 digits). Treating as milliseconds shifts dates to year 53,000+. Divide by 1,000,000 for Unix seconds.
event_namestringEvent identifier: page_view | session_start | purchase | scroll. Custom events follow snake_case convention.
event_paramsjson⚠️ TRAP: Nested JSON array of {key, value} pairs. Cannot be parsed as flat CSV. Requires UNNEST in BigQuery or dedicated flattener.
user_pseudo_idstringCookie/device ID. NULL when Consent Mode denies analytics storage (~15-30% in EU). Exclude from user counting.
device.categorystringEnum: desktop | mobile | tablet. Inconsistent casing across export methods; normalize to lowercase.
geo.countrystringCountry name derived from IP. Not ISO code; join to geo lookup table for standardized reporting.
traffic_source.mediumstringAttribution medium: organic | cpc | referral | email. '(none)' indicates direct/unattributed; do not treat as null.
session_engagedstring'1' = engaged session (>10s, conversion, or 2+ pageviews). String type, not boolean; cast explicitly.
ecommerce.total_item_quantityintegerSum of items in purchase event. NULL for non-commerce events; COALESCE to 0 for aggregation.

⚠️ Highlighted rows contain known data traps. Review descriptions before building ETL pipelines.