Analyze ad skill

Deep-dive analysis of a specific creative asset.

by Motion-Creative·MIT license·GitHub ↗

★ 22 Stars on the repo·Checked

npx degit Motion-Creative/motion-creative-plugin/Plugin/skills/analyze-ad#main ~/.claude/skills/analyze-ad

SKILL.md · 9.8 KB · names 1 other file — download is this file only · installs the whole folder to ~/.claude/skills/analyze-ad

Files of Analyze ad

Files 1 file
Show the full text148 lines

Analyze Ad

Deep-dive analysis of a specific creative — the most common customer interaction pattern. Users paste ad names one after another, going 20+ messages deep. Optimize for this multi-turn flow.

References

Read ${CLAUDE_SKILL_DIR}/../creative-strategist/references/evaluation-framework.md for the 4-Question Evaluation Framework, metric pattern correlations, Ready/Iterate/Rethink call, and performance context awareness.

Phase 0: Find the Creative

The user may reference a creative by:

  • Exact ad name — match against adName in creative insights results
  • Approximate name — partial/fuzzy match, present candidates
  • Ad ID — match against adIds array
  • Creative asset ID — use creativeAssetIds filter parameter
  • Description — "the UGC video with the woman unboxing"

Steps:

  1. Pull get_creative_insights with SPEND insightType, limit 15. Include includeCreativeUrls: true so the user can see the creatives. Start with a smaller set — if the creative is active, it's likely in the top 15 by spend. On the first pull, extract goalMetric and spendThreshold. If goalMetric.isCustomConversion is true, find the matching conversion in the customConversions array and include ["{id}_cost", "{id}_count"] in tableKPIs on this and all subsequent calls.
  2. Search results for the user's reference (case-insensitive partial match on adName).
  3. Multiple matches → present all matches with ad name, spend, and top metric. Ask which one. Never guess.
  4. No match in top 15 → widen the search: re-pull with limit 50. If still no match, tell the user and suggest: "Can you share the exact ad name, ad ID, or creative asset ID from Motion? Sometimes names don't match exactly."
  5. Single clear match → proceed to analysis.

Multi-turn optimization: After the first pull, cache the creative list mentally. When the user asks about another ad in the same session, search the existing results first — don't re-pull unless the creative can't be found or the user changes the date range.

Phase 1: Entity Hierarchy

For the matched creative, present the full entity map:

  • Creative Asset (creativeAssetId) — the visual/video itself
  • Ad(s) (adIds, adName) — the ad-level entities using this creative
  • Ad Set(s) (adsetIds, adsetName) — targeting and budget containers
  • Campaign(s) (campaignIds, campaignName) — objective and strategy level

If a creative runs in multiple ads/adsets/campaigns:

  • Surface ALL contexts
  • Note which campaign context is performing best
  • Flag if the creative is in both testing and scaling campaigns — this is important context ("Running in your Winning Ads Scaling CBO means the algorithm has already validated it")
  • Infer campaign stage from name heuristics: "Testing", "Prospecting", "Scaling", "CBO", "ABO", "Retargeting", "Lookalike", "TOF", "MOF", "BOF"

Phase 2: Metric-Appropriate Analysis

Apply metric intelligence from ${CLAUDE_SKILL_DIR}/../creative-strategist/references/performance-metrics.md — select metrics by creative format (video vs. static) and campaign objective (awareness, traffic, conversions). When the campaign's optimization event differs from the workspace goalMetric, use the campaign-specific objective as the primary lens and note the difference.

Compare to account benchmarks: Pull withAggregatedInsights: true to get account-level averages. Present the creative's metrics as above/below/at benchmark.

Spend trajectory: Note if spend is increasing (scaling), declining (potentially fatiguing), or stable.

Performance Context Awareness

Apply performance context checks from evaluation-framework.md — funnel stage, budget starvation, account stage, and test fairness. Surface these factors when they change the interpretation of metrics.

Phase 3: The "Why"

Go beyond what the numbers say — explain WHY this creative performs the way it does.

For video creatives:

  1. Pull transcript via get_creative_transcript — this is the most valuable data for explaining performance.
  2. Break down the script arc: Hook (0-3s), Problem/Agitation, Solution, Social Proof, CTA.
  3. Name the messaging angle: "Primary Angle: Fit Frustration → Product Solution" not just "UGC testimonial."
  4. Connect to psychological mechanism: "The question-style hook filters for people already in consideration mode — everyone who clicks already has intent."

For static creatives:

  1. Pull get_creative_summary for AI-detected format and messaging.
  2. Analyze the visual format and copy structure.
  3. Identify the value proposition angle.

Glossary enrichment: Pull glossary tags via includeGlossary: true on the creative insights call (or get_glossary_values if needed). Surface taxonomy tags — Decision Stage, Human Desire, Messaging Theme, Headline Tactic, Intended Audience — to enrich the "why" analysis. These tags make the analysis reusable for concept generation and briefs.

Compare to account patterns:

  • "Your entire account runs UGC demos. This 3D format creates visual novelty — the pattern break itself earns attention."
  • "This is the only creative using problem-agitation hooks — and it's your top ROAS performer."

If the creative is underperforming, diagnose using the 4-Question metric correlations from evaluation-framework.md:

  • Low hook rate (thumbstop_ratio) → Q1 failing (doesn't make sense fast). Everything downstream is moot until this works.
  • High hook rate + low hold rate (video_thruplay_ratio) → Q1 passes but middle loses people. Something after the opening creates friction or loses the thread. If thruplay is unavailable, check video retention percentiles (video_p25/p50/p75_watched_ratio).
  • High hook rate + hold rate, low CTR → Q2 or Q3 failing. Viewers stay but don't act — CTA unclear or no compelling reason to click.
  • High CTR + low conversion → Q4 failing. Ad promises something the landing page doesn't deliver.
  • Strong engagement + low conversion → Q3 failing. Creative entertains but doesn't persuade.
  • Declining spend + stable metrics → algorithm deprioritizing — audience saturation, needs refresh (not a Q1-Q4 issue).

Phase 4: The Call

Conclude every analysis with a clear Ready / Iterate / Rethink call from evaluation-framework.md:

  • Ready — Creative can keep running. Note what makes it work and why. Any observations are polish, not blockers.
  • Iterate — Workable foundation, but specific problems need fixing. Name what to fix in priority order — conversion blockers first (Q4), attention failures second (Q1), trust gaps third (Q3). Be specific enough that the team can act without a follow-up conversation.
  • Rethink — Something fundamental isn't working that surface fixes won't solve. Name exactly what's broken (the audience signal, core message, proof structure, or format) and why it can't be patched.

Don't soften Rethink to avoid disagreement. Running a fundamentally broken creative wastes budget and teaches nothing.

Phase 5: Next Steps

Offer specific options based on what you found:

  • "Want me to analyze another ad?" — the most common next step, keep the flow going
  • "Want me to find similar patterns?" — search for creatives with matching taxonomy/format
  • "Want me to write hooks in this style?" — if the hook is strong, generate variants
  • "Want me to brief an iteration?" — if the creative is fatiguing but the angle works
  • "Want me to compare this to [competitor/other creative]?" — if context suggests it

If the user has analyzed multiple ads in the session, offer: "You've analyzed [N] ads — want me to compare them or find patterns across what we've looked at?"

Disambiguation & Error Handling

Creative not found: This happens frequently. Be helpful:

  • "I couldn't find an ad matching '[name]' in your last 30 days of data. A few things to try: (1) Share the exact ad ID from Motion, (2) Check if the name matches exactly — sometimes there are version suffixes, (3) Try a different date range if this ad ran earlier."

Multiple versions: When a creative runs in different campaigns with different names, show ALL versions with their respective performance. Don't collapse them — the user needs to see each context.

Zero spend creative: If found but has $0 spend, note it: "This creative exists but has no spend in this period — it may be paused, newly launched, or in a campaign that hasn't started spending."

Data Accuracy

Follow the creative-strategist Data Accuracy rules:

  • Metrics are EXTRACTED (directly from the tool response).
  • Benchmark comparisons and performance explanations are INFERRED — cite the data points.
  • If a metric is missing or zero, flag it rather than omitting.
  • Never fabricate transcript text, hook copy, or performance data.
1---
2name: Analyze Ad
3description: >
4 Deep-dive analysis of a specific creative asset. Use when the user asks about a
5 specific ad by name, ID, or URL — "analyze this ad", "why is this working?",
6 "why is this not working?", "break down this creative", "[pastes ad name]",
7 "look at this ad", "what's the angle in this ad?", "compare to account averages",
8 or references a specific creative by name or identifier. Handles creative lookup,
9 disambiguation when multiple matches exist, entity hierarchy mapping
10 (creative → ads → adsets → campaigns), and metric-appropriate analysis.
11 This is the most common interaction pattern — users often analyze multiple ads
12 in sequence. Always use this skill, not creative-strategist, when the user
13 references a specific creative.
14allowed-tools:
15 - Read
16 - "mcp__motion__get_auth_context"
17 - "mcp__motion__get_creative_insights"
18 - "mcp__motion__get_creative_summary"
19 - "mcp__motion__get_creative_transcript"
20 - "mcp__motion__get_demographic_breakdown"
21 - "mcp__motion__get_workspace_brand"
22 - "mcp__motion__get_glossary_values"
23 - AskUserQuestion
24model: opus
25---
26 
27# Analyze Ad
28 
29Deep-dive analysis of a specific creative — the most common customer interaction pattern. Users paste ad names one after another, going 20+ messages deep. Optimize for this multi-turn flow.
30 
31## References
32 
33Read `${CLAUDE_SKILL_DIR}/../creative-strategist/references/evaluation-framework.md` for the 4-Question Evaluation Framework, metric pattern correlations, Ready/Iterate/Rethink call, and performance context awareness.
34 
35## Phase 0: Find the Creative
36 
37The user may reference a creative by:
38- **Exact ad name** — match against `adName` in creative insights results
39- **Approximate name** — partial/fuzzy match, present candidates
40- **Ad ID** — match against `adIds` array
41- **Creative asset ID** — use `creativeAssetIds` filter parameter
42- **Description** — "the UGC video with the woman unboxing"
43 
44Steps:
451. Pull `get_creative_insights` with SPEND insightType, limit 15. Include `includeCreativeUrls: true` so the user can see the creatives. Start with a smaller set — if the creative is active, it's likely in the top 15 by spend.
46 On the first pull, extract `goalMetric` and `spendThreshold`. If `goalMetric.isCustomConversion` is true, find the matching conversion in the `customConversions` array and include `["{id}_cost", "{id}_count"]` in `tableKPIs` on this and all subsequent calls.
472. Search results for the user's reference (case-insensitive partial match on `adName`).
483. **Multiple matches** → present all matches with ad name, spend, and top metric. Ask which one. Never guess.
494. **No match in top 15** → widen the search: re-pull with limit 50. If still no match, tell the user and suggest: "Can you share the exact ad name, ad ID, or creative asset ID from Motion? Sometimes names don't match exactly."
505. **Single clear match** → proceed to analysis.
51 
52**Multi-turn optimization:** After the first pull, cache the creative list mentally. When the user asks about another ad in the same session, search the existing results first — don't re-pull unless the creative can't be found or the user changes the date range.
53 
54## Phase 1: Entity Hierarchy
55 
56For the matched creative, present the full entity map:
57 
58- **Creative Asset** (`creativeAssetId`) — the visual/video itself
59- **Ad(s)** (`adIds`, `adName`) — the ad-level entities using this creative
60- **Ad Set(s)** (`adsetIds`, `adsetName`) — targeting and budget containers
61- **Campaign(s)** (`campaignIds`, `campaignName`) — objective and strategy level
62 
63If a creative runs in multiple ads/adsets/campaigns:
64- Surface ALL contexts
65- Note which campaign context is performing best
66- Flag if the creative is in both testing and scaling campaigns — this is important context ("Running in your Winning Ads Scaling CBO means the algorithm has already validated it")
67- Infer campaign stage from name heuristics: "Testing", "Prospecting", "Scaling", "CBO", "ABO", "Retargeting", "Lookalike", "TOF", "MOF", "BOF"
68 
69## Phase 2: Metric-Appropriate Analysis
70 
71Apply metric intelligence from `${CLAUDE_SKILL_DIR}/../creative-strategist/references/performance-metrics.md` — select metrics by creative format (video vs. static) and campaign objective (awareness, traffic, conversions). When the campaign's optimization event differs from the workspace goalMetric, use the campaign-specific objective as the primary lens and note the difference.
72 
73**Compare to account benchmarks:** Pull `withAggregatedInsights: true` to get account-level averages. Present the creative's metrics as above/below/at benchmark.
74 
75**Spend trajectory:** Note if spend is increasing (scaling), declining (potentially fatiguing), or stable.
76 
77## Performance Context Awareness
78 
79Apply performance context checks from `evaluation-framework.md` — funnel stage, budget starvation, account stage, and test fairness. Surface these factors when they change the interpretation of metrics.
80 
81## Phase 3: The "Why"
82 
83Go beyond what the numbers say — explain WHY this creative performs the way it does.
84 
85**For video creatives:**
861. Pull transcript via `get_creative_transcript` — this is the most valuable data for explaining performance.
872. Break down the script arc: Hook (0-3s), Problem/Agitation, Solution, Social Proof, CTA.
883. Name the messaging angle: "Primary Angle: Fit Frustration → Product Solution" not just "UGC testimonial."
894. Connect to psychological mechanism: "The question-style hook filters for people already in consideration mode — everyone who clicks already has intent."
90 
91**For static creatives:**
921. Pull `get_creative_summary` for AI-detected format and messaging.
932. Analyze the visual format and copy structure.
943. Identify the value proposition angle.
95 
96**Glossary enrichment:** Pull glossary tags via `includeGlossary: true` on the creative insights call (or `get_glossary_values` if needed). Surface taxonomy tags — Decision Stage, Human Desire, Messaging Theme, Headline Tactic, Intended Audience — to enrich the "why" analysis. These tags make the analysis reusable for concept generation and briefs.
97 
98**Compare to account patterns:**
99- "Your entire account runs UGC demos. This 3D format creates visual novelty — the pattern break itself earns attention."
100- "This is the only creative using problem-agitation hooks — and it's your top ROAS performer."
101 
102**If the creative is underperforming**, diagnose using the 4-Question metric correlations from `evaluation-framework.md`:
103- Low hook rate (thumbstop_ratio) → Q1 failing (doesn't make sense fast). Everything downstream is moot until this works.
104- High hook rate + low hold rate (video_thruplay_ratio) → Q1 passes but middle loses people. Something after the opening creates friction or loses the thread. If thruplay is unavailable, check video retention percentiles (video_p25/p50/p75_watched_ratio).
105- High hook rate + hold rate, low CTR → Q2 or Q3 failing. Viewers stay but don't act — CTA unclear or no compelling reason to click.
106- High CTR + low conversion → Q4 failing. Ad promises something the landing page doesn't deliver.
107- Strong engagement + low conversion → Q3 failing. Creative entertains but doesn't persuade.
108- Declining spend + stable metrics → algorithm deprioritizing — audience saturation, needs refresh (not a Q1-Q4 issue).
109 
110## Phase 4: The Call
111 
112Conclude every analysis with a clear Ready / Iterate / Rethink call from `evaluation-framework.md`:
113 
114- **Ready** — Creative can keep running. Note what makes it work and why. Any observations are polish, not blockers.
115- **Iterate** — Workable foundation, but specific problems need fixing. Name what to fix in priority order — conversion blockers first (Q4), attention failures second (Q1), trust gaps third (Q3). Be specific enough that the team can act without a follow-up conversation.
116- **Rethink** — Something fundamental isn't working that surface fixes won't solve. Name exactly what's broken (the audience signal, core message, proof structure, or format) and why it can't be patched.
117 
118Don't soften Rethink to avoid disagreement. Running a fundamentally broken creative wastes budget and teaches nothing.
119 
120## Phase 5: Next Steps
121 
122Offer specific options based on what you found:
123 
124- **"Want me to analyze another ad?"** — the most common next step, keep the flow going
125- **"Want me to find similar patterns?"** — search for creatives with matching taxonomy/format
126- **"Want me to write hooks in this style?"** — if the hook is strong, generate variants
127- **"Want me to brief an iteration?"** — if the creative is fatiguing but the angle works
128- **"Want me to compare this to [competitor/other creative]?"** — if context suggests it
129 
130If the user has analyzed multiple ads in the session, offer: "You've analyzed [N] ads — want me to compare them or find patterns across what we've looked at?"
131 
132## Disambiguation & Error Handling
133 
134**Creative not found:** This happens frequently. Be helpful:
135- "I couldn't find an ad matching '[name]' in your last 30 days of data. A few things to try: (1) Share the exact ad ID from Motion, (2) Check if the name matches exactly — sometimes there are version suffixes, (3) Try a different date range if this ad ran earlier."
136 
137**Multiple versions:** When a creative runs in different campaigns with different names, show ALL versions with their respective performance. Don't collapse them — the user needs to see each context.
138 
139**Zero spend creative:** If found but has $0 spend, note it: "This creative exists but has no spend in this period — it may be paused, newly launched, or in a campaign that hasn't started spending."
140 
141## Data Accuracy
142 
143Follow the creative-strategist Data Accuracy rules:
144- Metrics are EXTRACTED (directly from the tool response).
145- Benchmark comparisons and performance explanations are INFERRED — cite the data points.
146- If a metric is missing or zero, flag it rather than omitting.
147- Never fabricate transcript text, hook copy, or performance data.
148 

Discussion