Data streams w GA4 to źródła wysyłające zdarzenia do jednej property Google Analytics 4. Jedna property może mieć do 50 streamów: maksymalnie jeden Web stream, do 30 Android app streams i do 30 iOS app streams. Stream ma unikalny Measurement ID (dla web) lub Firebase App ID (dla apps) i jest punktem konfiguracji wszystkich ustawień zbierania danych – enhanced measurement, tagging, modyfikacji zdarzeń, filtracji.
Struktura z wieloma streamami w jednej property pozwala ujednolicić raport cross-device i cross-platform. Klient wchodzący na stronę web, później przechodzący do aplikacji mobilnej i kończący konwersję w aplikacji – jeden user profile, jedna ścieżka atrybucji, bo wszystkie streamy wysyłają dane do tej samej property z wspólnym user_pseudo_id. Szerszy kontekst omawiamy w przewodniku słownik marketingu cyfrowego 2026.
W skrócie
- Data stream to źródło wysyłające zdarzenia do property GA4 – web, Android lub iOS.
- Jedna property: maks. 1 web stream + 30 Android streams + 30 iOS streams = 61 streams total.
- Każdy stream ma unikalny Measurement ID (web) lub Firebase App ID (apps).
- Konfiguracja per stream: enhanced measurement, cross-domain, lista parametrów event-scoped, event modifications.
- Streamy w jednej property pozwalają cross-platform analytics i unified attribution.
- Najczęstsze błędy: jeden stream dla multi-domain (powinien być jeden na domenę lub cross-domain śledzenie), mieszanie prod i staging w tym samym streamie.
Czym jest data stream – definicja i rola
Stream to warstwa między źródłem danych (strona web, aplikacja) a property GA4. Technicznie: identyfikator i zestaw reguł przetwarzania zdarzeń. Zdarzenie wysłane z kodem Measurement ID „G-XXXXXXXX” trafia do odpowiedniego streama w danej property. Praktyczne wskazówki znajdziesz w konwersja w GA4 – definicja i konfiguracja.
Typy streamów
- Web stream – dla stron internetowych. Jedna property może mieć tylko jeden web stream (limitacja 2024). Tagged przez gtag.js lub Google Tag Manager.
- Android app stream — dla aplikacji mobilnych Android. Konfigurowany przez Firebase SDK. Max 30 per property.
- iOS app stream – dla aplikacji mobilnych iOS. Konfigurowany przez Firebase SDK. Max 30 per property.
Co stream zawiera
- Measurement ID (format „G-” dla web) lub Firebase App ID (dla apps).
- Nazwa strony/domeny/apki.
- Enhanced measurement toggles (scroll, outbound clicks, site search, video zaangażowanie, file downloads, form interactions).
- Listę event parameters do zbierania.
- User properties mapping.
- Cross-domain configuration (dla web).
- Internal traffic filters.
- Session timeout settings (domyślnie 30 min, zakres 5 min — 7h 55 min).
- Engaged session time threshold (domyślnie 10s, zakres 10–60s).
Jak skonfigurować data stream — krok po kroku
Nowy web stream
- Admin → Data Streams → Add stream → Web.
- Wpisz URL (https://twoja-domena.pl) i nazwę stream’a (np. „Production PL”).
- Włącz enhanced measurement – domyślnie on. Włącz/wyłącz poszczególne opcje.
- Kliknij Create stream. System wygeneruje Measurement ID.
- Skopiuj tag GA4 do
<head>strony lub skonfiguruj w Google Tag Manager (tag typu „Google Analytics: GA4 Configuration”). - Test w DebugView (Admin → DebugView) – zdarzenia powinny pojawiać się w real-time po kilku kliknięciach.
Nowy app stream
- Admin → Data Streams → Add stream → Android app lub iOS app.
- Wpisz package name (Android) lub bundle ID (iOS) oraz nazwę aplikacji.
- Pobierz plik google-services.json (Android) lub GoogleService-Info.plist (iOS).
- Dodaj plik do projektu aplikacji.
- Zainstaluj Firebase SDK + Analytics module przez gradle/CocoaPods.
- Test: uruchom aplikację w debug mode i sprawdź w GA4 DebugView.
Measurement ID vs Stream ID vs Property ID
| Identyfikator | Format | Poziom | Użycie |
|---|---|---|---|
| Property ID | Numer, np. 123456789 | Property | API GA4, BigQuery, integracje |
| Measurement ID (web) | G-XXXXXXXX | Stream | Tag na stronie (gtag, GTM) |
| Stream ID | Numer, np. 1234567890 | Stream | Referencja w API (rzadko używane manualnie) |
| Firebase App ID | 1:XXX:android:YYY | Stream (apps) | Aplikacje mobilne |
| API Secret | Token alfanumeryczny | Stream | Measurement Protocol (server-side) |
Najczęstsze mylenie: wklejanie Property ID zamiast Measurement ID w tag na stronie. Błędna konfiguracja nie wysyła żadnych danych i nie generuje błędów w konsoli — trzeba zweryfikować w DebugView. Praktyczne wskazówki znajdziesz w topical authority.
Enhanced measurement – co włączyć, co wyłączyć
Enhanced measurement to zestaw automatycznych zdarzeń zbieranych bez kodu. Każde można włączyć/wyłączyć osobno. Więcej o tym zagadnieniu znajdziesz w bibliotece pojęć 2026.
- Page views – domyślnie on. Nie wyłączać (bez tego GA4 nie działa).
- Scrolls – zdarzenie
scrollprzy 90% głębokości strony. On dla większości serwisów. - Outbound clicks – zdarzenie
clickprzy kliknięciu linku zewnętrznego. On. - Site search — zdarzenie
view_search_results. Włącz tylko jeśli masz search na stronie z query param (np.?q=). - Form interactions — zdarzenia
form_start,form_submit. On dla lead-gen. - Video zaangażowanie – dla YouTube embed (start, progress, complete). On jeśli używasz wideo.
- File downloads – dla .pdf, .xlsx, .zip etc. On dla B2B i content-heavy.
Kiedy wyłączyć scroll śledzenie
- Strona z infinite scroll – generuje spam scroll events.
- SPA gdzie scroll nie ma sensu (np. formularz na jednym view).
- Bardzo krótkie landing pages (< 1000 pikseli).
Cross-domain śledzenie – konfiguracja w stream
Jeśli użytkownik przechodzi między domenami tej samej firmy (np. sklep.pl i checkout.sklep-pay.pl), domyślnie GA4 traktuje to jako dwie osobne sesje. Cross-domain śledzenie łączy je w jedną.
Konfiguracja
- Admin → Data Streams → wybierz web stream → Configure tag settings.
- Configure your domains → Add condition.
- Dodaj wszystkie domeny (sklep.pl, sklep-pay.pl) z operatorem „matches regex” lub „contains”.
- Save. Linker automatycznie dodaje parametr
_gldo URL-i przy przejściu między domenami.
Kiedy używać cross-domain a kiedy nie
- Używać: kiedy mamy jedną ścieżkę konwersji rozciągniętą na 2+ domeny (checkout na innej domenie, subdomena logowania).
- Nie używać: dla domeny z osobnym brandem, osobnym user flow, osobnymi celami biznesowymi – lepiej osobna property GA4.
Multi-domain vs wiele streamów – częste nieporozumienie
Web stream w GA4 jest jeden per property (limit platformy). Dla wielu domen w jednej property:
- Opcja A: jeden stream z cross-domain śledzenie (dla powiązanych domen).
- Opcja B: jedna property per domena – oddzielne raporty, bez unified user ścieżka.
- Opcja C: jeden stream z regex dopasowanym dla wszystkich domen – jeśli domeny są technicznie podobne i mają ten sam model biznesowy.
Nie istnieje opcja „wiele web streamów w jednej property” – ta limita jest hard constraint GA4 od 2024. Dla Android/iOS wiele streamów jest możliwe (różne wersje apki, flavor dla krajów).
Modyfikacje zdarzeń na poziomie stream
Stream pozwala modyfikować zdarzenia zanim trafią do property — bez zmian w kodzie strony/apki. Dostępne w Admin → Data Streams → Configure tag settings → Modify events.
Typowe modyfikacje
- Rename event: zmiana nazwy
purchase_completena standardowepurchase. - Modify parameters: dodanie parametru, np.
currency = "PLN"do wszystkichpurchasebez waluty. - Create event based on another event: jeśli przychodzi
page_viewz page_location zawierającym „thank-you”, stwórz nowe zdarzenielead_generated. - Suppress event: ignoruj zdarzenia spełniające warunki (np. internal traffic bez DebugView tag).
Kiedy używać modyfikacji
- Legacy kod, którego nie można zmienić — lepiej modyfikować w GA4 niż w rozproszonym tagowaniu.
- Unifikacja nazw między streamami (web event vs app event różnie nazwane).
- Tymczasowe fixes przed migracją tagowania.
Antipattern: wszystkie zdarzenia modyfikowane w GA4 zamiast w GTM/kodzie. Trudne do audytu, trudne do migracji między środowiskami. Modyfikacje na poziomie streamu: tylko dla edge cases.
Internal traffic filtering per stream
Stream pozwala zdefiniować traffic internal (ruch własnego zespołu) i filtrować go z raportów.
Konfiguracja
- Admin → Data Streams → Configure tag settings → Define internal traffic.
- Create rule: IP address matches pattern (np. biuro firmy, IP VPN).
- Dodaje parametr
traffic_type = "internal"do wszystkich zdarzeń z tego IP. - Filter konfigurowany osobno: Admin → Data Settings → Data Filters → Create → Internal Traffic → Active lub Testing.
Dobre praktyki
- Rule zawsze startuj w „Testing” — widzisz filtered events z tagiem, ale nadal w raportach. Po tygodniu weryfikacji aktywuj.
- Dla zespołów z dynamic IP: użyj VPN company-wide z static IP, rozwiąże problem.
- Alternatywa: param „debug_mode = true” przez Chrome extension „GA Debug” — filtruje się automatycznie.
Typowe scenariusze konfiguracji streamów
Scenariusz 1 – tylko strona web (SMB)
- Jedna property, jeden web stream.
- Enhanced measurement: wszystko on poza site search (jeśli brak) i video (jeśli brak).
- Cross-domain: off (jedna domena).
- Internal traffic: włączone dla IP biura.
Scenariusz 2 — strona + aplikacja mobilna (startup)
- Jedna property, web stream + Android stream + iOS stream.
- Enhanced measurement per platform.
- User ID setup dla cross-device śledzenie (zalogowani użytkownicy).
- BigQuery export on (free tier dla <1 mln events/day).
Scenariusz 3 — multi-brand (holding)
- Oddzielne property dla każdej marki – nie „wszystko w jednej”.
- Reason: unified reporting utrudniłby odczyt per brand, różne KPI, różne cykle życia użytkownika.
- Opcjonalnie: rollup property z GA4 360 (paid) dla cross-brand analytics.
Scenariusz 4 – e-commerce multi-country
- Jedna property, jeden stream (bo web stream limit = 1).
- Parametr
country_domainw event – segmentacja w raportach. - Alternatywa: osobna property per kraj jeśli operacje są niezależne (różne KPI, zespoły).
- Dla Unii Europejskiej + UK + USA: 2–3 property (EU, UK, US) jest najczęstszym wyborem.
API Secret i Measurement Protocol — server-side tagging
Każdy stream ma możliwość wygenerowania API Secret dla server-side tagging przez Measurement Protocol. Pozwala to wysyłać zdarzenia z serwera, nie tylko z klienta (przeglądarki/aplikacji).
Kiedy używać Measurement Protocol
- Import offline konwersje (np. sprzedaż z CRM po rozmowie telefonicznej).
- Server-side tagging dla improved privacy i performance (Google Tag Manager Server).
- Backend-driven events (np. status subskrypcji zmieniony w CRM → event w GA4).
- Integracje niestandardowe (np. custom webhook ciąg procesów).
Konfiguracja API Secret
- Admin → Data Streams → wybierz stream → Measurement Protocol API secrets.
- Create new — nazwa (opisowa, np. „Backend CRM sync 2026Q1”).
- Skopiuj secret (widoczny tylko raz w momencie tworzenia – zapisz w secrets vault).
- Użyj w POST request:
https://www.google-analytics.com/mp/collect?measurement_id=G-XXX&api_secret=YYY. - Body JSON z client_id, events array.
Dobre praktyki
- Osobny API Secret per integrację – łatwy rotation, revoke bez wpływu na inne integracje.
- Secret w vault (1Password, AWS Secrets Manager, HashiCorp Vault) – nigdy w repo.
- Rate limiting po stronie aplikacji – Measurement Protocol nie ma explicit rate limits, ale Google wprowadza soft throttling przy > 50 eventów/sekundę na client_id.
Najczęstsze błędy w konfiguracji streamów
- Staging i produkcja w jednym streamie – miesza dane, fake konwersje z testów developerskich. Rozwiązanie: osobna property dla staging lub user_property
environment = "staging"z filtrem. - Wklejanie Property ID zamiast Measurement ID – dane nie docierają. Verify w DebugView jako pierwszy krok.
- Cross-domain między niepowiązanymi domenami – GA4 próbuje łączyć user ścieżka, który nie istnieje. Rezultat: chaos w atrybucji.
- Brak konfiguracji API Secret — Measurement Protocol server-side nie działa bez niego. Sprawdź Admin → Data Streams → API Secrets.
- Zbyt długi session timeout — domyślne 30 min jest dobre dla 95% przypadków. Zmiana na 2h tworzy sztuczne sesje łączące różne wizyty.
- Pomijanie Configure Tag Settings – tam znajduje się konfiguracja cross-domain, list unwanted referrals, session timeout. Default rzadko jest optymalny.
- Włączanie wszystkiego w enhanced measurement bez weryfikacji – scroll śledzenie dla SPA, form śledzenie bez formularzy = spam w zdarzeniach.
FAQ – najczęstsze pytania
Czy można mieć wiele web streamów w jednej property?
Nie. Od 2024 Google Analytics 4 pozwala tylko jeden web stream per property. Dla multi-domain rozwiązania: (a) cross-domain śledzenie w jednym streamie – najczęstsze dla powiązanych domen (sklep + checkout + account panel); (b) osobna property per domena – dla marek z niezależnymi operacjami. Wcześniej GA4 pozwalał na wiele web streamów, ale praktyka pokazywała, że to generowało problemy z unified user ścieżka i reportingiem. Dla aplikacji limity są inne: do 30 Android app streams i 30 iOS app streams per property – użyteczne dla apps z różnymi flavor (np. dev/staging/prod, regionalne warianty, white-label). Pełen obraz tematu znajdziesz w kompletnym przewodniku słownik marketingu cyfrowego 2026.
Jak przełączyć stream z jednej property do drugiej?
Nie da się – stream jest trwale przypisany do property przy tworzeniu. Rozwiązanie: (1) stwórz nowy stream w docelowej property, (2) zmień Measurement ID w tagu na stronie/apce, (3) pozostaw stary stream w starej property przez 30 dni dla continuity historical data, (4) po migracji usuń stary stream lub cała starą property jeśli nie jest potrzebna. Uwaga: historyczne dane ze starej property nie przenoszą się do nowej — trzeba eksportować do BigQuery lub osobno archiwizować. Dla kontinuitii raportów użytecznie jest utrzymać obie property przez minimum 90 dni, porównując wyniki i weryfikując, że nowa property poprawnie zbiera dane.
Czy Measurement ID można bezpiecznie udostępnić publicznie?
Tak, Measurement ID jest publiczny z designu – każda strona, która ma GA4 tag, pokazuje go w kodzie źródłowym. Nie jest wrażliwym hasłem. Co ważne: API Secret (dla Measurement Protocol) jest prywatny i powinien być tylko na serwerze, nie w kodzie klienta. Inaczej Property ID – jest widoczny w UI GA4 i w API calls, ale nie na stronach. Firebase App ID jest podobnie publiczny jak Measurement ID. Praktyka dla bezpieczeństwa: (a) Measurement ID w kodzie strony = OK, (b) API Secret = tylko w serwer-side tagging, backend, webhook handlers, (c) Property ID = OK publicznie, ale nie potrzebny w kliencie.
Jak zmienić nazwę stream po utworzeniu?
Admin → Data Streams → kliknij na stream → ikona settings (koło zębate) → edit stream details → zmień nazwę. Measurement ID pozostaje bez zmiany. Zmiana nazwy jest kosmetyczna – wpływa tylko na wyświetlanie w UI GA4, nie na dane zbierane ani integracje. Dobre praktyki nazewnictwa: „Production PL”, „Staging EN”, „Android App – Production” – zawsze zawierać environment i język/kraj. Unikać nazw typu „My Stream”, „Main” – w organizacji z wieloma property i streamami powoduje chaos.
Czy stream zbiera dane w czasie rzeczywistym?
Tak, stream wysyła dane niemal natychmiast. Są dwa poziomy opóźnień: (1) Real-time report – dane widoczne w GA4 w 1–5 minut po zdarzeniu, używane do weryfikacji konfiguracji. (2) Standard reports – dane przetworzone w 24–48 godzin dla pełnej agregacji, atrybucji, odfiltrowania botów. BigQuery export: dzienny (streaming export wymaga GA4 360, paid). DebugView: near-instant dla sesji z debug mode. Jeśli widzisz opóźnienie > 10 minut w Real-time, problem może być w: za słaba przepustowość, błędny Measurement ID, content blocker u użytkownika, ad blocker blokujący google-analytics.com. Dla mission-critical raportów użyj Real-time, dla analizy historycznej Standard reports z świadomością 48h processing.
Ile kosztuje więcej streamów w jednej property?
Nic – liczba streamów nie wpływa na cenę. GA4 Free jest free niezależnie od liczby streamów (do 10 mln events/miesiąc agregowanych na property, nie stream). GA4 360 (150 000 USD/rok) daje wyższe limity samplingu, latencyjne BigQuery export, więcej custom dimensions. Koszt pośredni wielu streamów: complexity zarządzania. Dla firmy z 5 web domenami + Android + iOS zarządzanie cross-domain + integracja user ID + spójne naming eventów wymaga dedykowanego analytics engineer (koszt 8 000–16 000 PLN/mies.). Dla SMB z jednym web i ewentualnie apką — konfiguracja manual jest realistyczna w 4–8 godzin i następnie kosztuje 1–2 godziny/mies. na przeglądy. Szczegółowe rozplanowanie konfiguracji zdarzeń opisane w słowniku zdarzeń GA4.
Co dalej
Konfiguracja streama to fundament, ale pełne wdrożenie GA4 wymaga dopracowania warstwy zdarzeń i konwersji. Szczegółowy słownik nazw eventów, parametrów i user properties znajdziesz w artykule zdarzenia, parametry, user properties – słownik GA4. Jak poprawnie oznaczyć cele biznesowe jako konwersje w GA4 – w artykule konwersja w GA4 – definicja i konfiguracja. Kontekstu SEO dla całej analityki dostarcza koncept topical authority, który tłumaczy, dlaczego jedne sekcje serwisu generują wysoki zaangażowanie, a inne nie. Pełen słownik marketingu cyfrowego – w bibliotece pojęć 2026.