Bruin Academy

Guide

GA4 and Search Console Reporting on BigQuery

Build an organic search reporting layer on the GA4 and Search Console exports you already have in BigQuery. Initialize the google-web-analytics template, model sessions and search demand, publish nine reports neither product can produce, and serve three dashboards locally.

Skip ahead

The whole project is one command. Run it, point your coding agent at the Bruin MCP, and it can configure and run everything itself.

$ bruin init google-web-analytics

Three ways to go from here:

  • Self-service it. Let the agent configure and run the whole thing, and ask it questions as you go.
  • Follow this tutorial. Slower, and it explains why each setting matters - the part an agent will not guess for you.
  • Hand the tutorial to the agent. Point it at this page and have it work through the steps with you.

The template README is the short reference for everything it ships.

What

Turn the two Google exports you already pay BigQuery to store into an organic search reporting layer. You will end up with 19 assets across three datasets, nine report tables, 166 quality checks, and three dashboards running on your machine.

  • web_analytics_raw - four bq.source assets that never execute. They declare Google's export tables so lineage starts at the source and the columns the pipeline depends on are documented in one place
  • web_analytics_staging - six models that rebuild GA4 sessions from raw events, conform both Search Console tables, and classify every query and URL once
  • web_analytics_reports - nine reports, each answering a question neither GA4 nor Search Console answers on its own
  • dashboards/ - three Dashboards as Code files you serve locally on localhost:8321

This template ingests nothing. Both products export to BigQuery natively, so the pipeline starts where those exports land.

How

bruin init google-web-analytics writes the whole project, so you are not authoring these assets - you are running them and deciding what to change. Four steps: verify both Google exports and initialize the template, describe your business in pipeline.yml, run the pipeline and review what the 19 assets built, then put the shipped dashboards and a coding agent on top of it.

The gap this closes is not missing data. It is that the data is split across two systems that never join, capped at a thousand rows in the interface, or hidden behind an (other) bucket. Search Console stops at the click and has no idea whether the visit converted. GA4 starts at the session and Google never passes it the query. Everything interesting lives in the join.

Note

The template targets BigQuery because that is where both exports land. The models are ordinary SQL, so the reporting layer ports to another warehouse - but the exports themselves do not, so the raw layer is BigQuery either way.

Before you start

Frequently asked questions

  • How do I join GA4 and Search Console data in BigQuery?
    Both products export to BigQuery natively, so the data is already there - the problem is that the two exports never join on their own. This template's staging layer rebuilds GA4 sessions from raw events, conforms both Search Console tables, and classifies every query and URL once, so the reports layer can join session behavior to search demand. Search Console stops at the click and GA4 never sees the query, so everything interesting lives in that join.
  • What reports can I build that GA4 and Search Console cannot produce?
    The reports layer ships nine reports, each answering a question neither product answers alone: for example, which queries drive sessions that actually convert, and landing-page performance without the thousand-row cap or the `(other)` bucket the native interfaces impose. Because GA4 has the query missing and Search Console has the conversion missing, these reports only exist once the two are joined in the warehouse.
  • Do I need the GA4 and Search Console BigQuery exports set up first?
    Yes. This template ingests nothing - it starts where Google's exports land. You need the GA4 BigQuery export running with streaming enabled and the Search Console bulk data export running into a BigQuery dataset, plus a service account that can read both. The first step verifies both exports before you initialize the template.
  • Is this web analytics pipeline free?
    Yes. It runs on the open-source Bruin CLI on your own machine and no Bruin account is required. You already pay BigQuery to store the two Google exports; the only added cost is the query usage the models and 166 quality checks incur.
  • Can I run the reporting layer on a warehouse other than BigQuery?
    The reporting models are ordinary SQL and port to another warehouse, but the raw layer stays on BigQuery because that is where GA4 and Search Console export - those exports do not port. In practice you keep the raw layer in BigQuery either way.
  • How long does it take?
    About 33 minutes across four steps: verify both exports and initialize the template, describe your business in `pipeline.yml`, run the pipeline and review the 19 assets, then serve the three dashboards locally and put a coding agent on top.

Get help & contribute

Sign up to our newsletter

Practical updates on open-source data pipelines, AI analysts, governance, and what we are shipping at Bruin.

The signup form is hosted by Brevo. Allow marketing cookies to load it.