Гайд · 10 минут чтения

Яндекс Директ через Claude Code: как я настраиваю рекламу сам

Директ я настраиваю сам с 2013 года. Один раз, в 2018-м, отдал его профессиональному директологу за 60 000 ₽. Он не привёл ни одного клиента и не сделал ничего такого, чего я не мог бы сделать сам. Больше я рекламу никому не отдавал.

Сейчас настраиваю с помощью Claude Code, и это часы, а не недели. Пишу задачу обычным русским языком, Claude пишет скрипты, скрипты собирают кампании через API Директа. Кампании создаются на паузе, я их проверяю глазами и только потом включаю.

Ниже весь процесс: какие данные собрать, три промпта целиком (копируешь и подставляешь своё), что проверить до первого рубля и где машина ошибается. Раздел про ошибки, по-моему, самый полезный — он весь из моих собственных граблей.

Что внутри

Зачем делать самому

С директологом у меня было так же, как с любым подрядчиком. Он настраивает кампанию, не зная бизнеса изнутри. Ты пишешь ТЗ, объясняешь специфику, ждёшь версию, правишь, и так кругов десять. Сроки срываются, причём не по твоей вине. А потом выясняется, что гипотеза, которую ты хотел проверить, вообще была нерабочая. Неделями ждал ответа на вопрос, который стоил пару дней.

С Claude Code у меня проверка гипотезы теперь занимает пару дней: несколько часов на сборку, остальное время кампания крутится и собирает цифры. Сэкономленная оплата директолога тут мелочь. Главное — сколько идей успеваешь проверить за сезон, пока подрядчик согласовывал бы первую.

Но есть обратная сторона, и о ней честно. Нейросеть не знает твой бизнес лучше тебя. Кто-то всё равно должен думать, кому и что ты продаёшь. Если этим «кем-то» будешь ты, машина закроет всю рутину. Если нет, она соберёт ровно такую же среднюю кампанию, как подрядчик, только быстрее.

Шаг 0. Сначала почини аналитику, потом лей бюджет

Когда говорят «Директ не работает», чаще всего сломан вовсе не Директ. Сломана Метрика, которая не видит заявки.

Мой пример. В мае 2026-го я смотрел отчёт по Кайтеку: месяц рекламы, сотни кликов, и ноль конверсий по целям. Выглядело как чистый слив. На деле заявки были, просто люди писали в Telegram в личку, а цели в Метрике на этом не срабатывали. Директ считал, что заявок нет, и стратегия училась вслепую. Деньги работали, а алгоритм думал, что они уходят в пустоту, и крутил ставки наугад.

До этого была ещё одна дыра. Счётчик Метрики на сайте грузился только после того, как человек нажмёт «Принять» в баннере про cookie. Кто баннер закрыл или не заметил, для Метрики не существовал. Симптом был такой: в Директе 50 кликов, в Метрике 5 визитов. Починилось одной правкой: счётчик теперь грузится сразу у всех, а за баннером остался только рекламный пиксель.

И третья история, уже летняя. В кабинете Директа за июль стояло 575 конверсий. Реальных обращений было 16-19. Разница взялась из двух служебных целей «Просмотр сайта (для ретаргета)»: они срабатывали на каждом визите, а Директ складывал их в общую колонку вместе с заявками. Красивый CPA в интерфейсе оказался пересчитанными визитами.

Отсюда три проверки, без которых я бюджет не включаю:

  1. Счётчик Метрики грузится сразу, без ожидания согласия на cookie.
  2. Цель стратегии срабатывает на реальном контакте с клиентом: отправка формы, клик по телефону, клик в мессенджер, если заявки идут туда. Сделай тестовую заявку сам и проверь, что цель её поймала.
  3. У цели есть ценность в рублях, хотя бы условная. Служебные цели вроде «посмотрел страницу» в стратегию не ставятся и в отчёт о заявках не попадают.

Шаг 1. Что собрать до промпта

Claude не угадает твой бизнес, данные ему нужно отдать. Вот что я готовлю заранее, обычно на это уходит вечер:

Про минус-слова один пример, чтобы было понятно масштаб. Я выгрузил из Wordstat топ-30 запросов со словом «кайт». Примерно 25 из них не имели к кайтсёрфингу никакого отношения: татарские песни (по-татарски «кайтам» значит «возвращаюсь»), аниме 1998 года, столы с таким названием. Без минус-слов реклама школы показывалась бы любителям татарской эстрады.

Минус-слова я раскладываю по категориям, и они подходят почти любой нише:

Шаг 2. Промпт на проверку аналитики

Его я гоняю до запуска и потом раз в пару недель. Он ничего не меняет в кабинете, только читает и докладывает. Для Claude Code это безопасный первый шаг: заодно проверишь, что токен работает.

Промпт: проверка аналитики
Ты эксперт по API Яндекс Директа v5 и API Яндекс Метрики.
Напиши скрипт diag_campaigns.py на Python stdlib (urllib, json, csv, без pip).
Токены читай из файла .env в корне проекта: YANDEX_DIRECT_TOKEN, YANDEX_DIRECT_LOGIN,
YANDEX_METRIKA_TOKEN.

Скрипт только читает данные и ничего не меняет в кабинете.

Проверь и выведи отчёт по каждой кампании:
1. Статус кампании (ACCEPTED, DRAFT, SUSPENDED).
2. Стратегию и GoalId. Сверь GoalId с целями счётчика Метрики [ID счётчика]:
   существует ли такая цель, как она называется, есть ли у неё ценность.
3. Стоит ли у кампании ADD_METRICA_TAG = YES.
4. Показы, клики и расход за последние 3 дня. Ноль показов пометь красным флагом.
5. Audience targets: состояние ON или нет, ставка не ниже 20 рублей.

Отдельным блоком выведи все цели счётчика Метрики и число их достижений за 30 дней.
Пометь цели, которые похожи на служебные (просмотр страницы, посещение сайта,
любой визит): если они попадают в стратегию или в колонку конверсий, это ошибка.

Отдельно сравни клики Директа и визиты Метрики из Директа за 7 дней.
Если визитов меньше половины от кликов, напиши: проверь, грузится ли счётчик
без согласия на cookie.

В конце дай список проблем по приоритету, человеческим языком, без кода.
Все запросы к Директу: POST, тело {"method": "get", "params": {...}},
заголовки Authorization: Bearer, Client-Login, Accept-Language: ru.

Шаг 3. Основной промпт: кампании целиком

Это адаптированная версия промпта, которым я собирал рекламу Кайтека весной 2026-го. Два места я поправил по итогам своих же ошибок, они отмечены в тексте: автотаргетинг и выбор цели. Заполни блок «ТВОИ ДАННЫЕ» и отдай Claude Code целиком. Работает и в ChatGPT, и в Gemini, но проверял я на Claude.

Промпт: кампании целиком
Ты эксперт по API Яндекс Директа v5 и Яндекс Метрике.
Создай комплект Python-скриптов для запуска рекламы с нуля.
Только Python stdlib (urllib, json, csv), без pip.
Токены читай из файла .env в корне проекта.

=====================================
ТВОИ ДАННЫЕ (заменить на реальные)
=====================================

YANDEX_DIRECT_TOKEN=   # OAuth-токен, лежит в .env
YANDEX_DIRECT_LOGIN=   # логин рекламного аккаунта

БИЗНЕС:
  Название:             [название]
  Продукт/услуга:       [что продаёшь и от какой цены]
  Посадочная страница:  [URL]
  Регион бизнеса:       [город, область]

МЕТРИКА:
  Счётчик ID:           [ID]
  Цель для стратегии:   [ID цели, которая срабатывает на реальном контакте:
                         форма, звонок или мессенджер, если заявки идут туда]
  Ценность цели:        [например 500 руб]

ДИРЕКТ:
  CPA цель:             [сколько готов платить за заявку]
  Недельный бюджет РСЯ: [сумма]
  Потолок ставки РСЯ:   [руб за клик]

ГЕО (ID регионов Яндекса, tech.yandex.ru/regions):
  Поиск:                [список ID, свой город и регион обязательно]
  РСЯ:                  [те же или шире]

КОНКУРЕНТЫ (сайты для таргетинга «Интересы и привычки»):
  [список сайтов]

БОЛЬ И ОТЛИЧИЕ (для текстов объявлений):
  Боль клиента:         [что его не устраивает сейчас]
  Чем мы лучше:         [конкретно, с цифрами]

МИНУС-СЛОВА:
  Чужие темы:           [...]
  Чужое гео:            [...]
  Покупной мусор:       [...]
  Инфо-мусор:           [...]

=====================================
ЧТО СОЗДАТЬ
=====================================

1. setup_campaigns.py: 4 кампании.
   - search: поиск, холодный трафик. AVERAGE_CPA на цель из данных, CPA из данных.
     Сеть SERVING_OFF.
   - search_rt: поиск, ретаргет. AVERAGE_CPA, CPA на 20% ниже. Сеть SERVING_OFF.
   - rsya_rt: РСЯ, ретаргет. WB_MAXIMUM_CONVERSION_RATE, WeeklySpendLimit
     и BidCeiling из данных. Поиск SERVING_OFF.
   - rsya_konkurenti: РСЯ, аудитория конкурентов. Та же стратегия и бюджет.
   Для всех: ADD_METRICA_TAG = YES, AttributionModel = AUTO,
   NegativeKeywords из данных, статус SUSPENDED (на паузе, я проверю сам).

2. setup_groups.py: группы объявлений.
   - Для поиска автотаргетинг только в категории EXACT (Целевые),
     остальные NO. API не даёт выключить все категории сразу.
     Технически: keyword с именем ---autotargeting, AutotargetingCategories
     при update передаётся массивом напрямую, НЕ как {"Items": [...]}.
   - Для rsya_konkurenti одна группа. Таргетинг «Интересы и привычки»
     по сайтам конкурентов через API не создаётся. После запуска выведи
     инструкцию: «Директ → кампания [ID] → группа [ID] → Интересы и привычки
     → вставь сайты конкурентов».

3. setup_ads.py: 5 объявлений на кампанию.
   Title до 56 символов, Title2 до 30, Text до 81. Проверяй длину до отправки.
   Углы: вопрос под запрос с ценой; доверие (годы, число клиентов);
   конкретный оффер с ценой; боль и решение; формат и условия.
   Для search_rt добавь напоминание, что человек уже был на сайте.
   Не выдумывай цифры, которых нет в данных.

4. setup_retargeting.py: ретаргет-лист и audience targets.
   Структура ретаргет-листа:
   {"Rules": [{"Arguments": [{"ExternalId": "<ID цели>", "Operator": "ANY"}],
               "MembershipLifeSpan": 540}]}
   Частые ошибки: Goals вместо Arguments, MetrikaGoalId вместо ExternalId,
   Type вместо Operator, OR вместо ANY. Не повторяй их.
   Ставка audience targets не ниже 20 рублей (20 000 000 в микрорублях),
   при копеечной ставке алгоритм не покупает показы.

5. report_search_queries.py: поисковые запросы за последние 3 дня
   (SEARCH_QUERY_PERFORMANCE_REPORT: Query, Impressions, Clicks, Cost,
   Conversions). Раздели на подозрительные (кандидаты в минус-слова)
   и нормальные, топ-10 по показам.

=====================================
ПРИНЦИПЫ, КОТОРЫЕ НЕЛЬЗЯ НАРУШАТЬ
=====================================

- Стратегия учится только на цели с реальным контактом и ценностью.
  Служебные цели (просмотр страницы, визит) в стратегию не ставить.
- На старте не использовать PAY_FOR_CONVERSION: ей нужно 10+ конверсий
  в неделю, на старте их нет.
- Все кампании создаются на паузе.
- Все запросы: POST, тело {"method": "get/add/update/delete", "params": {...}},
  заголовки Authorization: Bearer, Client-Login, Accept-Language: ru,
  Content-Type: application/json; charset=utf-8.

В конце напиши порядок запуска скриптов и что сделать руками в интерфейсе.

Что получится на выходе

Claude Code отдаёт папку со скриптами и порядок запуска: кампании, группы, объявления, ретаргет. Всё создаётся на паузе. Дальше руками в интерфейсе Директа:

  1. Добавить «Интересы и привычки» с сайтами конкурентов в группу rsya_konkurenti.
  2. Прочитать все объявления глазами. Каждое. Вслух, если надо.
  3. Проверить гео и расписание показов (об этом в чек-листе).
  4. Прогнать diag_campaigns.py из шага 2.
  5. Только после этого снять кампании с паузы.

Первая версия скриптов вполне может упасть с ошибкой API. У меня так было с ретаргет-листом: пять полей назывались не так, как подсказывает здравый смысл, поэтому их правильные имена теперь прямо в промпте. Это нормально. Копируешь Claude ответ сервера целиком, он чинит, и на это уходят минуты вместо недели переписки с подрядчиком.

Шаг 4. Чистка запросов раз в 3 дня

После запуска самая полезная рутина: смотреть, по каким запросам тебя реально показывали. Я настроил так, что сводка раз в три дня приходит мне в Telegram, и я за пять минут решаю, что добавить в минус-слова.

Промпт: чистка запросов
Возьми report_search_queries.py из этого проекта и доработай:
1. Сравни каждый запрос с моими минус-словами и темой бизнеса [тема].
   Отметь запросы про чужие бренды, чужие города, покупку б/у, вакансии,
   информационные «что такое».
2. Для каждого подозрительного запроса предложи минус-слово
   и объясни в одну строку, почему.
3. Ничего не добавляй в кампании сам. Выведи список, я подтвержу.
4. Отправь сводку в Telegram через Bot API (TELEGRAM_BOT_TOKEN
   и TELEGRAM_CHAT_ID из .env). Формат: топ-10 запросов по расходу,
   потом кандидаты в минус-слова.
5. Напиши строку для cron, чтобы запуск был раз в 3 дня в 09:00 по Москве.

Пункт 3 там стоит не для красоты. Минус-слово, добавленное машиной без проверки, может отрезать нормальный целевой запрос, и ты об этом не узнаешь.

Чек-лист перед запуском бюджета

Аналитика

  1. Счётчик Метрики грузится сразу, без ожидания cookie-согласия
  2. Тестовая заявка поймана целью, цель видна в Метрике
  3. У цели стратегии есть ценность, это не служебная цель «просмотр»
  4. ADD_METRICA_TAG = YES во всех кампаниях
  5. diag_campaigns.py не показывает красных флагов

Таргетинг

  1. Свой город и регион явно прописаны в гео каждой кампании
  2. Расписание показов совпадает с часами, когда ты реально отвечаешь клиентам (в интерфейсе: параметры кампании → время показа)
  3. Минус-слова внесены до запуска, по всем четырём категориям
  4. Автотаргетинг только «Целевые»
  5. «Интересы и привычки» добавлены руками, если используешь аудиторию конкурентов
  6. Ставки audience targets не ниже 20 ₽

Деньги

  1. Первый бюджет тестовый: 5-10 тысяч ₽ на 2 недели. Это проверка гипотезы, масштабировать рано
  2. Заранее решено, что считаешь провалом: CTR ниже 1%, ноль заявок на сотню кликов, цена заявки в разы выше плановой

Где оно врёт и где нужен человек

Claude пишет скрипты быстро и уверенно. Уверенность не равна правоте. Вот что я поймал на своих кампаниях.

Бонус: два вывода, которые я не ожидал

Денег часто хватает, не хватает трафика. В июле по Кайтеку недельные лимиты кампаний выбирались на 3-20%. Бюджет поднимать было бессмысленно: все фразы в поиске были намертво привязаны к двум названиям мест, и ни одной широкой фразы в кампании не стояло. Показывать было просто не по чему. Прежде чем добавлять деньги, проверь, выбирается ли уже выделенный лимит.

Поиск и РСЯ по-разному превращают клики в людей. У меня на поиске примерно каждый восьмой клик становился обращением, в РСЯ примерно каждый шестидесятый. Разница в семь раз. Смотреть на цену клика отдельно от этого бессмысленно: дешёвый клик в РСЯ может стоить дороже в пересчёте на живого человека.

Что дальше

Разобрать твою рекламу и аналитику вживую: бесплатный аудит, 30 минут. Смотрим, где теряются заявки, и что чинить первым.

Записаться →

Если хочешь собрать всё на своих кампаниях вместе со мной, есть менторство 1-на-1: 72 000 ₽ в месяц.

Подробнее →

Разборы вроде этого и то, что я на этой неделе собрал сам вместо подрядчика, публикую в Telegram @MWBclub.

Подписаться на @MWBclub →

Читай также

Связаться по делу

Заявка прилетит мне и в Telegram, и на почту. Отвечу в течение рабочего дня.

Куда удобнее ответить?
или сразу написать в Telegram →

Нажимая кнопку, даёте согласие на обработку персональных данных (оператор № 23-25-044738).