Creative Fatigue Analyst
Separates a tired advert from an exhausted audience
- 8hard rules
- Things it must never do, enforced in every run
- 5handover rules
- Conditions where it stops and gives the work to a person
- 8output fields
- A structured result, not a paragraph you have to re-read
- ≤6steps per run
- Bounded work: at most 4 tool calls, enforced by the runtime
Read-only by design. This agent has no path to sending, spending, publishing or committing anything. Where that limit is the product, removing it would remove the reason to trust the output.
Overview
When a paid campaign starts costing more per result, the standard responses are to change the bid, change the audience, or wait for the platform to settle. All three assume the problem is delivery. Often it is not: the creative has been seen too many times by the same people, and no bid adjustment fixes an advert the audience is tired of.
It gets misdiagnosed because the two look identical in a performance chart — cost per result rises either way. They are distinguishable from data the platform already reports, and almost nobody separates them. Fatigue shows frequency climbing while click-through falls on a stable audience. Saturation shows the audience itself exhausted, with reach plateauing however much is spent.
They need opposite responses. Fatigue needs new creative against the same audience. Saturation needs a new audience for creative that still works. Doing the wrong one wastes both the production budget and the media budget.
The other quiet loss is spend continuing on a creative that stopped working weeks ago, because nobody watches that ad set specifically — campaign-level numbers stay acceptable while one creative inside them decays.
This agent reports which is which, per creative, with the point at which each turned. It pauses nothing and has no access to any ad account.
Benefits
Budget stops funding tired adverts
Which is where most of the waste sits.
The right fix, first time
New creative and new audience cost differently and fix different things.
Production briefed by evidence
Built from what still works rather than from taste.
What it does
Tells fatigue from saturation
Identical in a performance chart, opposite in what they need. One wants new creative, the other a new audience.
Finds the turning point
The day a creative stopped working, rather than the week somebody noticed.
Finds spend on dead creative
Campaign numbers stay acceptable while one creative inside them decays unwatched.
Reads frequency against engagement
Rising frequency with falling click-through is fatigue, and it is visible weeks before cost per result moves.
Names what still works
Which creative to build the next round from, which is the more useful half and nobody reports it.
Pauses nothing
It has no ad account access. Pausing a creative mid-learning is how a campaign gets reset.
What this changes
What this changes about your week
- It takes over
- Diagnosing why paid performance declined, per creative.
- Done today by
- Answered by changing the bid or blaming the algorithm.
- How often
- Weekly, and misdiagnosed most weeks.
- Typical manual effort
- Frequency, reach and engagement decay have to be read per creative, not per campaign.
Why Advertising in particular. Creative fatigue and audience saturation look identical in a performance chart and need opposite fixes — new creative against the same audience, or a new audience for creative that still works.
Runs unattended
Started by you or by an event, and it finishes on its own. Nothing waits for someone to be at a desk.
The same standard every time
The two-hundredth item is held to the bar the first one was. Consistency is the part people cannot sustain.
It cannot act on its own
Creative Fatigue Analyst has no path to sending, spending or committing. That limit is why its output is safe to act on.
How it runs
This agent runs server-side through the PROMIVO runtime. Each run is logged step by step and every tool call is permission-checked before it executes.
- 1InputValidated against the agent input schema
- 2Modelclaude-sonnet-5 with automatic fallback
- 3Toolsextract_structured_data
- 4PermissionsRuns READ actions automatically; anything higher waits for approval
- 5OutputStructured result matching the output schema
- 6LoggingTokens, duration and every step recorded
Demo
Demo dataIllustrative sample output, abridged.
Input
{
"period": "Q3 2026",
"currency": "USD",
"creatives": []
}Output
{
"escalate": true,
"diagnoses": [
{
"audience": "Retargeting, 30 day",
"creative": "CR-118 — testimonial video",
"evidence": "Frequency rose from 2.1 to 7.4 while click-through fell 61%. Reach on the same audience is unchanged, and a second creative on the identical audience is still performing. The audience is fine; they have seen this one too often.",
"diagnosis": "creative-fatigue",
"whatItNeeds": "New creative against the same audience. Changing the audience would waste one that still works.",
"turningPoint": "2026-07-19",
"spendSinceTurningPoint": 38400
},
{
"audience": "Lookalike 1%",
"creative": "CR-204 — carousel",
"evidence": "Frequency is flat at 1.9 and click-through is stable, but reach has plateaued at 78% of the audience and has not moved in three weeks despite a 40% budget increase. The creative still works; there is nobody left to show it to.",
"diagnosis": "audience-saturation",
"whatItNeeds": "A new audience. Producing new creative here would spend a production budget on a problem it cannot solve.",
"turningPoint": "2026-08-04",
"spendSinceTurningPoint": 21600
}
],
"disclaimer": "An analysis of your own campaign data. No ad account was accessed, nothing paused, edited or created, no bid or budget change is recommended as a decision, no judgement is made about creative quality, and cases the data cannot separate are reported as such.",
"avoidableSpend": 60000,
"cannotSeparate": [
"Two creatives have no audience size reported, so fatigue and saturation cannot be told apart for them. Reported rather than guessed."
],
"stillPerforming": [
"CR-231 has run 9 weeks with stable frequency and improving cost per result. Whatever it does differently is the brief for the next round, and no report currently says so."
],
"escalationReason": "38,400 was spent on one creative after it turned, above the threshold, and one audience is saturated across every creative running against it.",
"saturatedAudiences": [
"The 1% lookalike is saturated across all three creatives running against it."
]
}Requirements
Integrations
No integrations required.
Before you start
- Per-creative daily metrics: spend, impressions, reach, frequency, clicks, results
- Which audience each creative ran against
- Launch dates and any creative refreshes
- Requires the All-Access plan or higher
Use cases
Weekly performance review
Which creatives turned, and why.
Rising cost per result
Whether it is the advert, the audience, or delivery.
Before a production round
What to make more of, and what to stop.
Always-on campaigns
Where decay is slow and nobody is watching a single ad set.
Pricing
All-Access
Billed monthly through your PROMIVO subscription. Cancel at any time.
Runs consume your plan allowance for agent executions and tokens. See plan limits
FAQ
Will it pause or change ads?
No. It has no ad account access. Pausing a creative that is still in a learning phase resets it, and that judgement belongs to whoever runs the account.
How does it tell fatigue from saturation?
Fatigue is frequency rising while engagement falls on a stable audience. Saturation is reach plateauing regardless of spend. Both are in the data every platform already reports, and almost nobody separates them.
Does it judge creative quality?
No. It reports how a creative performed over time. Whether an advert is good is a judgement about brand and audience that it will not make.
Reviews
Reviews open once customers have run this agent.
Need this agent to work differently?
Tell us what to change and our team will scope a customised version for your business.
Customize this agent