The rule: replicate or rework, never both
Copy a confirmed winner exactly and it fatigues faster, because the algorithm and the audience have already seen it. Throw five unrelated ideas at it and you learn nothing, because you changed too much at once to know what mattered. One rule fixes both: winners you replicate, potentials you rework.
A confirmed winner is proven. It clears your norm and holds up across the 3, 7 and 14 day windows, or at least two of the three. It does not need reinventing, only small, deliberate variations that test one thing at a time, so the pool keeps learning without discarding what already works.
A potential is close but underfunded. It clears your norm but sits under 5% of its campaign's spend, so nobody can yet tell whether it is a real winner or an accident of low volume. A small tweak will not move that. It needs one bigger leap, a different persona or a different angle, because the current combination is close but not landing.
Reverse the two and you get the account most people run without meaning to: small tweaks on ads that are still guessing, and full reinvention of the one ad that was already working. That is what produces bloat, a pile of near-duplicate ads that teach you nothing and split your budget.
Before you touch a single variant: the gatekeeper
Stop and do not produce variants when any of the following is true:
- there is no confirmed winner, only "hot" or "too early" ads. Building on an unproven ad is exactly the bloat this method exists to prevent
- your tracking is not reliable right now. If the winner selection cannot be trusted, neither can a brief built on top of it
- the campaign has run for less than about a week. A few days of data is learning, not a signal
- variants from a previous cycle are still sitting in the creative pool, not yet live. Get those running first
Step 1: pull apart what actually wins
Before you can vary something, you have to name it. Break every confirmed winner into the hook (the opening line, or the first three seconds of a video), the offer, the format, the product, and the angle you used. Skip this and the "variants" end up as cosmetic reshuffles of the same idea.
Without API access to the account, this works from a screenshot, the ad copy, and for video, the transcript or the opening lines. The hook lives in the words, not in the footage.
Step 2: build variants, one change at a time
For each confirmed winner, build 2 to 4 variants. Each one changes exactly one variable:
- same angle, different product or model
- same product, different hook
- same concept, different format (static to video, or 4:5 to 9:16)
- same image, different copy angle
Change two things at once and you cannot say which one moved the result. That is the whole discipline: one lever per variant.
For each potential, build one variant that takes the bigger leap: a different persona, or a different angle entirely. A small tweak already failed to move it past 5% of spend, so a bigger swing tells you whether the offer or the audience was the real issue.
Write down, per variant: the source winner, the single changed variable, the ad set it targets, and a name that follows your own naming convention, so your next winner-detection run can trace a new ad back to where it came from.
Step 3: drop the weak ones before anyone sees them
Before a variant goes anywhere, check it against three questions: does it fit the brand, does it speak to the persona it targets, and is it a genuine variant rather than a near-duplicate of one you already have. Whatever fails, drop it, and say out loud what you dropped and why. Two strong variants beat four mediocre ones.
The caps that keep the flywheel from bloating
These are practitioner rules of thumb, not statistics:
- max 4 new ads per ad set, per cycle, and max 12 per account, per run. Beyond that you thin the spend across too many ads for any of them to gather enough volume to learn from, and more than this per cycle is production, not testing
- a cycle runs 7 to 14 days. New variants have to be produced first and then need time to learn. Running this more often measures noise, not results
- retention winners and prospecting winners do not cross over. A great return on existing customers says nothing about how the same ad lands on a cold audience, and the reverse
- a promo winner is not a full-price winner. An ad that performed during a sale performed at a discounted price, so variants of it belong in the next sale, not in a full-price campaign
If the same ad keeps needing a refresh
If a winner shows up as a fatigue candidate cycle after cycle, however many variants you throw at it, that is not a creative problem anymore. That is a process question: why does nothing survive past a few weeks, why does the brief never change based on what came back. A root cause interview like the one in our five whys guide is built for exactly that kind of recurring pattern. A new variant will not fix a process issue.
The skill
The Creative Flywheel skill takes a winner report and turns it into a ready briefing file: per winner, the variants and the copy proposals, following the rules above, including the caps.
Download the Creative Flywheel skill (zip)
It needs a winner report to start from. No report yet? Our volume gate guide covers the method and the free skill that produces it. Per winner, you also provide a screenshot and the ad copy or transcript. In Claude Code, copy the folder to ~/.claude/skills/. In the Claude app, upload the zip in the skills settings. The examples folder has a full fictional briefing built on the same fictional export used in the volume gate guide, including a winner the gatekeeper blocks because it is not confirmed yet.
What this is not
It does not generate images or video, it writes the brief. It never uploads or activates anything in an ad account, and it is not affiliated with or endorsed by Meta.
One next step
Take your most recent winner report. Pick one confirmed winner and write two variants for it by hand, each with exactly one changed variable. That is the whole method, before you ever open the skill.