How to detect creative fatigue on Meta and TikTok with an AI agent
Find the ads whose audience has seen them too often, prove the decay with frequency and CTR trends, and rank what to refresh first.
IntentSeparate creatives that are worn out from creatives that never worked, and rank refresh candidates by spend at risk.
- 5
- Steps
- 6
- Tools
- 4
- Rules
- 3
- Failure modes
When to use it
Use it when
- CPA drifting up over weeks with no structural change.
- Frequency creeping on always-on prospecting.
- Before a creative production sprint: this is the brief.
Do not use it when
- Ads younger than 7 days or under ~1,000 impressions: that is a launch, not fatigue.
- Remarketing audiences, where high frequency is the design; judge them on efficiency only.
What it needs first
Required
Optional
Preconditions
- Ad-level daily insights available over at least 21 days.
- Accounts ticked, confirmed via list_accounts.
Inputs
scope- Campaigns or ad sets to inspect.Default: active prospecting campaigns.
window- Trend window.Default: last 28 days, daily.
Procedure
In order. Every tool named is one the gateway ships, and links to its reference.
On TikTok, start from the platform's own fatigue diagnostics.
It encodes TikTok's thresholds; use it as the first ranking, then verify.
Pull ad-level daily insights with frequency, CTR, CPM and spend.
Join ads to their creatives so findings name the asset, not an ID.
For each ad with enough data, compare current CTR to its own first-14-days baseline, and read the frequency trend.
Rank confirmed fatigue by spend at risk, and note the creative angle of each so the refresh brief writes itself.
Decision rules
The observable condition, what it lets you conclude, and what takes the conclusion back.
When
CTR is down 30% or more against the ad's own first-14-days baseline AND frequency exceeds 4 on a 7-day window
Conclude
Fatigue confirmed. Rank by current spend.
Unless
CPM rose sharply at the same time, which can depress CTR account-wide; check a non-fatigued control ad first.
When
CTR never reached the account's median for the format
Conclude
Not fatigue: the creative under-performed from launch. Different fix, different list.
When
Frequency is high but CTR and CPA are stable
Conclude
Watch, do not refresh: audiences tolerate frequency until results say otherwise.
When
Under 1,000 impressions or under 7 days of data
Conclude
Refuse to grade; say the sample is too small.
Evidence every conclusion must carry
- Every fatigued ad shows its baseline CTR, current CTR, frequency and the dates of both readings.
- Spend at risk is the ad's current daily spend, stated with its window.
Where the agent stops
- Pausing a fatigued ad is a Safe Write: preview, human confirmation, apply.
- Choosing replacement creative is a human decision; the skill delivers the ranked brief.
How it goes wrong quietly
The cases where the analysis is wrong and still looks right. Read them before trusting a number.
- Seasonality read as fatigue: compare against the account's overall CTR trend before blaming the creative.
- An audience change mid-window resets the baseline; check ad set history before concluding.
- On TikTok, catalogue ads carry no owned creative asset; fatigue there belongs to the product feed, not a video.
What the answer contains
- 01Fatigued, ranked
- Ad, creative, baseline vs current CTR, frequency, spend at risk.
- 02Never worked
- The separate list, so the refresh brief does not revive them.
- 03Refresh brief
- Angles and formats that are still fresh in the account.