Что получится в результате
Соберем ИИ-агента для performance-рекламы, который каждый день забирает данные из рекламных кабинетов, проверяет трекинг, считает CPA, ROAS и отклонения, находит аномалии, готовит рекомендации, предлагает минус-слова, создает черновики изменений и отправляет рискованные действия на согласование.
Первая рабочая версия будет делать так:
- рекламные аккаунты хранятся в `ad_accounts`;
- структура кампаний пишется в `campaign_catalog`;
- сырые отчеты сохраняются в `raw_ad_reports`;
- нормализованные метрики пишутся в `performance_daily`;
- данные посадочных страниц пишутся в `landing_pages`;
- UTM и конверсии проверяются в `tracking_checks`;
- цели и KPI лежат в `kpi_targets`;
- правила аномалий лежат в `anomaly_rules`;
- найденные проблемы пишутся в `anomaly_log`;
- search terms и минус-слова пишутся в `search_term_review`;
- усталость креативов пишется в `creative_fatigue`;
- качество лидов из CRM пишется в `lead_quality_feedback`;
- рекомендации агента попадают в `recommendation_queue`;
- черновики изменений пишутся в `change_requests`;
- бюджетные лимиты хранятся в `budget_guardrails`;
- спорные действия уходят в `approval_queue`;
- одобренные изменения попадают в `change_execution_queue`;
- эксперименты пишутся в `experiment_log`;
- все действия фиксируются в `audit_log`;
- ошибки попадают в `error_log`;
- 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 нужен один безопасный процесс.
Хорошие варианты:
- ежедневный отчет по расходам и CPA;
- поиск кампаний с резким ростом CPA;
- проверка UTM и конверсий;
- предложения минус-слов по search terms;
- анализ креативной усталости;
- поиск кампаний без конверсий;
- контроль дневных лимитов бюджета;
- сверка рекламных лидов с 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
Цепочка:
- Cron Trigger каждый день утром;
- прочитать активные `ad_accounts`;
- забрать campaign structure;
- записать `campaign_catalog`;
- забрать performance report за вчера;
- записать `raw_ad_reports`;
- нормализовать метрики;
- записать `performance_daily`;
- записать действия в `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
Проверки:
- страница открывается;
- status code 200;
- не редиректит на ошибку;
- UTM сохраняется;
- форма работает;
- conversion tag есть;
- загрузка не слишком медленная.
Проверка: сломанная посадочная не воспринимается как “плохая кампания”.
Шаг 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
Правила:
- минус-слово не применять автоматически;
- brand terms не трогать без отдельного правила;
- competitor terms отправлять в manual review;
- low volume не минусовать сразу;
- показывать примеры запросов.
Проверка: полезный спрос не отрезается из-за поспешного минус-слова.
Шаг 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
Правила:
- дешевый лид со spam rate 80% не считать хорошим;
- дорогой лид с высоким close rate не резать автоматически;
- кампанию оценивать вместе с CRM-качеством;
- если 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
Цепочка:
- взять `approval_queue` со статусом `pending`;
- отправить preview в Telegram;
- добавить кнопки `Approve`, `Needs edit`, `Reject`;
- обновить статус;
- записать решение в `audit_log`;
- только после 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
Логируйте:
- импорт отчетов;
- расчет метрик;
- tracking check;
- anomaly detection;
- рекомендацию;
- change request;
- approval;
- guardrail block;
- API execution;
- rollback;
- ошибку 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
Минимальный отчет:
- общий расход;
- конверсии;
- CPA;
- ROAS;
- рост или падение к прошлой неделе;
- критичные аномалии;
- рекомендации;
- одобренные изменения;
- заблокированные guardrails;
- проблемы трекинга.
Проверка: руководитель видит, где деньги, где риск и что уже сделано.
Шаг 29. Протестируйте на 30 днях данных
Возьмите исторический период и прогоните агента без write-доступа.
Проверьте:
- данные импортируются в `performance_daily`;
- CPA и ROAS считаются корректно;
- tracking errors не превращаются в budget recommendation;
- аномалии требуют минимальный объем;
- brand campaigns защищены;
- минус-слова не применяются автоматически;
- изменения создаются как `change_requests`;
- approval блокирует execution;
- guardrails блокируют опасные правки;
- CRM-quality влияет на рекомендации;
- ошибки пишутся в `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 показывает эффективность.
Перед живым запуском пройдите чек-лист:
- Подключите один рекламный аккаунт read-only.
- Загрузите 30 дней отчетов.
- Проверьте 5 кампаний в `campaign_catalog`.
- Проверьте CPA и ROAS вручную.
- Создайте одну tracking error ситуацию.
- Создайте одну аномалию CPA.
- Создайте один search term candidate.
- Отклоните change request через approval.
- Одобрите тестовый безопасный request.
- Проверьте, что 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.