← All skills
Productionv1.0.0 · 2026-08-07
Bulk Ad Variations
One product becomes a hundred distinct static ads. Not a hundred rewordings of the same ad — a hundred genuinely different arguments, because the matrix multiplies three independent building blocks:
What it does
- Build the persona with PQR
- Pick the angles
- Define the offers
- Generate the matrix
- Write the copy
- Render
SKILL.md
---
name: bulk-ad-variations
description: Turn one product and one reference ad into 100+ on-brand static ad variations using the Persona x Angle x Offer framework. Use when asked to scale ads, make ad variations, batch creatives, build bulk creative, generate a creative matrix, produce ads for every persona, write Meta ad copy at volume, fight creative fatigue, or someone says 'we need way more ads'. For a single polished creative, see meta-ads-creative. For the persona itself, see pqr-persona-builder. For the ten arguments, see ten-angles-copy.
metadata:
version: 1.0.0
---
# Bulk ad variations
One product becomes a hundred distinct static ads. Not a hundred rewordings of the
same ad — a hundred genuinely different arguments, because the matrix multiplies
three independent building blocks:
```
PERSONA × ANGLE × OFFER
who you talk to the argument the deal on the table
```
The old way: 3–5 people, a full week, maybe 20 creatives. This: one operator, about
an hour, 100+ ready to test.
This works because Meta does not reward one perfect ad. It rewards volume plus
diversity. The more distinct angles you feed the algorithm, the faster it finds your
winner.
## Before you start
You need three things. If any is missing, ask — do not invent them.
| Input | Why |
| --- | --- |
| Product, price, offer | The Offer axis, and every claim you may make |
| Brand lock — logo path, hex colours, font | Every creative must be on-brand |
| A reference ad that already works | The layout you are replicating |
## Step 1 — Build the persona with PQR
Five questions produce a real person instead of a vague guess. Full method and the
research prompt: [references/persona-pqr.md](references/persona-pqr.md).
- **D**emographics — age, stage, location, income
- **P**roblems — what hurts daily
- **Q**uestions — what they ask, what they search at midnight
- **R**oadblocks — what they already tried that failed
- **R**esults — the outcome they are chasing
Use their real words, not marketing language. Build 2–3 distinct personas; more than
that and they blur into each other.
## Step 2 — Pick the angles
Ten angles, each with a fill-in formula that works on any product. The full table
with formulas and worked hooks:
[references/the-10-angles.md](references/the-10-angles.md).
> Callout · Enemy · Mistake · Secret · Proof · Compare · Number · Question ·
> Confession · Future
The angle is not your product. It is the way into the mind. Same person, ten
different arguments for why they should care.
Use all ten unless the product genuinely rules one out — a brand-new product has no
Proof angle yet, for example. Say which you dropped and why.
## Step 3 — Define the offers
Each offer has five parts: the product, the promise, the deal, the reason to act
now, and the risk reversal. Build 2–3 variants — for example full price, launch
discount, and bundle.
## Step 4 — Generate the matrix
```bash
python3 scripts/build_matrix.py --personas 3 --angles 10 --offers 2 \
--brand acme --out matrix.csv
```
3 × 10 × 2 = 60 combinations. Each row carries a stable ID and the output filename,
so nothing is generated twice and every creative traces back to its cell.
Do not hand-write the matrix. The script is deterministic; you are not.
## Step 5 — Write the copy
For each row write: **hook** (≤8 words), **headline**, **subhead**, **CTA**.
- The hook follows that angle's formula. Do not drift into a different angle.
- Speak the persona's words, taken from their Problems and Questions.
- Never invent a statistic, review, rating, or claim the operator did not supply.
## Step 6 — Render
Rebuild the reference ad's layout with fresh messaging. Deconstruct the reference
first: layout grid and visual hierarchy, hook and headline placement and size,
subhead and CTA and offer-badge positions, social proof placement.
- Size `1080x1350` (4:5) unless told otherwise.
- Save as `output/<date>/<persona>_<angle>_<variant>.png`, matching the matrix.
- Brand lock is absolute: correct logo, colours, and font on every single creative.
Never distort the product photo.
## Step 7 — Shortlist
**Never launch all variations.** Rank them and pick the top 15–20, giving one line
per creative on why it earns a test slot. Cover a spread of angles in the shortlist —
if twelve of your fifteen are Proof angles, you have rebuilt the fatigue problem you
were solving.
## Output
```
matrix.csv every combination, with IDs and filenames
output/<date>/*.png the rendered creatives
shortlist.md top 15-20, ranked, one line of reasoning each
```
## When it breaks
| What you see | What it means | The fix |
| --- | --- | --- |
| Every hook sounds the same | Personas differ only by demographics, not by Problems and Roadblocks | Rebuild the personas; two segments are not two personas |
| Hooks drift off their angle | The angle formula was paraphrased instead of filled in | Re-read the formula in `references/the-10-angles.md`, one angle per row |
| Copy sounds generic | Persona words came from you, not from their Questions | Pull the exact phrasing from the PQR profile |
| Creatives look off-brand | Brand lock was relaxed to make a layout work | Brand lock is absolute; change the layout, not the lock |
| Matrix has duplicate rows | The matrix was hand-written | Regenerate with `build_matrix.py` — it is deterministic |
| Shortlist is all one angle | Ranked on quality alone, ignoring spread | Cover a spread of angles, or you rebuild the fatigue problem |
| Operator asks for proof you do not have | The Proof or Number angle has no supplied result | Drop that angle and say why. Never fabricate one |
Never retry blindly. If an input is missing, stop and ask — do not guess a brand
colour, a price, or a claim.
## Rules
- **Never invent proof**, because a fake rating in a hundred variations is a hundred
fabricated claims shipped at once.
- **Never break brand lock to make a creative look better**, because one off-brand
cell breaks batch consistency in reporting and in the feed.
- **Never launch the full batch — always shortlist**, because volume is for ideas
and the live account gets only ranked, distinct angles.
- **Every creative legible on mobile with zero spelling errors**, because the matrix
multiplies mistakes exactly as fast as it multiplies wins.
- **Stop and ask when brand lock or reference is missing**, because guessed colours
and invented claims turn the whole batch into rework.
- **One angle per creative**, because a hook mixing Enemy and Proof lands as neither.
## Related skills
- **meta-ads-creative** — one creative, built and judged deeply; this skill is that at volume.
- **pqr-persona-builder** — builds the persona axis of the matrix.
- **ten-angles-copy** — the angle axis, with formulas and drops.
- **creative-diversity-audit** — checks the finished batch is genuinely diverse.
Reviews
Sign in to leave a review.
