Meta Ads

Meta Creative Fatigue Alert

A weekly check for Meta ad sets where frequency rises while CTR falls and CPM climbs. First run sets a baseline, later runs show only changes.

Connect RoASr

Recommendations only: the prompt never changes your ad accounts.

How to run it

Three steps, about a minute.

  1. Connect RoASr to Claude or ChatGPT

    Create an API key in RoASr and add the RoASr MCP server. Access is read-only: the prompt cannot change anything in your ad accounts.

  2. Paste the prompt

    Copy the text below into a new chat.

  3. Answer a few questions

    The prompt asks only what it cannot find itself, then reads your data and answers in a fixed format.

  4. Guides in the blog

What it asks

  • client
  • schedule — every Monday 9:00
  • comparison window — last 7 days vs the 7 before
  • frequency alert — 3.0

Data it reads

  • roasr_load_skill
  • roasr_limits
  • roasr_list_clients
  • roasr_list_accounts
  • roasr_metrics_campaigns
  • roasr_metrics_daily
  • roasr_signals

Method

  • roasr_frame
  • meta_analysis
  • report_format
Full prompt

The prompt

Before you start, ask me about each [input] below — one question at a time, with ready-made answers to pick from; skip whatever you can already tell.

Watch the Meta ad sets of [client: if not listed, call roasr_list_clients and let me pick] for creative fatigue and report it on a schedule: [schedule: every Monday 9:00 (default) | every Wednesday 9:00 | every day 9:00 | custom].

1. **Load the RoASr method.** Call roasr_load_skill('roasr_frame'), roasr_load_skill('meta_analysis') and roasr_load_skill('report_format') and follow them exactly.
2. **Frame the data.** Call roasr_limits, roasr_list_clients and roasr_list_accounts: plan, niche, margin, KPI, account currencies, sync status and dataSince. Compare [comparison window: last 7 days vs the 7 before (default) | last 14 days vs the 14 before | custom]. If a window starts before dataSince, say so and narrow it. If currency.mixed is true, never sum money across accounts. Name any Meta account whose sync is failed or never and draw no conclusions from it.
3. **Pull both windows.** roasr_metrics_campaigns with level adset, limit 200, once for the current window and once for the previous one: spend, impressions, CTR, CPM, frequency, conversions. Take frequency as the tool reports it for the window; never average or sum daily frequency. Classify ad sets by objective and settings, not by name.
4. **Flag the fatigue pattern.** An ad set is flagged only if all three move together: frequency at or above [frequency alert: 3.0 (default) | 2.5 | 4.0 | custom] or up 20% or more, CTR down 15% or more, CPM up 15% or more. It must also clear the noise floor from the method (enough impressions in both windows). Two of three is "watch", not fatigue. Under a campaign budget, read ad set numbers as allocation, not as a ranking.
5. **Date the shift.** For each flagged ad set, roasr_metrics_daily with entityRef adset:<id>: the day CTR began to fall. Check what else changed that day: a spend jump (CPM may then be auction pressure, not fatigue), a new ad, a seasonal peak. Name a cause only if the timing fits.
6. **Read quality rankings.** roasr_signals with kind meta_ad_quality: quality, engagement and conversion rankings for the ads inside flagged ad sets. Below-average rankings support the diagnosis but do not prove it alone.

**Delta discipline.** First run: this is the baseline. List every ad set with its status (ok / watch / fatigued) and current numbers, and say clearly that it is a baseline. Later runs: compare with the previous report in this conversation (if you cannot see it, ask me to paste it) and show only ad sets that changed status, newly crossed a threshold, or recovered. If nothing changed, answer exactly: Nothing important has changed since the previous run.

**Output:** open with one sentence — how many ad sets are fatigued, how many are new since the last run, and the one to look at first. Then a table: ad set · campaign · frequency · CTR change · CPM change · quality rankings · date the decline began · status. Then 3–5 actions grouped High / Medium / Nice-to-have (refresh creative, widen the audience, rotate offers), each with the expected effect.

**Output rules:**
- Recommendations only — never apply changes; RoASr tools are read-only.
- reach and frequency are not additive across days; do not average daily values.
- Ad age is only a proxy; write "likely" when you infer fatigue from it.
- If the client has no margin set, talk ROAS and CPA, not profit.
- Answer in the language of this prompt.