Menu

Unify Web and App GA4 Data in BigQuery
Unify Web and App GA4 Data in BigQuery

How to Unify Web and App GA4 Data in BigQuery for Reliable Cross-Platform Analytics

Combine GA4 web events and Firebase app events in BigQuery without double-counting. Follow our step-by-step SQL examples, avoid common pitfalls, and build trusted cross-platform reports.

Shreya Banker

Data Scientist

Data Analyst enthusiast. More than 7 years of exposure in Data Analysis and Software programming. I am a highly motivated, versatile IT professional with experience in Data Analysis, Visualization and Database Management. I look for the hardest problem to solve and where I can learn and develop the most. I love a challenge and never run from a difficult task. I'm determined to succeed, and I look forward to what life has to offer.

Handling Cross-Platform Data in BigQuery: Unifying Web and App Events for Accurate Analytics

As digital experiences become increasingly cross-platform, businesses rely on both websites and mobile apps to interact with users. While Google Analytics 4 (GA4) does a great job of collecting this data, BigQuery unlocks its full potential — but combining web and app data isn't always plug-and-play.

In this post, we'll break down how to unify Web and  App data in BigQuery, what to watch out for, and how to get accurate, platform-agnostic insights.

Why Cross-Platform Unification Matters

Imagine a shopper who browses on a laptop, then checks out in your mobile app. In GA4 those hits land in two data streams:

  • Web: tracked via gtag.js

  • App: tracked via Firebase SDK

Both streams flow into the same BigQuery table, but event names, parameters, and even data types differ. If you query them “as-is,” you may miss half the story or double-count results.

Understanding the Differences

Why page_view ≠ screen_view

Here’s a simple breakdown:

  • On the web, GA4 uses the page_view event to track URLs

  • On apps, it uses screen_view to track which screens a user saw.

So, if you're measuring how many “views” something got, you’ll want to include both events, or you’ll be missing half the story.

Tip: Always use the platform field when splitting or combining data.

How to Query Web + App Views in BigQuery

Let’s break it down:

For web:

SELECT value.string_value  FROM UNNEST(event_params)
WHERE event_name = 'page_view' AND key = 'page_location'

This pulls the full page URL.

For app:

SELECT value.string_value  FROM UNNEST(event_params)
WHERE event_name = 'screen_view' AND key = 'firebase_screen_class'

This gives you the name of the screen the user saw.

Combine both:

CASE 
  WHEN platform = 'WEB' THEN ( SELECT value.string_value 
    FROM UNNEST(event_params)
    WHERE event_name = 'page_view' AND key = 'page_location'
  )
  ELSE (
    SELECT value.string_value 
    FROM UNNEST(event_params) 
    WHERE event_name = 'screen_view' AND key = 'firebase_screen_class'
  )
END AS page_or_screen

Now you’ve got a single column—page_or_screen—that works for both platforms.

Tracking Session Engagement (And Why It’s Tricky)

One area where web and app data don’t quite align is how session engagement is measured in GA4.

For web, GA4 uses the parameter session_engaged, which is a string value (usually "1" if the session is engaged):


MAX((SELECT value.string_value 
     FROM UNNEST(event_params) 
     WHERE key = 'session_engaged')) AS session_engaged_web
For apps, it uses engaged_session_event, which is an integer (typically 1 for engaged):MAX((SELECT SAFE_CAST(value.int_value AS STRING) 
     FROM UNNEST(event_params) 
     WHERE key = 'engaged_session_event')) AS session_engaged_app

Since these are tracked with different parameter names and data types, the best approach is to normalize them into a single column using a CASE statement.

Metrics That Are Already Consistent

Not everything is so complicated! Some metrics work the same across both web and app, like:

  • ga_session_id – to track unique sessions

  • entrances – to know where users started

  • engagement_time_msec – how long the user stayed

Final Thoughts

Unifying web and app data in GA4 BigQuery might seem complicated at first, but once you understand where the differences are, it's pretty manageable.

Just remember:

  • Web = page_view + page_location

  • App = screen_view + firebase_screen_class

  • Some engagement metrics look different, but they tell the same story

  • Many fields already work across both platforms

How Napkyn Turns Unified Data into Action

Centralizing web and app events is only the starting line. Napkyn’s solutions help you push that data further, so your team can focus on insights instead of plumbing.

What We Deliver

  • Automated BigQuery Pipelines -Our ETL Pipeline Solutions move GA4, CRM, and media data into BigQuery in near-real time, complete with deduping, error handling, and cost-control logic. Skip the manual exports and custom scripts. Fresh, reliable data is always ready for analysis or activation.

  • Cross-Platform Data Modeling - Custom SQL templates and dbt models that normalize page_view / screen_view, align session logic, and create clean, business-ready tables. One source of truth means fewer reporting headaches and consistent KPIs across teams.

  • Real-Time Dashboards & Alerts - Looker Studio and BigQuery BI Engine dashboards with automated anomaly alerts so you catch issues before they impact revenue. Decision-makers get answers in seconds, not days, and can act on trends while they still matter.

  • Enablement & Training - Hands-on GA4 and BigQuery workshops plus office-hour support so your analysts can own the stack long-term. You gain skills in-house instead of relying on external help for every tweak.

Ready to see unified data in action? Explore our ETL Pipeline Solutions or reach out for a quick demo of a live GA4 + BigQuery workflow tailored to your business.

Unify Web and App GA4 Data in BigQuery

How to Unify Web and App GA4 Data in BigQuery for Reliable Cross-Platform Analytics

Combine GA4 web events and Firebase app events in BigQuery without double-counting. Follow our step-by-step SQL examples, avoid common pitfalls, and build trusted cross-platform reports.

Shreya Banker

Data Scientist

Data Analyst enthusiast. More than 7 years of exposure in Data Analysis and Software programming. I am a highly motivated, versatile IT professional with experience in Data Analysis, Visualization and Database Management. I look for the hardest problem to solve and where I can learn and develop the most. I love a challenge and never run from a difficult task. I'm determined to succeed, and I look forward to what life has to offer.

Handling Cross-Platform Data in BigQuery: Unifying Web and App Events for Accurate Analytics

As digital experiences become increasingly cross-platform, businesses rely on both websites and mobile apps to interact with users. While Google Analytics 4 (GA4) does a great job of collecting this data, BigQuery unlocks its full potential — but combining web and app data isn't always plug-and-play.

In this post, we'll break down how to unify Web and  App data in BigQuery, what to watch out for, and how to get accurate, platform-agnostic insights.

Why Cross-Platform Unification Matters

Imagine a shopper who browses on a laptop, then checks out in your mobile app. In GA4 those hits land in two data streams:

  • Web: tracked via gtag.js

  • App: tracked via Firebase SDK

Both streams flow into the same BigQuery table, but event names, parameters, and even data types differ. If you query them “as-is,” you may miss half the story or double-count results.

Understanding the Differences

Why page_view ≠ screen_view

Here’s a simple breakdown:

  • On the web, GA4 uses the page_view event to track URLs

  • On apps, it uses screen_view to track which screens a user saw.

So, if you're measuring how many “views” something got, you’ll want to include both events, or you’ll be missing half the story.

Tip: Always use the platform field when splitting or combining data.

How to Query Web + App Views in BigQuery

Let’s break it down:

For web:

SELECT value.string_value  FROM UNNEST(event_params)
WHERE event_name = 'page_view' AND key = 'page_location'

This pulls the full page URL.

For app:

SELECT value.string_value  FROM UNNEST(event_params)
WHERE event_name = 'screen_view' AND key = 'firebase_screen_class'

This gives you the name of the screen the user saw.

Combine both:

CASE 
  WHEN platform = 'WEB' THEN ( SELECT value.string_value 
    FROM UNNEST(event_params)
    WHERE event_name = 'page_view' AND key = 'page_location'
  )
  ELSE (
    SELECT value.string_value 
    FROM UNNEST(event_params) 
    WHERE event_name = 'screen_view' AND key = 'firebase_screen_class'
  )
END AS page_or_screen

Now you’ve got a single column—page_or_screen—that works for both platforms.

Tracking Session Engagement (And Why It’s Tricky)

One area where web and app data don’t quite align is how session engagement is measured in GA4.

For web, GA4 uses the parameter session_engaged, which is a string value (usually "1" if the session is engaged):


MAX((SELECT value.string_value 
     FROM UNNEST(event_params) 
     WHERE key = 'session_engaged')) AS session_engaged_web
For apps, it uses engaged_session_event, which is an integer (typically 1 for engaged):MAX((SELECT SAFE_CAST(value.int_value AS STRING) 
     FROM UNNEST(event_params) 
     WHERE key = 'engaged_session_event')) AS session_engaged_app

Since these are tracked with different parameter names and data types, the best approach is to normalize them into a single column using a CASE statement.

Metrics That Are Already Consistent

Not everything is so complicated! Some metrics work the same across both web and app, like:

  • ga_session_id – to track unique sessions

  • entrances – to know where users started

  • engagement_time_msec – how long the user stayed

Final Thoughts

Unifying web and app data in GA4 BigQuery might seem complicated at first, but once you understand where the differences are, it's pretty manageable.

Just remember:

  • Web = page_view + page_location

  • App = screen_view + firebase_screen_class

  • Some engagement metrics look different, but they tell the same story

  • Many fields already work across both platforms

How Napkyn Turns Unified Data into Action

Centralizing web and app events is only the starting line. Napkyn’s solutions help you push that data further, so your team can focus on insights instead of plumbing.

What We Deliver

  • Automated BigQuery Pipelines -Our ETL Pipeline Solutions move GA4, CRM, and media data into BigQuery in near-real time, complete with deduping, error handling, and cost-control logic. Skip the manual exports and custom scripts. Fresh, reliable data is always ready for analysis or activation.

  • Cross-Platform Data Modeling - Custom SQL templates and dbt models that normalize page_view / screen_view, align session logic, and create clean, business-ready tables. One source of truth means fewer reporting headaches and consistent KPIs across teams.

  • Real-Time Dashboards & Alerts - Looker Studio and BigQuery BI Engine dashboards with automated anomaly alerts so you catch issues before they impact revenue. Decision-makers get answers in seconds, not days, and can act on trends while they still matter.

  • Enablement & Training - Hands-on GA4 and BigQuery workshops plus office-hour support so your analysts can own the stack long-term. You gain skills in-house instead of relying on external help for every tweak.

Ready to see unified data in action? Explore our ETL Pipeline Solutions or reach out for a quick demo of a live GA4 + BigQuery workflow tailored to your business.

Sign Up For Our Newsletter

Napkyn Inc.
204-78 George Street, Ottawa, Ontario, K1N 5W1, Canada

Napkyn US
6 East 32nd Street, 9th Floor, New York, NY 10016, USA

212-247-0800 | info@napkyn.com