Разбор
ИИ-агент аудирует Яндекс.Директ: как находить деньги которые ты теряешь каждую неделю
Ручной аудит Директа — 3–4 часа раз в месяц. ИИ-агент делает то же самое за 5 минут каждую неделю. Схема Директ API → Python → Claude → Telegram, 10 метрик с порогами и код который можно запустить сегодня.
Ручной аудит Яндекс.Директ в агентстве стоит от 8 000 до 15 000 рублей. Делают его раз в квартал — и только если клиент настаивает. За три месяца рекламный аккаунт успевает накопить столько проблем, что к моменту аудита деньги уже давно потрачены впустую.
Почему раз в месяц — уже слишком редко
Рекламный аккаунт деградирует постоянно. Не потому что настройки меняются, а потому что меняется всё вокруг: конкуренты переписывают объявления, ставки скачут, пользователи ищут новыми запросами которых ты не предусмотрел. Ключи которые работали в прошлом месяце, в этом могут сжигать бюджет в минус.
Три вещи происходят незаметно между аудитами:
Первая — ключевые слова накапливают расход без конверсий. Кто-то кликает, деньги списываются, заявок нет. Если не смотреть 30 дней, один такой ключ съедает 2 000–5 000 рублей прежде чем его заметят.
Вторая — дневной бюджет начинает исчерпываться раньше. Сначала заканчивается в 21:00, потом в 18:00, потом в 14:00. Вторая половина дня — без показов. Рекламодатель платит за период, когда аудитория уже не видит его объявлений.
Третья — появляются нецелевые запросы из-за широкого соответствия ключей. Продаёшь «корпоративный транспорт», а показываешься по «транспорт для детей». Без регулярного добавления минус-слов эта пропасть только растёт.
Что именно проверяет агент: 10 метрик с порогами
Каждый пункт — конкретная проверка с числовым порогом. Если порог превышен, агент включает это в отчёт с объяснением и рекомендацией.
| # | Метрика | Порог | Приоритет |
|---|---|---|---|
| 1 | Кампании без минус-слов | 0 минус-слов = стоп | Высокий |
| 2 | Ключи с расходом и нулевой конверсией | > 500 ₽ за 30 дней без заявки | Высокий |
| 3 | Бюджет исчерпан до 14:00 | Дневной лимит = 0 раньше полудня | Высокий |
| 4 | Высокий CTR при низкой конверсии | CTR > 5%, CR < 0.5% | Высокий |
| 5 | Объявления без быстрых ссылок | Активные объявления без расширений | Средний |
| 6 | Дублирующиеся ключевые слова | Один ключ в 2+ группах/кампаниях | Средний |
| 7 | Отклонённые объявления в активных кампаниях | Status = REJECTED при Status кампании = ON | Средний |
| 8 | Завышенные ставки | Ставка > 3× от медианы по кампании | Средний |
| 9 | Кампании с нулевыми показами 7 дней | Active + 0 показов = что-то не так | Низкий |
| 10 | Отсутствие уточнений и промоакций | Объявления без Sitelinks и Callouts | Низкий |
Как устроена схема
Python выступает здесь оркестратором: забирает сырые данные через Директ API, форматирует их в структурированный JSON и передаёт Claude одним большим промптом. Claude не работает с API напрямую — он получает уже подготовленный срез данных и возвращает текстовый отчёт на русском.
Это важный момент. Можно было бы сделать так, чтобы Claude сам формулировал API-запросы в режиме агента с инструментами. Но для регулярного аудита с фиксированными проверками — проще и дешевле передать структурированные данные один раз. Меньше токенов, предсказуемый результат.
Код который работает
Базовый скрипт на Python. Запускается раз в неделю через cron или n8n.
import requests
import anthropic
import json
from datetime import datetime, timedelta
DIRECT_TOKEN = "YOUR_DIRECT_TOKEN" # OAuth-токен Яндекс.Директ
CLAUDE_API_KEY = "YOUR_CLAUDE_KEY" # ключ Anthropic API
TELEGRAM_TOKEN = "YOUR_BOT_TOKEN" # токен бота @BotFather
CHAT_ID = "YOUR_CHAT_ID" # ID чата для отчёта
DIRECT_URL = "https://api.direct.yandex.com/json/v5/"
HEADERS = {
"Authorization": f"Bearer {DIRECT_TOKEN}",
"Accept-Language": "ru",
}
def get_campaigns():
"""Получаем все активные кампании."""
payload = {
"method": "get",
"params": {
"SelectionCriteria": {"States": ["ON", "SUSPENDED"]},
"FieldNames": [
"Id", "Name", "Status", "State",
"DailyBudget", "NegativeKeywords"
],
}
}
r = requests.post(DIRECT_URL + "campaigns", headers=HEADERS, json=payload)
r.raise_for_status()
return r.json().get("result", {}).get("Campaigns", [])
def get_stats_report():
"""Статистика по ключам за последние 30 дней через Reports API."""
date_to = datetime.now().strftime("%Y-%m-%d")
date_from = (datetime.now() - timedelta(days=30)).strftime("%Y-%m-%d")
payload = {
"params": {
"SelectionCriteria": {"DateFrom": date_from, "DateTo": date_to},
"Goals": [],
"AttributionModels": ["LC"],
"FieldNames": [
"CampaignName", "CampaignId", "Keyword",
"Cost", "Clicks", "Impressions", "Conversions", "Ctr"
],
"ReportName": f"weekly_audit_{date_from}",
"ReportType": "KEYWORD_PERFORMANCE_REPORT",
"DateRangeType": "CUSTOM_DATE",
"Format": "JSON",
"IncludeVAT": "YES",
"IncludeDiscount": "NO"
}
}
# Reports API может вернуть 201 — отчёт строится, нужно повторить
r = requests.post(DIRECT_URL + "reports", headers=HEADERS, json=payload)
if r.status_code == 201:
import time; time.sleep(5)
r = requests.post(DIRECT_URL + "reports", headers=HEADERS, json=payload)
r.raise_for_status()
return r.json()
def analyze_with_claude(campaigns, stats):
"""Отправляем данные в Claude, получаем отчёт."""
client = anthropic.Anthropic(api_key=CLAUDE_API_KEY)
# Находим проблемы самостоятельно для ускорения
no_minus = [c["Name"] for c in campaigns if not c.get("NegativeKeywords")]
zero_conv = []
for kw in stats.get("data", []):
cost = float(kw.get("Cost", 0))
convs = int(kw.get("Conversions", 0))
if cost > 500 and convs == 0:
zero_conv.append({
"campaign": kw["CampaignName"],
"keyword": kw["Keyword"],
"cost_rub": round(cost / 1_000_000, 2) # Директ хранит в микрорублях
})
prompt = f"""Ты помощник по анализу Яндекс.Директ. Составь еженедельный отчёт.
Данные аудита за последние 30 дней:
1. КАМПАНИИ БЕЗ МИНУС-СЛОВ ({len(no_minus)} шт.):
{json.dumps(no_minus, ensure_ascii=False, indent=2)}
2. КЛЮЧИ С РАСХОДОМ БЕЗ КОНВЕРСИЙ (расход > 500 ₽):
{json.dumps(zero_conv[:20], ensure_ascii=False, indent=2)}
Общее число кампаний: {len(campaigns)}
Ключей с нулевой конверсией: {len(zero_conv)}
Суммарный расход на «пустые» ключи: {sum(k['cost_rub'] for k in zero_conv):.0f} ₽
Напиши отчёт в формате:
- Кратко: 2-3 предложения о состоянии аккаунта
- Топ-3 проблемы с конкретными суммами
- 3 действия на эту неделю (конкретные, с названиями кампаний)
Пиши по-русски, кратко и по делу."""
message = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
messages=[{"role": "user", "content": prompt}]
)
return message.content[0].text
def send_telegram(text):
"""Отправляем отчёт в Telegram."""
requests.post(
f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage",
json={
"chat_id": CHAT_ID,
"text": f"📊 <b>Еженедельный аудит Директа</b>\n\n{text}",
"parse_mode": "HTML"
}
)
if __name__ == "__main__":
print("Собираем данные...")
campaigns = get_campaigns()
stats = get_stats_report()
print(f"Кампаний: {len(campaigns)}, анализируем...")
report = analyze_with_claude(campaigns, stats)
send_telegram(report)
print("Отчёт отправлен в Telegram.")Несколько деталей которые важны:
Директ хранит суммы в микрорублях — нужно делить на 1 000 000. Это нигде не написано крупно в документации, находишь методом проб когда получаешь расход «89 000 000» вместо «89».
Reports API возвращает 201 когда отчёт ещё строится. Скрипт это обрабатывает одним sleep(5), но для больших аккаунтов лучше сделать цикл с тремя попытками.
Токен Директа нужно обновлять через OAuth каждые 90 дней — добавь себе напоминание или автообновление через refresh_token.
Есть вопрос по теме?
Пришлю чеклист аудита рекламных кампаний и разберу ваш кейс
Ручной vs автоматический: разница в цифрах
Сколько теряет твой Директ прямо сейчас
Быстрая диагностика
4 вопроса — оценим объём потерь
Как запустить: 5 шагов
Зайти на dev.ya.ru, создать приложение, указать права доступа к Яндекс.Директ (chargeable). Получить Client ID и Client Secret. Авторизоваться через OAuth-форму и сохранить токен.
dev.ya.ru → Создать приложение → ДиректТри библиотеки: anthropic для работы с Claude API, requests для вызовов Директ API, python-telegram-bot для отправки уведомлений. Python 3.9+.
pip install anthropic requests python-telegram-botНаписать @BotFather, создать бота, получить токен. Отправить ему любое сообщение, затем открыть getUpdates — там будет chat.id твоего аккаунта.
https://api.telegram.org/bot{‘{TOKEN}’}/getUpdatesВставить все четыре токена в константы скрипта. Запустить вручную, убедиться что отчёт пришёл в Telegram. При ошибке 400 от Директ API — проверить права токена (нужны read + chargeable).
python audit_direct.pyНа Linux-сервере — cron каждый понедельник в 9:00. В n8n — Schedule Trigger раз в неделю + Execute Command. На Windows — Task Scheduler. Скрипт работает на любом хостинге с Python.
0 9 * * 1 python /path/to/audit_direct.pyЧто агент не заменит
Честно о границах. Агент хорош для регулярного контроля известных метрик — но есть вещи где он бессилен.
Он не видит стратегические проблемы: неправильно выбранная целевая аудитория, неконкурентное УТП в объявлениях, неправильный выбор типа кампании. Это требует понимания бизнеса, а не анализа цифр.
Он не заменит просмотр реальных поисковых запросов. В Директе есть отчёт «Поисковые запросы» — там видно по каким фразам реально показывались объявления. Там всегда найдётся что-то неожиданное, что никакой автоматизации не поймать без человека.
Он не поможет с посадочными страницами. Высокий CTR при низкой конверсии — это или нецелевой трафик, или проблема с лендингом. Агент зафиксирует симптом, но диагноз нужно ставить руками.
Задача агента другая: убрать рутинный мониторинг с радара и сигнализировать когда что-то пошло не так. Час в неделю который раньше уходил на «посмотреть как дела» — теперь уходит на работу с теми проблемами которые агент нашёл.
Аккаунт с бюджетом 90 000 руб./мес. из кейса выше — первый прогон агента нашёл 4 ключа с суммарным расходом 9 800 рублей и нулевыми конверсиями за 30 дней. Это те самые 11%. Все четыре ключа были отключены в тот же день. Не потому что кто-то умный их нашёл — просто агент посмотрел туда куда человек не успел заглянуть последние три недели.
Есть вопрос по теме?
Пришлю чеклист аудита рекламных кампаний и разберу ваш кейс
Похожие кейсы
Источники
AI-агенты · Персональная карта
4 часа потратил — не работает?
Покажу где ты пошёл не туда и как сделать правильно за 2 недели
Получить разбор бесплатно →AI-агенты · 10 мест
Ты работаешь до полуночи — AI-агент будет работать вместо тебя
Покажу какой агент закроет твою главную операционную боль
Узнать свой маршрут →Есть вопрос по теме?
Пришлю чеклист аудита рекламных кампаний и разберу ваш кейс
Источники
Читайте также
Часто задаваемые вопросы
- Что умеет ИИ-агент для аудита Яндекс.Директ?
- Агент подключается к Яндекс.Директ API v5, собирает данные по кампаниям, объявлениям и ключевым словам. Claude анализирует их по 10 метрикам — ищет кампании без минус-слов, ключи с расходом без конверсий, исчерпанные бюджеты, дублирующиеся ключи. Итоговый отчёт с конкретными рекомендациями приходит в Telegram каждую неделю.
- Сколько стоит запустить агента для аудита Директа?
- Разработка базовой версии — 2–3 часа. Расходы на Claude API для одного еженедельного аудита — 5–15 рублей в зависимости от размера аккаунта. Для сравнения: ручной аудит в агентстве — 8 000–15 000 рублей за разовую работу.
- Какие ошибки в Директе находит ИИ-агент?
- 10 типов ошибок: отсутствие минус-слов, высокий CTR при низкой конверсии, объявления без расширений, дублирующиеся ключи, ключи с расходом и нулевыми конверсиями за 30 дней, завышенные ставки, неактивные кампании, отклонённые объявления при активных кампаниях, исчерпанные дневные лимиты до 14:00.
- Нужно ли уметь программировать для настройки агента?
- Базовый Python — достаточно. Нужно уметь запустить скрипт, установить pip-зависимости и зарегистрировать приложение в Яндекс OAuth. Весь код — в статье. Для автоматического запуска по расписанию понадобится cron на сервере или n8n.
- Как получить доступ к Яндекс.Директ API v5?
- Зарегистрировать приложение на dev.ya.ru, пройти OAuth-авторизацию и получить токен доступа. Для работы с чужими аккаунтами нужен статус рекламного агентства или согласие клиента. Тестовая среда — sandbox.direct.yandex.ru.
- Сколько денег реально находит автоматический аудит?
- В типичном аккаунте МСБ с бюджетом 50 000–200 000 руб./мес. агент находит 8–15% потерянного бюджета. Основные утечки: ключи с расходом без конверсий (обычно 5–10% бюджета) и показы по нецелевым запросам из-за отсутствия минус-слов. В кейсе из статьи — 11% на аккаунте с бюджетом 90 000 руб./мес.
Канал «Лёха Маркетолог»
Практика без воды: кейсы, инсайты, разборы. 1–2 поста в неделю.
Пока без комментариев. Будьте первым.