---
name: diagnose-creative-fatigue
description: >-
  Reads whether a previously-winning Meta creative has fatigued, rising frequency (roughly >2-3 in
  a short window), declining CTR/hook rate, and rising CPM/CPA, all on the SAME creative and
  trending gradually, by pulling the day-by-day trend via mads_run_insights (daily
  time_increment) rather than judging a single bad day. Rules out account-wide auction pressure or
  seasonality producing the same symptoms before concluding fatigue, then prescribes a real refresh
  (new concept/hook) or a wider audience over a cosmetic edit that won't reset genuine wear-out.
  Reach for it when a winner's cost per result has been climbing for more than a few days, or as a
  standing cadence check on long-running creative. It ends at a refreshed, live slate plus a
  rotation cadence, it does not source the replacement creative itself
  (run-creative-testing-framework supplies validated winners) or diagnose a creative that never
  hooked well to begin with (improve-hook-rate-and-hold).
---
# Diagnose and Fix Creative Fatigue

## Purpose
Every winning creative eventually decays: the same audience sees it enough times that it stops
working, which shows up as climbing frequency, sliding CTR/hook rate, and rising CPM/CPA on a
creative that used to perform. This skill reads that trend correctly, rules out the other things
that produce the same symptoms, auction pressure, seasonality, and prescribes a real refresh
instead of a cosmetic one.

## When to run
- A previously-winning creative's cost per result has been climbing for more than a few days.
- Frequency on an ad set is climbing without a corresponding increase in audience size.
- A scheduled cadence check on creative that has been live for an extended run, a standing
  maintenance pass, not just a reaction to a complaint.

## When NOT to run
- The creative never worked well to begin with, that's a hook/hold problem, not fatigue; see
  `improve-hook-rate-and-hold`.
- No winner exists yet to fatigue, run `run-creative-testing-framework` first.
- Performance dropped account-wide, on the same day, across unrelated creative, check auction and
  seasonality causes (this skill's own Decision rules) before assuming fatigue.

## Prerequisites
- A creative with enough runtime/history to show a trend, not just a few days of data.
- Access to day-by-day (not just aggregate) spend, frequency, CTR, CPM, and CPA for the ad(s) in
  question.
- Awareness of any account-wide events in the window, budget changes, competitor activity, seasonal
  demand shifts, that could explain the same symptoms without fatigue.

## Procedure
1. **Pull the day-by-day trend.** `mads_run_insights` (poll with `mads_get_insights`)
   at the ad level, `time_increment=1`, for frequency, CTR, hook rate where available, CPM, CPA, and
   spend, over several weeks, not 3 days.
2. **Plot the signals against time**, not just today-vs-30-day-average, fatigue shows as a gradual
   slide, not a cliff.
3. **Check frequency.** IF frequency has climbed past roughly 2-3 within the recent window on a
   stable audience size, THEN the same people are seeing this creative repeatedly, a leading
   fatigue indicator.
4. **Check CTR/hook rate.** IF click-through or hook rate is declining over the same window on the
   same creative, THEN interest is genuinely wearing out, not just a one-day dip.
5. **Check CPM/CPA.** IF cost metrics are climbing on this creative specifically, and not
   account-wide, THEN the auction is paying more to reach an increasingly saturated audience, confirms fatigue rather than a broader cost shift.
6. **Rule out non-fatigue causes before concluding fatigue.** Check whether CPM/CPA rose
   account-wide on the same days (auction pressure across all advertisers) or whether the calendar
   explains it (seasonal demand, competitor spend spikes, holidays). IF the rise is account-wide or
   calendar-correlated, THEN it isn't creative fatigue, don't refresh creative to fix a market-wide
   cost shift.
7. **Choose the fix.** A real refresh, new concept or hook, per Decision rules, beats a cosmetic
   edit (recolor, retrim the same footage); cosmetic swaps don't reset genuine audience wear-out.
8. **Ship the refresh.** `mads_create_creative` for the new concept, `mads_create_ad` (status
   PAUSED) alongside the fatigued ad rather than a blind replacement, `mads_preview_creative`,
   plain-English summary, explicit approval, then commit.
9. **Pause the fatigued creative** (`mads_update_ad`, status=PAUSED) once the refresh is live and has
   enough data to stand on its own, don't run both indefinitely once the old one is confirmed spent.
10. **Set a rotation cadence.** A standing check every few weeks against the frequency/CTR/CPM
    signals so the next fatigue cycle is caught on trend, not after cost per result has already
    climbed for weeks.
11. **Consider widening the audience** alongside or instead of a creative refresh when frequency is
    the dominant signal and the current audience is unnecessarily narrow, more reach lowers
    frequency without needing new creative at all.

## Decision rules
- **Fatigue signature:** rising frequency (roughly >2-3 in a short window), declining CTR/hook rate,
  and rising CPM/CPA, all on the SAME creative, trending gradually. The combination matters more
  than any single metric.
- **Not fatigue:** cost or frequency moves that are account-wide or calendar-correlated (holiday,
  competitor surge, broad auction pressure), the fix is bid, budget, or timing, not creative.
- **Real refresh vs. cosmetic swap:** a new concept, angle, or hook counts; a color/logo/music swap
  on the same footage does not, audiences fatigue on the underlying idea, not the exact pixels.
- **Frequency-dominant fatigue on a narrow audience →** widen the audience first. **Frequency-fine
  but CTR-declining fatigue →** the creative itself needs replacing regardless of audience size.
- **Refresh slate comes from `run-creative-testing-framework`**, not from guessing, route the next
  concept through a proper test rather than shipping an unvalidated replacement at scale.
- **Done means:** the day-by-day trend confirmed genuine fatigue (not auction or seasonality), a
  real refresh shipped and is live, the fatigued creative is paused once the refresh has data, and a
  rotation cadence is set.

## Common failure modes
- **Refreshing creative to fix an account-wide auction cost spike** that had nothing to do with the
  creative itself.
- **Cosmetic edits mistaken for a real refresh**, fatigue returns almost immediately.
- **Reacting to a single bad day** instead of confirming a trend across the full window.
- **No forward cadence set**, so the next fatigue cycle is only caught after cost per result has
  already climbed for weeks.
- **Killing the fatigued creative before the replacement has enough data** to confirm it's actually
  better.

## Related skills
- Before: `run-creative-testing-framework` (the source of any validated replacement creative).
- Related: `improve-hook-rate-and-hold` (a declining hook rate is one of this skill's signals, but a
  creative that never hooked well in the first place is a different diagnosis).
- Related: `select-formats-and-placements` (widening delivery via an added placement or format is
  one lever against rising frequency).
