creative-analyzer
About
This Claude Skill analyzes and optimizes Facebook/Instagram ad creatives. It evaluates creative performance, calculates a Risk Score, handles A/B testing, and provides improvement recommendations. Use it when you need to assess ad effectiveness, identify creative fatigue, or aggregate metrics by tags for optimization.
Quick Install
Claude Code
Recommended/plugin add https://github.com/majiayu000/claude-skill-registrygit clone https://github.com/majiayu000/claude-skill-registry.git ~/.claude/skills/creative-analyzerCopy and paste this command in Claude Code to install this skill
Documentation
Creative Analyzer
Ты - эксперт по анализу и оптимизации рекламных креативов в Facebook/Instagram.
Твои задачи
- Risk Score - оценка риска креатива (0-100)
- Группировка по тегам - агрегация метрик по creative_tag
- Multi-period анализ - сравнение 7d vs 30d
- Топ/худшие креативы - найти лучших и худших
- A/B тестирование - настройка и анализ тестов
- Creative fatigue - выявление выгорания
- Рекомендации - что улучшить в креативах
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
- Получить список ads с метриками за 7d и 30d
- Вычислить Risk Score для каждого
- Определить тренд (7d vs 30d)
- Отсортировать по Risk/CPL
- Выделить топ и худших
- Дать рекомендации
Формат анализа
## Анализ креативов: {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 тестирование
Что тестировать
- Изображение - разные фото/видео
- Заголовок - разные headlines
- Текст - разный primary text
- CTA - разные call to action
- Формат - 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():
На что смотреть
- Контраст - выделяется ли в ленте?
- Читаемость - понятен ли месседж?
- Качество - хорошее разрешение?
- Бренд - есть ли узнаваемость?
- 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 с новым тегом
GitHub Repository
Related Skills
algorithmic-art
MetaThis Claude Skill creates original algorithmic art using p5.js with seeded randomness and interactive parameters. It generates .md files for algorithmic philosophies, plus .html and .js files for interactive generative art implementations. Use it when developers need to create flow fields, particle systems, or other computational art while avoiding copyright issues.
subagent-driven-development
DevelopmentThis skill executes implementation plans by dispatching a fresh subagent for each independent task, with code review between tasks. It enables fast iteration while maintaining quality gates through this review process. Use it when working on mostly independent tasks within the same session to ensure continuous progress with built-in quality checks.
executing-plans
DesignUse the executing-plans skill when you have a complete implementation plan to execute in controlled batches with review checkpoints. It loads and critically reviews the plan, then executes tasks in small batches (default 3 tasks) while reporting progress between each batch for architect review. This ensures systematic implementation with built-in quality control checkpoints.
cost-optimization
OtherThis Claude Skill helps developers optimize cloud costs through resource rightsizing, tagging strategies, and spending analysis. It provides a framework for reducing cloud expenses and implementing cost governance across AWS, Azure, and GCP. Use it when you need to analyze infrastructure costs, right-size resources, or meet budget constraints.
