Пошаговые инструкции advanced 26 мин

Как сделать ИИ-агента для рекламы и performance-кампаний

Пошаговая инструкция от нуля до рабочего агента для performance-рекламы: отчеты, CPA, ROAS, tracking QA, аномалии, approval и guardrails.

AI-агенты performance-реклама Google Ads Яндекс Директ Meta Ads CPA ROAS минус-слова

Что получится в результате

Соберем ИИ-агента для performance-рекламы, который каждый день забирает данные из рекламных кабинетов, проверяет трекинг, считает CPA, ROAS и отклонения, находит аномалии, готовит рекомендации, предлагает минус-слова, создает черновики изменений и отправляет рискованные действия на согласование.

Первая рабочая версия будет делать так:

  1. рекламные аккаунты хранятся в `ad_accounts`;
  2. структура кампаний пишется в `campaign_catalog`;
  3. сырые отчеты сохраняются в `raw_ad_reports`;
  4. нормализованные метрики пишутся в `performance_daily`;
  5. данные посадочных страниц пишутся в `landing_pages`;
  6. UTM и конверсии проверяются в `tracking_checks`;
  7. цели и KPI лежат в `kpi_targets`;
  8. правила аномалий лежат в `anomaly_rules`;
  9. найденные проблемы пишутся в `anomaly_log`;
  10. search terms и минус-слова пишутся в `search_term_review`;
  11. усталость креативов пишется в `creative_fatigue`;
  12. качество лидов из CRM пишется в `lead_quality_feedback`;
  13. рекомендации агента попадают в `recommendation_queue`;
  14. черновики изменений пишутся в `change_requests`;
  15. бюджетные лимиты хранятся в `budget_guardrails`;
  16. спорные действия уходят в `approval_queue`;
  17. одобренные изменения попадают в `change_execution_queue`;
  18. эксперименты пишутся в `experiment_log`;
  19. все действия фиксируются в `audit_log`;
  20. ошибки попадают в `error_log`;
  21. weekly report показывает расходы, эффективность, риски и выполненные изменения.

В первой версии агент не должен сам менять бюджеты, ставки, стратегии, статусы кампаний, объявления, аудитории и минус-слова. Он читает данные, объясняет проблему, готовит черновик и ждет подтверждения маркетолога.

Что понадобится

  • n8n Cloud или self-hosted n8n.
  • Google Sheets для управляющих таблиц.
  • Один рекламный кабинет для MVP: Google Ads, Яндекс Директ или Meta Ads.
  • Доступ к аналитике: GA4, Метрика, CRM или ecommerce data.
  • CRM-данные по качеству лидов, если реклама ведет в заявки.
  • Канал approval: Telegram, Slack, email или задача.
  • API-ключ LLM-провайдера.
  • 30-90 дней исторических рекламных данных.
  • Правила: какие изменения можно предлагать, какие требуют approval, какие запрещены.

Шаг 1. Выберите один рекламный сценарий

Не начинайте с агента, который “оптимизирует весь кабинет”. Для MVP нужен один безопасный процесс.

Хорошие варианты:

  1. ежедневный отчет по расходам и CPA;
  2. поиск кампаний с резким ростом CPA;
  3. проверка UTM и конверсий;
  4. предложения минус-слов по search terms;
  5. анализ креативной усталости;
  6. поиск кампаний без конверсий;
  7. контроль дневных лимитов бюджета;
  8. сверка рекламных лидов с CRM-качеством.

Самый безопасный старт - read-only агент, который делает daily performance review без внесения правок.

Проверка: сценарий можно описать одной фразой, например: `каждое утро найти кампании с ростом CPA и подготовить рекомендации`.

Шаг 2. Определите запрещенные действия

В performance-рекламе ошибка быстро превращается в деньги.

В первой версии запрещено:

  • увеличивать бюджет;
  • снижать бюджет;
  • менять ставки;
  • менять стратегию;
  • останавливать кампанию;
  • включать кампанию;
  • менять аудитории;
  • менять объявления;
  • добавлять минус-слова;
  • запускать experiment;
  • удалять ключевые слова;
  • менять tracking tags.

Разрешено:

  • читать отчеты;
  • считать метрики;
  • искать аномалии;
  • готовить рекомендации;
  • создавать черновики изменений;
  • отправлять approval;
  • писать задачи маркетологу.

Проверка: у агента нет write-доступа к рекламному кабинету на первом запуске.

Шаг 3. Создайте таблицу проекта

Создайте Google Sheet:

Performance ads agent

Добавьте листы:

settings
ad_accounts
campaign_catalog
raw_ad_reports
performance_daily
landing_pages
tracking_checks
kpi_targets
anomaly_rules
anomaly_log
search_term_review
creative_fatigue
lead_quality_feedback
recommendation_queue
change_requests
budget_guardrails
approval_queue
change_execution_queue
experiment_log
audit_log
weekly_report
error_log

Проверка: n8n может читать и писать во все листы.

Шаг 4. Заполните settings

В `settings` добавьте колонки:

key
value
description
updated_at

Заполните минимум:

default_currency | RUB | валюта отчетов
lookback_days | 30 | период сравнения
min_clicks_for_decision | 100 | минимум кликов для рекомендации
min_conversions_for_cpa | 5 | минимум конверсий для CPA-вывода
auto_apply_changes | false | автоприменение выключено
approval_channel | telegram | куда отправлять согласования
max_daily_budget_change_pct | 10 | максимальная правка бюджета после approval
brand_campaign_protected | true | брендовые кампании не трогать

Проверка: автоприменение выключено, лимиты есть.

Шаг 5. Настройте ad_accounts

В `ad_accounts` храните подключенные кабинеты.

Колонки:

account_id
platform
account_name
external_account_id
currency
timezone
owner_email
access_mode
status
created_at

`platform`:

google_ads
yandex_direct
meta_ads
vk_ads
mytarget

`access_mode`:

read_only
draft_changes
write_with_approval

Проверка: первый аккаунт имеет `access_mode = read_only`.

Шаг 6. Загрузите campaign_catalog

В `campaign_catalog` добавьте колонки:

campaign_key
account_id
platform
campaign_id
campaign_name
campaign_type
status
objective
budget_daily
bid_strategy
is_brand
landing_url
owner_email
updated_at

Нормализуйте названия типов:

search
display
shopping
pmax
social
retargeting
brand
unknown

Проверка: все активные кампании кабинета есть в каталоге.

Шаг 7. Сохраняйте raw_ad_reports

Сырые отчеты нужны для повторной проверки.

В `raw_ad_reports` добавьте колонки:

raw_report_id
account_id
platform
report_type
date_from
date_to
payload_json
fetched_at

Правило:

raw_ad_reports не редактируется агентом, только дописывается

Проверка: можно открыть исходный API-ответ, если расчет метрик ошибся.

Шаг 8. Запишите performance_daily

В `performance_daily` добавьте колонки:

date
account_id
platform
campaign_id
ad_group_id
ad_id
keyword_or_audience
spend
impressions
clicks
ctr
cpc
conversions
conversion_rate
cpa
revenue
roas
created_at

Формулы:

ctr = clicks / impressions
cpc = spend / clicks
conversion_rate = conversions / clicks
cpa = spend / conversions
roas = revenue / spend

Если делитель равен нулю, пишите `null`, а не 0.

Проверка: CPA не считается для кампании без конверсий.

Шаг 9. Подключите первый API-отчет

В n8n создайте workflow:

Ads daily import

Цепочка:

  1. Cron Trigger каждый день утром;
  2. прочитать активные `ad_accounts`;
  3. забрать campaign structure;
  4. записать `campaign_catalog`;
  5. забрать performance report за вчера;
  6. записать `raw_ad_reports`;
  7. нормализовать метрики;
  8. записать `performance_daily`;
  9. записать действия в `audit_log`.

Проверка: после одного запуска есть вчерашние расходы и конверсии по кампаниям.

Шаг 10. Настройте landing_pages

Рекламная проблема часто живет не в кампании, а на странице.

В `landing_pages` добавьте колонки:

landing_id
campaign_id
landing_url
status_code
load_time_ms
has_utm
has_conversion_tag
page_title
last_checked_at

Проверки:

  1. страница открывается;
  2. status code 200;
  3. не редиректит на ошибку;
  4. UTM сохраняется;
  5. форма работает;
  6. conversion tag есть;
  7. загрузка не слишком медленная.

Проверка: сломанная посадочная не воспринимается как “плохая кампания”.

Шаг 11. Настройте tracking_checks

В `tracking_checks` добавьте колонки:

check_id
date
account_id
campaign_id
check_type
status
details
severity
owner_email
created_at

`check_type`:

utm_missing
conversion_drop
analytics_mismatch
crm_mismatch
landing_error
tag_missing
currency_mismatch
attribution_window_mismatch

Проверка: если конверсии пропали из-за тега, агент не предлагает резать бюджет.

Шаг 12. Опишите kpi_targets

В `kpi_targets` добавьте колонки:

target_id
campaign_type
campaign_id
metric
target_value
warning_value
critical_value
period
owner_email
is_active

Примеры:

KPI-001 | search | any | cpa | 2500 | 3200 | 4500 | 7d | marketer@company.ru
KPI-002 | ecommerce | any | roas | 4.0 | 3.0 | 2.0 | 7d | marketer@company.ru
KPI-003 | social | any | ctr | 1.2 | 0.8 | 0.5 | 7d | marketer@company.ru

Проверка: агент сравнивает кампанию с бизнес-целью, а не с абстрактной “нормой”.

Шаг 13. Опишите anomaly_rules

В `anomaly_rules` добавьте колонки:

rule_id
metric
condition
threshold
min_volume
severity
recommended_action
is_active
updated_at

Примеры:

AR-001 | spend | yesterday > avg_7d * 1.5 | 50% | spend > 3000 | high | проверить бюджет и strategy
AR-002 | cpa | last_3d > avg_14d * 1.4 | 40% | conversions >= 5 | high | проверить search terms и landing
AR-003 | conversions | yesterday = 0 | 100% | clicks >= 100 | critical | проверить tracking и landing
AR-004 | ctr | last_7d < avg_30d * 0.7 | -30% | impressions >= 1000 | medium | проверить креативы
AR-005 | roas | last_7d < target | target | spend >= 5000 | high | проверить revenue и кампанию

Проверка: у каждой аномалии есть минимум объема, чтобы не реагировать на шум.

Шаг 14. Запишите anomaly_log

В `anomaly_log` добавьте колонки:

anomaly_id
date
account_id
campaign_id
rule_id
metric
current_value
baseline_value
severity
evidence
status
created_at

Статусы:

new
confirmed
ignored
waiting_action
resolved
false_positive

Проверка: рост CPA на малом объеме не попадает как critical.

Шаг 15. Добавьте LLM-объяснение аномалии

LLM не должен принимать решение вместо правил. Он объясняет данные.

Prompt:

Ты performance-маркетолог.
Используй только переданные метрики, KPI, tracking checks и anomaly log.
Не выдумывай причины.
Разделяй факт, гипотезу и действие.
Верни JSON:
{
  "summary": "до 600 символов",
  "facts": ["факт"],
  "hypotheses": ["гипотеза"],
  "recommended_checks": ["что проверить"],
  "recommended_actions": ["черновик действия"],
  "risk_level": "low|medium|high|critical",
  "needs_approval": true
}

Проверка: в ответе нет “точно причина в креативе”, если данных о креативе нет.

Шаг 16. Настройте search_term_review

Для поисковой рекламы агент может предлагать минус-слова.

В `search_term_review` добавьте колонки:

search_term_id
date
account_id
campaign_id
ad_group_id
search_term
spend
clicks
conversions
cpa
relevance
negative_keyword_suggestion
match_type
evidence
status
created_at

`relevance`:

relevant
maybe
irrelevant
brand_protected
competitor
unknown

Правила:

  1. минус-слово не применять автоматически;
  2. brand terms не трогать без отдельного правила;
  3. competitor terms отправлять в manual review;
  4. low volume не минусовать сразу;
  5. показывать примеры запросов.

Проверка: полезный спрос не отрезается из-за поспешного минус-слова.

Шаг 17. Настройте creative_fatigue

В `creative_fatigue` добавьте колонки:

creative_id
account_id
campaign_id
ad_id
creative_name
impressions_7d
ctr_7d
ctr_30d
cpa_7d
cpa_30d
fatigue_score
recommendation
created_at

Простой fatigue score:

fatigue_score = 0
+ 30 если ctr_7d ниже ctr_30d на 30%
+ 30 если cpa_7d выше cpa_30d на 30%
+ 20 если impressions_7d высокие
+ 20 если frequency высокая

Проверка: агент предлагает обновить креатив только при достаточном объеме.

Шаг 18. Добавьте lead_quality_feedback

Если реклама ведет в заявки, одного CPA мало.

В `lead_quality_feedback` добавьте колонки:

date
campaign_id
utm_campaign
leads_total
qualified_leads
spam_leads
deals_created
won_revenue
avg_lead_score
crm_notes
created_at

Правила:

  1. дешевый лид со spam rate 80% не считать хорошим;
  2. дорогой лид с высоким close rate не резать автоматически;
  3. кампанию оценивать вместе с CRM-качеством;
  4. если CRM data missing, recommendation требует проверки.

Проверка: рекомендации учитывают качество заявок, а не только цену клика.

Шаг 19. Сформируйте recommendation_queue

В `recommendation_queue` добавьте колонки:

recommendation_id
date
account_id
campaign_id
recommendation_type
summary
evidence
expected_impact
risk_level
owner_email
status
created_at

`recommendation_type`:

check_tracking
check_landing
review_search_terms
add_negative_keyword
refresh_creative
reduce_budget_request
increase_budget_request
pause_campaign_request
crm_quality_check
experiment_request

Проверка: каждая рекомендация имеет evidence и владельца.

Шаг 20. Создайте change_requests

В `change_requests` храните только черновики правок.

Колонки:

change_request_id
recommendation_id
account_id
campaign_id
change_type
payload_json
approval_required
risk_level
status
created_at

`change_type`:

add_negative_keyword
budget_change
bid_change
pause_campaign
enable_campaign
creative_update
audience_change
experiment_create

Проверка: агент не меняет кабинет напрямую, а готовит понятный request.

Шаг 21. Опишите budget_guardrails

В `budget_guardrails` добавьте колонки:

guardrail_id
account_id
campaign_id
rule
limit_value
action
owner_email
is_active

Примеры:

BG-001 | any | any | max_daily_budget_change_pct | 10 | require_approval | marketer@company.ru
BG-002 | any | brand | no_budget_decrease | true | block | marketer@company.ru
BG-003 | any | any | max_daily_spend | 50000 | block | marketer@company.ru
BG-004 | any | any | min_conversions_for_budget_increase | 10 | require_approval | marketer@company.ru

Проверка: даже approved request не проходит, если нарушает жесткий guardrail.

Шаг 22. Настройте approval_queue

В `approval_queue` добавьте колонки:

approval_id
object_type
object_id
reason
preview
approver_email
status
created_at
decided_at

`object_type`:

change_request
negative_keyword
budget_change
pause_campaign
creative_update
experiment

Статусы:

pending
approved
rejected
needs_edit
expired

Проверка: любое действие с деньгами требует approval.

Шаг 23. Сделайте Telegram approval

В n8n создайте workflow:

Ads approval

Цепочка:

  1. взять `approval_queue` со статусом `pending`;
  2. отправить preview в Telegram;
  3. добавить кнопки `Approve`, `Needs edit`, `Reject`;
  4. обновить статус;
  5. записать решение в `audit_log`;
  6. только после approve отправить request в `change_execution_queue`.

Сообщение:

Нужно согласовать изменение рекламы
Кампания: Search NonBrand
Тип: add_negative_keyword
Причина: 43 клика, 0 конверсий, нерелевантный запрос

Preview: добавить минус-слово "бесплатно"

[Approve] [Needs edit] [Reject]

Проверка: без approve изменение не попадает в execution.

Шаг 24. Настройте change_execution_queue

В `change_execution_queue` добавьте колонки:

execution_id
change_request_id
account_id
platform
api_method
payload_json
status
created_at
processed_at
error_message

Статусы:

ready
blocked_by_guardrail
sent
applied
failed
manual_required
rolled_back

Правило:

перед API-вызовом еще раз проверить budget_guardrails и статус approval

Проверка: случайный ручной запуск workflow не применяет неутвержденную правку.

Шаг 25. Ведите experiment_log

Не смешивайте эксперименты с постоянными изменениями.

В `experiment_log` добавьте колонки:

experiment_id
campaign_id
hypothesis
change_request_id
metric_primary
metric_secondary
start_date
end_date
status
result_summary
created_at

Статусы:

planned
running
stopped
won
lost
inconclusive

Проверка: каждое изменение можно отличить от эксперимента и оценить после периода.

Шаг 26. Настройте audit_log

В `audit_log` добавьте колонки:

audit_id
actor
action
object_type
object_id
before_json
after_json
created_at

Логируйте:

  1. импорт отчетов;
  2. расчет метрик;
  3. tracking check;
  4. anomaly detection;
  5. рекомендацию;
  6. change request;
  7. approval;
  8. guardrail block;
  9. API execution;
  10. rollback;
  11. ошибку API.

Проверка: по любому изменению видно, кто его одобрил и на каких данных.

Шаг 27. Настройте error_log

В `error_log` добавьте колонки:

error_id
account_id
campaign_id
workflow_name
node_name
error_type
error_message
payload_snapshot
status
owner_email
created_at

Типы ошибок:

ads_api_failed
report_empty
currency_mismatch
tracking_data_missing
llm_invalid_json
approval_timeout
guardrail_blocked
execution_failed
crm_quality_missing

Проверка: если рекламный API не отдал данные, агент не делает вывод “все хорошо”.

Шаг 28. Соберите weekly_report

В `weekly_report` добавьте колонки:

week_start
spend_total
conversions_total
cpa_avg
revenue_total
roas_avg
anomalies_count
critical_anomalies
recommendations_created
changes_approved
changes_applied
guardrail_blocks
tracking_errors
top_wasted_spend
created_at

Минимальный отчет:

  1. общий расход;
  2. конверсии;
  3. CPA;
  4. ROAS;
  5. рост или падение к прошлой неделе;
  6. критичные аномалии;
  7. рекомендации;
  8. одобренные изменения;
  9. заблокированные guardrails;
  10. проблемы трекинга.

Проверка: руководитель видит, где деньги, где риск и что уже сделано.

Шаг 29. Протестируйте на 30 днях данных

Возьмите исторический период и прогоните агента без write-доступа.

Проверьте:

  1. данные импортируются в `performance_daily`;
  2. CPA и ROAS считаются корректно;
  3. tracking errors не превращаются в budget recommendation;
  4. аномалии требуют минимальный объем;
  5. brand campaigns защищены;
  6. минус-слова не применяются автоматически;
  7. изменения создаются как `change_requests`;
  8. approval блокирует execution;
  9. guardrails блокируют опасные правки;
  10. CRM-quality влияет на рекомендации;
  11. ошибки пишутся в `error_log`.

Проверка: минимум 80% рекомендаций должны быть понятными маркетологу и не требовать переписывания с нуля.

Минимальная проверка результата

MVP готов, если:

  • аккаунты описаны в `ad_accounts`;
  • кампании пишутся в `campaign_catalog`;
  • сырые отчеты есть в `raw_ad_reports`;
  • метрики пишутся в `performance_daily`;
  • посадочные проверяются в `landing_pages`;
  • tracking QA пишется в `tracking_checks`;
  • KPI есть в `kpi_targets`;
  • правила аномалий есть в `anomaly_rules`;
  • проблемы пишутся в `anomaly_log`;
  • search terms пишутся в `search_term_review`;
  • creative fatigue пишется в `creative_fatigue`;
  • CRM-quality пишется в `lead_quality_feedback`;
  • рекомендации пишутся в `recommendation_queue`;
  • изменения пишутся в `change_requests`;
  • budget guardrails работают;
  • approval блокирует правки;
  • execution queue принимает только approved changes;
  • эксперименты пишутся в `experiment_log`;
  • audit и error logs заполнены;
  • weekly report показывает эффективность.

Перед живым запуском пройдите чек-лист:

  1. Подключите один рекламный аккаунт read-only.
  2. Загрузите 30 дней отчетов.
  3. Проверьте 5 кампаний в `campaign_catalog`.
  4. Проверьте CPA и ROAS вручную.
  5. Создайте одну tracking error ситуацию.
  6. Создайте одну аномалию CPA.
  7. Создайте один search term candidate.
  8. Отклоните change request через approval.
  9. Одобрите тестовый безопасный request.
  10. Проверьте, что guardrail может заблокировать опасное изменение.

Что нельзя автоматизировать в первой версии

  • изменение бюджета без approval;
  • изменение ставок без approval;
  • смену стратегии;
  • остановку кампаний;
  • включение кампаний;
  • массовое добавление минус-слов;
  • правку объявлений;
  • запуск experiments;
  • изменение tracking tags;
  • выводы по CPA без достаточного объема;
  • резку бюджета при сломанном трекинге;
  • правки brand campaigns без отдельного правила.

Частые вопросы

Может ли агент сам менять ставки и бюджеты?

Для первой версии нет. Пусть агент готовит change request с evidence, а маркетолог подтверждает. Автоматизацию можно добавлять позже только с лимитами, guardrails, audit log и быстрым rollback.

Что подключить первым?

Подключите площадку с самым большим бюджетом, но начните с отчетности и tracking checks. Управление кампаниями добавляйте после того, как рекомендации стабильно полезны.

Как агент помогает с минус-словами?

Он анализирует search terms, показывает расход, клики, конверсии, примеры нерелевантных запросов и предлагает candidate negative keywords. Применение должно идти через approval.

Почему нельзя оптимизировать только по CPA?

CPA не показывает качество лидов, revenue, маржу, возвраты и LTV. Дешевые заявки могут быть мусором, а дорогие могут давать сделки. Поэтому нужны CRM-quality и ROAS.

Какие метрики смотреть каждый день?

Spend, conversions, CPA, ROAS, CTR, CPC, conversion rate, search terms, кампании без конверсий, tracking errors, landing errors, budget limits и качество лидов в CRM.

Дальше по теме

Похожие материалы