Clone the ad working best for your competitors.
One sentence to Claude. Your agent reads your watchlist, ranks every cached ad across the brands you track by spend × longevity, surfaces the top 10, and — once you pick — generates an on-brand variant via gpt-image-2 in your palette, language, and voice. The source ad’s composition becomes the scaffold; your brand fills it in.
What you’ll need
- BrandMov account + MCP key (sign up)
- At least one brand on your watchlist — the agent will offer to add some if your list is empty
- An MCP client: Claude Desktop, Claude Code, Cursor, or any tool that speaks MCP
The prompt
Type this in, hit enter:
Clone the ad that’s working best for my competitors.
That’s it. The agent runs the rest.
What the agent does
1. get_brand_profile # one-time gate — colors, language, brief
2. watchlist_list # which competitors are tracked?
↳ empty? → ask you for 3-4 brand names, watchlist_add for each
↳ present → "Use Athletic Greens, Liquid Death, Olipop? Or narrow it?"
3. list_top_competitor_ads(...) # top 10 across them, ranked & diversified
4. you pick one (#1 or "the Olipop one")
5. clone_watchlist_ad(...) # gpt-image-2 generates on-brand variant
↳ returns image_url + suggested primary text + headlineThe tools the agent calls
get_brand_profileset_brand_profilescan_websitewatchlist_listwatchlist_addlist_top_competitor_adsclone_watchlist_adThe first three set up your brand once. Every subsequent run uses only the last three.
The ranking
Each candidate scores as spend_estimate + (days_live × 50). Spend dominates when enrichment is present; pure-longevity ranking takes over when it isn’t. A one-year-running ad with no spend signal still beats a one-week-running ad with a few thousand in spend — long-running ads are the strongest signal a creative is working.
After ranking, the top 10 round-robin per brand — one ad per competitor before any competitor gets two slots. One heavy-spending brand never fills the list.
The brand profile (one-time)
First time only, the agent asks for three things:
- Homepage URL — we scan it and generate a one-paragraph brief about what you sell, your audience, and your voice
- Brand colors (hex codes) — up to 6, in priority order
- Content language — the language the on-image text should render in
You can also stash global notes the agent applies to every future clone (“always show product top-left”, “avoid ‘innovative’”, etc.). Edit any of it later via set_brand_profile or the dashboard.
What you get back
{
"image_url": "https://r2.brandmov.com/ad-clones/.../abc.png",
"primary_text_suggestion": "The hook of the source ad — yours to riff on.",
"headline_suggestion": null,
"source": {
"watchlist_id": "wl_athletic_greens",
"ad_archive_id": "23857...",
"brand": "Athletic Greens",
"media_url": "https://...source ad mediaUrl...",
"hook": "The #1 thing I do every morning for energy..."
},
"brand_profile_used": { "colors": [...], "language": "English", ... }
}The image URL is hosted on R2 indefinitely. Download it, upload to Ads Manager, or hand it to your designer.
Cost
~$0.05 per clone at quality=medium. Bump to high via OPENAI_IMAGE_QUALITY=high if you want closer-to-final photo realism (~$0.20).
Steady-state vs. cold-start
The brand-profile setup runs once, ever. After that:
- First-ever call: 3 setup questions (URL, colors, language), then the workflow runs. ~45s total.
- Every call after: “Clone my top competitor ad” → the agent picks brands, you pick one, image comes back. Two user turns, ~30s.
Adjacent workflow
This flow sources from competitors. If you’ve already curated a swipe file of ads you love, see Clone a winning ad with GPT Image 2 — same idea, but the source is your saved ads.