Что такое Яндекс.Директ API и зачем его автоматизировать
Яндекс.Директ API — это программный интерфейс, который позволяет управлять рекламными кампаниями без входа в веб-интерфейс: создавать объявления, менять ставки, получать статистику и отчёты. Через API делается всё то же, что и вручную, но в сотни раз быстрее и без участия человека.
Если вы ведёте контекстную рекламу для нескольких клиентов или управляете большим количеством кампаний — ручная работа занимает часы ежедневно. Интеграция Яндекс.Директ с n8n через REST API решает это: воркфлоу сам выгружает статистику, обновляет ставки по правилам и отправляет отчёты в Google Sheets или Telegram.
n8n Яндекс Директ — связка, которую используют перфоманс-маркетологи и агентства. Автоматизация Яндекс Директ через n8n позволяет вместо ежедневной ручной работы один раз настроить воркфлоу. В этой статье — пошаговая настройка автоматизации рекламных кампаний через Яндекс Директ API: получение токена, первые запросы и три готовых сценария. Интеграция Яндекс Директ с n8n не требует программирования — только HTTP Request node.
Получение OAuth-токена для Яндекс.Директ API
Яндекс.Директ API использует OAuth 2.0. Вам нужен долгосрочный токен — он действует пока вы его не отзовёте.
Шаг 1: создайте приложение в Яндекс.OAuth
- Перейдите на oauth.yandex.ru → «Зарегистрировать новое приложение».
- Название: «n8n автоматизация» (любое).
- Права доступа — выберите Яндекс.Директ → API доступ.
- Callback URI: укажите
https://oauth.yandex.ru/verification_code. - Сохраните — получите Client ID и Client Secret.
Шаг 2: получите код авторизации
Откройте в браузере (подставьте свой Client ID):
https://oauth.yandex.ru/authorize?response_type=code&client_id=ВАШ_CLIENT_ID
Разрешите доступ — браузер вернёт URL с параметром ?code=XXXXX. Скопируйте этот код.
Шаг 3: обменяйте код на токен
Сделайте POST-запрос (можно через Postman или curl):
curl -X POST https://oauth.yandex.ru/token \
-d "grant_type=authorization_code" \
-d "code=ВАШ_КОД" \
-d "client_id=ВАШ_CLIENT_ID" \
-d "client_secret=ВАШ_CLIENT_SECRET"
В ответе получите access_token — это и есть ваш OAuth-токен. Сохраните его в n8n Credentials.
Подключение Яндекс.Директ к n8n
Яндекс.Директ API не имеет готового node в n8n, но для этого идеально подходит HTTP Request node. Базовые параметры для всех запросов:
- URL API v5:
https://api.direct.yandex.com/json/v5/ - Method: POST (Яндекс.Директ API v5 работает только через POST)
- Header:
Authorization: Bearer ВАШ_ТОКЕН - Header:
Content-Type: application/json; charset=utf-8 - Header:
Accept-Language: ru
Настройка Credentials в n8n
Чтобы не вводить токен в каждый HTTP Request node, сохраните его в Credentials:
- В n8n → Settings → Credentials → Add Credential.
- Тип: Header Auth.
- Name: «Яндекс.Директ OAuth».
- Header Name:
Authorization, Header Value:Bearer ВАШ_ТОКЕН.
Теперь во всех HTTP Request нодах просто выбирайте эти credentials.
Сценарий 1: ежедневная выгрузка статистики в Google Sheets
Самый востребованный кейс автоматизация Яндекс.Директ через n8n — ежедневный отчёт о расходах и кликах без входа в интерфейс. Воркфлоу: каждое утро в 9:00 n8n запрашивает статистику за вчера и записывает в таблицу.
Структура воркфлоу
- Schedule Trigger — каждый день в 09:00
- Code Node — формирует даты (вчера)
- HTTP Request — запрос к reports API
- Code Node — парсит TSV-ответ
- Google Sheets — записывает строки
- Telegram — уведомление «Отчёт готов»
Запрос статистики через Reports API
Яндекс.Директ API v5 для отчётов работает асинхронно. В HTTP Request node укажите:
URL: https://api.direct.yandex.com/json/v5/reports
Body (JSON):
{
"params": {
"SelectionCriteria": {
"DateFrom": "{{ $json.yesterday }}",
"DateTo": "{{ $json.yesterday }}"
},
"FieldNames": [
"Date",
"CampaignName",
"Impressions",
"Clicks",
"Ctr",
"Cost"
],
"ReportName": "daily-{{ $json.yesterday }}",
"ReportType": "CAMPAIGN_PERFORMANCE_REPORT",
"DateRangeType": "CUSTOM_DATE",
"Format": "TSV",
"IncludeVAT": "YES",
"IncludeDiscount": "NO"
}
}
Добавьте дополнительный заголовок: processingMode: offline — это ускорит генерацию отчёта.
Ответ придёт в формате TSV (tab-separated). Разберите его в Code Node:
const tsv = $input.first().binary?.data
? Buffer.from($input.first().binary.data, 'base64').toString('utf-8')
: $input.first().json.body;
const lines = tsv.split('\n').filter(l => l.trim());
const headers = lines[0].split('\t');
const rows = lines.slice(2, -1); // пропускаем заголовок и итоги
return rows.map(row => {
const cells = row.split('\t');
const obj = {};
headers.forEach((h, i) => obj[h] = cells[i]);
return { json: obj };
});
Сценарий 2: автоматическое управление ставками по правилам
Второй популярный кейс — управление рекламой через API Яндекс.Директ на основе правил. Например: если CTR объявления ниже 2% за неделю — снижаем ставку на 20%. Если CR выше 5% — повышаем на 15%.
Получение списка кампаний
HTTP Request node, метод POST, URL: https://api.direct.yandex.com/json/v5/campaigns
{
"method": "get",
"params": {
"SelectionCriteria": {
"States": ["ON"]
},
"FieldNames": ["Id", "Name", "Status", "State", "Statistics"]
}
}
Получение ставок по группам объявлений
URL: https://api.direct.yandex.com/json/v5/adgroups
{
"method": "get",
"params": {
"SelectionCriteria": {
"CampaignIds": [{{ $json.Id }}]
},
"FieldNames": ["Id", "Name", "CampaignId", "Status"]
}
}
Обновление ставок через bids API
После расчёта новой ставки в Code Node отправьте обновление:
URL: https://api.direct.yandex.com/json/v5/bids
{
"method": "set",
"params": {
"Bids": [
{
"KeywordId": {{ $json.KeywordId }},
"Bid": {{ $json.newBid }}
}
]
}
}
Ставка задаётся в микрорублях: 1 рубль = 1 000 000 микрорублей. В Code Node умножайте:
const bidRubles = 15.50;
const bidMicro = Math.round(bidRubles * 1000000);
Сценарий 3: уведомление о резком росте расходов
Один из самых полезных воркфлоу для защиты бюджета — мониторинг рекламных кампаний через n8n. Если расходы за час выросли на 50% по сравнению со вчерашним аналогичным часом — получите алерт в Telegram и можете вручную остановить кампанию.
Логика воркфлоу
- Schedule Trigger — каждый час
- HTTP Request — статистика за текущий час (DateRangeType: TODAY)
- HTTP Request — статистика за тот же час вчера
- Code Node — сравнивает расходы
- IF Node — рост > 50%?
- Telegram — алерт с деталями и ссылкой на кампанию
// Code Node: сравнение
const today = $('Статистика сегодня').first().json.Cost / 1000000;
const yesterday = $('Статистика вчера').first().json.Cost / 1000000;
const growth = ((today - yesterday) / yesterday * 100).toFixed(1);
return [{ json: {
today: today.toFixed(2),
yesterday: yesterday.toFixed(2),
growth,
alert: growth > 50
}}];
Работа с несколькими аккаунтами (агентский доступ)
Если вы рекламное агентство и ведёте клиентов через агентский кабинет, добавьте заголовок Client-Login к каждому запросу:
Client-Login: логин-клиента-яндекс
В n8n удобно хранить список клиентов в Google Sheets и итерировать по ним через Loop Over Items node. Один воркфлоу собирает отчёты по всем клиентам и раскладывает их по отдельным листам таблицы.
Ограничения API и как их учитывать в n8n
Яндекс.Директ API имеет лимиты, которые важно учитывать при автоматизации рекламы:
- Баллы (Units): каждый аккаунт получает 30 000 баллов в сутки. Сложные запросы стоят дороже.
- Rate limit: не более 5 запросов в секунду.
- Асинхронные отчёты: Reports API может отвечать кодом 202 («готовится»). Нужен повторный запрос через несколько секунд.
Для обработки асинхронности в n8n используйте Wait node (ждать 30 секунд) + Loop для повторных попыток. Добавьте IF node: если статус 200 — парсить ответ, если 202 — повторить цикл.
// Проверка статуса ответа Reports API
const status = $input.first().json.statusCode || 200;
if (status === 202) {
return [{ json: { ready: false, retryAfter: 30 } }];
}
return [{ json: { ready: true } }];
Автоматическая остановка кампании по бюджету
Ещё один практичный сценарий — остановить кампанию, если дневной бюджет почти исчерпан. Используйте метод suspend в campaigns API:
URL: https://api.direct.yandex.com/json/v5/campaigns
{
"method": "suspend",
"params": {
"SelectionCriteria": {
"Ids": [{{ $json.campaignId }}]
}
}
}
Для возобновления используйте метод resume. Типичный воркфлоу: в 18:00 проверить расходы → если израсходовано больше 90% дневного бюджета → остановить → в 00:00 возобновить все кампании.
Типичные ошибки при работе с Яндекс.Директ API
| Ошибка | Причина | Решение |
|---|---|---|
| 52 Authorization failure | Токен истёк или неверный | Обновите OAuth-токен |
| 53 Insufficient privileges | Нет прав на операцию | Проверьте права приложения в oauth.yandex.ru |
| 506 Units limit exceeded | Превышен суточный лимит баллов | Оптимизируйте запросы, используйте офлайн-отчёты |
| Статус 202 вместо данных | Отчёт ещё формируется | Добавьте Wait node и повторный запрос |
Итог: что можно автоматизировать в Яндекс.Директ через n8n
Интеграция n8n Яндекс.Директ даёт полный контроль над рекламными кампаниями без ручного труда. Вот что реально автоматизировать прямо сейчас:
- Ежедневные и недельные отчёты о расходах — в Google Sheets и Telegram
- Автоматическое управление ставками по правилам (CTR, конверсия, бюджет)
- Мониторинг и алерты при аномалиях расходов
- Остановка кампаний при превышении бюджета
- Массовое создание объявлений из Excel или Google Sheets
- Синхронизация статистики с CRM (AmoCRM, Bitrix24)
Начните с простого — ежедневного отчёта в Telegram. Автоматизация рекламных кампаний в Яндекс.Директ через n8n настраивается за час, а экономия времени начинается с первого же дня.
Часто задаваемые вопросы
Как подключить Яндекс.Директ к n8n?
Получите OAuth-токен через oauth.yandex.ru, создайте приложение с правами на Директ API, затем в n8n используйте HTTP Request node с заголовком Authorization: Bearer ВАШ_ТОКЕН. Базовый URL API v5: https://api.direct.yandex.com/json/v5/.
Можно ли автоматически менять ставки в Яндекс.Директ через API?
Да, через bids API (метод set). Ставка задаётся в микрорублях (1 руб = 1 000 000 мкр). В n8n можно настроить воркфлоу, который по расписанию анализирует CTR и конверсию и автоматически корректирует ставки по правилам.
Почему Яндекс.Директ API возвращает код 202?
Код 202 означает, что отчёт ещё формируется (асинхронный режим). Нужно подождать 30–60 секунд и повторить запрос. В n8n добавьте Wait node + цикл с IF условием: если статус 200 — данные готовы, если 202 — повторить.
Как получить статистику по всем клиентам агентства через n8n?
Добавьте заголовок Client-Login с логином нужного клиента к каждому запросу. Список клиентов можно хранить в Google Sheets и итерировать через Loop Over Items node — воркфлоу соберёт отчёты по всем аккаунтам за один запуск.
Сколько баллов (Units) стоит запрос к Яндекс.Директ API?
Каждый аккаунт получает 30 000 баллов в сутки. Стоимость запроса зависит от операции: простые методы (get кампаний) — 1–10 Units, офлайн-отчёты — от 1 Unit. Для агентских аккаунтов лимит выше. Следите за остатком через метод getAvailableAmount.