Connect the Google Analytics 4 BigQuery export

Raw, event-level GA4 data — every page view, session, add-to-cart and purchase with its items — synced from your property's BigQuery export into your picoask warehouse. The companion of the Google Analytics 4 connector, which reads the aggregated reporting API.

0Before you start: what this connector is, and isn't

  • Event-level, not aggregates. The GA4 reporting API (the regular Google Analytics 4 connector) returns totals — sessions by source, revenue by campaign. The BigQuery export is the only way Google exposes the raw events underneath them. picoask lands a curated set of them: page_view, session_start, first_visit, view_item, add_to_cart, begin_checkout, add_payment_info, purchase, refund at event grain, one row per session, and one row per item of every e-commerce event.
  • Forward-only — no history. The export starts on the day you link it. Nothing before that day is ever exported by Google, so picoask cannot backfill it. Keep the regular Google Analytics 4 connector attached for history and for the reporting API's restatements; this connector adds the raw layer from the link day on.
  • It lives in your Google Cloud project. The export is written by Google into a BigQuery dataset in a project you own, which needs billing enabled. Storage of the export is billed to you by Google (the daily export itself is free; streaming export is billed per GB). picoask's reads are run in picoask's own project and paid by picoask.
  • Standard properties cap the daily export at 1 million events per day. Past that, Google pauses the daily export for that day. The streaming (intraday) export has no cap but is billed to you. Google Analytics 360 raises the cap.

1Link GA4 to BigQuery (in your Google Cloud project)

  • In Google Cloud, pick (or create) a project with billing enabled and make sure the BigQuery API is enabled in it.
  • In GA4, open Admin → Product links → BigQuery links → Link, choose that project, and pick the dataset location (region). Choose it deliberately — the dataset is bound to that region.
  • Choose the export frequency: Daily (a complete events_YYYYMMDD table lands once a day, typically by the afternoon of the following day) and/or Streaming (an events_intraday_YYYYMMDD table filled continuously through the day and replaced by the daily table when it finalises). picoask reads both; streaming is what gives you today's data within hours.
  • Google creates a dataset named analytics_<property id> in your project. The first table appears within a day of linking (within hours with streaming on).

2Share the export dataset with picoask's robot account

picoask reads the export with a Google service account — a robot identity with no password and nothing for you to paste. The connect form shows its address; it is the same robot the regular Google Analytics 4 connector uses.

  • In Google Cloud Console → BigQuery → Explorer, expand your project and find the analytics_<property id> dataset.
  • Open the dataset's menu (⋮) → Share → Add principal → paste the robot address from the connect form → role BigQuery Data Viewer → Save.
  • Data Viewer is enough — picoask only reads. It grants nothing on the rest of your project, and you can revoke it at any time by removing the principal from the dataset.

3Connect in picoask

In your project's Integrations tab, choose Google Analytics 4 — BigQuery export → Connect and paste the dataset as <gcp-project-id>.analytics_<property id>. Your project id plus the bare property id, the project:dataset spelling, or a pasted …events_* table path are all accepted.

picoask checks that the robot can read the dataset. If you have not shared it yet, the connector waits at “awaiting your approval” rather than failing — share the dataset, then click Re-check access on the connector card. Once access is confirmed, picoask reads every export table from the earliest one Google has written, then keeps up with the export every few hours.

4What lands in your warehouse

  • GA4 sessions (fact_ga4_session) — one row per session: start/end, pageviews, engagement, new vs returning, purchases and revenue, the session's source/medium/campaign and channel group, device, country and landing page.
  • GA4 events (fact_ga4_event) — one row per event from the list above, with page URL/referrer/title, the session's traffic source, device, geography, and for commerce events the transaction id, value and currency.
  • GA4 event items (fact_ga4_event_item) — one row per product in every view_item / add_to_cart / begin_checkout / add_payment_info / purchase / refund event: item id, name, brand, variant, category, price, quantity, revenue.

Today's rows come from the streaming table and are replaced by the daily table when Google finalises the day; a day's numbers can therefore move slightly for up to about three days. Custom events beyond the curated list can be added per connector — ask us.

5Troubleshooting

  • Waiting for BigQuery Data Viewer access — the robot has not been added on the dataset (step 2), or it was added on a different dataset or project. The message names the exact address; compare it letter for letter.
  • Dataset not found / BigQuery export not enabled — the GA4 → BigQuery link is not set up (step 1), the project id is wrong, or Google has not written the first export table yet (wait a day, or hours with streaming).
  • “…is the property id alone” — paste the Google Cloud project id as well: my-project.analytics_123456789.
  • “…is a measurement id” — a G-… value identifies a data stream, not the export dataset.
  • No data before a certain date — that is the day the link was created. The export is forward-only; the regular Google Analytics 4 connector covers the history.
  • A day is missing from the daily export — a standard property that exceeded 1 million events that day has its daily export paused for the day by Google; the streaming export still carries it.
Stuck?

Email contact@picoask.ai and we'll get you connected. See also the picoask docs.