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

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. Accept cookies to load it.