GA4 export to dashboard

Your GA4 export, with the seconds and the rates read right.

Export a report from Google Analytics 4 and drop the CSV here. The file starts with several comment lines that break most readers, so those are skipped. Average engagement time per session is in seconds rather than minutes, engagement rate is a fraction rather than a percentage, and Total users is a deduplicated count that must never be added across days. All four are handled before the first chart appears.

Prefer the full explorer? Open the app, or start from the generic dashboard builder.

Comment block skipped
The hash-prefixed preamble is detected and the real header row is found underneath.
Seconds treated as seconds
Engagement time is formatted as minutes and seconds instead of being read as a raw count.
Rates recomputed
Engagement rate comes from engaged sessions over sessions, not from averaging a column.
Nothing uploaded
The export is parsed in your browser. No property access is granted to anyone.

GA4 hands you a report, not a dataset

The CSV that comes out of the GA4 interface is a rendering of a report, complete with a header block. The first several lines begin with a hash and carry the property name, the start and end dates and a note about the report. Then there is a blank line, then the real column names. Point any ordinary CSV reader at it and you get a one-column mess, because line one is # ---------------------------------------- rather than anything resembling a header.

Underneath that, the numbers themselves need care. Average engagement time per session is stored in seconds, so a healthy value of 92 is a minute and a half and not an hour and a half. Engagement rate comes out of the export as a decimal fraction even though the interface displays it as a percentage, so the same metric reads 0.6234 here and 62.34% on screen. And Total users is not additive: the same person visiting on Monday and Tuesday is one user for the week and two if you sum the daily rows.

How to export from Google Analytics 4

  1. Open the report you want in GA4 Sign in at analytics.google.com and pick the property from the selector at the top. Traffic acquisition under Reports, then Acquisition, is the report whose shape matches the columns below most closely.
  2. Set the date range Use the picker at the top right. GA4 defaults to the last 28 days, which is enough for a snapshot and not enough for a trend. A full quarter gives the daily chart something to say, and comparison mode adds a second period.
  3. Add Date as a dimension Most standard reports are aggregated over the whole range with no date column at all. To get one row per day you either add a secondary dimension or build the report in Explore, which gives you full control over dimensions and metrics.
  4. Use Share this report, then Download file The share icon at the top right offers Download file, then Download CSV. Take CSV rather than PDF or Google Sheets, since the Sheets route silently reformats the numeric columns as it goes.
  5. Drop the file here The comment block is skipped automatically, the channel group becomes a filter chip, and the engagement metrics are shown in units a human can read.

An Explore export gives you a cleaner file with fewer comment lines and whichever dimensions you chose. It also has row limits of its own, so check the row count against what the interface reported before trusting a total.

Try with sample Google Analytics 4 data (the same columns, 91 rows, no upload needed).

What the dashboard shows

Every panel below is built from a column that is actually in the export, named the way Google Analytics 4 names it.

  • Sessions and users over time. Date on the axis with both series drawn, and a note that the user line is a daily unique count rather than something to add up.
  • Channel group performance. Session default channel group ranked by sessions and by key events, which reorders the list whenever paid traffic is doing volume without doing much else.
  • Engagement quality. Engaged sessions as a share of sessions, computed from the two counts, alongside the average engagement time shown in minutes and seconds.
  • New against returning. New users against Total users per day, which is the closest this report shape gets to a retention signal.
  • Key events by channel. The metric formerly called conversions, split by channel, with conversion rate rebuilt as key events over sessions.
  • Revenue where it exists. Total revenue by channel and by day for properties with ecommerce or monetization configured, and quietly hidden where the column is all zeros.
Sample header row
Date,Session default channel group,Sessions,Total users,New users,Engaged sessions,Average engagement time per session,Engagement rate,Key events,Total revenue

Six GA4 export behaviors worth knowing

  • The file opens with comment lines. Several lines starting with a hash, then a blank line, then the header. Excel and most parsers take the first line as the header and collapse everything into one column.
  • Engagement time is in seconds. Not minutes, despite the interface showing a formatted duration. A value of 45 means forty-five seconds. Divide by sixty for minutes, and do not report the raw number as if it were one.
  • Engagement rate is a fraction. The export writes 0.6234 where the screen shows 62.34%. Multiply by a hundred, and never average the column across days, since each day has a different number of sessions behind it.
  • Total users cannot be summed. It is a deduplicated count for the row's time period. Adding seven daily figures counts anyone who visited twice more than once, and the error grows with how loyal your audience is.
  • Sampling and thresholding are silent. Large date ranges can return sampled data, and rows can be suppressed entirely when demographics are on and the counts are small enough to identify someone. Neither is flagged in the CSV.
  • Key events replaced conversions. Google renamed the metric in 2024, so older exports and newer ones use different column names for the same thing. Anything comparing across that boundary needs the rename applied first.

GA4 exports are awkward because they are report renderings rather than data extracts. Skip the preamble, convert the two disguised units, and never add a user count to another user count. After that the file behaves like any other daily table.

Frequently asked questions

Why does my GA4 CSV open as a single column?

Because GA4 writes a metadata block above the header. Several lines beginning with a hash carry the property name and date range, then a blank line separates them from the real column names. A parser that assumes the first line is the header ends up with one field per row. This page scans down for the first line that looks like a genuine header and starts reading there.

Is average engagement time in seconds or minutes?

Seconds. A value of 92 in that column means a minute and thirty-two seconds, not ninety-two minutes, and reporting it as minutes turns an ordinary site into an implausible one. The interface formats it for you, which is exactly why the raw export surprises people. This page shows it as minutes and seconds so the mistake is hard to make.

Can I add up Total users across days?

No. GA4 deduplicates users within whatever period a row covers, so a person who visits on three days appears in three daily rows but is one user for the week. Summing inflates the figure by however loyal your audience is, often by thirty percent or more. Sessions are additive and users are not, which is the single most useful thing to remember about this file.

Why does my export not match the numbers on screen?

Three usual causes. Sampling kicks in on large or complex date ranges and the CSV does not say so. Thresholding suppresses small rows when demographics or Google signals are enabled. And any report with a row limit truncates quietly, so the export covers fewer rows than the totals on screen were computed from. Check the row count against the interface before trusting a total.

What happened to the conversions column?

Google renamed conversions to key events in 2024 and reserved the word conversions for the advertising side of the product. The underlying metric is the same count of events you flagged as important. If you are comparing an old export against a new one, rename before you join, because otherwise you get two mostly empty columns and a chart with a hole in the middle.

Does using this page give anyone access to my property?

No. There is no OAuth step, no Google sign-in and no connection to your Analytics account at all. You export the file yourself and drop it here, and it is parsed by JavaScript inside your browser tab. That also means the page works on an export somebody emailed you, which a connector-based tool cannot do without granting it property access first.

See a GA4 export without exporting one

91 daily rows across channel groups, engagement time in raw seconds, engagement rate as a fraction and a comment block on top, just like the real download.

Open the sample Google Analytics 4 dashboard