Dlaczego BigQuery często pokazuje więcej użytkowników powracających niż interfejs GA4?
Jeśli kiedykolwiek porównałeś liczbę Returning Users w interfejsie GA4 z wynikami policzonymi samodzielnie w BigQuery, prawdopodobnie zauważyłeś coś niepokojącego:
BigQuery niemal zawsze pokazuje więcej użytkowników powracających niż GA4 UI.
To nie jest błąd Google.
To różnica w logice liczenia, poziomie agregacji i dostępie do danych użytkownika.
Poniżej krok po kroku wyjaśniam, skąd biorą się te rozbieżności.
1. GA4 UI liczy użytkowników powracających na poziomie użytkownika
Interfejs GA4 działa w bardzo konkretny sposób:
- użytkownik może zostać uznany za „powracającego” tylko raz w danym okresie raportowania,
- niezależnie od tego, ile razy wrócił na stronę.
Przykład:
Użytkownik wraca na stronę 5 razy w październiku.
GA4 UI raportuje:
- Returning Users = 1
Dlaczego?
Bo GA4 skupia się na unikalnych użytkownikach, a nie na:
- liczbie sesji,
- liczbie dni powrotu,
- liczbie „momentów powrotu”.
2. BigQuery bardzo łatwo nadlicza użytkowników powracających
BigQuery nie ma wbudowanej definicji użytkownika powracającego.
Pokazuje surowe zdarzenia. Cała logika musi zostać napisana w SQL.
I tu pojawia się problem.
Bardzo wiele zapytań (nieświadomie) stosuje logikę sesyjną lub dzienną, np.:
- sprawdzanie, czy
event_date > first_interaction_date, - liczenie użytkownika jako powracającego dla każdego dnia aktywności.

Efekt?
Ten sam użytkownik wraca 5 razy → BigQuery liczy:
- Returning Users = 5
Podczas gdy faktycznie:
- Returning Users = 1
3. GA4 automatycznie deduplikuje użytkowników, BigQuery nie
Różnica architektoniczna jest kluczowa:
GA4 UI:
- deduplikuje dane na poziomie użytkownika,
- identyfikuje tylko „pierwszy powrót”,
- korzysta z wewnętrznego grafu tożsamości Google.
BigQuery:
- pokazuje dane na poziomie zdarzeń,
- każda linia = jedno zdarzenie,
- nie deduplikuje użytkowników automatycznie.
Jeśli w SQL-u jawnie nie usuniesz duplikatów użytkowników, wynik będzie zawyżony.
4. Wielodniowa aktywność użytkownika zawyża wyniki w BigQuery
Typowy scenariusz:
- użytkownik wraca przez 3 różne dni w tygodniu.
GA4 UI:
- Returning User = 1
BigQuery (naiwna logika):
- Returning Users = 3
Dlaczego?
Bo zapytanie liczy użytkownika osobno dla każdego dnia, a nie jako jedną osobę w całym okresie.
5. GA4 UI korzysta z łączenia tożsamości, BigQuery – nie
GA4 UI ma dostęp do mechanizmów, których BigQuery nie posiada, m.in.:
- łączenia użytkownika między urządzeniami,
- grafu tożsamości Google,
- korekt wynikających z Consent Mode i modelowania danych.
BigQuery:
- nie scala użytkowników między urządzeniami,
- nie ma dostępu do grafu Google,
- widzi tylko to, co faktycznie zostało wyeksportowane.
Skutek:
- inne daty pierwszej wizyty,
- błędna klasyfikacja nowych i powracających użytkowników,
- zawyżone liczby powrotów.
6. GA4 widzi całe życie użytkownika, BigQuery tylko fragment historii
To bardzo częsty, a często pomijany problem.
Jeśli:
- eksport BigQuery został uruchomiony np. od kwietnia,
- użytkownik pierwszy raz odwiedził stronę w styczniu,
to:
- GA4 wie, że użytkownik jest powracający,
- BigQuery uznaje go za nowego przy pierwszym zdarzeniu w kwietniu,
- a każda kolejna wizyta liczy się jako kolejny „powrót”.
Efekt końcowy:
- sztucznie zawyżona liczba returning users w BigQuery.
Podsumowanie: gdzie leży prawda?
GA4 UI:
- liczy użytkowników powracających na poziomie użytkownika,
- każdy użytkownik liczony jest tylko raz w danym okresie,
- korzysta z zaawansowanych mechanizmów identyfikacji.
BigQuery:
- pokazuje surowe dane zdarzeń,
- bardzo łatwo nadlicza użytkowników,
- wymaga precyzyjnej deduplikacji w SQL.
Jeśli BigQuery pokazuje więcej użytkowników powracających niż GA4 UI, to w większości przypadków:
- nie jest to błąd danych,
- tylko błąd logiki zapytania.
Kluczowa lekcja:
BigQuery nie „myśli” za Ciebie.
Jeśli nie powiesz mu dokładnie jak liczyć użytkowników, policzy ich za dużo.