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.
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-analyticsThree 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- fourbq.sourceassets 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 placeweb_analytics_staging- six models that rebuild GA4 sessions from raw events, conform both Search Console tables, and classify every query and URL onceweb_analytics_reports- nine reports, each answering a question neither GA4 nor Search Console answers on its owndashboards/- three Dashboards as Code files you serve locally onlocalhost: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
- The GA4 BigQuery export already running with streaming enabled
- The Search Console bulk data export already running into a BigQuery dataset
- A Google Cloud service account that can read both export datasets and create datasets and tables
- Git installed
- A coding agent such as Claude Code, Cursor, or Codex for the last step
Guide overview
- 1Set Up Your EnvironmentInstall the Bruin CLI and DAC, connect the Bruin MCP, verify each Google export separately, and initialize the template.
- 2Configure the PipelineSet the dataset names, brand pattern, key event values, competitor names, and URL role patterns that decide what every report means.
- 3Run and Review the AssetsRun all 19 shipped assets once, read the three layers, find the gaps on your own property, and decide which queries and asset definitions to customize.
- 4Analyze the DataServe the three shipped dashboards, customize them with an agent, put the agent to work answering questions, and deploy to Bruin Cloud.
Resources
Get help & contribute