creative-analyzer
npx skills add https://github.com/dengineproblem/agents-monorepo --skill creative-analyzer
Agent 安装分布
Skill 文档
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 Ñ Ð½Ð¾Ð²Ñм Ñегом