Автоматический аудит Яндекс Директа: интерактивный HTML-отчёт вместо скучного Excel
Аудит рекламного аккаунта в Яндекс Директе — рутина, которую я делал десятки раз. Выгрузки в Excel, ручные формулы, раскраска ячеек. Отчёт получался на 15 вкладок, которые никто не хотел открывать. Я решил это исправить и написал инструмент, который собирает данные через API, анализирует их и генерирует интерактивный HTML-отчёт — с графиками, KPI-карточками, анализом слива бюджета и готовыми рекомендациями.
Зачем мне это понадобилось
Каждый маркетолог, который ведёт контекстную рекламу, рано или поздно сталкивается с задачей аудита. Новый аккаунт от предыдущего подрядчика, плановая ревизия, запрос от руководства — причины разные, процесс одинаковый. И он тоскливый.
Стандартный сценарий выглядит так: выгружаешь статистику из интерфейса Директа, копируешь в Excel, считаешь CPA и CTR руками, раскрашиваешь плохие кампании красным, хорошие — зелёным. На выходе — файл, который открывается 30 секунд и в котором заказчик не может найти главное.
Я несколько лет делал именно так. А потом решил: хватит. Если я могу описать логику аудита в виде правил — значит, могу и закодить. Причём не в очередную таблицу, а в нормальный интерактивный отчёт, который можно открыть в браузере и сразу увидеть проблемы.
Что умеет инструмент
Результат — Python-скрипт, который подключается к Яндекс Директ API v5, вытягивает все нужные данные и генерирует HTML-файл. Один файл, который открывается в любом браузере. Без серверов, без зависимостей, без «сначала установите Node.js».
Что внутри отчёта:
- KPI-дашборд — ключевые метрики за период одним взглядом
- Помесячная динамика — как менялись расходы, клики, конверсии
- Распределение бюджета по типам кампаний — поиск, РСЯ, ретаргетинг, мастер кампаний
- Эффективность кампаний — с группировкой по типу и сортировкой «худшие первыми»
- Анализ слива бюджета — конкретные суммы, потраченные впустую
- Площадки — хорошие и плохие, с разбивкой по группам
- Устройства — десктоп vs мобайл vs планшеты
- Демография — пол и возраст аудитории
- Рекомендации — сгруппированные по приоритету, с конкретными действиями
Как собираются данные
Яндекс Директ API v5 — штука мощная, но капризная. Данные разбросаны по нескольким сервисам, и для полного аудита нужно обратиться к каждому из них.
Отчёт по статистике
Основной массив данных приходит через сервис Reports. Это аналог того, что вы видите в Мастере отчётов, только через API. Запрос выглядит примерно так:
{
"params": {
"SelectionCriteria": {
"DateFrom": "2025-10-01",
"DateTo": "2026-03-31"
},
"FieldNames": [
"CampaignName", "CampaignId", "CampaignType",
"Impressions", "Clicks", "Cost",
"Conversions", "ConversionRate", "CostPerConversion"
],
"ReportName": "audit_campaigns",
"ReportType": "CAMPAIGN_PERFORMANCE_REPORT",
"DateRangeType": "CUSTOM_DATE",
"Format": "TSV",
"IncludeVAT": "YES"
}
}
Один запрос — и у меня есть статистика по всем кампаниям за полгода. Аналогичные запросы я делаю для ключевых слов, площадок, устройств и демографии. Между запросами — пауза 3 секунды, чтобы не упереться в лимиты API.
Настройки кампаний
Статистика — это полдела. Для аудита нужны ещё и настройки: какая стратегия выбрана, включены ли расширенные площадки, какие корректировки стоят. Это уже сервис Campaigns:
response = client.campaigns.get(
fields=["Id", "Name", "Type", "Status", "Strategy",
"NegativeKeywords", "DailyBudget"],
text_campaign_fields=["BiddingStrategy", "Settings"]
)
Всё это объединяется в единую структуру данных, которая потом прогоняется через анализатор.
Как выглядит HTML-отчёт
Теперь самое интересное — результат. Ниже я покажу демо-версии ключевых блоков отчёта. Данные, разумеется, фиктивные.
KPI-дашборд
Первое, что видит читатель — четыре карточки с ключевыми метриками. Без графиков, без лишнего. Просто цифры, которые сразу дают картину.
Каждая карточка — это div с inline-стилями. Цвет верхней полоски зависит от метрики. Если CPA превышает целевой — полоска красная. Всё считается автоматически.
Таблица эффективности кампаний
Основной рабочий инструмент отчёта. Кампании сгруппированы по типу (Поиск, РСЯ, Ретаргетинг) и отсортированы по расходу — самые затратные сверху. Цветовая индикация показывает проблемы без чтения цифр.
Обратите внимание: строки с проблемами подсвечиваются красным фоном. Индикатор справа — зелёный, жёлтый или красный кружок. Это мгновенная навигация по проблемам. Не нужно всматриваться в цифры — красное видно сразу.
В реальном отчёте таблица интерактивная: можно сортировать по любому столбцу, сворачивать группы и фильтровать только проблемные кампании.
Анализ слива бюджета
Это, пожалуй, самый ценный блок для заказчика. Вместо абстрактного «тут что-то не так» — конкретные суммы и источники потерь.
Этот блок генерируется автоматически. Скрипт проходит по всем кампаниям и ключевым словам, находит «дыры» по чётким правилам:
- Кампании, которые потратили больше N рублей и не принесли ни одной конверсии
- Площадки в РСЯ с аномально высоким CTR, но нулевыми конверсиями (признак бот-трафика)
- Кампании, где CPA превышает целевой в 5 и более раз
- Устройства, на которые тратится бюджет, но конверсий нет
Анализ площадок
Площадки в РСЯ — отдельная головная боль. Их могут быть сотни, и разбирать каждую вручную — занятие для мазохистов. В отчёте площадки автоматически разбиваются на две группы: эффективные и мусорные.
Критерии отнесения площадки к «мусорным»: CTR выше 2% при нулевых конверсиях (вероятный бот-трафик), мобильные приложения с высокими расходами и нулевой отдачей, площадки, где стоимость клика в 3+ раза выше средней по аккаунту.
Статистика по устройствам
Простая, но важная секция. Показывает, как бюджет распределяется между десктопом и мобайлом, и где конверсии стоят дешевле.
В данном примере видно, что планшеты — чёрная дыра. 8% бюджета, CPA в 5 раз выше десктопа. Рекомендация очевидна: снизить корректировку на планшеты до -50% или -100%.
Демография
Разбивка по полу и возрасту помогает понять, кто реально конвертируется, а на кого деньги тратятся впустую.
Здесь сразу видно: ядро конверсий — мужчины 25–44. Сегмент «Не определено» тратит 14% бюджета с CPA в 4 раза выше среднего. Понижающая корректировка на этот сегмент — очевидное решение.
Как генерируются рекомендации
Рекомендации — не просто список проблем. Это структурированные, приоритизированные действия, которые можно брать и выполнять. Логика генерации построена на правилах:
# Пример правила для рекомендаций
if campaign.cost > threshold and campaign.conversions == 0:
recommendations.append({
"priority": "high",
"category": "budget_waste",
"action": f"Остановить кампанию '{campaign.name}' "
f"(потрачено {campaign.cost} руб., 0 конверсий)",
"impact": campaign.cost
})
if device.cpa > target_cpa * 3 and device.conversions < 5:
recommendations.append({
"priority": "medium",
"category": "devices",
"action": f"Снизить ставки на {device.name} (-50%)",
"impact": device.cost * 0.5
})
Каждая рекомендация получает приоритет (высокий, средний, низкий), категорию и оценку потенциальной экономии. В отчёте они группируются и сворачиваются:
Блоки рекомендаций используют стандартный тег <details> — нативный HTML, без JavaScript. Высокий приоритет открыт по умолчанию, остальные свёрнуты. Заказчик сразу видит главное.
Разделы отчёта: подробнее
Помесячная динамика
Графики строятся на Chart.js — библиотека подключается через CDN. Для самодостаточности отчёта я загружаю её inline в base64, чтобы файл работал полностью оффлайн. Динамика показывает три линии: расходы, клики и конверсии — на одном графике с двумя осями Y.
Зачем это нужно: тренд важнее абсолютных чисел. Если расходы растут, а конверсии стоят на месте — это проблема, которая на графике видна за секунду. В таблице — нет.
Распределение бюджета по типам кампаний
Круговая диаграмма (или горизонтальная столбчатая — зависит от количества типов). Стандартный набор: Поиск, РСЯ, Ретаргетинг, Мастер кампаний, Смарт-баннеры. Если 70% бюджета уходит на РСЯ при целях на поиске — это повод для разговора.
Настройки кампаний
Отдельный чек-лист по настройкам: стратегии назначения ставок, дневные бюджеты, минус-слова на уровне аккаунта, расширенный геотаргетинг, показ по дополнительным релевантным фразам. Каждый пункт — зелёная галочка или красный крестик.
Техническая реализация
Весь инструмент — это Python-скрипт с модульной архитектурой:
- api/ — модули для работы с Яндекс Директ API v5 (campaigns, ads, keywords, reports)
- audit/ — логика анализа: сборщик данных, движок чек-листа, анализатор эффективности
- output/ — генераторы отчётов: HTML (основной), а также XLSX, DOCX и JSON для совместимости
Конфигурация — через YAML-файл:
# config.yaml
token: "OAuth y0_..."
client_login: "demo-company"
date_from: "2025-10-01"
date_to: "2026-03-31"
goals:
- id: 123456
name: "Заявка"
- id: 789012
name: "Звонок"
thresholds:
target_cpa: 3000
min_clicks_for_analysis: 100
waste_campaign_min_cost: 10000
Запуск — одна команда:
py run_audit.py --config config.yaml
На выходе — папка с отчётами. HTML-файл весит 200–400 КБ (зависит от количества кампаний) и открывается в любом браузере.
Почему HTML, а не Excel или PDF
Я долго думал над форматом. Excel — привычный, но у него три проблемы:
- Нет интерактивности. Нельзя свернуть блок, нельзя сделать всплывающую подсказку, нельзя отфильтровать одной кнопкой.
- Тяжело визуализировать. Графики в Excel можно сделать, но они выглядят как из 2005 года. А условное форматирование ячеек — это компромисс, а не решение.
- Неудобно шарить. Чтобы открыть Excel, нужен Excel. HTML открывается в браузере на любом устройстве — включая телефон.
PDF решает проблему шаринга, но убивает интерактивность. HTML — золотая середина. Один файл, ноль зависимостей, работает оффлайн, выглядит как настоящий дашборд.
Что это даёт на практике
Раньше полный аудит рекламного аккаунта с 20–30 кампаниями занимал у меня 4–6 часов. Большая часть времени — не анализ, а рутина: выгрузка данных, форматирование таблиц, раскраска ячеек, написание текстовых комментариев.
Сейчас:
- Сбор данных: 2–3 минуты (ограничен скоростью API)
- Генерация отчёта: 5–10 секунд
- Мой анализ: 30–60 минут на проверку выводов и дополнение рекомендаций контекстом
Итого: час вместо шести. При этом качество выросло — скрипт не пропускает мелочи, которые я мог проглядеть при ручном аудите. Он проверяет каждую кампанию, каждую площадку, каждый сегмент аудитории.
Инструмент не заменяет маркетолога. Он заменяет рутину. Интерпретация данных, приоритизация рекомендаций с учётом бизнес-контекста, разговор с заказчиком — это по-прежнему ручная работа. Но она занимает 20% времени вместо 100%.
Честно про рекламу и маркетинг
Разбираю реальные кейсы, делюсь цифрами и инструментами в Telegram-канале. Без воды и мотивационных цитат.
Подписаться на каналЧто можно улучшить
Инструмент уже работает и используется, но идеи для развития есть:
- Сравнение периодов. Сейчас отчёт строится за один период. Логично добавить сравнение «до/после» — чтобы видеть эффект внедрённых рекомендаций.
- Интеграция с Метрикой. Данные по конверсиям из Директа — это не всегда полная картина. Подтягивание данных из Метрики даст более точные CPA.
- Автоматические скриншоты. Puppeteer или Playwright могут сделать скриншот HTML-отчёта — для вставки в презентацию или отправки в чат.
- Шаблоны рекомендаций. Сейчас тексты рекомендаций генерируются по шаблонам. Можно подключить LLM для более естественных формулировок.
Я собрал шаблоны, которые использую в работе: медиаплан, учёт рабочего времени, аналитические отчёты. Скачайте бесплатно на странице шаблонов.
Выводы
Автоматический аудит Яндекс Директа с HTML-отчётом — это не про замену маркетолога. Это про то, чтобы тратить время на анализ и принятие решений, а не на форматирование таблиц.
Что я вынес из этого проекта:
- API v5 Яндекс Директа достаточно для полного аудита. Все нужные данные доступны: статистика, настройки кампаний, ключевые слова, площадки, устройства, демография.
- HTML — лучший формат для аналитических отчётов. Интерактивность, визуализация, работа на любом устройстве — ни Excel, ни PDF этого не дают.
- Правила аудита формализуемы. Если вы можете объяснить стажёру, что проверять — вы можете это запрограммировать. Порог CPA, минимум конверсий для оценки, признаки бот-трафика — всё это конкретные условия.
- Автоматизация рутины освобождает время для экспертизы. Час на аудит вместо шести — и больше внимания тому, что действительно важно: контекст бизнеса, стратегия, коммуникация с заказчиком.
Если вы маркетолог и тоже устали от ручных аудитов — попробуйте автоматизировать хотя бы сбор данных. Это первый шаг, который уже сэкономит половину времени.