Spis treści
- Co zmieniło się w Google Ads API we wrześniu 2026
- Poziomy dostępu do Google Ads API: od testowego do standardowego
- Jak skonfigurować dostęp do Google Ads API przez Google Cloud krok po kroku
- Pierwszy raport: zapytanie GAQL przez REST i Apps Script
- Raporty, od których warto zacząć
- Najczęstsze błędy po zmianie i jak je rozwiązać
- API, skrypty czy gotowe łączniki: co wybrać
- Najczęściej zadawane pytania
Google Ads API to interfejs programistyczny, który pozwala pobierać dane z kont reklamowych i zarządzać kampaniami z poziomu własnych aplikacji, hurtowni danych i narzędzi AI. Od 10 września 2026 roku poziom dostępu do Google Ads API nie wynika już z tokena deweloperskiego, tylko z projektu Google Cloud, w którym wygenerowano dane uwierzytelniające OAuth. Nagłówek z tokenem stał się opcjonalny i jest ignorowany, rejestracja odbywa się w konsoli Google Cloud, a nowe wnioski o dostęp Basic i Standard wymagają weryfikacji marki. Poniżej opisujemy, co się zmieniło, jak skonfigurować dostęp krok po kroku i jak wysłać pierwsze zapytanie GAQL (stan na październik 2026).
Najważniejsze w skrócie
- Od 10 września 2026 roku poziom dostępu do Google Ads API jest przypisany do projektu Google Cloud użytego do wygenerowania danych OAuth; dotychczasowe uprawnienia tokenów przeniesiono automatycznie na podstawie aktywności w API.
- Token deweloperski można pominąć w żądaniach, a Google zapowiedział, że w jednej z przyszłych wersji głównych API zacznie odrzucać żądania z tokenem.
- Nowe wnioski o dostęp Basic i Standard wymagają weryfikacji marki; po weryfikacji wniosek o dostęp Basic jest sprawdzany automatycznie w kilka minut.
- Od 31 sierpnia 2026 roku zasady dla deweloperów wymagają, by każda integracja korzystała z osobnego, dedykowanego projektu Google Cloud.
- Do zapytań nadal potrzebujesz tokena dostępu OAuth i – przy pracy przez konto menedżera – nagłówka
login-customer-id.
Co zmieniło się w Google Ads API we wrześniu 2026
Najważniejsza zmiana dotyczy tego, kto i na jakich zasadach może korzystać z API. Wcześniej punktem wyjścia był token deweloperski przypisany do konta menedżera, a poziom dostępu zatwierdzano w Centrum API w Google Ads. Teraz punktem wyjścia jest projekt Google Cloud.
| Obszar | Do 9 września 2026 | Od 10 września 2026 |
|---|---|---|
| Identyfikacja aplikacji | token deweloperski w nagłówku developer-token |
projekt Google Cloud, z którego pochodzą dane OAuth |
| Rejestracja | wymagane konto menedżera i Centrum API | konsola Google Cloud, bez konta menedżera |
| Zarządzanie dostępem | Centrum API w Google Ads | strona przeglądu Google Ads API w konsoli Google Cloud |
| Wniosek o dostęp Basic | ręczna weryfikacja | weryfikacja marki, potem automatyczna ocena w kilka minut |
| Oczekujące wnioski Basic | w trakcie rozpatrywania | zamknięte 10 września – trzeba złożyć je ponownie |
| Komunikaty obowiązkowe | kontakt podany w Centrum API | właściciele i edytorzy w uprawnieniach IAM projektu |
| Token w żądaniu | wymagany | opcjonalny, wartość ignorowana |
Dla istniejących integracji Google zapewnia ciągłość: dotychczasowy kod działa, a poziomy dostępu tokenów zostały przypisane do projektów Cloud na podstawie ostatniej aktywności. Nie oznacza to jednak, że nie trzeba nic robić. Mapowanie mogło trafić do innego projektu, niż się spodziewasz, zwłaszcza jeśli jedna firma używała kilku projektów do różnych narzędzi. Centrum API jest wygaszane etapami, a Google nie podał daty jego pełnego wyłączenia.
Zmiana dotyczy tylko API. Skrypty Google Ads działają po staremu i nie wymagają projektu Cloud ani tokena – piszemy o nich w artykule o 10 skryptach do monitorowania konta. W tym samym okresie Google ogłosił też ogólną dostępność Data Manager API (10 września 2026 roku) do przesyłania konwersji i list odbiorców, a 19 października zakończył wsparcie dla Google Ads Editor w wersji 2.10 i starszych.
Poziomy dostępu do Google Ads API: od testowego do standardowego
Poziom dostępu określa, na jakich kontach i z jakim limitem operacji może działać aplikacja. Struktura poziomów się nie zmieniła – zmieniło się to, gdzie są przypisane.
- Test Account Access – praca wyłącznie na kontach testowych. Próba odwołania się do konta produkcyjnego kończy się w wersji v25 błędem
CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION, a w starszych wersjach błędemACTION_NOT_PERMITTED. - Explorer Access – ograniczony dostęp do kont produkcyjnych z niższym dziennym limitem operacji. Wniosek składasz na stronie przeglądu Google Ads API w konsoli Cloud. To dobry poziom na pierwsze raporty i prototypy.
- Basic Access – dostęp do kont produkcyjnych z dziennym limitem operacji, który w dokumentacji od lat wynosił 15 000; aktualne limity sprawdzisz na stronie przeglądu API. Nowe wnioski wymagają weryfikacji marki.
- Standard Access – dla narzędzi o dużej skali, bez dziennego limitu operacji (nadal obowiązują limity szybkości). Również wymaga weryfikacji marki.
Dla zespołu marketingu, który chce pobierać dane z kilkunastu kont do hurtowni lub dashboardu, zwykle wystarcza Basic Access. Explorer Access pozwala zacząć od razu, zanim zakończysz weryfikację marki.
Jak skonfigurować dostęp do Google Ads API przez Google Cloud krok po kroku
Poniższa procedura dotyczy nowej integracji. Jeśli masz już działające narzędzie, przejdź do punktów 5–8.
- Utwórz osobny projekt Google Cloud dla integracji. Zasady obowiązujące od 31 sierpnia 2026 roku wymagają dedykowanego projektu dla każdej integracji. Nie mieszaj w jednym projekcie dashboardu, narzędzia do stawek i eksperymentów z AI.
- Włącz Google Ads API w projekcie. W bibliotece interfejsów API konsoli Cloud znajdź Google Ads API i włącz je.
- Skonfiguruj ekran zgody OAuth i utwórz klienta OAuth. Dla narzędzia wewnętrznego wystarczy aplikacja desktopowa lub internetowa z zakresem dostępu do Google Ads. Zapisz identyfikator i sekret klienta w menedżerze sekretów, nie w kodzie.
- Wygeneruj token odświeżania. Zaloguj się kontem, które ma dostęp do kont Google Ads (bezpośrednio albo przez konto menedżera), i wykonaj przepływ OAuth. Token odświeżania pozwala aplikacji uzyskiwać krótkotrwałe tokeny dostępu.
- Sprawdź poziom dostępu projektu. Na stronie przeglądu Google Ads API w konsoli Cloud zobaczysz przypisany poziom. Porównaj go z poziomem, który miał Twój token w Centrum API; jeśli się różni, złóż wniosek ponownie lub skontaktuj się z pomocą techniczną.
- Złóż wniosek o wyższy poziom. Explorer Access zamówisz bezpośrednio na stronie przeglądu. Basic i Standard wymagają weryfikacji marki – przygotuj dane firmy i domenę.
- Zaktualizuj biblioteki klienckie i przestań wysyłać token. Google opublikował nowe wersje bibliotek, które pozwalają pominąć token deweloperski. Przed aktualizacją sprawdź informacje o wydaniu dla swojego języka.
- Uporządkuj uprawnienia IAM. Komunikaty obowiązkowe dotyczące API trafiają do właścicieli i edytorów projektu. Upewnij się, że są wśród nich aktywne adresy osób odpowiedzialnych za integrację.
Pierwszy raport: zapytanie GAQL przez REST i Apps Script
Najprostszy test dostępu to zapytanie do usługi googleAds:searchStream. Potrzebujesz tokena dostępu OAuth, identyfikatora konta (bez myślników) i – jeśli łączysz się przez konto menedżera – nagłówka login-customer-id z identyfikatorem MCC. Nagłówka developer-token już nie podajesz.
Krok 1 – wymiana tokena odświeżania na token dostępu:
curl -s -X POST https://oauth2.googleapis.com/token \
-d client_id=TWOJ_CLIENT_ID -d client_secret=TWOJ_SECRET \
-d refresh_token=TWOJ_REFRESH_TOKEN -d grant_type=refresh_token
Krok 2 – zapytanie GAQL (sprawdź aktualną wersję API w dokumentacji):
curl -s -X POST "https://googleads.googleapis.com/v25/customers/1234567890/googleAds:searchStream" \
-H "Authorization: Bearer TWOJ_ACCESS_TOKEN" \
-H "login-customer-id: 9876543210" \
-H "Content-Type: application/json" \
-d '{"query": "SELECT campaign.name, metrics.cost_micros, metrics.conversions FROM campaign WHERE segments.date DURING LAST_7_DAYS"}'
Odpowiedź to tablica paczek z wynikami, w których pola mają nazwy w notacji camelCase, a wartości liczbowe typu int64 są zwracane jako tekst:
[
{
"results": [
{
"campaign": { "resourceName": "customers/1234567890/campaigns/111", "name": "PL_Search_Brand" },
"metrics": { "costMicros": "1843200000", "conversions": 57.0 }
}
],
"fieldMask": "campaign.name,metrics.costMicros,metrics.conversions"
}
]
Koszt podawany jest w mikrojednostkach waluty konta, więc 1843200000 to 1843,20 zł. Jeśli wolisz rozwiązanie bez serwera, to samo zapytanie wyślesz z Apps Script. Projekt skryptu trzeba wtedy przełączyć w ustawieniach na standardowy projekt Google Cloud z włączonym Google Ads API, a w pliku manifestu dodać zakres dostępu do Google Ads.
// appsscript.json → "oauthScopes": [
// "https://www.googleapis.com/auth/adwords",
// "https://www.googleapis.com/auth/script.external_request",
// "https://www.googleapis.com/auth/spreadsheets" ]
var WERSJA_API = 'v25'; // sprawdź aktualną wersję
var KONTO = '1234567890'; // ID konta bez myślników
var MCC = '9876543210'; // ID konta menedżera (lub usuń nagłówek)
function raportKampanii() {
var query = "SELECT segments.date, campaign.name, metrics.clicks, metrics.cost_micros, " +
"metrics.conversions, metrics.conversions_value FROM campaign " +
"WHERE segments.date DURING LAST_7_DAYS AND campaign.status = 'ENABLED'";
var odp = UrlFetchApp.fetch('https://googleads.googleapis.com/' + WERSJA_API + '/customers/' + KONTO + '/googleAds:searchStream', {
method: 'post', contentType: 'application/json', muteHttpExceptions: true,
headers: { Authorization: 'Bearer ' + ScriptApp.getOAuthToken(), 'login-customer-id': MCC },
payload: JSON.stringify({ query: query })
});
if (odp.getResponseCode() !== 200) throw new Error(odp.getContentText());
var wiersze = [['Data', 'Kampania', 'Kliknięcia', 'Koszt', 'Konwersje', 'Wartość konwersji']];
JSON.parse(odp.getContentText()).forEach(function (paczka) {
(paczka.results || []).forEach(function (r) {
wiersze.push([r.segments.date, r.campaign.name, Number(r.metrics.clicks || 0),
Number(r.metrics.costMicros || 0) / 1e6, Number(r.metrics.conversions || 0),
Number(r.metrics.conversionsValue || 0)]);
});
});
var ark = SpreadsheetApp.getActive().getSheetByName('api') || SpreadsheetApp.getActive().insertSheet('api');
ark.clearContents().getRange(1, 1, wiersze.length, wiersze[0].length).setValues(wiersze);
}
Taki skrypt to dobry punkt wyjścia do raportów zespołowych. Gotowy przepływ z podsumowaniem na Slacku opisujemy w artykule o automatycznych raportach Google Ads.
Raporty, od których warto zacząć
GAQL daje dostęp do kilkuset zasobów, ale większość raportów marketingowych opiera się na kilku z nich. Poniższa lista wystarczy do zbudowania pierwszej hurtowni danych lub dashboardu.
| Raport | Zasób GAQL | Najważniejsze pola |
|---|---|---|
| Wyniki kampanii dzień po dniu | campaign | segments.date, metrics.cost_micros, metrics.conversions, metrics.conversions_value |
| Lista kont pod MCC | customer_client | customer_client.id, customer_client.descriptive_name, customer_client.manager |
| Słowa kluczowe i Wynik Jakości | keyword_view | ad_group_criterion.keyword.text, ad_group_criterion.quality_info.quality_score |
| Wyszukiwane hasła | search_term_view | search_term_view.search_term, metrics.clicks, metrics.conversions |
| Produkty | shopping_performance_view | segments.product_item_id, segments.product_title, metrics.conversions_value |
| Historia zmian | change_event | change_event.change_date_time, change_event.user_email, change_event.client_type |
Zasada, o której łatwo zapomnieć: segment użyty w warunku WHERE musi znaleźć się także w SELECT, z wyjątkiem segmentów daty. Zapytanie z filtrem segments.hour bez tego pola w SELECT zwróci błąd. Zasób change_event wymaga z kolei ograniczenia daty do ostatnich 30 dni i klauzuli LIMIT.
Jeśli dane mają trafiać do BigQuery, rozważ też gotowy transfer danych Google Ads w BigQuery – nie wymaga pisania kodu, a tabele mają stałą strukturę. Jak łączyć je z eksportem GA4, pokazujemy w tekście o zapytaniach do eksportu GA4 w BigQuery, a jak nie przepłacić za zapytania – w artykule o kosztach BigQuery.
Najczęstsze błędy po zmianie i jak je rozwiązać
Większość problemów po 10 września wynika z przypisania projektu i brakujących nagłówków, a nie z samego kodu.
CLOUD_PROJECT_NOT_APPROVED_FOR_PRODUCTION(v25) lubACTION_NOT_PERMITTED(starsze wersje). Projekt ma tylko dostęp testowy. Złóż wniosek o Explorer Access na stronie przeglądu API.USER_PERMISSION_DENIED. Najczęściej brakuje nagłówkalogin-customer-idprzy dostępie przez konto menedżera albo konto OAuth nie ma uprawnień do wskazanego konta.- Inny poziom dostępu niż wcześniej. Dane OAuth pochodzą z innego projektu, niż ten, do którego przypisano dotychczasowy poziom. Sprawdź identyfikator klienta OAuth i projekt, w którym go utworzono.
- Błędy limitów (
RESOURCE_EXHAUSTED). Przekroczono limit operacji lub szybkości. Grupuj zapytania, korzystaj zsearchStreamzamiast wielu małych zapytań i dodaj ponawianie z rosnącym opóźnieniem. - Brak komunikatów od Google. Na liście właścicieli i edytorów projektu nie ma aktywnych adresów. Zaktualizuj uprawnienia IAM.
API, skrypty czy gotowe łączniki: co wybrać
Google Ads API daje najwięcej możliwości, ale też wymaga najwięcej pracy: projektu Cloud, bezpiecznego przechowywania tokenów, obsługi wersji i limitów. Nie zawsze jest potrzebne.
Skrypty Google Ads wystarczą, gdy chcesz monitorować konto, wysyłać alerty i zapisywać dane w arkuszach – przykłady znajdziesz w tekście o skryptach wyłapujących anomalie w budżecie. Gotowe łączniki do Looker Studio lub transfer do BigQuery sprawdzą się w raportowaniu bez kodu. API wybierz, gdy budujesz własne narzędzie, łączysz dane z wielu kont i systemów albo chcesz, by model językowy pracował na danych z konta.
Ten ostatni scenariusz szybko zyskuje na popularności. Serwery MCP pozwalają połączyć asystentów AI z Google Ads przez API – opisujemy to w artykule o MCP w marketingu. Pamiętaj wtedy o zasadzie najmniejszych uprawnień: osobny projekt Cloud, dostęp tylko do odczytu tam, gdzie wystarczy, i jasne zasady dotyczące danych klientów, które omawiamy w tekście o danych klientów w narzędziach AI. Listy Customer Match i konwersje offline przesyłaj przez Data Manager, o czym piszemy w artykule o Customer Match i Data Manager.
Pozostałe poradniki o automatyzacji znajdziesz w podtemacie Skrypty i automatyzacja, a przegląd funkcji – na stronie narzędzia Google Ads.
Najczęściej zadawane pytania
Czy po wrześniu 2026 roku token deweloperski jest jeszcze potrzebny?
Nie. Od 10 września 2026 roku nagłówek z tokenem deweloperskim jest opcjonalny, a jego wartość jest ignorowana. O poziomie dostępu decyduje projekt Google Cloud, w którym utworzono dane OAuth. Google zapowiedział, że w jednej z przyszłych wersji głównych API żądania z tokenem będą odrzucane, dlatego warto go już usunąć z kodu.
Czy moja dotychczasowa integracja z Google Ads API przestanie działać?
Według Google istniejący kod działa dalej, a poziomy dostępu tokenów przypisano automatycznie do projektów Cloud na podstawie ostatniej aktywności. Sprawdź jednak na stronie przeglądu API w konsoli Cloud, czy projekt, z którego pochodzą Twoje dane OAuth, ma oczekiwany poziom dostępu, i zaktualizuj biblioteki klienckie.
Czy do Google Ads API nadal potrzebne jest konto menedżera?
Do rejestracji i uzyskania dostępu – nie, bo od września 2026 roku zakładasz go w konsoli Google Cloud. Konto menedżera nadal przydaje się do zarządzania wieloma kontami: wtedy w żądaniach podajesz nagłówek login-customer-id z jego identyfikatorem, a konto OAuth musi mieć do niego uprawnienia.
Czy zmiany w API dotyczą skryptów Google Ads?
Nie. Skrypty Google Ads działają wewnątrz konta reklamowego i nigdy nie wymagały tokena deweloperskiego ani projektu Google Cloud. Zmiany dotyczą aplikacji, które łączą się z Google Ads API z zewnątrz: własnych narzędzi, hurtowni danych, łączników i integracji z modelami językowymi.
Ile operacji dziennie pozwala wykonać Google Ads API?
Zależy to od poziomu dostępu. Test Account Access działa tylko na kontach testowych, Explorer Access ma niski dzienny limit na kontach produkcyjnych, Basic Access w dokumentacji od lat miał limit 15 000 operacji dziennie, a Standard Access nie ma dziennego limitu operacji. Aktualne wartości sprawdzisz na stronie przeglądu API w konsoli Cloud.