Skip to content
Run this on autopilot — free
Workflow · Creatives

Detect Creative Fatigue and get Iterations

Time to first output: 15 minutes

What it does?

The prompt pulls live Meta ad performance via GoMarble MCP, scores every active ad against five fatigue signals (CTR decline, frequency creep, CPA spike, CVR decline, spend shift), and writes a paste-ready refresh brief — hook, angle, and new-creative prompts — for every ad that's fatiguing.

What you need

  • Meta Ads account ID (act_XXXXXXXXXX)
  • GoMarble MCP connection

Before You Start: Connect Claude with GoMarble MCP

Go beyond analyzing your creatives — discover ads that actually work in your market using GoMarble AI. It breaks down your creatives and your competitors' creatives to find what hooks, angles, and patterns are winning in your category, and tells you exactly what to test next.

1

Sign-up

Sign up on GoMarble (apps.gomarble.ai) using your work email.

2

Add a Custom Connector

Go to Claude Integrations (claude.ai/settings/connectors) → "Add Custom Connector".

3

Add the following details

Enter the Name and URL below.

Name

GoMarble AI

URL

https://apps.gomarble.ai/mcp-api/sse

4

Finish setup

Click "Add" and then "Connect".

5

Add your ad accounts and integrations

Add your ad accounts and integrations at apps.gomarble.ai/settings/integrations.

This page's connect flow has an extra step (adding ad accounts/integrations) beyond the standard 4-step setup.

Run the creative fatigue analysis

Paste this prompt into Claude and update your Meta Account ID to detect creative fatigue and get ready-to-use prompts for iterations.

Lead-magnet prompt · free

Ad Account ID: act_XXXXXXXXXX ← Replace with your Meta Ads account ID before running

You are a senior performance marketing analyst. Using GoMarble MCP's Meta Ads tools, run a creative fatigue analysis on all active ads in the account above. Work through the steps below in order and present the output in the exact format specified.

PRE-ANALYSIS SETUP

Call facebook_get_details_of_ad_account for the account ID above

Note the account currency — all monetary values must use this currency

Note active campaigns and ad sets from account_structure

Identify the Primary Conversion Metric (PCM) by reading promoted_object.custom_event_type from the top ad sets — NEVER infer from names

DATA PULL

Call facebook_get_adaccount_insights with:

level = "ad"

time_increment = "1"

date_preset = "last_21d"

fields = ["ad_name", "ad_id", "spend", "impressions", "clicks", "ctr", "cpm", "frequency", "actions", "action_values", "purchase_roas", "video_play_actions", "video_thruplay_watched_actions"]

filtering = active ads only (ad.effective_status = ACTIVE) and impressions > 0

sort = spend_descending

Fetch ALL pages before analyzing. Use facebook_fetch_pagination_url when paging.next is present. Do not begin analysis until every page is retrieved.

METRIC CALCULATIONS

CPA = spend ÷ actions[omni_purchase] (fallback to actions[purchase])

CVR = actions[omni_purchase] ÷ clicks × 100

Hook Rate (video only) = actions[video_view] ÷ video_play_actions × 100

Hold Rate (video only) = video_thruplay_watched_actions ÷ actions[video_view] × 100

Spend Share Trend = daily spend days 15–21 vs days 8–14

Time windows:

Days 1–7 = baseline

Days 8–14 = mid window

Days 15–21 = current window

FATIGUE SIGNALS

Signal 1 — CTR Decline: CTR in the most recent 5-day window dropped 20%+ from peak CTR over the 21-day window.

Signal 2 — Frequency Creep: Frequency above 2.5 AND rising (days 15–21 avg vs days 8–14 avg).

Signal 3 — CPA Increase: CPA in the most recent 5-day window increased 25%+ from best CPA. Only evaluate if the ad has at least 3 purchases. Otherwise flag as insufficient data.

Signal 4 — CVR Decline: CVR dropped more than 15% from days 8–14 to days 15–21 while impressions held flat or grew.

Signal 5 — Spend Shift: Average daily spend in days 15–21 is more than 30% lower than days 8–14 with no manual budget change.

FATIGUE SCORE

[HEALTHY] — No signals. No action required.

[EARLY WARNING] — One signal. Monitor daily.

[FATIGUED] — Two or more signals. Refresh within 48 hours.

[DEAD] — Three or more signals with severe decline across CTR, CPA, and CVR. Pause immediately.

Data floor rule: Fewer than 7 days of data = [PRELIMINARY — insufficient data]. Exclude from all tables.

OUTPUT FORMAT

Creative Fatigue Report — [Brand Name]

Period: [date range] Ads analyzed: [count] Preliminary (excluded): [count]

Summary

[2–3 sentences maximum. Total healthy, total needing action, one-line overall account creative health.]

Priority Action Table

[FATIGUED] and [DEAD] ads only, sorted by spend descending.

PriorityAd NameStatusSignals TriggeredDays DecliningRecommended Action1

Ad Status Summary

All analyzed ads in one table, sorted by severity: [DEAD] → [FATIGUED] → [EARLY WARNING] → [HEALTHY].

Ad NameStatusSignalsWhy (1–2 lines max)Element to Refresh

Rules:

Why column: maximum 2 lines, specific numbers only, no narrative

Element to Refresh: "None" for [HEALTHY] ads

No separate Full Analysis section — this table replaces it entirely

Targeted Refresh Briefs

Generated for [EARLY WARNING], [FATIGUED], and [DEAD] ads only. One brief per failing element. Every prompt is paste-ready — Higgsfield and ChatGPT execute, Claude makes all creative decisions.

Output rules — apply without exception:

Steps 1, 2, and 3 below are internal process steps. Do not print their headers, labels, stage notes, or content in the output. Run them silently and proceed directly to writing the briefs.

The copy format line is internal reference only. Do not print it in the output.

Do not add a "Refresh Recommendation Logic," "Recommendation Logic Applied," or any recap section at the end. The Ad Status Summary table covers the why. No recap.

The tool routing rule is an internal instruction. Do not print it in the output.

The output for this section contains only the brief blocks — nothing else.

STEP 1 — PULL CREATIVE DETAILS (MANDATORY, RUNS SILENTLY)

For every [EARLY WARNING], [FATIGUED], or [DEAD] ad, complete both stages before writing anything. Do not print this step in the output.

Stage A — Call facebook_get_ad_creative_details with the ad_id. Extract:

Creative type: VIDEO or IMAGE

Existing caption/body text from object_story_spec (video_data.message or link_data.message). For DCO: from asset_feed_spec.bodies

Existing headline from object_story_spec or asset_feed_spec.titles

CTA type and destination URL

If asset_feed_spec with multiple bodies/titles: flag as DCO, record all variants

If asset_feed_spec with only onsite_destinations and no body text: flag as catalog/DPA, write short-form copy only (under 50 words)

Stage B — Call facebook_analyze_ad_creative_by_id_or_url with the ad_id. Extract:

Exact on-screen text in the first 3 seconds (word-for-word, style, case)

Every on-screen text overlay throughout — exact wording, position, style

Full audio transcript if available

Structural format (e.g. PAS, UGC testimonial, skit + demo, talking head)

Whether audio-synced captions are present

One-line in-ad copy style summary

If creative is inaccessible: note "In-ad copy not accessible — format inferred from Stage A and ad name." Flag all inferences.

STEP 2 — IDENTIFY COPY FORMAT (INTERNAL, NOT PRINTED)

After completing both stages, derive the copy format. Use it to anchor all copy variants and prompts. Do not print this line in the output.

Copy format: [VIDEO or IMAGE] | [in-ad copy style from Stage B] | [caption: short/medium/long + word count, or "not confirmed"] | [structural rhythm] | [CTA button type]

All copy variants and all prompts must match this format — same in-ad copy style, same caption length, same structural rhythm.

STEP 3 — WRITE THE BRIEFS (RUNS SILENTLY, OUTPUT IS THE BRIEFS ONLY)

Tool routing — absolute rule (internal, not printed):

Video ads → Higgsfield prompt only. Never offer ChatGPT as a video alternative.

Static image ads → ChatGPT image prompt only at every status level including [DEAD]. Never generate a Higgsfield prompt for a static image ad under any circumstance.

Brief scope by status:

[EARLY WARNING] → one brief for the single failing element only. Frame as a test variation alongside the current ad.

[FATIGUED] → one brief per failing element only.

[DEAD] → for video: Higgsfield video prompt + copy brief. For static image: ChatGPT image prompt + copy brief.

Output grouping — present all briefs in two clearly separated sections:

## Video Refresh Briefs All video ad briefs here. Higgsfield prompts only.

## Image Refresh Briefs All static image ad briefs here. ChatGPT image prompts only — at every status level. One paste-ready ChatGPT prompt per ad. Nothing else.

If all qualifying ads are the same format, use only the relevant section. Do not create an empty section.

Brief structure — follow exactly:

### [Ad Name] — [Status]
**Refreshing:** [Element] | **Why:** [1 line — the specific number that triggered this brief]

---

#### Higgsfield Video Prompt
[Video ads only. Complete production spec — every scene, every shot, every word of on-screen text
with exact wording, every timing. Nothing left for Higgsfield to interpret.

For hook only: describe seconds 0–3 only. End with: "Keep everything from second 3 onward
exactly unchanged."
For mid-section only: describe from second 3 onward. Start with: "Keep the opening [X] seconds
exactly unchanged."
For full replacement: describe complete video from first frame to end card.]

**Before running:** [Upload instruction. If nothing needed: "No upload required — paste directly."]

---

#### ChatGPT Image Prompt
[Static image ads only — all status levels. Complete visual spec written as natural language image
generation instruction: exact composition, product placement, lighting, mood, on-screen text
word-for-word, style, aspect ratio. Self-contained — paste directly into ChatGPT image generation
and get the output. No fields to fill in, no placeholders.]

**Before running:** [Upload instruction if product reference needed. Otherwise:
"No upload required — paste directly."]

---

#### Claude's Copy
[Copy-failing elements only. 3 complete variants as finished ad text — continuous, no labels,
no field identifiers, exactly as the ad reads in the feed. Format-matched to confirmed existing
copy: same length, same rhythm, same structure.]

Variant 1:
[Full ad text]

Variant 2:
[Full ad text]

Variant 3:
[Full ad text]

---

#### ChatGPT Prompt for Additional Copy Variants
[Optional — only when more than 3 variants are needed. Contains: angle + persona constraint
block, one Claude variant labeled "Match this format exactly", word count and format rules,
instruction to output continuous ad text with no labels. ChatGPT's only latitude is word-level
variation within the same structure.]

**To use:** Paste directly into ChatGPT alongside your landing page URL.


Non-negotiable rules:

Never write a brief before completing both Stage A and Stage B silently.

Copy format must come from in-ad copy confirmed by Stage B — never from the ad name or metrics alone.

Every copy variant is written as finished ad text — continuous, no labels, exactly as the ad reads in the feed.

In-ad text super copy must match confirmed super format — same word count per line, same case, same number of supers, same timing.

Caption copy must match confirmed length — short-form in produces short-form out, long-form in produces long-form out.

Higgsfield video prompts contain no creative ambiguity. Every sentence describes something renderable. No "natural," "authentic," "compelling," or "engaging" without a concrete visual attached.

ChatGPT image prompts: complete visual spec, exact composition, product placement, lighting, on-screen text word-for-word, aspect ratio. Paste-ready with zero editing required.

ChatGPT volume prompt must include one Claude variant labeled "Match this format exactly."

Video ads: Higgsfield only. Never offer ChatGPT as a video alternative under any circumstance.

Static image ads: ChatGPT only at every status level. Never generate a Higgsfield prompt for a static image ad.

Refresh Recommendation Rules

CTR decline only → Video: Hook Rate below 25% = hook replacement only. Hook Rate fine but Hold Rate dropping = mid-section replacement only. Static: visual replacement.

Frequency creep + CTR decline → Full creative refresh. New format, new angle, new hook.

CPA increase + CVR decline → Diagnose landing page alignment first. Only brief new copy if the ad is the misalignment.

Spend shift only → Copy or angle variant only. Not a full new production.

[DEAD] → Full replacement. New persona, new angle, new format.

Video → Always include Hook Rate and Hold Rate. Higgsfield prompt maps to exactly where in the funnel the failure is.

Static → Diagnose failure as visual (low CTR), copy (CVR declining with stable CTR), or offer (CPA rising with stable CVR).

Audit powered by GoMarble MCP + Claude

What you get back

  • Format: Two things, for every ad flagged as fatigued or worse:
    • Creative Fatigue Report — summary, Priority Action Table, Ad Status Summary table
    • Paste-ready Video/Image Refresh Briefs — Higgsfield or ChatGPT prompts plus 3 ad-copy variants per failing ad
Upgrade

Want this automated?

Run the prompt above every Monday morning automatically. GoMarble Agents don't just deliver the report (Slack / email / in-app) — they can execute the recommended changes directly in your ad account, too. Offload the whole recurring task and stop doing it manually.

Try GoMarble Agents free →

FAQ

How does the prompt decide an ad is fatigued?
It checks 5 signals (CTR decline, frequency creep, CPA increase, CVR decline, spend shift) over baseline/mid/current 7-day windows and scores each ad HEALTHY, EARLY WARNING, FATIGUED, or DEAD based on how many signals trigger.
What if an ad has fewer than 7 days of data?
It's flagged [PRELIMINARY — insufficient data] and excluded from all tables.
Does it generate the actual creative, or just a brief?
Just the brief — a paste-ready Higgsfield video prompt or ChatGPT image prompt plus 3 ad-copy variants. You run the prompt in Higgsfield/ChatGPT yourself.

Skip the prompt — let GoMarble do this for you.

Sign up, connect your ad accounts, and creative fatigue detection + iterations runs on every account, every week, automatically.