GA4 and Search Console Reporting on BigQuery
1) Run the pipeline
Four of the six staging models are incremental with a delete+insert strategy, so their destination tables have to exist before an ordinary run can replace days inside them. The first run creates everything with --full-refresh, scoped to the history your exports actually cover:
bruin run --full-refresh --no-validation \
--start-date 2026-01-15 --end-date 2026-08-15 .
Use your own dates: --start-date is the day the later of your two exports was enabled, and --end-date is yesterday. Three flags, three reasons:
--start-dateand--end-dateset the window, and this is what decides how much history you get. Both default to yesterday, so leaving them off builds one day and empty trend reports. This is the one run where you set them by hand.--full-refreshcreates the tables from scratch. Use it on this initial load only.--no-validationskips the query dry run, which on a first run would fail against destination tables that do not exist yet.
Warning
This is the expensive command in the tutorial. It scans your full GA4 event history through the events_intraday_* wildcard. Price it before you run it - --dry-run renders the asset over the same window and returns BigQuery's byte estimate without executing anything or charging you:
bruin query --asset assets/web_analytics_staging/ga4_sessions.sql --dry-run \
--start-date 2026-01-15 --end-date 2026-08-15
ga4_sessions and ga4_page_daily are the two models that read the GA4 wildcard, and they are essentially all of the cost - the Search Console tables are small. Roughly double this estimate for the backfill, then multiply by your BigQuery on-demand rate. If the number is uncomfortable, move --start-date forward; you can extend the history later by re-running over a wider window.
Every run after this one is the whole pipeline with no flags:
bruin run .
Both dates default to yesterday, which is the window you want: today's intraday table is still filling and Search Console has not published today either. Staging models re-read source_lookback_days extra days before the window and replace whole days, so late and restated source data heals itself. Reports rebuild in full over a trailing reporting_window_days. Re-running any date is always safe.
Validation is worth running now that the tables exist, and worth running before every change from here on:
bruin validate .
Without --fast it dry-runs every asset query against BigQuery, which is the check that catches a broken edit before it writes anything.