> ## Documentation Index
> Fetch the complete documentation index at: https://adadvisor.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# AdAdvisor Diagnose Skill: Why Did My Meta Ad Performance Drop?

> Diagnose Meta (Facebook) ad performance issues with Claude. Hook rate to hold rate to CTR to CVR diagnostic tree, plus unsentimental kill, hold, and scale decision rules expressed in multiples of target CPA.

The **AdAdvisor diagnose skill** is the senior media buyer's response to a moving Meta (Facebook) ad number. CPA jumped, ROAS dropped, frequency creeping up, results stalled. Instead of panicking, run a diagnostic stack: look at CPM, CTR, hook rate, hold rate, and frequency *together*, identify which signal in the funnel actually moved, and pick the action that matches the cause.

## When should I use the diagnose skill?

Triggers automatically on phrases like:

* "CPA went up"
* "ROAS dropped"
* "Why is this campaign not working"
* "What happened to my ads"
* "Should I kill this"
* "Should I scale this"
* "Investigate"
* "Spend without results"
* "Frequency too high"

Best for one entity at a time (a specific campaign, ad set, or ad). For account-wide reviews, use the [audit](/skills/adadvisor-audit) skill.

## How does the AdAdvisor diagnostic tree work?

Performance is a funnel. When the bottom moves, the skill finds the level that broke:

```
Impressions    → CPM        ← creative quality, audience saturation, competition
   ↓
3-sec views    → Hook Rate   (3-sec views / impressions)
   ↓
15-sec views   → Hold Rate   (15-sec views / 3-sec views)
   ↓
Link clicks    → CTR         (clicks / impressions)
   ↓
Landing page   → LP CVR      (LPV / clicks)
   ↓
Purchases      → CVR         (results / LPV)
```

Each combination of moving signals maps to a specific cause and action:

| Symptom                      | Likely cause                            | Action                              |
| ---------------------------- | --------------------------------------- | ----------------------------------- |
| CPM up, CTR up, CVR down     | Wrong audience OR landing-page friction | Fix LP, not ads                     |
| CPM up, CTR down, CVR flat   | Creative fatigue OR audience saturation | Refresh creative or expand audience |
| CPM flat, CTR down, CVR flat | Creative fatigue                        | Kill or refresh creative            |
| CPM up, CTR flat, CVR flat   | Competition or seasonality              | Hold or raise bid                   |
| CPM flat, CTR flat, CVR down | Offer / price / LP change               | Fix offer, not ads                  |
| Quality ranking "Below Avg"  | Negative feedback / clickbait           | Replace creative                    |

## When should I kill, hold, or scale a Meta campaign?

Decisions expressed as multiples of your target CPA (which the foundation skill picks up from your business context). Brand-agnostic and parametric.

### Kill rules

* **Kill immediately:** spent ≥ 3x target CPA with zero conversions.
* **Kill:** ROAS below 0.5x break-even for 3+ consecutive days.
* **Kill or major refresh:** frequency over 5 on a small audience (under 1 million) with declining CTR over 7 days.
* **Kill:** ad-level negative feedback ≥ 0.2%.

### Hold rules

* **Hold (48 to 72 hours):** spent 2x target CPA with 1 conversion.
* **Hold and don't optimize:** spent 1.5x target CPA with steady conversions. CPA may be inflated by misattribution.
* **Hold:** entity is still in Meta's learning phase. Any change resets the clock.

### Scale rules

* **Scale (20% vertical):** ROAS ≥ target × 1.2 for 3+ consecutive days *and* new-customer rate stable.
* **Horizontal scale:** vertical scaling is causing CPA to inflate over 10% per increment.

See the [scale](/skills/adadvisor-scale) skill for the full scaling playbook.

## What is a healthy hook rate, CTR, or frequency for Meta ads?

The skill compares your numbers against these 2026 benchmarks, sourced from Motion, Foxwell, Vaizle, AdManage, and Coinis datasets:

| Metric                  | Healthy      | Strong         | Weak        |
| ----------------------- | ------------ | -------------- | ----------- |
| CPM (prospecting)       | $10 to $25   | under \$15     | over \$30   |
| Hook Rate               | 25% to 35%   | 30% to 45%     | under 20%   |
| Hold Rate               | 40% to 50%   | 60% or higher  | under 30%   |
| CTR (outbound link)     | 1.0% to 1.8% | 2.0% or higher | under 0.8%  |
| LP CVR                  | 30% to 50%   | 60% or higher  | under 20%   |
| CVR (purchase)          | 1% to 3%     | 4% or higher   | under 0.5%  |
| Frequency (prospecting) | 1.5 to 2.5   | under 2        | 3 or higher |
| Frequency (retargeting) | 4 to 6       | 3 to 5         | 7 or higher |

## How do kill thresholds scale with account size?

Kill thresholds scale with your spend tier so the rules apply equally to a bootstrapped DTC at $30 CPA and an agency-managed SaaS at $300 CPL:

| Account size (monthly spend) | Test budget per ad   | Kill threshold                    |
| ---------------------------- | -------------------- | --------------------------------- |
| under \$10K a month          | $25 to $75 a day     | $75 to $225 with zero conversions |
| $10K to $50K a month         | $50 to $150 a day    | $150 to $450                      |
| $50K to $200K a month        | $100 to $300 a day   | $300 to $900                      |
| \$200K+ a month              | $300 to $1,000 a day | $900 to $3,000                    |

## What anti-patterns does the diagnose skill prevent?

<AccordionGroup>
  <Accordion title="Killing too early">
    24-hour decisions on small budgets are noise. The skill enforces 3 to 5 day windows post-launch and explicitly pushes back on premature kill requests with the threshold rule.
  </Accordion>

  <Accordion title="Treating Subscribe campaigns by ROAS">
    Subscribe campaigns return `revenue: 0` even when performing well. The skill uses `cost_per_result` against an LTV-implied target instead.
  </Accordion>

  <Accordion title="Recommending creative refresh when LP CVR cratered">
    If the LP-CVR-to-purchase rate dropped, the offer or page broke. New creative will not fix it. The diagnostic tree catches this.
  </Accordion>

  <Accordion title="Recommending budget changes while in learning">
    Resets the learning phase. The skill explicitly checks `learning_stage_info` before suggesting any budget mutation.
  </Accordion>

  <Accordion title="Ignoring frequency context">
    Frequency 3 on broad is fatigue starting. Frequency 3 on retargeting is normal. The skill compares frequency to audience size and funnel stage before flagging.
  </Accordion>
</AccordionGroup>

## How do I install the diagnose skill?

<Columns cols={2}>
  <Card title="Claude Code" icon="terminal" href="/skills/install-claude-code">
    Ships with the full plugin install.
  </Card>

  <Card title="Claude.ai & Desktop" icon="cloud" href="/skills/install-claude">
    Download [adadvisor-diagnose.zip](https://github.com/AdAdvisor/skills/releases/latest/download/adadvisor-diagnose.zip) and upload via Settings, Capabilities, Skills.
  </Card>
</Columns>

## Frequently asked questions

<AccordionGroup>
  <Accordion title="Why did my Meta ads ROAS drop suddenly?">
    Apply the diagnostic tree on your specific entity. Pull `adadvisor:get_timeseries` and look at CPM, CTR, and CVR together. CPM up and CTR down points to creative fatigue or audience saturation. CPM flat and CVR down points to an offer or landing-page change. CPM up across the board is competition or seasonality. The diagnose skill walks you through it automatically.
  </Accordion>

  <Accordion title="When should I kill a Facebook ad campaign?">
    Three unsentimental rules. Spent 3x target CPA with zero conversions, kill immediately. ROAS under 0.5x break-even for 3+ days, kill. Frequency over 5 on a small audience with declining CTR over 7 days, kill or major refresh. The skill expresses thresholds as multiples of *your* target so they work at any spend tier.
  </Accordion>

  <Accordion title="What is a hook rate and what counts as healthy?">
    Hook rate is 3-second views divided by impressions, the percentage of people who stopped scrolling long enough to count as having seen the ad. Healthy is 25% to 35% for Meta prospecting. Strong is 30% to 45%. Under 20% is weak and signals the first 1 to 3 seconds need work.
  </Accordion>

  <Accordion title="Should I hold or kill a campaign that is at 1.5x target CPA?">
    Hold. At 1.5x target CPA *with steady conversions*, CPA may be inflated by misattribution (the conversion happened, Meta just under-attributed it). The skill's hold rule says do not optimize at this level. Kill rules fire at 2x with only one conversion (hold 48 to 72 hours) and 3x with zero conversions (kill immediately).
  </Accordion>

  <Accordion title="How does the AdAdvisor diagnose skill differ from manual Meta Ads Manager review?">
    Manual review picks one number at a time. The diagnose skill compares CPM, CTR, hook rate, hold rate, frequency, and CVR *together* against a senior-buyer cause-and-action table. It also pulls multi-day timeseries automatically and scores against *your* break-even ROAS rather than a generic benchmark.
  </Accordion>
</AccordionGroup>

## Related skills

<Columns cols={3}>
  <Card title="Foundation" icon="compass" href="/skills/adadvisor">
    Auto-loaded first. Provides target CPA and break-even ROAS for the decision rules.
  </Card>

  <Card title="Scale" icon="chart-line" href="/skills/adadvisor-scale">
    Take action when diagnose says "scale".
  </Card>

  <Card title="Creative" icon="palette" href="/skills/adadvisor-creative">
    Take action when diagnose surfaces creative fatigue.
  </Card>
</Columns>
