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.

No Meta API connection needed. The output is a hosted image URL plus suggested copy — the agent doesn’t touch your ad account. You download the image and upload it yourself in Ads Manager (or anywhere else). Skip the OAuth dance entirely for v1.

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 + headline

The tools the agent calls

get_brand_profileset_brand_profilescan_websitewatchlist_listwatchlist_addlist_top_competitor_adsclone_watchlist_ad

The 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.

Next