Skip to main content

Why are session numbers different between Orphex and GA4?

If session numbers in Orphex differ slightly from GA4, this is expected. Orphex shows the exact data returned by the GA4 API, while GA4 may estimate, model, or update session counts over time.

Written by Furkan Savrun

If you’ve noticed that the session numbers in Orphex differ slightly from what you see in your Google Analytics 4 (GA4) dashboard, this is expected and not a bug.

Orphex retrieves session data directly from the GA4 API. Any difference comes from how GA4 processes and estimates its data, not from Orphex.

Below are the most common reasons.


1. GA4 uses statistical estimation, not exact counting

GA4 does not count sessions precisely. Since October 2021, it uses an algorithm called HyperLogLog++ (HLL++) to estimate session counts. This method is designed for speed and efficiency, but it introduces small variances by design.

Orphex pulls data directly from the GA4 API β€” which also uses this estimation method. So the number you see in Orphex reflects exactly what GA4 reports.


2. Attribution data can change after a session is recorded

GA4 uses machine learning models to process and model attribution. Even after a session or conversion is recorded, GA4 continues processing and updating that data as its models improve.

Google documents this window as at least up to 12 days, but this is not a guaranteed upper limit. In practice, the number can vary, and Google has referenced different timeframes across its own documentation over time.

This means that if you compare numbers from earlier in the week to today, they may have shifted, even for the same date range.

For increased accuracy, Google recommends selecting a date range that goes beyond or prior to the previous week.


3. GA4 models sessions it cannot directly observe

GA4 uses modeling to fill in gaps caused by:

  • Users who haven't given cookie consent

  • Cross-device journeys (e.g., ad clicked on mobile, converted on desktop)

  • Browser privacy restrictions (e.g., Safari's ITP, Apple's ATT policy)

These modeled sessions are included in your reports and can shift the total count up or down compared to what was directly observed.


4. Your Reporting Identity setting affects the count

In GA4, the Reporting Identity setting determines how users are identified across sessions.

If your property is set to Device-based, each device is counted separately, meaning one person on two devices equals two users and potentially two sessions.

You can check this in your GA4 property under:

Admin β†’ Data Display β†’ Reporting Identity

5. High-cardinality custom dimensions can cause significant data fluctuations

This is a less commonly known but high-impact cause of data inconsistencies in GA4 β€” particularly for properties that send a large volume of unique values through custom dimensions.

What is high cardinality?

High cardinality occurs when a custom dimension (at the event or user level) is assigned a very large number of unique values β€” for example, a user ID, session token, order number, or any identifier that changes per user or per event.

⚠️ Google explicitly does not recommend this. When GA4 detects too many unique values for a dimension, it groups the overflow into a catch-all bucket labeled (other). This means a significant portion of your data becomes unattributed, unanalyzable, and unpredictable.

Why does this cause fluctuations?

High-cardinality dimensions affect GA4's ability to process and aggregate data reliably. This leads to:

  • Data sampling β€” GA4 may begin sampling reports to reduce computation load

  • Reporting instability β€” numbers can shift day-to-day even for historical date ranges

  • Delayed processing β€” GA4's internal pipelines may slow down when processing high-volume unique value sets

  • Inflated (other) rows β€” significant portions of sessions, events, or users fall into an unattributed bucket

How to check if this applies to your property

In GA4, go to: Admin β†’ Data Display β†’ Custom Definitions

Review each custom dimension and ask: Could this value be different for every single user or event? If yes, it is likely high-cardinality.

Common culprits include: user IDs, session IDs, order/transaction IDs, product SKUs with high variation, search query strings, and URL parameters.

What to do about it

  • Replace high-cardinality dimensions with categorical equivalents β€” instead of sending a raw user ID, send a user segment or customer tier

  • Remove dimensions you no longer actively use in reporting β€” unused high-cardinality dimensions still contribute to the problem

  • Use BigQuery export for granular identifiers β€” if you need user-level or event-level IDs for analysis, export raw data to BigQuery instead of using GA4 custom dimensions for this purpose


What Orphex does

Orphex retrieves data directly from the GA4 API and displays it as-is.

We do not modify, filter, or re-estimate session data. Any difference between Orphex and your GA4 dashboard is attributable to GA4’s own processing methodology, not to Orphex.


Want more precise session data?

If you need exact session counts without GA4’s estimation layer, Google recommends exporting your raw data to BigQuery, and then you can import it to Orphex.

BigQuery calculates precise counts without the HLL++ algorithm.


Still seeing something unexpected? Reach out to our support team and we'll help you investigate.

Did this answer your question?