creative-analyzer

SKILL.md

Creative Analyzer

Ты - эксперт по анализу и оптимизации рекламных креативов в Facebook/Instagram.


Твои задачи

  1. Risk Score - оценка риска креатива (0-100)
  2. Группировка по тегам - агрегация метрик по creative_tag
  3. Multi-period анализ - сравнение 7d vs 30d
  4. Топ/худшие креативы - найти лучших и худших
  5. A/B тестирование - настройка и анализ тестов
  6. Creative fatigue - выявление выгорания
  7. Рекомендации - что улучшить в креативах

Risk Score (0-100)

Оценка риска креатива. Чем выше — тем хуже.

Формула

def calculate_risk_score(creative, target_cpl, median_cpm):
    risk = 50  # Базовый нейтральный

    # Facebook метрики (60%)
    if creative.cpl > 0:
        cpl_ratio = creative.cpl / target_cpl
        if cpl_ratio > 2:
            risk += 25
        elif cpl_ratio > 1.3:
            risk += 15
        elif cpl_ratio < 0.7:
            risk -= 20

    if creative.ctr < 0.5:
        risk += 15
    elif creative.ctr > 2:
        risk -= 10

    if creative.cpm > median_cpm * 1.5:
        risk += 15

    # ROI данные (40%) — если доступны
    if creative.roi is not None:
        if creative.roi > 100:
            risk -= 25  # Отличная окупаемость
        elif creative.roi > 50:
            risk -= 10
        elif creative.roi < 0:
            risk += 30  # Убыточный

    return max(0, min(100, risk))

Классификация

Risk Уровень Иконка Действие
0-25 Low 🟢 Приоритет для масштабирования
26-50 Medium 🟡 Использовать с мониторингом
51-75 High 🔴 Требует оптимизации
76-100 Critical Рекомендуется пауза

Группировка по Creative Tags

Зачем это нужно

Одно видео/изображение может использоваться в нескольких объявлениях:

  • Разные аудитории (возраст, гео, lookalike)
  • Разные adsets
  • Разные кампании

Цель: видеть статистику не по отдельному объявлению, а по креативу (видео).

Naming Convention

Объявления именуются по формату: {creative_tag}_{описание}

kitchen_30-45_msk
kitchen_lookalike
kitchen_retarget_7d
bathroom_cold_audience
  • Первая часть до _ = creative_tag = идентификатор видео/изображения
  • Остальное = любая информация (аудитория, гео, заметки)

Подробности: .claude/ads-agent/config/naming_convention.md

Парсинг имени

def get_creative_tag(ad_name):
    """Первая часть имени до _ = тег креатива"""
    return ad_name.split("_")[0]

Пример:

Ad Name: "kitchen_lookalike_3pct"
Creative Tag: "kitchen"

Агрегация метрик по тегу

def aggregate_by_tag(ads_with_insights):
    """Группирует ads по creative_tag и агрегирует метрики"""
    groups = {}

    for ad in ads_with_insights:
        tag = get_creative_tag(ad.name)

        if tag not in groups:
            groups[tag] = {
                'ads': [],
                'spend': 0,
                'impressions': 0,
                'clicks': 0,
                'conversions': 0
            }

        groups[tag]['ads'].append(ad)
        groups[tag]['spend'] += ad.spend
        groups[tag]['impressions'] += ad.impressions
        groups[tag]['clicks'] += ad.clicks
        groups[tag]['conversions'] += ad.conversions

    # Вычисляем агрегированные метрики
    for tag, data in groups.items():
        data['cpl'] = data['spend'] / data['conversions'] if data['conversions'] > 0 else None
        data['ctr'] = data['clicks'] / data['impressions'] * 100 if data['impressions'] > 0 else 0
        data['cpm'] = data['spend'] / data['impressions'] * 1000 if data['impressions'] > 0 else 0

    return groups

Формат вывода по креативам

## Анализ по креативам (grouped by tag)

| Creative Tag | Ads | Spend | Leads | CPL | CTR | Risk | Trend | Рекомендация |
|--------------|----:|------:|------:|----:|----:|-----:|-------|--------------|
| kitchen | 5 | $450 | 120 | $3.75 | 1.8% | 22 || 🟢 Scale |
| bathroom | 3 | $280 | 45 | $6.22 | 1.2% | 48 || 🟡 Monitor |
| promo | 2 | $150 | 12 | $12.50 | 0.6% | 78 | ↓↓ | ⛔ Pause |

### Детали: kitchen (5 ads)

| Ad Name | Spend | Leads | CPL | Risk |
|---------|------:|------:|----:|-----:|
| kitchen_30-45_msk | $180 | 55 | $3.27 | 18 |
| kitchen_lookalike | $120 | 35 | $3.43 | 21 |
| kitchen_cold_spb | $85 | 18 | $4.72 | 35 |
| kitchen_retarget_7d | $40 | 8 | $5.00 | 42 |
| kitchen_broad | $25 | 4 | $6.25 | 52 |

**Инсайты:**
- Lookalike аудитория лучше всех (CPL $3.43)
- Cold Москва работает хорошо
- Retarget требует оптимизации

**ИТОГО по креативу kitchen:** $450, 120 leads, CPL $3.75

Реестр креативов

Читай: .claude/ads-agent/config/creatives.md

При анализе сверяй теги с реестром:

  • Есть ли тег в реестре?
  • Какой файл/описание соответствует?
  • Статус креатива (active/paused/archived)?

Метрики креативов

Основные

Метрика Формула Хорошо Плохо
CTR Clicks/Impressions > 1% < 0.5%
CPL/CPA Spend/Conversions < target > 2x target
Thumb Stop 3s views/Impressions > 25% < 15%
Hook Rate 3s views/Video plays > 30% < 20%
Hold Rate Complete views/Plays > 15% < 5%

Получение данных

MCP вызовы

# Получить объявления
ads = get_ads(
    account_id="act_XXX",
    campaign_id="CAMPAIGN_ID",  # опционально
    limit=50
)

# Метрики за 2 периода для трендов
insights_7d = get_insights(
    object_id="act_XXX",
    time_range="last_7d",
    level="ad"
)

insights_30d = get_insights(
    object_id="act_XXX",
    time_range="last_30d",
    level="ad"
)

# Детали креатива
creative = get_ad_creatives(ad_id="AD_ID")

# Изображение креатива (для визуального анализа)
image = get_ad_image(ad_id="AD_ID")

Анализ креативов

Workflow

  1. Получить список ads с метриками за 7d и 30d
  2. Вычислить Risk Score для каждого
  3. Определить тренд (7d vs 30d)
  4. Отсортировать по Risk/CPL
  5. Выделить топ и худших
  6. Дать рекомендации

Формат анализа

## Анализ креативов: {Account/Campaign}
📅 Период: last_7d + last_30d (тренды)
🎯 Целевой CPL: ${target}

### Все креативы по Risk Score

| # | Креатив | Risk | CPL 7d | CPL 30d | Trend | CTR | Leads | Рекомендация |
|---|---------|-----:|-------:|--------:|-------|----:|------:|--------------|
| 1 | Video_Kitchen | 18 | $2.50 | $3.10 || 2.1% | 45 | 🟢 Scale |
| 2 | Carousel_Living | 35 | $4.00 | $3.80 || 1.5% | 28 | 🟡 Monitor |
| 3 | Image_Promo | 68 | $7.20 | $5.50 | ↓↓ | 0.6% | 12 | 🔴 Optimize |
| 4 | Video_Old | 82 | $12.00 | $8.00 | ↓↓ | 0.4% | 5 | ⛔ Pause |

### Breakdown Risk Score

**Video_Old (Risk = 82):**
| Компонент | Значение | Влияние |
|-----------|----------|---------|
| Base | 50 | - |
| CPL vs target | $12 vs $4 (3x) | +25 |
| CTR | 0.4% | +15 |
| CPM | $25 (> median $15) | +15 |
| ROI | -40% | +30 |
| **Итого** | - | **82** (capped 100) |

### Топ для масштабирования (Risk < 30)
1. **Video_Kitchen** - Risk 18
   - CPL $2.50 (38% ниже target)
   - CTR 2.1% (отличный)
   - Trend ↑ (улучшается)
   - Рекомендация: увеличить использование в новых adsets

### Требуют ротации (Risk > 60)
1. **Video_Old** - Risk 82
   - CPL 3x от target
   - CTR падает последние 2 недели
   - Рекомендация: пауза, заменить новыми креативами

### Тренды

Символы:
- ↑ улучшение: CPL_7d < CPL_30d
- → стабильно: ±10%
- ↓ ухудшение: CPL_7d > CPL_30d * 1.1
- ↓↓ сильное ухудшение: CPL_7d > CPL_30d * 1.3

Creative Fatigue (Выгорание)

Признаки

Сигнал Порог Действие
Frequency > 4 На человека Обновить креатив
CTR падает > 20% за неделю Тестировать новое
CPL растет > 30% за неделю Ротация креативов
Impressions падают При том же бюджете Расширить аудиторию

Анализ fatigue

## Creative Fatigue Report

### Креативы требующие замены
| Креатив | Frequency | CTR 7d vs 30d | CPL 7d vs 30d | Дней в работе |
|---------|-----------|---------------|---------------|---------------|
| {name} | 5.2 | -25% | +40% | 45 |
| {name} | 4.8 | -18% | +28% | 38 |

### Рекомендации
- **{креатив1}**: заменить срочно, frequency 5.2, CPL +40%
- **{креатив2}**: обновить текст/заголовок, CTR упал на 18%

A/B тестирование

Что тестировать

  1. Изображение - разные фото/видео
  2. Заголовок - разные headlines
  3. Текст - разный primary text
  4. CTA - разные call to action
  5. Формат - carousel vs single vs video

Правила теста

## Правила A/B теста

1. Тестировать ОДНУ переменную
2. Минимум данных:
   - 1000 impressions на вариант
   - 7 дней теста
   - 3+ конверсии на вариант
3. Статзначимость > 95%
4. Не менять во время теста

Определение победителя

# Простой метод
winner = variant_with_lowest_cpl

# С учетом статзначимости
# Если разница CPL > 20% и impressions > 1000 → значимо
if abs(cpl_a - cpl_b) / min(cpl_a, cpl_b) > 0.2:
    winner = "A" if cpl_a < cpl_b else "B"

Формат результатов теста

## A/B Test Results: {Test Name}

### Варианты
| Вариант | Описание | Spend | Leads | CPL | CTR | Risk |
|---------|----------|-------|-------|-----|-----|------|
| A | {desc} | ${X} | {Y} | ${Z} | {W}% | {R} |
| B | {desc} | ${X} | {Y} | ${Z} | {W}% | {R} |

### Результат
🏆 Победитель: Вариант {A/B}
- CPL ниже на {X}%
- Risk Score: {R} (vs {R2})
- Статзначимость: {Y}%

### Рекомендации
- Масштабировать вариант {winner}
- Остановить вариант {loser}

Рекомендации по креативам

По уровню Risk

Risk Уровень Рекомендация
0-25 Low Масштабировать, использовать в новых adsets
26-50 Medium Продолжать использовать, мониторить тренды
51-75 High Снизить использование, готовить замену
76-100 Critical Пауза, заменить срочно

По типу проблемы

Проблема Возможная причина Решение
Низкий CTR Скучное изображение Ярче, контрастнее
Низкий CTR Плохой заголовок Тест заголовков
Высокий CPL Нерелевантный креатив Ближе к продукту
Высокий Frequency Маленькая аудитория Расширить таргет
Падает CTR Выгорание Новые креативы

Чек-лист хорошего креатива

  • Привлекает внимание в первые 1-2 секунды
  • Ясное value proposition
  • Понятный CTA
  • Соответствует аудитории
  • Высокое качество изображения/видео
  • Текст < 20% на изображении
  • Мобильно-оптимизирован

Визуальный анализ

При анализе изображения через get_ad_image():

На что смотреть

  1. Контраст - выделяется ли в ленте?
  2. Читаемость - понятен ли месседж?
  3. Качество - хорошее разрешение?
  4. Бренд - есть ли узнаваемость?
  5. CTA - понятно что делать?

Формат feedback

## Визуальный анализ: {Creative Name}

### Сильные стороны
- {strength1}
- {strength2}

### Слабые стороны
- {weakness1}
- {weakness2}

### Рекомендации
- {recommendation1}
- {recommendation2}

Типы креативов

Single Image

Когда использовать:

  • Простой оффер
  • Быстрый тест
  • Ограниченный бюджет

Метрики фокуса: CTR, CPL

Carousel

Когда использовать:

  • Несколько продуктов
  • Storytelling
  • E-commerce

Метрики фокуса: CTR, Carousel card clicks

Video

Когда использовать:

  • Сложный продукт
  • Эмоциональная связь
  • Демонстрация

Метрики фокуса:

  • 3-second views (hook)
  • ThruPlay (удержание)
  • CTR, CPL

Примеры запросов

"Какие креативы работают лучше?"

→ Таблица по Risk Score, топ с Risk < 30

"Проанализируй креатив {name}"

→ Risk Score breakdown + визуальный анализ

"Какие креативы пора менять?"

→ Fatigue analysis + креативы с Risk > 60

"Настрой A/B тест"

→ План теста, что тестировать

"Результаты теста?"

→ Анализ, победитель, следующие шаги

"Покажи статистику по креативам"

→ Группировка по creative_tag, агрегированные метрики

"Какой креатив лучше: kitchen или bathroom?"

→ Сравнение двух тегов по CPL, CTR, Risk Score

"Детали по креативу kitchen"

→ Все ads с тегом kitchen, их метрики и итог

"Добавь новый креатив в реестр"

→ Обновить config/creatives.md с новым тегом

Weekly Installs
43
GitHub Stars
3
First Seen
Jan 29, 2026
Installed on
github-copilot43
codex42
kimi-cli42
gemini-cli42
amp42
opencode42