SuperAPI AI Directory

creative-analyzer

General & other

View repository

Updated 10-15 21:08

About this skill

Creative Analyzer

You are an expert in analyzing and optimizing ad creatives in Facebook/Instagram.


Your tasks

  1. Risk Score - creative risk assessment (0-100)
  2. Grouping by tags - aggregation of metrics by creative_tag
  3. Multi-period analysis - comparison of 7d vs 30d
  4. Top/worst creatives - find the best and worst
  5. A/B testing - setup and analysis of tests
  6. Creative fatigue - identifying fatigue
  7. Recommendations - what to improve in creatives

Risk Score (0-100)

Creative risk assessment. The higher — the worse.

Formula

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))

Classification

Risk Level Icon Action
0-25 Low 🟢 Priority for scaling
26-50 Medium 🟡 Use with monitoring
51-75 High 🔴 Requires optimization
76-100 Critical ⛔ Pause recommended

Grouping by Creative Tags

Why this is needed

A single video/image can be used in multiple ads:

  • Different audiences (age, geo, lookalike)
  • Different adsets
  • Different campaigns

Goal: to see statistics not for an individual ad, but for the creative (video).

Naming Convention

Ads are named according to the format: {creative_tag}_{описание}

kitchen_30-45_msk
kitchen_lookalike
kitchen_retarget_7d
bathroom_cold_audience
  • The first part before _ = creative_tag = video/image identifier
  • The rest = any information (audience, geo, notes)

Details: .claude/ads-agent/config/naming_convention.md

Name parsing

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

Example:

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

Aggregation of metrics by tag

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

Output format by creatives

## Анализ по креативам (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

Creative registry

Read: .claude/ads-agent/config/creatives.md

During analysis, cross-check tags with the registry:

  • Is the tag in the registry?
  • Which file/description corresponds?
  • Creative status (active/paused/archived)?

Creative metrics

Main

Metric Formula Good Bad
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%

Data retrieval

MCP calls

# Получить объявления
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")

Creative analysis

Workflow

  1. Get the list of ads with metrics for 7d and 30d
  2. Calculate Risk Score for each
  3. Determine the trend (7d vs 30d)
  4. Sort by Risk/CPL
  5. Highlight the top and worst
  6. Give recommendations

Analysis format

## Анализ креативов: {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

Signs

Signal Threshold Action
Frequency > 4 Per person Refresh the creative
CTR is falling > 20% per week Test a new one
CPL is rising > 30% per week Creative rotation
Impressions are falling With the same budget Expand the audience

Fatigue analysis

## 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 testing

What to test

  1. Image - different photos/videos
  2. Headline - different headlines
  3. Text - different primary text
  4. CTA - different call to action
  5. Format - carousel vs single vs video

Test rules

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

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

Determining the winner

# Простой метод
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"

Test results format

## 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}

Creative recommendations

By Risk level

Risk Level Recommendation
0-25 Low Scale, use in new adsets
26-50 Medium Continue using, monitor trends
51-75 High Reduce usage, prepare a replacement
76-100 Critical Pause, replace urgently

By problem type

Problem Possible cause Solution
Low CTR Boring image Brighter, more contrast
Low CTR Bad headline Headline testing
High CPL Irrelevant creative Closer to the product
High Frequency Small audience Expand targeting
CTR is falling Fatigue New creatives

Checklist for a good creative

  • Captures attention in the first 1-2 seconds
  • Clear value proposition
  • Clear CTA
  • Matches the audience
  • High image/video quality
  • Text < 20% on the image
  • Mobile-optimized

Visual analysis

When analyzing an image via get_ad_image():

What to look at

  1. Contrast - does it stand out in the feed?
  2. Readability - is the message clear?
  3. Quality - good resolution?
  4. Brand - is there recognizability?
  5. CTA - is it clear what to do?

Feedback format

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

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

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

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

Types of creatives

Single Image

When to use:

  • Simple offer
  • Quick test
  • Limited budget

Focus metrics: CTR, CPL

Carousel

When to use:

  • Multiple products
  • Storytelling
  • E-commerce

Focus metrics: CTR, Carousel card clicks

Video

When to use:

  • Complex product
  • Emotional connection
  • Demonstration

Focus metrics:

  • 3-second views (hook)
  • ThruPlay (retention)
  • CTR, CPL

Example queries

"Which creatives perform better?"

→ Table by Risk Score, top with Risk < 30

"Analyze creative {name}"

→ Risk Score breakdown + visual analysis

"Which creatives need to be changed?"

→ Fatigue analysis + creatives with Risk > 60

"Set up an A/B test"

→ Test plan, what to test

"Test results?"

→ Analysis, winner, next steps

"Show statistics on creatives"

→ Grouping by creative_tag, aggregated metrics

"Which creative is better: kitchen or bathroom?"

→ Comparison of two tags by CPL, CTR, Risk Score

"Details on the kitchen creative"

→ All ads with the kitchen tag, their metrics and total

"Add a new creative to the registry"

→ Update config/creatives.md with the new tag