Back to Blog
Technology

Using GA4 with BigQuery for Product Analytics

Deeper insights into user behavior

Leverage GA4 and BigQuery with Mitzu.io to gain deeper insights into user behavior and revenue impact with a streamlined, semantic-layer grounded solution.

István Mészáros
István Mészáros

Co-founder & CEO

Published April 26, 2025 · Updated April 8, 2026
5 min read
Using GA4 with BigQuery for Product Analytics

TL;DR

Leverage GA4 and BigQuery with Mitzu.io to gain deeper insights into user behavior and revenue impact with a streamlined, semantic-layer grounded solution. Use this comparison to evaluate tools through an agentic analytics lens: which platform enables an AI data analyst workflow with trusted SQL and a trusted semantic layer, not just faster dashboarding.

Use this comparison to evaluate tools through an agentic analytics lens: which platform enables an AI data analyst workflow with trusted SQL and a trusted semantic layer, not just faster dashboarding.

Using GA4 with BigQuery for Product Analytics

Google Analytics 4 (GA4), introduced in October 2020, is positioned as a successor to Universal Analytics(UA). GA4 aimed to enhance privacy standards in data collection and incorporated more AI and machine learning than UA, offering potential benefits for marketers.

The Challenges of Transitioning to GA4

In a nutshell, people at Google wanted GA4 to become the next marketing and product analytics solution for any business.Google announced that GA4 would replace Universal Analytics in July 2023, and historical data would not transfer from UA to GA4. Two years later, it is painfully clear the transition was neither smooth nor well-received.

Why GA4 Is Difficult to Use for Marketers?

  • GA4 is Difficult to Use: The GA4 charts, reports, and dashboards are complicated to navigate, and most marketers easily get lost.
  • Bad User-Interface: The primary concern raised by marketers regarding GA4 was its user interface. Filtering, user segmentation, or just finding features is complex at best. Users of GA4 easily get lost in endless menus and modals.
  • Data Lag: In the free tier, GA4 offers one or more days lag for data, which is often insufficient for marketers.
  • Data Discrepancies: Data quality is often mentioned as the primary problem with GA4. Insights in GA4 can diverge or contradict insights from other tools, usually leading to confusion.
  • Insufficient for Complex Analytics: While simple insights can be a good enough solution If someone wants to dig deeper into the data, it often hits a block.

BigQuery as the Solution for Advanced GA4 Analytics

While the GA4 user interface may be sufficient for basic requirements, answering more complex questions can be impossible. Luckily, you can export all your GA4 data to BigQuery for free (up until a limit). Here is a great description and video from Google on how to do it:

https://support.google.com/analytics/answer/9358801?hl=en

Exporting GA4 Data to BigQuery: Batch vs. Streaming Options

You can set up daily batch exports or use the streaming approach to BigQuery. While the streaming approach requires you to share your credit card details, it solves the issue of data lag. You will see almost immediately all your GA4 tracked events in BigQuery.

If data lag is not something you are concerned about, stick to daily batch exports. It is free.

Navigating the GA4 Data Model in BigQuery

Having your GA4 data in BigQuery comes with a lot of benefits. The obvious one is that you can connect Looker Studio or similar data tools to it. However, there is a caveat. GA4 data model is very complex. You must be an "expert" in SQL to answer any questions from your raw BigQuery data.The main issue with the BigQuery GA4 data is the REPEATED type for the Event Param column.

Schema for GA4 with Repeated Types

The Problem with REPEATED Types in GA4 Data

Repeated types are the arrays in BigQuery. The main issue with arrays in SQL is that you need to know which element to access by its index.

SELECT  
  event_name,  
  user_pseudo_id,  
  event_timestamp,  
  params.key,  
  params.value
FROM `.events_YYYYMMDD`,  
UNNEST(event_params) AS params
WHERE 
  event_name = 'page_view'
SELECT  
  event_name,  
  user_pseudo_id,  
  event_timestamp,  
  params.key,  
  params.value
FROM `<project>.events_YYYYMMDD`,  
UNNEST(event_params) AS params
WHERE 
  event_name = 'page_view'
CREATE OR REPLACE TABLE `<project>.<dataset>.ga4_events` AS (
  WITH
  event_properties AS (
  SELECT
    event_timestamp,
    user_id,
    user_pseudo_id,
    event_name,
    JSON_OBJECT(ARRAY_AGG(p.key), ARRAY_AGG(COALESCE(COALESCE(COALESCE(p.value.string_value, CAST(p.value.int_value AS string)), CAST(p.value.float_value AS string)), CAST(p.value.double_value AS string)))) event_params
  FROM
    `<project>.<dataset>.events_*`,
    UNNEST(event_params) AS p
  GROUP BY
    1,
    2,
    3,
    4 ),
  user_properties AS (
  SELECT
    event_timestamp,
    user_id,
    user_pseudo_id,
    event_name,
    JSON_OBJECT(ARRAY_AGG(p.key), ARRAY_AGG(COALESCE(COALESCE(COALESCE(p.value.string_value, CAST(p.value.int_value AS string)), CAST(p.value.float_value AS string)), CAST(p.value.double_value AS string)))) user_properties
  FROM
    `<project>.<dataset>.events_*`,
    UNNEST(user_properties) AS p
  GROUP BY
    1,
    2,
    3,
    4 )
  SELECT
  TIMESTAMP_MICROS(evt.event_timestamp) AS event_time,
  ep.event_params,
  up.user_properties,
  evt.* EXCEPT (event_timestamp,
    event_params,
    user_properties,
    items)
  FROM
  `<project>.<dataset>.events_*` AS evt
  LEFT JOIN
  event_properties ep
  ON
  evt.event_timestamp = ep.event_timestamp
  AND COALESCE(evt.user_id,'')=COALESCE(ep.user_id,'')
  AND evt.user_pseudo_id =ep.user_pseudo_id
  AND evt.event_name = ep.event_name
  LEFT JOIN
  user_properties up
  ON
  evt.event_timestamp = up.event_timestamp
  AND COALESCE(evt.user_id,'')=COALESCE(up.user_id,'')
  AND evt.user_pseudo_id =up.user_pseudo_id
  AND evt.event_name = up.event_name)
SELECT   
   event_name,
   user_pseudo_id,
   event_time 
FROM `<schema>.ga4_events` 
WHERE json_value(event_params['page_title']) = 'Mitzu - Simple Warehouse Native Product Analytics'   
AND event_name='page_view'

Querying GA4 Data in BigQuery with Mitzu

Mitzu can connect directly to GA4 export tables in BigQuery, usually in the analytics_XXXXXXXXX.events_* format. During setup, you map event_name, user identifiers, and event timestamp, then define how nested event_params fields should be exposed as queryable properties. This removes repetitive manual UNNEST logic for every analysis.

For teams tracking conversion journeys, surfacing parameters like page_location, session_id, or campaign values as first-class properties is critical. Once modeled, these become filterable dimensions in Mitzu's visual analysis builder, while still executing as native BigQuery SQL.

Building Funnels and Retention on GA4 BigQuery Data

A practical funnel is page_view on the pricing page -> sign_up -> first_dashboard_viewed. In raw SQL, this requires staged CTEs, timestamp ordering, and repeated event_params extraction. Mitzu uses the same source tables but lets product teams build this funnel visually and inspect generated SQL when needed.

SELECT
  user_pseudo_id,
  MIN(CASE WHEN event_name = 'page_view'
    AND JSON_VALUE(event_params['page_location']) LIKE '%/pricing%' THEN event_time END) AS pricing_view_at,
  MIN(CASE WHEN event_name = 'sign_up' THEN event_time END) AS signup_at,
  MIN(CASE WHEN event_name = 'first_dashboard_viewed' THEN event_time END) AS first_value_at
FROM `<project>.<dataset>.ga4_events`
GROUP BY 1

Limitations of GA4 for Product Analytics (and how BigQuery helps)

GA4's built-in interface is useful for marketing teams but has practical limits for product analytics at scale. Explorations have dimension/metric constraints, historical windows are limited, and joining with non-GA4 business systems is not native. BigQuery removes these constraints by giving direct SQL access to full event history and any other warehouse table.

With Mitzu on BigQuery, teams can combine GA4 behavior with CRM lifecycle stages, subscription status, revenue cohorts, and support context in one analysis path. That changes analytics from isolated event reporting to business-aware product decision making.

Agentic Analytics on GA4 + BigQuery

Instead of pre-building every dashboard, a product manager can ask Mitzu's AI agent: "Which landing pages have the highest activation funnel conversion this quarter?" The agent translates the question into SQL across GA4 event tables and related business dimensions, runs it in BigQuery, and returns a chart plus transparent query output.

This is powerful because the query context is not limited to GA4's event schema. The same analysis can include paid channel attribution, account segment, or plan data from other warehouse tables without switching tools.

FAQ

Does Mitzu handle GA4's nested event_params structure automatically?

Mitzu can model GA4's nested parameters as queryable properties so teams are not writing UNNEST logic for every chart. You still keep SQL transparency, but setup centralizes parameter mapping once. This makes recurring product analyses much faster and less error-prone.

Can I join GA4 BigQuery data with CRM data in Mitzu?

Yes. That is one of the main benefits of warehouse-native analytics. As long as CRM or revenue tables are available in BigQuery and included in your model, Mitzu can generate joins for cross-domain analysis.

How is Mitzu on GA4 BigQuery different from using Looker Studio only?

Looker Studio is a flexible BI layer, but product analytics workflows like ordered funnels, retention cohorts, and journey analysis often need custom modeling and repetitive SQL. Mitzu provides product-specific analytical primitives on top of the same BigQuery data. Teams get self-serve product workflows without sacrificing warehouse control.

Does GA4 BigQuery export include enhanced measurement event types?

In most setups, yes, GA4 export includes the enhanced measurement events that GA4 collects for the property. The exact coverage depends on your GA4 configuration and property settings. Always validate key event completeness before using the data for funnel or retention baselines.

Key Takeaways

  • Leverage GA4 and BigQuery with Mitzu.io to gain deeper insights into user behavior and revenue impact with a streamlined, semantic-layer grounded solution.

About the Author

István Mészáros

Co-founder & CEO

LinkedIn: https://www.linkedin.com/in/imeszaros/

Co-founder and CEO of Mitzu. Passionate about product analytics and helping companies make data-driven decisions.

Share this article

Subscribe to our newsletter

Get the latest insights on product analytics.

Ready to transform your analytics?

See how Mitzu can help you gain deeper insights from your product data.

Get Started

How to get started with Mitzu

Start analyzing your product data in three simple steps

Connect your data warehouse

Securely connect Mitzu to your existing data warehouse in minutes.

Define your events

Map your product events and user properties with our intuitive interface.

Start analyzing

Create funnels, retention charts, and user journeys without writing SQL.