Level – Commercial Aviation


Centralizing GA4 Reporting
with Supermetrics and BigQuery

“Every step of our booking funnel is measured in sessions, so we needed session figures in BigQuery that agree with GA4 at every breakdown we report on.”

THE CHALLENGE

Level’s GA4 data already reached BigQuery through GA4’s native export, with reporting built directly on that dataset. Session counts came through inflated, because sessions were duplicated when the data was queried at different granularities. That left the dataset unusable as a reporting source.
The objective was to give Level a reliable, centralized reporting layer for its GA4 web analytics data in Google Cloud, built around the booking funnel metrics, dimensions and table granularity Level had defined. Applying metric definitions in one place would keep the funnel measured consistently, have everyone work from the same numbers and let the setup grow as new requirements came in.

DISCIPLINES

Data Engineering, Analytics Engineering, Cloud Data Warehousing, Data Quality Assurance

OUR APPROACH


One Reporting Layer,
The Right Path for Every Metric

Uptimal partnered with Level to centralize its GA4 reporting in BigQuery. Working from Level’s table architecture, we configured its Supermetrics workspace from scratch to carry most of the reporting. Supermetrics maintains the API connections, which reduces long-term maintenance. For the few metrics whose condition must apply before GA4 aggregates a session, we built a daily Cloud Run service in Level’s own Google Cloud project.

In testing, filtering ancillary sessions after GA4 had aggregated them counted the same visit more than once. Figures came through close to double what GA4 reports, and the gap varied by day and country. The daily service places the condition inside the GA4 request instead, so the data arrives already filtered. A second service brings the booking funnel through hourly, and scheduled queries apply the remaining definitions in one governed SQL layer.


  • Scope & Table Design

    We mapped the metrics, dimensions and table granularity Level defined onto a Supermetrics table design, keeping session tables apart from metrics tables so session counts stay GA4’s own while funnel steps are calculated downstream.

  • Validation & Diagnosis

    We checked every reporting table against GA4 and traced each difference to its cause instead of adjusting for it, which is how we found the ancillary over-count and a missing route exclusion on connection sessions.

  • Rebuild & Monitoring

    We resolved both through the daily Cloud Run service, then rebuilt and backfilled the affected tables. We filled route group and country ISO code gaps in historical data, and added three alert policies that email Level on hard failures.

“We kept ingestion, storage and calculation separate, so most funnel definitions can change in SQL without touching how data is collected, and the raw data can always be checked against GA4.”

PREM ANAND

Senior Data Analyst


RESULTS


Goals accomplished!

Level now has a centralized reporting layer for its GA4 data in BigQuery, built on one agreed set of booking funnel definitions and checked table by table against GA4. The pipeline lets figures settle in line with GA4 as recent days are restated, and stops a pull if the data comes back sampled, so an estimate never replaces a complete figure.


13


reporting tables rebuilt automatically, twelve daily and one every hour



100%


of reporting tables checked directly against GA4, one metric at a time

24


months of history backfilled, reaching September 2024 wherever tracking exists


reporting tables rebuilt automatically, twelve daily and one every hour

of reporting tables checked directly against GA4, one metric at a time

months of history backfilled, reaching September 2024 wherever tracking exists

Header photo: Daniel Luis Gómez Adenis, CC BY 2.0, cropped. Illustration: Data illustrations by Storyset.