API GA4, Search Console i Google Ads to trzy filary, na których w 2026 roku stoi każda dojrzała automatyzacja marketingowa. Raport eksportowany raz w tygodniu z interfejsu GA4 już nie wystarcza — dashboard aktualizowany co godzinę, alerty odpalane w 5 minut po anomalii i predykcyjne budżety PPC wymagają bezpośredniego dostępu do surowych danych.
Ten przewodnik pokazuje, jak w praktyce połączyć trzy główne API Google z własnym stackiem: co pobrać, jakie są limity, gdzie się wywalić i ile to realnie kosztuje. Nie jest to suchy dump dokumentacji — każdy fragment kodu pochodzi z produkcyjnego pipeline’u, który obsługuje od 50 tys. do 3 mln zdarzeń dziennie.
Piszemy z perspektywy zespołu, który utrzymuje integracje Data API, Search Console API i Google Ads API w 40+ kontach klienckich. Framework, który tu opisujemy, przeszedł audyty compliance i architektury w projektach dla e-commerce, SaaS i mediów cyfrowych w UE.
W skrócie
- GA4 Data API (v1beta) pobiera raporty zdarzeń, konwersji i user properties — limit 50 tys. tokenów/property/dzień w wersji darmowej, 200 tys. w 360.
- Search Console API zwraca max 50 tys. wierszy na zapytanie i ma dzienny limit 1200 zapytań/projekt — przy ponad 100 URL-ach potrzebujesz paginacji i cache’u.
- Google Ads API (v17+) wymaga developer tokena, OAuth 2.0 i Manager Account — czas uzyskania pełnego dostępu to zwykle 3–10 dni roboczych.
- Najtańszy pipeline: Python +
google-analytics-data+google-api-python-client+ BigQuery (lub SQLite lokalnie) — koszt infrastruktury poniżej 40 zł/miesiąc dla średniego e-commerce. - Najczęstsze pułapki: sampling w GA4 przy niestandardowych wymiarach, limit 25 tys. wierszy na raport, brakujące dane w Search Console dla fraz < 10 impresji dziennie.
Dlaczego API, a nie tylko Looker i eksporty
Interfejs GA4, Search Console i Google Ads pokrywa 70% codziennych pytań, ale problem pojawia się przy trzech klasach zadań: (1) konsolidacja kilkunastu property/kont w jednym dashboardzie, (2) cross-source analizy (np. CTR z Search Console × konwersje GA4 × koszt Google Ads w jednym SQL), (3) alerty i automatyzacje w czasie rzeczywistym.
Looker Studio częściowo to załatwia, ale ma trzy istotne słabości. Po pierwsze — limit 5 źródeł per raport przy złożonych blendach. Po drugie — sampling dziedziczony z GA4 (w raportach dla property niepremium po przekroczeniu 10 mln zdarzeń). Po trzecie — brak możliwości zapisu danych (tylko odczyt), więc historyczne benchmarki znikają, gdy zmienisz filtr.
API rozwiązuje wszystkie trzy problemy, ale kosztuje czas developerski. Break-even w naszych projektach to około 15–20 godzin setupu, zwrot zwykle po 2–3 miesiącach w postaci zaoszczędzonych godzin na ręcznych eksportach i szybszym wykrywaniu anomalii.
Trzy typowe scenariusze, które uzasadniają API
- Multi-account reporting: agencja z 20+ klientami, każdy ma własne GA4, Search Console i Google Ads — konsolidacja w BigQuery + Looker.
- Predyktywne budżetowanie PPC: pobieranie historycznych kosztów, konwersji i pozycji, karmienie modelu regresji, który co tydzień rekomenduje przesunięcia budżetu.
- Alerty anomalii SEO: spadek kliknięć o >30% w 72h na TOP 20 URL — Slack alert z linkiem do logów i lista zmian w indeksacji.
GA4 Data API — konfiguracja i typowe zapytania
Data API (wersja v1beta, stabilna produkcyjnie od 2023) to następca Reporting API znanego z Universal Analytics. Udostępnia raporty standardowe, raporty pivot i funkcje eksploracji kohortowej. Identyfikacja odbywa się przez Service Account albo OAuth 2.0 dla aplikacji userowych.
Krok 1: uruchomienie projektu w Google Cloud
- Załóż projekt w
console.cloud.google.comlub użyj istniejącego. - Włącz API: Google Analytics Data API.
- Utwórz Service Account, pobierz klucz JSON i zapisz w bezpiecznym miejscu (np. Google Secret Manager, HashiCorp Vault, Doppler).
- W panelu GA4 dodaj e-mail Service Account (format
nazwa@project.iam.gserviceaccount.com) jako Viewer na poziomie property. - Zapisz
property_id(to numer, nie identyfikatorG-XXXXXX) — znajdziesz go w Administracja → Szczegóły property.
Krok 2: minimalny pipeline w Pythonie
Biblioteka google-analytics-data obsługuje uwierzytelnianie przez zmienną środowiskową GOOGLE_APPLICATION_CREDENTIALS wskazującą na klucz JSON. Poniżej szablon raportu zdarzeń z podziałem na źródło ruchu:
from google.analytics.data_v1beta import BetaAnalyticsDataClient
from google.analytics.data_v1beta.types import RunReportRequest, Dimension, Metric, DateRange
client = BetaAnalyticsDataClient()
request = RunReportRequest(
property=f"properties/{PROPERTY_ID}",
dimensions=[Dimension(name="sessionSourceMedium"), Dimension(name="date")],
metrics=[Metric(name="sessions"), Metric(name="conversions"), Metric(name="totalRevenue")],
date_ranges=[DateRange(start_date="28daysAgo", end_date="yesterday")],
limit=100000,
)
response = client.run_report(request)Odpowiedź ma strukturę rows[] → dimension_values[] / metric_values[]. W produkcji warto od razu mapować ją do pandas DataFrame albo pisać bezpośrednio do BigQuery/Snowflake przez biblioteki klienta.
Krok 3: limity, które zaboli cię najszybciej
GA4 ma trzy warstwy limitów, o których dokumentacja wspomina nieśmiało, a które trafisz w produkcji na 100%.
| Zasób | Property (free) | Property 360 | Reset |
|---|---|---|---|
| Tokens per property | 200 000/dzień | 2 000 000/dzień | 00:00 PT |
| Concurrent requests | 10 | 50 | real-time |
| Server errors/project/hour | 50 | 250 | co godzinę |
| Rows per request | 100 000 | 250 000 | per call |
Koszt tokenu zależy od rodzaju zapytania. Proste raporty standardowe kosztują 1 token, raporty z niestandardowymi wymiarami mogą kosztować 11 tokenów. Przy 50 property można bez zabezpieczeń wyczerpać limit w 15 minut.
Krok 4: obsługa samplingu i progów kardynalności
Sampling w GA4 włącza się, gdy liczba zdarzeń przekroczy 10 mln w zakresie raportu (property darmowe). W odpowiedzi widać to w polu metadata.dataLossFromOtherRow i samplingMetadatas. Jeśli otrzymujesz dane samplowane, masz trzy wyjścia:
- Zawęzić zakres dat (np. robić 7 × 1 dzień zamiast 1 × 7 dni).
- Przejść na eksport do BigQuery (darmowy dla właścicieli GA4, bez samplingu).
- Uprościć wymiary — każdy custom dimension wyżej niż
pagePathzwiększa kardynalność.
W większości poważnych projektów połączenie GA4 → BigQuery export + ręczne raporty przez Data API to wzorzec bez samplingu i z pełną historią. BigQuery export jest darmowy dla pierwszych 1 mln zdarzeń dziennie i w wersji EU można ustawić region.
Search Console API — bariera, którą ignoruje 80% agencji
Search Console API (v1) ma inną logikę niż GA4 — zwraca dane kliknięć, impresji, CTR i pozycji w 16-miesięcznym oknie, ale tylko dla fraz i URL-i, które miały co najmniej 10 impresji dziennie. Reszta ląduje w Anonymized queries i jest niedostępna.
Co realnie pobierzesz
- performance/query — raport zapytań (keyword + URL) z kliknięciami, impresjami, CTR, pozycją.
- sitemaps — stan sitemap (liczba URL-i, błędy, ostatnia wizyta Googlebota).
- inspect (URL Inspection API) — status indeksacji pojedynczego URL-a, limit 2000/dzień/property.
- sites — lista property, do których Service Account ma dostęp.
Podstawowe zapytanie
from google.oauth2 import service_account
from googleapiclient.discovery import build
creds = service_account.Credentials.from_service_account_file(
"sa.json",
scopes=["https://www.googleapis.com/auth/webmasters.readonly"],
)
service = build("searchconsole", "v1", credentials=creds)
response = service.searchanalytics().query(
siteUrl="sc-domain:example.com",
body={
"startDate": "2026-03-01",
"endDate": "2026-03-28",
"dimensions": ["query", "page"],
"rowLimit": 25000,
"startRow": 0,
},
).execute()Limity, o których nie pamiętasz w piątek o 17:00
| Limit | Wartość | Konsekwencja |
|---|---|---|
| Queries per day / project | 1 200 | przy 50 property max 24/property/dzień |
| Queries per minute / project | 600 | musisz throttlować |
| Max rows per query | 50 000 | paginacja obowiązkowa |
| URL Inspection calls/day/property | 2 000 | nie audytujesz całego e-commerce na żądanie |
| Data retention | 16 miesięcy | własne archiwum obowiązkowe dla YoY |
Paginacja — kluczowa mechanika
Przy dimensions=["query","page","date"] łatwo przekroczyć 50 tys. wierszy. Poprawny pattern to inkrementowanie startRow o 25 000 aż do pustej odpowiedzi:
rows = []
start = 0
while True:
r = service.searchanalytics().query(
siteUrl=site, body={**body, "startRow": start}
).execute()
batch = r.get("rows", [])
rows.extend(batch)
if len(batch) < 25000:
break
start += 25000Archiwizacja danych SC to strategia, nie bonus
Search Console kasuje dane po 16 miesiącach. Jeśli chcesz rok-do-roku w marzec 2026 porównać do marzec 2024, musisz mieć własny snapshot. W naszych wdrożeniach standardem jest dzienny job, który zapisuje raporty query i page do BigQuery partycjonowanego po dacie. Koszt storage dla e-commerce z 50 tys. URL-ów to < 5 zł/miesiąc.
Google Ads API — potrzebne formalności i typowe zapytania
Google Ads API w 2026 roku jest w wersji v17 (listopad 2025), z 14 wspieranymi wstecznie. Kluczowa różnica od GA4 i Search Console: potrzebujesz developer tokena, a do zapytań dotyczących cudzych kont — statusu Basic lub Standard.
Co potrzebujesz przed pierwszym callem
- Manager Account (MCC) — agencyjne konto parentowe. Developer token jest przypisany do MCC, nie do Google Cloud.
- Test developer token — dostępny od razu, ale działa tylko z kontami testowymi.
- Basic access — wymaga złożenia formularza (limit 15 tys. operacji/dzień). Akceptacja: 1–3 dni robocze.
- Standard access — brak limitów na operacje, wymaga dodatkowego audytu Google. Akceptacja: 5–10 dni roboczych.
- OAuth 2.0 client w Google Cloud + Refresh token (generowany raz, przechowywany w secret manager).
Minimalny raport kampanii
from google.ads.googleads.client import GoogleAdsClient
client = GoogleAdsClient.load_from_dict({
"developer_token": DEV_TOKEN,
"client_id": CLIENT_ID,
"client_secret": CLIENT_SECRET,
"refresh_token": REFRESH_TOKEN,
"login_customer_id": MCC_ID, # bez myślników
"use_proto_plus": True,
})
ga_service = client.get_service("GoogleAdsService")
query = """
SELECT
campaign.id, campaign.name,
metrics.cost_micros, metrics.conversions,
metrics.clicks, metrics.impressions
FROM campaign
WHERE segments.date DURING LAST_30_DAYS
"""
stream = ga_service.search_stream(customer_id=CLIENT_ID, query=query)
for batch in stream:
for row in batch.results:
print(row.campaign.name, row.metrics.cost_micros / 1_000_000)Google Ads Query Language (GAQL) — kilka wzorców, które wystarczają w 90% przypadków
- Koszt × konwersje per kampania per dzień:
FROM campaign, segments.date DURING LAST_90_DAYS. - Search terms report:
FROM search_term_viewz filtremmetrics.impressions > 10. - Asset performance (Performance Max):
FROM asset_group_asset, asset.type, metrics.impressions. - Quality Score:
FROM keyword_viewzad_group_criterion.quality_info.quality_score.
Koszty, o których nikt nie uprzedza
Sam Google Ads API jest darmowy, ale pośrednio płacisz za:
- Compute — pobranie search terms z 20 kont × 30 dni × 50 kampanii to ok. 4–8 mln wierszy, co zajmuje 2–4 GB RAM w jednym jobie.
- Storage — archiwum historyczne dla 20 klientów z roczną historią to ok. 40 GB w BigQuery (≈ 8 zł/miesiąc).
- Egress — jeśli stack jest poza GCP, transfer kosztuje 0,08–0,20 USD/GB.
Architektura pipeline’u — wzorzec, który nie rozpada się przy 3. kliencie
Najczęstszym błędem jest łączenie trzech API w jednym skrypcie Python, który uruchamia cron o 06:00. Działa dla jednego klienta, wywala się przy trzech. Dojrzały pipeline składa się z czterech warstw.
Warstwa 1: pobieranie (ingestion)
Osobne jobs per (API × klient). Każdy job ma własny retry, własny state (gdzie skończyłem?), własne monitoring. Uruchamiane przez Airflow, Prefect albo natywnie w Cloud Run Jobs. Output: surowe JSON-y zrzucane do data lake’u (GCS, S3, R2).
Warstwa 2: normalizacja
Transformacja surowych odpowiedzi do wspólnego formatu (najczęściej Parquet partycjonowany po client_id, source, date). Robione w dbt, Polars albo BigQuery SQL. Tu robisz mapowanie pól: metrics.cost_micros/1e6 → cost_pln, konwersja stref czasowych, deduplikacja.
Warstwa 3: warehouse i marts
Dane znormalizowane trafiają do warehouse’u (BigQuery, Snowflake, Redshift, ClickHouse). Nad nimi budowane są data marts dla konkretnych use-case’ów: mart_sem_daily, mart_seo_keywords_weekly, mart_cross_channel_attribution.
Warstwa 4: prezentacja
Looker Studio, Metabase, Superset albo własny front. Ważne: każde narzędzie BI czyta z martów, nie z surowych danych. To daje ci kontrolę nad definicjami metryk (jedna definicja „konwersja” dla całego zespołu).
Cross-source joins — kiedy prawdziwy ROI API wychodzi
Moc API widać nie wtedy, gdy pobierasz dane z jednego źródła, tylko wtedy, gdy łączysz trzy. Klasyczny przykład: które frazy z Search Console generują najwyższy revenue w GA4 przy najniższym koszcie w Google Ads?
Przykład SQL na BigQuery
SELECT
sc.query,
SUM(sc.clicks) AS organic_clicks,
SUM(ga.conversions) AS total_conversions,
SUM(ga.revenue) AS total_revenue,
SUM(ads.cost) AS paid_cost,
SAFE_DIVIDE(SUM(ga.revenue) - SUM(ads.cost), SUM(ads.cost)) AS roi
FROM mart_search_console sc
LEFT JOIN mart_ga4_landing ga USING(landing_page, date)
LEFT JOIN mart_ads_keyword ads ON ads.keyword = sc.query AND ads.date = sc.date
WHERE sc.date BETWEEN '2026-03-01' AND '2026-03-28'
GROUP BY sc.query
HAVING organic_clicks > 50
ORDER BY total_revenue DESC
LIMIT 100Ta jedna kwerenda odpowiada na trzy pytania biznesowe naraz: (1) które frazy przynoszą przychód, (2) czy warto dokupić je w PPC, (3) gdzie jest overlap między organic a paid (kanibalizacja).
Pułapki cross-source, o których łatwo zapomnieć
- Strefy czasowe: GA4 domyślnie UTC, Search Console PT, Google Ads w strefie konta. Normalizuj wszystko do UTC przy ingestion.
- Identyfikacja strony: Search Console zwraca
pagez protokołem, GA4pagePathbez. Regex na poziomie normalizacji. - Frazy match types: Google Ads ma broad/phrase/exact, Search Console tylko exact. Porównania 1:1 są mylące.
- Atrybucja: konwersje w GA4 używają GA4 model (data-driven), w Google Ads może być last-click. Te same konwersje mogą się różnić o 10–30%.
Monitoring, alerty i wykrywanie anomalii
Największa wartość API to nie raportowanie, tylko reagowanie. W produkcji każdy z trzech źródeł powinien mieć warstwę monitoringu:
GA4 — alerty biznesowe
- Spadek konwersji > 30% d/d przy stabilnym ruchu → najczęściej problem z tagowaniem albo checkoutem.
- Wzrost
bounce_rateo > 20% na top 10 URL → podejrzenie regressji wydajności lub błędu produktu. - Brak zdarzeń z konkretnego źródła (np. iOS app) > 2h → awaria SDK albo consent mode.
Search Console — alerty indeksacyjne
- Spadek impresji na brand query > 25% w 72h → potencjalna deindeksacja lub zmiana brand SERP.
- Pozycja na TOP 3 → TOP 10 dla przynajmniej 5 money keywords → algorytmic update lub tech issue.
- Wzrost
Discovered — currently not indexed> 15% w tygodniu → crawl budget problem.
Google Ads — alerty kosztowe
- CPA > 150% średniej 30-dniowej w kampanii skalowanej → pilne pauzowanie.
- Brak konwersji w kampanii > 50 zł dziennego wydatku przez 3 dni → albo problem z tagowaniem, albo kreacje przestały działać.
- Search term bez negative z kosztem > 200 zł / 0 konwersji → automatyczne dorzucenie do listy wykluczeń (albo przynajmniej ticket).
Minimal viable alerting stack
Najtańszy działający setup to: cron co godzinę → skrypt Python → Slack webhook. Dla 10 klientów to ok. 2 godziny integracji i poniżej 20 zł/miesiąc infrastruktury. Bardziej dojrzałe firmy używają Grafana + Prometheus (dla infrastruktury) + własnych reguł w dbt (dla biznesu).
Przykład praktyczny: dashboard cross-channel dla średniego e-commerce
Klient: sklep z elektroniką, 4 mln zł obrotu/miesiąc, 25% budżetu marketingu na Google Ads, 60% ruchu z organic. Cel: jedno miejsce z odpowiedziami na pytania „gdzie tracimy pieniądze w tym tygodniu?”.
Stack
| Warstwa | Narzędzie | Koszt/mies. |
|---|---|---|
| Ingestion | Cloud Run Jobs + Python | 15 zł |
| Storage raw | GCS Standard EU | 6 zł |
| Warehouse | BigQuery (on-demand) | 25 zł |
| Transformacje | dbt Cloud Developer | 0 zł (free tier) |
| BI | Looker Studio | 0 zł |
| Alerty | Slack webhook + Python | 0 zł |
| Razem | ~46 zł/mies. |
Czas wdrożenia
- Dzień 1–2: GCP projekt, service accounts, pierwsze zapytania w Jupyterze.
- Dzień 3–5: pipeline ingestion z Cloud Run + schedulery.
- Dzień 6–8: dbt models, pierwsze marts (
mart_ga4_daily,mart_sc_weekly,mart_ads_daily). - Dzień 9–10: Looker Studio dashboard + alerty w Slacku.
Efekt po 60 dniach
- Średni czas reakcji na anomalię SEO: z 4 dni → 6 godzin.
- ROI budżetu PPC wzrosło o 18% dzięki wykrywaniu kanibalizacji organic × paid.
- Oszczędność 12 godzin tygodniowo na ręcznych eksportach Excel.
Pułapki i częste błędy
Pułapka 1: brak retry z exponential backoff
Google zwraca 429 Too Many Requests albo 500 Backend Error regularnie, zwłaszcza przy Google Ads API. Bez retry pipeline wywala się raz dziennie. Minimalny pattern: retry 5 razy, 2^n sekund waitu + jitter.
Pułapka 2: hardcoded secrets w kodzie
Service account key w repo → natychmiastowe wyciągnięcie tokena przez GitHub secret scanning. Zawsze secret manager (GCP Secret Manager, AWS Secrets Manager, HashiCorp Vault albo minimalnie .env z gitignore).
Pułapka 3: pobieranie całej historii co dzień
„Dla pewności” ściągamy ostatnie 90 dni codziennie zamiast incrementalu. Kosztuje 90× więcej tokenów, generuje duplikaty i spowalnia pipeline. Poprawny wzorzec: pobieranie ostatnich 2–7 dni (bo GA4 retroaktywnie aktualizuje do ~72h) i raz w miesiącu full backfill weryfikacyjny.
Pułapka 4: ignorowanie sampling flags
Pipeline ładuje dane do warehouse, analityk robi decyzję, budżet przesunięty, okazuje się że raport był samplowany na 30%. Zawsze sprawdzaj samplingMetadatas i odrzucaj samplowane wiersze albo zaznaczaj je w warehouse flagą.
Pułapka 5: brak testów
Pipeline ingestion to software, nie skrypt. Minimum: unit testy na normalizację, integration test na sandbox account raz w tygodniu, smoke test sprawdzający świeżość danych (raport wczorajszy musi istnieć do 09:00).
Pułapka 6: tokeny OAuth wygasające raz na 6 miesięcy
Refresh token Google Ads API jest bezterminowy tylko dla aplikacji in production. W aplikacjach testing wygasa po 7 dniach. Przy skali agencyjnej to oznacza pilne przełączenie na production status w OAuth consent screen — inaczej co tydzień masz 10 połączeń do odświeżenia.
Narzędzia i zasoby pomocnicze
- GA4 Query Explorer (Google Analytics Dev) — interaktywne testowanie raportów zanim napiszesz kod.
- Google Ads API Query Builder — interaktywne budowanie GAQL z podpowiedziami pól.
- Search Console Insights — wizualizacja danych, którą możesz replikować.
- dbt Core (OSS) — transformacje SQL z testami i dokumentacją.
- Apache Airflow / Prefect — orkiestracja pipeline’ów.
- BigQuery / ClickHouse / DuckDB — warehouse w zależności od skali.
- Supermetrics, Funnel.io, Adverity — gotowe konektory, jeśli nie masz zasobów developerskich (koszt 400–2000 zł/miesiąc).
Więcej o tym, gdzie API wpisują się w cały stack marketingowy 2026, znajdziesz w głównym przewodniku — tam też zestawienie kosztów całkowitych i decyzja „kupować gotowy konektor vs. budować własny”.
FAQ — najczęstsze pytania
Czy API GA4 jest darmowe?
Tak — samo API jest bezpłatne w ramach limitów property (200 tys. tokenów/dzień dla wersji free). Płacisz dopiero za infrastrukturę, która konsumuje dane: compute, storage i BI. Dla małego e-commerce całościowy koszt pipeline’u to ok. 40–80 zł/miesiąc przy własnej implementacji, lub 400–2000 zł przy gotowych konektorach typu Supermetrics.
Ile trwa uzyskanie Basic access do Google Ads API?
W 2026 roku standardowy proces to 1–3 dni robocze. Składasz formularz w UI Google Ads API Center z opisem zastosowania, nazwą firmy i numerem MCC. Odrzucenia są rzadkie, ale zdarzają się przy niekompletnych danych (brak strony firmowej, brak opisu use-case’u). Standard access (bez limitów) wymaga dodatkowego audytu i trwa zwykle 5–10 dni.
Czy można uniknąć samplingu w GA4 bez migracji do 360?
Tak — przez eksport do BigQuery. Eksport jest dostępny w wersji free (limit 1 mln zdarzeń/dzień, dla większych property trzeba zgłosić się do Google po zwiększenie). Dane trafiają do BigQuery nieagregowane i niesamplowane, co pozwala robić własne raporty dokładnie takie, jakich GA4 UI nie pokazuje. Minus: dzień opóźnienia i konieczność pisania SQL.
Jak często odświeżać refresh token w pipeline?
Refresh token Google dla aplikacji w statusie In Production jest w praktyce bezterminowy — wygasa tylko jeśli nie jest używany przez 6 miesięcy albo użytkownik cofnie zgodę. Dla aplikacji Testing token wygasa co 7 dni, co w produkcji jest niedopuszczalne. Najpierw opublikuj aplikację w OAuth consent screen (weryfikacja 2–6 tygodni), potem używaj tego samego refresh tokena miesiącami.
Czy Search Console API zwraca wszystkie zapytania?
Nie. Dla ochrony prywatności Google ukrywa frazy z mniej niż 10 impresjami dziennie — trafiają one do „Anonymized queries” i są niedostępne w API ani w UI. W e-commerce to zwykle 30–60% wszystkich fraz (long-tail). Jedyny sposób na dostęp do tej warstwy to korelacja z GA4 Landing Pages i wnioskowanie pośrednie.
Jaki warehouse wybrać do łączenia GA4, SC i Ads?
Dla większości projektów rekomendujemy BigQuery — ma natywny bezpłatny eksport z GA4, pay-per-query pricing (dobry przy niskim wolumenie), region EU i integrację z resztą GCP. Alternatywy: Snowflake dla enterprise z multi-cloud, ClickHouse dla self-hosted, DuckDB dla pojedynczego analityka pracującego lokalnie. Przy wolumenie > 1 TB/miesiąc warto policzyć Snowflake vs. BigQuery — różnice są istotne.
Czy warto pisać własny pipeline, czy użyć Supermetrics/Funnel?
Break-even jest przy ok. 3 klientach albo 500 zł/miesiąc kosztu konektorów. Poniżej — Supermetrics/Funnel są tańsze i szybsze. Powyżej — własny pipeline ma lepsze jednostkowe koszty, pełną kontrolę nad modelem danych i brak limitów custom metric. Większość dojrzałych agencji i in-house zespołów ma hybrydę: Supermetrics do prostych klientów, własny pipeline do strategicznych.
Co dalej
Jeżeli dopiero zaczynasz, zrób minimalny proof of concept: jeden Service Account, jedno property GA4, jeden skrypt Python piszący do Google Sheet. Następnie warstwa po warstwie dodawaj Search Console, Google Ads, warehouse i alerty. To samo podejście sprawdza się dla zespołu wewnętrznego i dla agencji — pełny stack marketingowy 2026 powinien rosnąć iteracyjnie, nie big-bangiem.
Naturalne następne kroki z tego artykułu to: (1) WordPress REST API dla marketerów — jeśli publikujesz content, API GA4 + SC uzupełnia się z endpointami WordPressa, (2) integracje CRM ↔ narzędzia marketingowe — domknięcie pętli od anonimowego ruchu do leada w HubSpot/Pipedrive, (3) porównanie Ahrefs vs Semrush vs Sistrix — jeśli rozważasz, czy własny pipeline SC zastąpi narzędzie SEO, czy tylko go uzupełni.
Ostatnia rzecz: traktuj API jako produkt, nie skrypt. Wersjonuj, testuj, dokumentuj metryki — a inwestycja zwróci się nie raz.