GA4 Exploration CSV / TSV export
The file you get when you download a report from GA4's Explore section, which people wrongly treat as a clean tabular extract of the underlying events when it is actually a rendering of a UI table, sampled, bucketed, thresholded, and row-capped exactly as shown on screen.
The shape, how the file is really laid out
The CSV/TSV opens with a metadata preamble: comment lines prefixed with "#"
carrying the report nickname, the date range as "# Start date: 20260701" /
"# End date: 20260731", and the active segments and filters, then a blank
line before the real header row. A single export can stack several tables (one
per Exploration tab), each introduced by its own "#" comment block, so the
file is not one grid but many. Each table usually ends with or includes a
"Totals" row. Dimension values arrive as literal strings including "(not set)",
"(direct)", "(none)", and a catch-all "(other)" row; the default "Users"
metric is Active Users, not Total Users, and rates such as engagement or
conversion may be written as either a decimal (0.42) or a percent string
(42%).
The traps
A naive load takes the first "#" preamble line as the header and mis-parses the whole file; stacked tables mean row 200 can be a fresh header, not data.
- Every trap in this export, worked through
- The reconciliation anchor, the total the file asserts about itself
- The refusal cases, when to stop and ask instead of guess
Reference: Google Analytics 4 Help, "Explorations" and "Export data from an exploration" · GA4 Help, "About data sampling" · GA4 Help, "High-cardinality dimensions" (the (other) row) · GA4 Help, "Data thresholding"