Урок 10.4 · Модуль 10 · Чтобы тебя находили: контент, реклама, продажи

AI в рекламе — тексты объявлений, A/B-тесты и отчёты по кампаниям

Строитель65 минОбновлено: октябрь 2026
41 из 53 в основном курсе

Время: ~25 мин теории + 40 мин практики


Суть урока

Рекламный копирайтер работает 8 часов, пишет 5 вариантов объявления, устаёт и уходит домой. Claude пишет 50 вариантов за несколько минут, разбирает результаты тестов и помогает понять, что работает лучше.

Это не просто быстрее. Это другая игра: больше проверок → больше данных → лучше реклама → часто ниже цена клика.

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

🎨 Образ: раньше рекламное агентство было как ресторан с одним поваром: медленно и дорого. Claude плюс твои данные — как экспериментальная кухня: 50 рецептов за минуту, пробуешь, какой вкуснее, и готовишь больше победителя. И кухня работает ночью, пока повар спит.


Ключевые концепции

  • Тексты объявлений с Claude — 50 вариантов заголовков одной командой
  • Реклама Meta (Facebook и Instagram) — тексты и картинки с помощью AI
  • Адаптивные объявления Google Ads (по-английски RSA) — ты даёшь набор заголовков, Google сам их комбинирует; Claude помогает написать заголовки
  • A/B-тест — показываешь разным людям два или несколько вариантов и сравниваешь результат. Главные показатели: CTR (доля показов, после которых кликнули), CPC (цена клика), CPL (цена одной заявки), CVR (доля кликов, которые стали заявками). Claude считает и помогает выбрать победителя
  • Performance Max — кампании Google, которые сами выбирают, где показывать рекламу; Claude помогает подготовить для них материалы
  • Adspirer MCP — управление рекламными кабинетами прямо из Claude (MCP — способ подключать к Claude внешние сервисы)
  • Автоматические отчёты — данные → разбор → конкретные рекомендации

Теория

Рекламные тексты: 50 вариантов за 3 минуты

Хорошая реклама начинается с проверки. Чтобы проверять, нужно много вариантов. Раньше это стоило много времени и денег. Теперь намного меньше.

python
import anthropic
import json


def text_of(response) -> str:
    """Собирает текст ответа: у новых моделей перед текстом могут идти блоки «размышления»."""
    return "".join(block.text for block in response.content if block.type == "text")


def generate_ad_variants(
    product: str,
    target_audience: str,
    key_benefit: str,
    platform: str,
    count: int = 10
) -> list:
    """Генерирует варианты рекламных текстов"""

    client = anthropic.Anthropic()

    # Рекомендуемая длина текстов по справке Meta и Google Ads на октябрь 2026.
    # Она меняется: перед запуском сверь со справкой площадок
    platform_specs = {
        "facebook": {
            "headline_chars": 27,       # заголовок в ленте Facebook
            "primary_text_chars": 150,  # основной текст: Meta советует 50-150 знаков
        },
        "google_rsa": {
            "headline_chars": 30,
            "description_chars": 90,
            "headline_count": 15
        },
        "instagram": {
            "caption_chars": 2200,
            "first_line_chars": 125  # видно без "ещё"
        }
    }

    specs = platform_specs.get(platform, platform_specs["facebook"])

    response = client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=8000,  # с запасом: «размышления» модели тоже входят в этот лимит
        messages=[{
            "role": "user",
            "content": f"""Создай {count} вариантов рекламы для {platform}.

Продукт: {product}
Целевая аудитория: {target_audience}
Главная выгода: {key_benefit}
Ограничения площадки: {json.dumps(specs, ensure_ascii=False)}

Для каждого варианта используй разный подход:
- Эмоциональный (страх упустить)
- Рациональный (цифры и факты)
- Социальное доказательство (отзывы, клиенты)
- Любопытство (вопрос или неожиданный факт)
- Прямой (выгода в лоб)

Используй только то, что правда об этом продукте. Не выдумывай цифры, отзывы и число клиентов.

Верни только JSON-массив, без пояснений и без тройных обратных кавычек вокруг:
[
  {{
    "variant_id": 1,
    "approach": "название подхода",
    "headline": "заголовок",
    "primary_text": "основной текст",
    "cta": "призыв к действию",
    "target_emotion": "какую эмоцию вызывает",
    "hypothesis": "почему должно сработать"
  }}
]"""
        }]
    )

    return json.loads(text_of(response))


# Пример: продукт выдуман
variants = generate_ad_variants(
    product="Онлайн-курс Excel для финансистов",
    target_audience="Бухгалтеры и финансисты 25-45 лет, тратят 2-3 часа на отчёты",
    key_benefit="Сократить время на отчёты с 3 часов до 20 минут",
    platform="facebook",
    count=10
)

for v in variants[:3]:
    print(f"\n--- Вариант {v['variant_id']}: {v['approach']} ---")
    print(f"Заголовок: {v['headline']}")
    print(f"Текст: {v['primary_text']}")
    print(f"CTA: {v['cta']}")

⚠️ Каждое утверждение в рекламе должно быть правдой. Законы о рекламе и защите прав потребителей касаются любой рекламы, в том числе написанной AI: никаких выдуманных отзывов и числа клиентов, никаких результатов, которые ты не можешь подтвердить. Проверь правила своей страны (в США, например, за этим следит Федеральная торговая комиссия, FTC). У каждой площадки (Google, Meta, LinkedIn, TikTok) ещё и свои правила рекламы, с особыми требованиями к чувствительным темам: жильё, работа, кредиты, здоровье. AI пишет черновик, а за то, что ушло в показ, отвечаешь ты. Если сомневаешься в формулировке, прочитай правила площадки или спроси юриста.

Реклама Meta: тексты и картинки

Meta — рекламный кабинет сразу для Facebook и Instagram. Claude помогает с текстами, а картинки делает в паре с генераторами изображений.

Как собрать рекламу:

Код
1. Claude → 10 вариантов текстов
2. Flux / Midjourney / генератор картинок в ChatGPT → картинка под каждый текст
3. Запуск A/B-теста (по 5 вариантов)
4. 3-5 дней → собираем данные
5. Claude → разбирает результаты
6. Увеличиваем показы победителя
python
def create_meta_campaign_brief(
    product: str,
    budget_daily: float,
    target_audience_description: str
) -> str:
    client = anthropic.Anthropic()

    response = client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=8000,
        messages=[{
            "role": "user",
            "content": f"""Составь подробный план рекламной кампании в Meta Ads.

Продукт: {product}
Дневной бюджет: ${budget_daily}
Аудитория: {target_audience_description}

Включи:
1. **Структура кампании**: сколько групп объявлений и по какой логике
2. **Аудитория**: интересы, возраст, география
3. **Похожие аудитории (lookalike)**: на основе каких клиентов их строить
4. **Форматы**: какие форматы рекламы использовать и почему
5. **Бюджет**: как распределить между группами
6. **Показатели успеха (KPI)**: цена клика (CPC), доля кликов (CTR), цена заявки (CPL)
7. **План проверок**: что тестируем в первую очередь

Пиши конкретно: цифры, проценты, рекомендации."""
        }]
    )

    return text_of(response)

🎨 Образ: раньше медиапланер был отдельным специалистом и работал с 9 до 18. Claude делает черновик плана за секунды, даже в 3 часа ночи перед запуском. Решение по бюджету всё равно принимает человек.

Адаптивное поисковое объявление Google (RSA, Responsive Search Ad): ты даёшь до 15 заголовков и до 4 описаний, Google сам их комбинирует. Claude помогает написать 15 заголовков, которые хорошо работают в любых сочетаниях.

python
def generate_google_rsa(
    product: str,
    landing_page_theme: str,
    keywords: list[str]
) -> dict:
    client = anthropic.Anthropic()

    response = client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=8000,
        messages=[{
            "role": "user",
            "content": f"""Создай адаптивное поисковое объявление (RSA) для Google Ads.

Продукт: {product}
Тема посадочной страницы: {landing_page_theme}
Ключевые слова: {', '.join(keywords)}

Требования:
- 15 заголовков, каждый до 30 символов
- 4 описания, каждое до 90 символов
- Заголовки должны хорошо работать в любых сочетаниях
- Ключевые слова в 3-4 заголовках (не во всех!)
- Разнообразие: выгоды, действия, отличия от других, срочность

Верни только JSON, без пояснений и без тройных обратных кавычек вокруг:
{{
    "headlines": ["заголовок 1", ... "заголовок 15"],
    "descriptions": ["описание 1", ... "описание 4"],
    "pinning_recommendations": {{
        "headline_position_1": "какой заголовок закрепить на 1 позиции",
        "reason": "почему"
    }}
}}"""
        }]
    )

    return json.loads(text_of(response))


# Пример для юридической фирмы
rsa = generate_google_rsa(
    product="Юридические услуги по недвижимости",
    landing_page_theme="Оформление купли-продажи квартиры быстро и безопасно",
    keywords=["юрист недвижимость", "оформление сделки", "купля продажа квартира"]
)

print("Заголовки:")
for i, h in enumerate(rsa["headlines"], 1):
    chars = len(h)
    status = "✅" if chars <= 30 else "⚠️"
    print(f"{i}. {status} {h} ({chars} симв)")

LinkedIn и TikTok: тот же подход

Функции выше не привязаны к Meta и Google. Реклама в LinkedIn обычно нужна тем, кто продаёт бизнесу: там можно выбрать аудиторию по должности, отрасли и размеру компании, поэтому текст обращается к роли («для HR-менеджеров средних компаний»), а не к интересу. В TikTok объявление — это короткое вертикальное видео, поэтому «текст» от Claude — это в основном сценарий первых секунд и подпись. Чтобы добавить любую из этих площадок, допиши в platform_specs новую запись с актуальными ограничениями из справки самой площадки (они меняются, поэтому не бери цифры из старых статей) и запусти те же generate_ad_variants() и analyze_ab_test().

A/B-тест: Claude разбирает, кто победил

Результаты тестов часто выглядят запутанно. У одного варианта доля кликов (CTR) выше, но и клик дороже (CPC). Заявок меньше, но они дешевле. Claude помогает распутать это за секунды. Проценты он посчитает, а вывод о том, хватает ли данных, проверяй сам: на десятках заявок случайность легко принять за победу.

python
def analyze_ab_test(test_results: list[dict]) -> dict:
    """
    test_results: список словарей с результатами каждого варианта
    Пример: [{"variant": "A", "impressions": 5000, "clicks": 150, "conversions": 12, "spend": 200}]
    """
    client = anthropic.Anthropic()

    # Добавляем вычисленные показатели
    for r in test_results:
        r["ctr"] = round(r["clicks"] / r["impressions"] * 100, 2)
        r["cpc"] = round(r["spend"] / r["clicks"], 2) if r["clicks"] > 0 else 0
        r["cpl"] = round(r["spend"] / r["conversions"], 2) if r["conversions"] > 0 else 0
        r["cvr"] = round(r["conversions"] / r["clicks"] * 100, 2) if r["clicks"] > 0 else 0

    response = client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=8000,
        messages=[{
            "role": "user",
            "content": f"""Разбери результаты A/B-теста рекламы и дай рекомендации.

Результаты:
{json.dumps(test_results, ensure_ascii=False, indent=2)}

Нужно:
1. **Победитель**: какой вариант лучше и ПОЧЕМУ (учти все показатели)
2. **Статистическая значимость**: хватает ли данных для уверенного вывода
3. **Выводы**: что результаты говорят об аудитории
4. **Следующий шаг**: что тестировать дальше
5. **Масштаб**: насколько увеличить бюджет победителя

Будь конкретен: называй цифры, проценты."""
        }]
    )

    return {
        "raw_results": test_results,
        "analysis": text_of(response)
    }


# Тест на выдуманных данных
results = [
    {"variant": "A — Страх (потеря)", "impressions": 10000, "clicks": 180, "conversions": 9, "spend": 350},
    {"variant": "B — Выгода (экономия)", "impressions": 10000, "clicks": 220, "conversions": 18, "spend": 350},
    {"variant": "C — Социальное доказательство", "impressions": 10000, "clicks": 195, "conversions": 14, "spend": 350}
]

analysis = analyze_ab_test(results)
print(analysis["analysis"])
# Пример ответа на эти данные:
# Победитель: B — CTR 2.2%, CPL $19.4, CVR 8.2%
# Вариант A проигрывает несмотря на интригующий заголовок
# Рекомендация: данных мало (9 и 18 конверсий), продолжить тест и поднимать бюджет B постепенно

Performance Max: Claude помогает с группами ресурсов

Performance Max (PMax) — кампании Google, которые сами выбирают, где показывать рекламу: в поиске, на YouTube, в Gmail, на сайтах-партнёрах (Display), в Discover и на Картах. Качество материалов (в интерфейсе их называют ресурсами, по-английски assets) здесь решает многое. Для поисковых кампаний у Google есть ещё AI Max: на октябрь 2026 AI-функции встроены в сами кампании, поэтому названия и настройки сверяй со справкой Google Ads.

python
def create_pmax_assets(
    product: str,
    key_benefits: list[str],
    audience_persona: str
) -> dict:
    client = anthropic.Anthropic()

    response = client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=8000,
        messages=[{
            "role": "user",
            "content": f"""Создай все нужные материалы (ресурсы) для кампании Performance Max.

Продукт: {product}
Главные выгоды: {', '.join(key_benefits)}
Портрет аудитории: {audience_persona}

Верни только JSON, без пояснений и без тройных обратных кавычек вокруг:
{{
    "headlines": ["5 заголовков до 30 символов, хотя бы один до 15 символов"],
    "long_headlines": ["5 длинных заголовков до 90 символов"],
    "descriptions": ["5 описаний до 90 символов"],
    "business_name": "название компании (до 25 символов)",
    "call_to_actions": ["список из 5 призывов к действию"],
    "image_prompts": ["5 промптов для генерации изображений через Midjourney/Flux"],
    "audience_signals": {{
        "interests": ["интересы для сигналов аудитории"],
        "custom_intent_keywords": ["ключевые слова, по которым видно намерение купить"],
        "remarketing_segments": ["группы для повторного показа тем, кто уже был на сайте"]
    }}
}}"""
        }]
    )

    return json.loads(text_of(response))

Adspirer MCP: управление рекламой прямо из Claude

Adspirer — сторонний сервис для рекламных кабинетов, который подключается к Claude через MCP. Он ставится как плагин в Claude Code и Cowork (о них в модуле 12) и на октябрь 2026 работает с Google Ads, Meta Ads и рядом других площадок. Claude видит настоящие данные кампаний и даёт советы по фактам, а не по догадкам. Сервис умеет и создавать кампании, поэтому прочитай его условия, посмотри, какой доступ к кабинетам он просит, и оставляй запуск рекламы и изменение бюджета за собой: Claude готовит, ты подтверждаешь.

Код
# В Claude Code с подключённым Adspirer MCP:

"Покажи кампании с CTR ниже 1% за последние 7 дней"
→ Claude видит данные → выдаёт список с рекомендациями

"Какие ключевые слова тратят деньги без заявок?"
→ Claude разбирает → список на паузу

"Сделай отчёт об окупаемости (ROI) всех кампаний за месяц"
→ Claude готовит → сравнение, выводы, рекомендации

Автоматические отчёты: данные → выводы

python
def generate_weekly_ad_report(campaigns_data: dict) -> str:
    client = anthropic.Anthropic()

    response = client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=8000,
        messages=[{
            "role": "user",
            "content": f"""Составь еженедельный отчёт по рекламным кампаниям.

Данные:
{json.dumps(campaigns_data, ensure_ascii=False, indent=2)}

Формат отчёта:
## Итоги недели
[3-4 ключевые цифры]

## Что работает
[3 самых удачных пункта с цифрами]

## Что не работает
[3 главные проблемы с цифрами]

## Действия на следующую неделю
[5 конкретных шагов с ожидаемым эффектом]

## Бюджет
[рекомендации по перераспределению]

Пиши как аналитик: конкретно, с цифрами, без воды. Бери цифры только из данных."""
        }]
    )

    return text_of(response)

Практика

Задача: создать 10 вариантов рекламного текста и разобрать тест

Без программирования. Скопируй текст запроса из функции create_ad_batch() ниже, подставь данные своего продукта и отправь в чат Claude. Для части 2 вставь в чат таблицу с результатами теста и попроси разобрать её по пяти пунктам из analyze_ab_test().

С кодом. Нужны Python, библиотека anthropic (pip install anthropic) и ключ API Anthropic в переменной окружения ANTHROPIC_API_KEY. Ключ создаётся в Claude Console (platform.claude.com) и оплачивается по токенам отдельно от подписки.

Часть 1: Генерация вариантов (15 минут)

python
# ad_generator.py

import anthropic
import json

client = anthropic.Anthropic()


def text_of(response) -> str:
    """Собирает текст ответа без блоков «размышления»."""
    return "".join(block.text for block in response.content if block.type == "text")


def create_ad_batch(product_info: dict) -> list:
    """Создаёт пачку рекламных объявлений для теста"""

    response = client.messages.create(
        model="claude-sonnet-5-5",
        max_tokens=8000,
        messages=[{
            "role": "user",
            "content": f"""Создай 10 вариантов рекламных объявлений для Facebook.

ПРОДУКТ: {product_info['name']}
ОПИСАНИЕ: {product_info['description']}
ЦЕНА: {product_info['price']}
АУДИТОРИЯ: {product_info['audience']}
ГЛАВНАЯ ВЫГОДА: {product_info['main_benefit']}
БОЛЬ АУДИТОРИИ: {product_info['pain_point']}

Создай по 2 варианта для каждого подхода:
1. Страх потери ("если не сделаешь X, то потеряешь Y")
2. Выгода ("получи X и сэкономь Y")
3. Социальное доказательство ("1000 клиентов уже...")
4. Любопытство ("Знаете ли вы, что...")
5. Прямое предложение ("Купить X за Y прямо сейчас")

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

Верни только JSON, без пояснений и без тройных обратных кавычек вокруг:
[{{
    "id": 1,
    "approach": "название",
    "headline": "до 27 символов",
    "text": "до 150 символов",
    "cta": "кнопка",
    "image_direction": "что должно быть на картинке"
}}]"""
        }]
    )

    return json.loads(text_of(response))

# Подставь свой продукт (ниже выдуманный пример)
my_product = {
    "name": "Онлайн-школа делового английского для IT-специалистов",
    "description": "Английский для работы в американских командах за 3 месяца",
    "price": "$99 в месяц",
    "audience": "Разработчики и IT-специалисты 25-40 лет, для которых английский не родной",
    "main_benefit": "Уверенно чувствовать себя на собеседованиях и встречах команды",
    "pain_point": "Знаю технический английский, но теряюсь на быстрых созвонах с носителями языка"
}

ads = create_ad_batch(my_product)

print("=== СГЕНЕРИРОВАННЫЕ ОБЪЯВЛЕНИЯ ===\n")
for ad in ads:
    print(f"#{ad['id']} — {ad['approach']}")
    print(f"Заголовок: {ad['headline']}")
    print(f"Текст: {ad['text']}")
    print(f"CTA: {ad['cta']}")
    print(f"Картинка: {ad['image_direction']}")
    print()

Часть 2: Разбор результатов теста (25 минут)

После запуска теста вводим данные и получаем разбор. Скопируй в тот же файл функцию analyze_ab_test() из теории.

python
# После 5 дней теста подставь свои данные (числа ниже выдуманы для примера)
test_data = [
    {"id": 1, "approach": "Страх потери", "impressions": 8500, "clicks": 102, "conversions": 4, "spend": 180},
    {"id": 2, "approach": "Страх потери 2", "impressions": 8200, "clicks": 115, "conversions": 5, "spend": 175},
    {"id": 3, "approach": "Выгода", "impressions": 8800, "clicks": 185, "conversions": 12, "spend": 182},
    {"id": 4, "approach": "Выгода 2", "impressions": 8600, "clicks": 172, "conversions": 10, "spend": 178},
    {"id": 5, "approach": "Соц.доказательство", "impressions": 8300, "clicks": 166, "conversions": 11, "spend": 176},
    {"id": 6, "approach": "Соц.доказательство 2", "impressions": 8700, "clicks": 143, "conversions": 8, "spend": 181},
    {"id": 7, "approach": "Любопытство", "impressions": 9100, "clicks": 228, "conversions": 7, "spend": 185},
    {"id": 8, "approach": "Любопытство 2", "impressions": 8900, "clicks": 214, "conversions": 6, "spend": 183},
    {"id": 9, "approach": "Прямое предложение", "impressions": 8400, "clicks": 126, "conversions": 9, "spend": 177},
    {"id": 10, "approach": "Прямое предложение 2", "impressions": 8600, "clicks": 138, "conversions": 8, "spend": 179}
]

analysis = analyze_ab_test(test_data)
print(analysis["analysis"])

Инструменты и ресурсы

  • Meta Business Suite и Ads Manager — business.facebook.com (кабинет для запуска рекламы в Facebook и Instagram)
  • Google Ads — ads.google.com
  • Adspirer MCP — сторонний сервис для разбора рекламы через Claude
  • Flux — bfl.ai, сайт Black Forest Labs (картинки для рекламы по текстовому описанию)
  • Meta Ad Library (библиотека рекламы) — facebook.com/ads/library (посмотреть рекламу конкурентов)
  • Google Keyword Planner — планировщик ключевых слов
  • Anthropic SDK — чтобы встроить Claude в свои рекламные процессы; названия моделей в коде даны на октябрь 2026, актуальные цены и версии: Актуальное сейчас

Ключевые выводы

Реклама — это всегда проверка. Кто проверяет больше вариантов, тот быстрее учится. Claude делает проверку дешёвой: 50 вариантов вместо 5, за минуты вместо дней.

Разбор данных часто становится узким местом в небольших рекламных командах. Claude снимает эту нагрузку: видит все показатели сразу, не теряется в таблицах, даёт конкретный вывод с обоснованием.

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


Следующий урок

→ AI в продажах — отбор заявок, повторные письма, ответы на возражения

Отметка хранится только в этом браузере и никуда не отправляется. Мой прогресс