Что такое Google Ads API и зачем он нужен?
Google Ads API предоставляет программный доступ к вашей учетной записи Google Ads. Он позволяет разработчикам напрямую взаимодействовать с платформой, автоматизируя сложные задачи и интегрируя данные Google Ads с другими системами.
В отличие от веб-интерфейса, API предназначен для масштабного управления и глубокого анализа. Он используется для создания собственных инструментов отчетности, автоматизации управления кампаниями, интеграции с CRM, биддинг-платформами и другими аналитическими или операционными системами.
Преимущества использования API вместо интерфейса Google Ads
Использование Google Ads API открывает возможности, недоступные через стандартный веб-интерфейс:
Автоматизация: Выполнение рутинных задач (создание/обновление кампаний, получение отчетов) по расписанию без ручного вмешательства.
Масштабирование: Управление большим количеством аккаунтов или объектов (кампании, объявления, ключевые слова) значительно эффективнее, чем через интерфейс.
Интеграция: Соединение данных Google Ads с данными из других источников (например, CRM, веб-аналитика) для создания комплексных отчетов и принятия решений.
Гибкость: Получение специфических срезов данных или метрик, которые могут быть недоступны или сложно извлекаемы через стандартные отчеты интерфейса.
Собственные инструменты: Создание кастомных инструментов для анализа, мониторинга и управления, адаптированных под уникальные бизнес-процессы.
Основные понятия и термины (ресурсы, отчеты, запросы)
Для работы с API необходимо усвоить несколько ключевых концепций:
Ресурсы (Resources): Основные сущности в Google Ads API, представляющие объекты учетной записи (например, Campaign, AdGroup, Keyword, Ad). Каждый ресурс имеет уникальное имя и набор полей (атрибутов).
Поля ресурсов (Resource Fields): Атрибуты ресурса, содержащие конкретные данные (например, campaign.id, campaign.name, ad_group.status).
Метрики (Metrics): Количественные показатели эффективности (например, metrics.clicks, metrics.impressions, metrics.cost_micros). Они всегда связаны с определенным временным интервалом и доступны при запросе вместе с ресурсами.
Сегменты (Segments): Поля, позволяющие разбить данные по определенным атрибутам (например, segments.date, segments.device). Использование сегментов приводит к получению отдельной строки для каждого сегмента в результатах запроса.
Google Ads Query Language (GAQL): Мощный язык запросов, используемый для извлечения данных из API. Он синтаксически похож на SQL и позволяет выбирать поля ресурсов, метрики и сегменты, применять фильтры (WHERE), сортировку (ORDER BY) и ограничения (LIMIT).
Подготовка к работе с Google Ads API
Получение учетных данных (Google Cloud Project, API Key, OAuth 2.0)
Доступ к Google Ads API требует прохождения нескольких шагов авторизации и аутентификации:
Google Cloud Project: Создайте проект в Google Cloud Platform (GCP). Это базовая единица для управления ресурсами и API Google.
Включение Google Ads API: Внутри вашего GCP проекта найдите и включите Google Ads API в разделе APIs & Services -> Library.
Получение учетных данных (Credentials): Перейдите в раздел APIs & Services -> Credentials.
Developer Token: Этот токен нужен для идентификации вашего разработчика и связан с вашим Аккаунтом Центра Клиентов (MCC). Он выдается после одобрения заявки на доступ к API (изначально тестовый, затем стандартный). Указывается в каждом запросе.
OAuth 2.0 Client ID & Secret: Эти учетные данные используются для аутентификации конечного пользователя (владельца аккаунта Google Ads), к данным которого вы хотите получить доступ. Вам потребуется настроить OAuth consent screen и создать OAuth client ID типа Desktop app или Web application в зависимости от вашего приложения. Для большинства оффлайн-сценариев получения данных предпочтителен Desktop app или Web application с получением refresh_token.
Процесс OAuth 2.0 включает получение authorization_code через браузер пользователя, который затем обменивается на access_token (кратковременный) и refresh_token (долговременный). Для автоматического получения данных вам нужен refresh_token, который позволит получать новые access_token без повторной авторизации пользователя.
Установка и настройка клиентской библиотеки (Python, Java, PHP, etc.)
Google предоставляет клиентские библиотеки для популярных языков программирования, которые значительно упрощают взаимодействие с API. Рекомендуется использовать именно их.
Например, для Python установка выполняется через pip:
pip install google-ads
После установки необходимо настроить библиотеку, предоставив ей учетные данные. Обычно это делается через конфигурационный файл google-ads.yaml или переменные окружения. Файл google-ads.yaml должен содержать информацию о вашем developer_token, client_id, client_secret, refresh_token и login_customer_id (MCC ID, если вы работаете с несколькими аккаунтами).
Пример структуры google-ads.yaml:
general:
developer_token: YOUR_DEVELOPER_TOKEN
login_customer_id: YOUR_MCC_ID # Укажите MCC ID, если работаете с несколькими аккаунтами
oauth2:
client_id: YOUR_CLIENT_ID
client_secret: YOUR_CLIENT_SECRET
refresh_token: YOUR_REFRESH_TOKEN
Поместите этот файл в домашнюю директорию пользователя или укажите путь к нему в коде или переменной окружения.
Настройка среды разработки
Убедитесь, что в вашей среде установлены необходимые зависимости (например, Python и pip). Создайте виртуальное окружение для проекта, чтобы избежать конфликтов зависимостей.
python -m venv venv
source venv/bin/activate # или `venv\Scripts\activate` в Windows
pip install google-ads pandas # pandas пригодится для обработки данных
Разместите файл google-ads.yaml в доступном месте, либо используйте переменные окружения для передачи учетных данных.
Подключение к аккаунту Google Ads (получение refresh token)
Для получения данных из конкретного аккаунта Google Ads вам нужен customer_id этого аккаунта и авторизация для доступа к нему через OAuth 2.0. Процесс получения refresh_token включает следующие шаги:
Используйте client_id и client_secret для генерации URL авторизации.
Перейдите по этому URL в браузере, войдите в аккаунт Google, который имеет доступ к целевому аккаунту Google Ads, и разрешите вашему приложению доступ.
После успешной авторизации браузер будет перенаправлен на redirect_uri с параметром code (authorization_code).
Используйте client_id, client_secret и code для запроса к серверу Google OAuth 2.0 endpoint, чтобы обменять code на access_token и refresh_token.
Клиентские библиотеки часто предоставляют утилиты для упрощения этого процесса. Полученный refresh_token следует сохранить (например, в google-ads.yaml), так как он требуется для всех последующих авторизованных запросов.
Для запросов к аккаунту, не являющемуся MCC (если ваш login_customer_id — это ID MCC), вам нужно будет указать ID клиентского аккаунта в заголовке customer_id каждого запроса или в конфигурации клиента.
Получение данных с помощью Google Ads API
Основные типы запросов: GAQL (Google Ads Query Language)
Основной способ извлечения данных из Google Ads API — это использование языка GAQL. GAQL позволяет запрашивать ресурсы, их поля, метрики и сегменты, а также применять условия фильтрации, сортировки и ограничения выборки.
Структура GAQL запроса похожа на SQL SELECT:
SELECT
field_resource.field_name,
metrics.metric_name,
segments.segment_name
FROM
resource_name
WHERE
condition_on_field
ORDER BY
field_to_sort
LIMIT
number_of_results
SELECT: Определяет, какие поля ресурсов, метрики и сегменты вы хотите получить.
FROM: Указывает основной ресурс, который вы запрашиваете (например, campaign, ad_group, keyword).
WHERE: Применяет условия фильтрации к полям или метрикам.
ORDER BY: Определяет порядок сортировки результатов.
LIMIT: Ограничивает количество возвращаемых строк.
Примеры запросов GAQL для получения различных данных
Получение списка кампаний и их статусов:
SELECT
campaign.id,
campaign.name,
campaign.status
FROM
campaign
ORDER BY
campaign.name
Получение данных по кликам, показам и расходам на уровне групп объявлений за определенный период:
SELECT
ad_group.id,
ad_group.name,
metrics.clicks,
metrics.impressions,
metrics.cost_micros
FROM
ad_group
WHERE
segments.date BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
ORDER BY
metrics.clicks DESC
Примечание: cost_micros возвращается в микро-единицах (миллионные доли валюты), необходимо делить на 1,000,000 для получения фактической суммы..
Получение данных по ключевым словам с разбивкой по устройствам:
SELECT
keyword_view.resource_name,
ad_group_criterion.keyword.text,
segments.device,
metrics.clicks,
metrics.ctr
FROM
keyword_view
WHERE
segments.date = 'YYYY-MM-DD'
AND ad_group_criterion.status = 'ENABLED'
Фильтрация и сортировка данных в GAQL запросах
Фильтрация (WHERE): Используйте оператор WHERE для применения условий. Доступны стандартные операторы сравнения (=, !=, >, <, >=, <=), логические операторы (AND, OR), а также специфические для GAQL операторы (LIKE для частичного совпадения строк, IN для списка значений, BETWEEN для диапазонов дат).
Пример фильтрации по статусу и имени кампании:
WHERE campaign.status = 'ENABLED' AND campaign.name LIKE '%Brand%'
Пример фильтрации по метрике (показы > 1000):
WHERE metrics.impressions > 1000
Сортировка (ORDER BY): Указывайте поля, по которым нужно отсортировать результаты, и направление сортировки (ASC или DESC). Можно сортировать по нескольким полям.
Пример сортировки по имени кампании (прямой порядок), затем по кликам (обратный порядок):
ORDER BY campaign.name ASC, metrics.clicks DESC
Получение данных отчетов (performance reports)
GAQL запросы по сути являются запросами к отчетным данным. Когда вы включаете метрики (metrics.*) и/или сегменты (segments.*) в свой запрос GAQL, API автоматически собирает и агрегирует данные, формируя производительный отчет. Ресурсы, которые часто используются для получения отчетов, включают campaign, ad_group, ad_group_criterion (для ключевых слов), ad.
Важно понимать, что метрики и сегменты доступны не для всех ресурсов. Документация API четко указывает, какие метрики и сегменты совместимы с каким ресурсом FROM.
Обработка и анализ полученных данных
Форматы данных, возвращаемых API (JSON, протокол буферы)
Google Ads API использует протокол буферы (Protocol Buffers) для сериализации данных в процессе передачи, что обеспечивает эффективность и скорость. Однако клиентские библиотеки, как правило, автоматически десериализуют эти данные в структуры, более удобные для работы в вашем языке программирования. Для Python клиентская библиотека преобразует данные в объекты, к полям которых можно обращаться как к атрибутам.
Хотя API напрямую не возвращает чистый JSON в ответ на GAQL запросы (он использует gRPC с Protobuf), клиентские библиотеки позволяют легко преобразовать полученные объекты в формат, который можно далее сериализовать в JSON или экспортировать.
Парсинг и обработка данных в вашем приложении
После выполнения GAQL запроса клиентская библиотека возвращает итератор или список объектов-ресурсов. Каждый такой объект содержит запрошенные поля ресурсов, метрики и сегменты.
В Python это выглядит примерно так:
# Предполагается, что `googleads_client` уже инициализирован
# и `customer_id` целевого аккаунта известен.
def get_campaign_performance(client, customer_id: str, date_range: tuple) -> list:
"""
Получает клики и расходы кампаний за указанный диапазон дат.
Args:
client: Инициализированный клиент Google Ads API.
customer_id: ID клиентского аккаунта.
date_range: Кортеж (start_date, end_date) в формате YYYY-MM-DD.
Returns:
Список словарей с данными кампаний.
"""
ga_service = client.get_service("GoogleAdsService")
query = f"""
SELECT
campaign.id,
campaign.name,
metrics.clicks,
metrics.cost_micros
FROM
campaign
WHERE
segments.date BETWEEN '{date_range[0]}' AND '{date_range[1]}'
ORDER BY
metrics.clicks DESC
"""
# Выполняем запрос
response = ga_service.search(customer_id=customer_id, query=query)
results = []
# Обрабатываем полученные строки
for row in response:
campaign = row.campaign
metrics = row.metrics
results.append({
'campaign_id': campaign.id,
'campaign_name': campaign.name,
'clicks': metrics.clicks,
'cost': metrics.cost_micros / 1_000_000 # Переводим микро-единицы в валюту
})
return results
# Пример использования (после настройки клиента)
# data = get_campaign_performance(googleads_client, 'YOUR_CUSTOMER_ID', ('2023-01-01', '2023-01-31'))
# print(data)
Полученные данные удобно загружать в структуры данных, такие как списки словарей в Python, или в библиотеки для анализа данных, например, Pandas DataFrame.
Примеры анализа данных: расчет ROI, определение наиболее эффективных кампаний
Имея данные о расходах (metrics.cost_micros) и, при наличии, данные о конверсиях (metrics.conversions, metrics.conversions_value) из Google Ads, или объединяя их с данными о доходах из других источников (например, CRM), можно проводить анализ:
Расчет ROI (Return on Investment): Если у вас есть данные о доходе, принесенном кампаниями (revenue), ROI можно рассчитать как ((revenue - cost) / cost) * 100%. Для этого вам нужно будет сопоставить данные Google Ads с данными о доходе.
Расчет ROAS (Return on Ad Spend): (conversions_value / (cost_micros / 1_000_000)) * 100%. Это более прямой показатель эффективности рекламных расходов, использующий данные о ценности конверсий, если они отслеживаются.
Определение наиболее эффективных кампаний/групп объявлений/ключевых слов: Сортировка данных по ключевым метрикам (клики, конверсии, цена конверсии — CPA, ROAS) позволяет выявить объекты с наилучшей или наихудшей производительностью.
Pandas DataFrame отлично подходит для такого анализа, предоставляя мощные инструменты для фильтрации, агрегации, объединения данных и расчетов метрик.
Практические примеры и советы
Пример скрипта на Python для автоматического получения данных и сохранения в CSV
Этот скрипт демонстрирует, как получить клики, показы и расходы по кампаниям за вчерашний день и сохранить их в CSV файл.
import pandas as pd
from google.ads.googleads.client import GoogleAdsClient
from google.api_core import protobuf_helpers
from datetime import datetime, timedelta
import yaml
import os
def main():
# Путь к конфигурационному файлу (может быть переменной окружения)
# Или настройте клиент без файла, передав dict
config_file = os.path.expanduser('~/.config/google-ads/google-ads.yaml')
# Инициализация клиента Google Ads API
try:
googleads_client = GoogleAdsClient.load_from_storage(config_file)
except Exception as e:
print(f"Ошибка загрузки конфигурации: {e}")
print("Убедитесь, что файл ~/.config/google-ads/google-ads.yaml существует и корректен.")
return
# --- Параметры запроса ---
# Замените на реальный ID вашего клиентского аккаунта или MCC
customer_id = 'YOUR_CUSTOMER_ID'
# Определяем диапазон дат (вчера)
yesterday = datetime.now() - timedelta(days=1)
date_str = yesterday.strftime('%Y-%m-%d')
# Запрос GAQL для получения данных кампаний
query = f"""
SELECT
campaign.id,
campaign.name,
campaign.status,
metrics.clicks,
metrics.impressions,
metrics.cost_micros
FROM
campaign
WHERE
segments.date = '{date_str}'
ORDER BY
metrics.cost_micros DESC
"""
ga_service = googleads_client.get_service("GoogleAdsService")
print(f"Выполняем запрос GAQL для аккаунта {customer_id} за {date_str}...")
results_list = []
try:
# Выполнение запроса
response = ga_service.search(customer_id=customer_id, query=query)
# Обработка результатов и сбор данных в список словарей
for row in response:
camp = row.campaign
metrics = row.metrics
results_list.append({
'Date': date_str,
'Campaign ID': camp.id,
'Campaign Name': camp.name,
'Campaign Status': camp.status,
'Clicks': metrics.clicks,
'Impressions': metrics.impressions,
'Cost': metrics.cost_micros / 1_000_000 if metrics.cost_micros else 0.0 # Делим на 1М, обрабатываем None/0
})
print(f"Получено {len(results_list)} строк данных.")
except Exception as e:
print(f"Произошла ошибка при выполнении запроса: {e}")
return
# Проверка наличия данных и сохранение в CSV
if results_list:
df = pd.DataFrame(results_list)
# Имя файла для сохранения
output_filename = f"google_ads_campaign_performance_{date_str}.csv"
# Сохранение в CSV
try:
df.to_csv(output_filename, index=False)
print(f"Данные успешно сохранены в {output_filename}")
except Exception as e:
print(f"Ошибка при сохранении файла CSV: {e}")
else:
print("Нет данных для сохранения.")
if __name__ == '__main__':
main()
Перед запуском: Убедитесь, что установлен пакет google-ads и pandas, а файл ~/.config/google-ads/google-ads.yaml настроен с вашими учетными данными и customer_id в коде заменен на фактический ID аккаунта.
Лучшие практики работы с API (ограничения запросов, обработка ошибок)
Лимиты запросов: Google Ads API имеет ограничения на количество запросов в день и на скорость запросов (рейт-лимиты). Для стандартного уровня доступа лимит составляет 15 000 запросов в день и 1000 запросов в минуту. Превышение лимитов приведет к ошибкам RESOURCE_EXHAUSTED. Планируйте свои запросы и используйте пагинацию (LIMIT, OFFSET — хотя в GAQL search пагинация автоматическая при итерации по ответу) или запрашивайте данные большими блоками по датам или аккаунтам.
Обработка ошибок: Всегда используйте блоки try...except для перехвата ошибок API. Google Ads API возвращает специфические коды ошибок и сообщения, которые помогают понять причину сбоя (например, неверный запрос GAQL, проблемы с аутентификацией, превышение лимита). Логируйте ошибки для последующего анализа.
Идемпотентность: При выполнении операций модификации данных (не получение), старайтесь делать запросы идемпотентными, чтобы повторное выполнение не привело к дублированию сущностей или некорректным изменениям.
Версионирование API: Google Ads API регулярно обновляется, появляются новые версии. Используйте актуальную версию API и клиентской библиотеки. Учитывайте, что при обновлении API могут устаревать некоторые поля или ресурсы – следите за анонсами.
Login Customer ID: При работе через MCC аккаунт, используйте login_customer_id (ID вашего MCC) в конфигурации клиента. Это позволит выполнять запросы от имени MCC. Для запросов к конкретному клиентскому аккаунту указывайте его ID (customer_id) в параметрах вызова метода API (ga_service.search(customer_id='...')).
Полезные ресурсы и документация Google Ads API
Официальная документация Google Ads API: https://developers.google.com/google-ads/api/docs/start — Ваш основной источник информации. Содержит руководства, справочники по ресурсам и полям, примеры кода.
Справочник по GAQL: https://developers.google.com/google-ads/api/docs/query/overview — Детальное описание синтаксиса и возможностей GAQL.
Инструмент Query Validator: https://developers.google.com/google-ads/api/fields/v16/query_validator — Полезен для проверки ваших GAQL запросов перед их использованием в коде.
Репозитории клиентских библиотек на GitHub: Содержат примеры кода и исходники библиотек.
Решение распространенных проблем и ошибок
AUTHENTICATION_ERROR: Проверьте правильность developer_token, client_id, client_secret и refresh_token. Убедитесь, что refresh_token не просрочен или не отозван. Проверьте, что аккаунт, связанный с refresh_token, имеет доступ к customer_id, который вы запрашиваете.
RESOURCE_EXHAUSTED: Вы превысили лимиты API. Проверьте количество запросов. Внедрите механизм задержки между запросами или пересмотрите логику получения данных для сокращения их общего числа.
Ошибки парсинга GAQL (INVALID_QUERY, BAD_REQUEST): Внимательно проверьте синтаксис вашего GAQL запроса. Убедитесь, что запрашиваемые поля, метрики и сегменты совместимы с ресурсом FROM. Используйте Query Validator.
AUTHORIZATION_ERROR: У аккаунта, от имени которого вы выполняете запрос (связанного с refresh_token), нет достаточных прав доступа к аккаунту с customer_id. Убедитесь, что пользователь имеет как минимум доступ только для чтения к целевому аккаунту Google Ads.
Пустые результаты при запросе метрик: Убедитесь, что в запросе с метриками присутствует сегмент segments.date или другой временной сегмент, и что указанный диапазон дат содержит данные. Проверьте, что фильтры (WHERE) не исключают все данные.