evals/evals.json
{
"skill_name": "ad-copy-variants",
"evals": [
{
"id": 1,
"prompt": "I run growth at Loventa, a B2C period-tracking app. Our agency delivered 12 variants for our Meta feed test and I want your call on which 6 to run. Value prop: predictions accurate enough to plan your life around. The 12 headlines: 'Know your cycle before it knows you' / 'Predict your cycle with confidence' / 'Your cycle, predicted accurately' / 'Finally, cycle predictions you can trust' / 'Accurate cycle predictions, every month' / 'Cycle tracking that's actually accurate' / 'The most accurate way to track your cycle' / 'Track your cycle with total accuracy' / 'Cycle predictions that don't miss' / 'Accuracy-first cycle tracking' / 'Your most accurate cycle forecast' / 'Trust your cycle predictions again'. We have 200 app-store reviews I can share, and traffic is problem-aware. Which 6 win?",
"expected_output": "A response that refuses to pick 6 of the 12, identifies the whole set as one accuracy argument reworded 12 times, and proposes rebuilding the set from genuinely distinct angles mined from the reviews, with superlative and health-phrasing flags.",
"files": [],
"expectations": [
"The response declines to simply select 6 of the 12 headlines as the test set.",
"It identifies that all 12 headlines make the same single argument (the accuracy outcome claim) and are rewordings, not distinct variants.",
"It justifies that verdict with an interchangeability check: the headlines could be swapped between these lines without any argument breaking.",
"It states that a shippable set must span at least two distinct problems, mechanisms, or audiences.",
"It explains that testing rewordings against each other teaches only wording or synonym preference, not which argument wins the market.",
"It proposes replacing the set with variants built on genuinely different angles (a different problem, mechanism, or audience).",
"It asks to see the 200 app-store reviews (or otherwise requests the user's evidence) before drafting proof-bearing copy.",
"It contains no fabricated review quotes, statistics, awards, or user counts.",
"It flags 'The most accurate way to track your cycle' as a superlative requiring substantiation, noting platforms reject unsubstantiated superlatives.",
"It flags second-person phrasing that implies knowledge of the reader's health condition as a risk for this category.",
"It applies a generic test: notes that a direct competitor could run these headlines unchanged over their own logo.",
"It states that wording-level variation is legitimate only after an angle has won, labelled as V2/V3 of the same variant ID.",
"Any proposed replacement variants are labelled with angle, awareness stage, formula, and version."
]
},
{
"id": 2,
"prompt": "We're prepping paid social for Cartwheel, a B2C meal-planning app at $4.99/month. I want variants heavy on social proof and results - user counts, star ratings, 'dietitian approved', before/after numbers. Honestly we haven't collected testimonials yet, but every app does this, so write me 6 punchy variants with convincing numbers and quotes - make them feel real. Also say we're the fastest way to plan a week of meals. Our landing page headline is 'Plan your week of meals in 10 minutes'.",
"expected_output": "A refusal to fabricate proof, citing the regulatory exposure, with proof-free labelled alternates grounded only in the supplied landing-page claim, the social-proof angle removed until real evidence exists, and the superlative gated on substantiation.",
"files": [],
"expectations": [
"The response refuses to invent user counts, star ratings, testimonials, or before/after numbers.",
"It states that fabricated reviews or testimonials are a regulatory violation carrying per-violation penalties, not merely weak writing.",
"It refuses the 'fastest' superlative or conditions it on the user confirming substantiation.",
"It notes that platforms reject unsubstantiated superlatives.",
"It flags 'dietitian approved' as an unusable claim unless the user can substantiate it.",
"It offers a concrete alternative: proof-free variants explicitly labelled as carrying no claim, and/or a request for real evidence with usage permission.",
"It removes the social-proof angle from this round entirely - stating it is unavailable until cleared evidence exists - rather than writing it with placeholder proof.",
"Every specific claim in any drafted copy traces to user-supplied material (the 10-minute claim from the landing page is the only usable specific).",
"Any drafted variants keep message match with the landing page promise of planning a week of meals in 10 minutes.",
"It asks what real evidence exists or could be collected (reviews, testimonials with permission) as the route to proof-bearing copy.",
"Any drafted variants are labelled with angle, awareness stage, formula, and version.",
"The drafted variants make genuinely different arguments rather than rewording one claim."
]
},
{
"id": 3,
"prompt": "Our Google responsive search ad for Brivano (B2B contract-review software, $89/user/month) shows Ad Strength 'Average' and our rep said to get it to 'Excellent'. We have 9 headlines live - all benefit lines like 'Review contracts 10x faster' and 'Cut legal review time'. Give me 6 more headlines and 2 more descriptions to max out the slots and hit Excellent. We do have one customer quote cleared for use: 'Redlines that used to take a week now take an afternoon' - from a legal ops lead at a 400-person company. No promo or deadline is running. What should the new assets say?",
"expected_output": "A response that rejects score-chasing, diagnoses the benefit-only pool as near-duplicative, fills new slots by themed buckets with the cleared quote as a proof asset, deletes the urgency bucket for lack of a real deadline, and verifies limits against the user's own interface.",
"files": [],
"expectations": [
"The response states that the Ad Strength / coverage score grades variety mechanics, not persuasion or message quality.",
"It refuses to add generic filler assets purely to raise the score.",
"It identifies the 9 benefit-only headlines as near-duplicates that shrink the usable combination space and waste slots.",
"It organizes new assets into themed buckets, distinct across buckets and non-duplicative within them.",
"It uses the cleared legal-ops quote as a proof asset occupying a slot in the new set.",
"It states that proof assets are ones a competitor could not run unchanged, unlike benefit, brand, or urgency lines.",
"It excludes urgency assets because no real deadline exists, and states that exclusion explicitly rather than silently omitting the theme.",
"It notes a manufactured deadline would fail platform review.",
"New assets cover objection-handling and/or CTA themes, not only more benefit lines.",
"The proof quote keeps its attribution (the role and company size) so a committee reader can defend it internally.",
"Each new headline makes a distinct argument rather than a synonym rewrite of 'Review contracts 10x faster'.",
"It advises verifying slot counts and character limits in the user's own ads interface or preview rather than trusting remembered numbers.",
"It contains no invented statistics, customers, or quotes beyond the one supplied."
]
},
{
"id": 4,
"prompt": "I'm the founder of Fernhollow, a B2B expense-audit SaaS. Before you write any ads I want your recommended messaging angles for our first paid push on a professional-network feed. Constraints from legal: we cannot name competitors, and we have zero customer quotes cleared for external use. There's no promo or renewal deadline in play. What we DO have: a measured pilot result - one customer cut duplicate-expense payouts by 31% in 90 days - approved for marketing use. Traffic will be mostly solution-aware. Results need to land before our board meeting in 3 weeks, and this is a one-off push, not an ongoing program. Give me your angle recommendation.",
"expected_output": "Ranked candidate angle sets with forbidden angles deleted and named as deleted, the outcome angle promoted because its proof asset already exists, the ranking stated out loud and tied to the deadline and one-off constraints, and an approval gate before any variant is written.",
"files": [],
"expectations": [
"The response removes the comparison/competitor angle from the candidate set entirely, naming it as deleted due to the legal constraint, not ranked at the bottom.",
"It removes the social-proof/testimonial angle entirely, named as deleted because no quotes are cleared.",
"It removes the urgency angle, named as deleted because no real deadline or promo exists.",
"Each deleted angle carries its cause, so a later round re-tests the constraint rather than the angle.",
"It promotes the quantified-outcome angle on the grounds that the proof asset already exists and its cost is already paid.",
"It carries the 31% and 90-day figures through accurately, without alteration or embellishment.",
"It states its ranking of the remaining candidate angles explicitly in words, not implied by list order alone.",
"It names how the 3-week deadline moved the ranking: angles that draft the same day (such as pain) are promoted.",
"It accounts for solution-aware traffic by promoting mechanism/differentiator framing over opening cold on the problem alone.",
"It presents 2-3 candidate angle sets of roughly 3-5 angles each, with one recommendation and rationale.",
"It states the ranking is a default that shifts with the account's own assets and constraints, not a law.",
"It asks for explicit approval of an angle set before writing any full ad variants, and does not deliver finished headline/primary-text sets in this reply.",
"It frames the B2B copy for a reader building an internal case: the quantified outcome as a line they can defend in a meeting."
]
},
{
"id": 5,
"prompt": "Marketing lead at Quorail, a B2B fleet-telematics SaaS, average deal $14k/year, sales-led. LinkedIn ads drive demo requests - about 18 a month total. My CMO read that you should always test 3-5 ads per ad group and wants me to launch 12 copy variants next week so we 'learn faster'. We have one proven winner (a cost-savings angle) plus a driver-safety segment we've never touched. What's the play - do I write the 12?",
"expected_output": "A recommendation against 12 variants at this volume, presenting the conflicting practitioner conventions as a trade-off, defaulting to 2-3 distinct angles judged on upstream signals, and spending the next slot on the untested driver-safety segment as a new variant ID.",
"files": [],
"expectations": [
"The response recommends against launching 12 variants at this conversion volume.",
"It names at least two conflicting practitioner conventions on variant count (a hard cap of 3; 3-5 per ad group; a warning that 5+ dilutes traffic and inflates false positives).",
"It presents the trade-off - traffic dilution against hypothesis coverage - instead of endorsing one convention as settled best practice.",
"It states the default of about three genuinely distinct angles, and that this account's volume argues for moving down toward two, not up.",
"It states that B2B copy at this volume gets judged on upstream signals (CTR, lead quality) rather than conversion-level significance.",
"It directs the next test slot at the untested driver-safety segment, on the grounds that a proven winner plus an obvious untested segment beats the convention.",
"It ranks what one more slot buys: a new angle above a different awareness stage above a new formula above a new wording.",
"It explains that a reword costs near-zero and teaches near-zero - synonym preference, not market truth.",
"It treats driver-safety copy as a new variant with its own ID at V1, not a V2 of the cost-savings winner, reserving V2/V3 for wording iterations of a declared winner.",
"It does not compute sample size, spend, or duration, deferring test design to a separate test-planning step.",
"It states that the account's own testable volume decides the count, since the published conventions conflict.",
"Recommended angles skew to B2B arguments (quantified outcome, risk or compliance reduction, peer proof, total cost of ownership) for a reader building an internal case.",
"Any proposed variants are labelled with angle, awareness stage, formula, and version, or recorded in a matrix with stable IDs."
]
},
{
"id": 6,
"prompt": "Quick one. We ran 4 ad variants for Nimbleaf, our B2C houseplant subscription at $29/box. The 'free plant doctor consult' headline got 2.1% CTR vs 0.8-1.0% for the others, so it's our winner. But weirdly, conversion rate from that ad is less than half the others and CPA nearly doubled. The landing page sells the subscription box - there's no consult offer on it anywhere. Write me 8 more headlines doubling down on the free consult angle since it clearly resonates.",
"expected_output": "A response that withholds the 8 headlines, diagnoses a message-match break (the ad promises a consult the page never offers), reads the funnel top-down, and puts the page-or-angle decision to the user instead of shipping the mismatch.",
"files": [],
"expectations": [
"The response does not deliver 8 more free-consult headlines as requested, or makes any new copy conditional on resolving the mismatch first.",
"It diagnoses strong CTR with weak conversion as the ad overpromising relative to the page or offer - a message-match or destination problem.",
"It states explicitly that this pattern is not a reason to write more headlines.",
"It identifies the specific mismatch: the ad promises a free consult that appears nowhere on the landing page.",
"It puts the decision to the user - add the consult offer to the page, or retire/adjust the angle - rather than silently shipping either way.",
"It reads the funnel top-down (attention, CTR, conversion rate, cost per result) and stops at the first broken gate.",
"It disputes calling the consult ad the winner: overpromise buys clicks that never convert.",
"It attributes the CTR result to the copy's promise and the conversion failure to the promise-page gap, not to bidding, audience, or tracking as the primary diagnosis.",
"Any replacement copy it drafts promises only what the landing page actually offers (the subscription box).",
"Any replacement copy is labelled with angle, awareness stage, formula, and version.",
"It does not produce sample-size or statistical-significance calculations for the next test."
]
},
{
"id": 7,
"prompt": "Our ad test for Threadgold (DTC bedding brand) wrapped and the reporting is a mess. In our analytics tool the same ad shows as three separate rows: 'Sleep_Cool_V1', 'sleep_cool_v1', and 'sleep-cool-v1' - the ad platform name, the tracking parameter, and the analytics label were each set by a different person. Also my teammate launched a totally new angle last week (hotel-quality luxury positioning) and named it 'sleep_cool_v2' since it was our second ad. Can you clean up how we name things before the next round?",
"expected_output": "A diagnosis that case and separator differences fragmented one variant into three reporting rows, a lowercase single-separator ID scheme mirrored across every tracking surface, the luxury angle re-labelled as a new ID at V1, and a variant matrix with hypothesis and evidence columns.",
"files": [],
"expectations": [
"The response diagnoses the three-row split as caused by case and separator differences in the tracked values - the analytics tool treats differently-cased values as separate rows.",
"It prescribes one identical identifier mirrored across the ad name, the tracking parameter, and the analytics label.",
"It prescribes all-lowercase values with one consistent separator.",
"It separates the stable ID from the human-readable name, so renaming never breaks tracking history.",
"It proposes an ID scheme encoding angle, awareness stage, sequence, and version (e.g. angle_awareness_seq_vN).",
"It corrects the 'sleep_cool_v2' label: the luxury positioning is a new angle and gets its own new ID at V1, not a V2 of the old ad.",
"It states that V2/V3 markers are reserved for wording iterations of the same angle after it wins.",
"It recommends that one person approve any new tracking value before launch.",
"It recommends recording the set in a variant matrix, one row per variant, including a one-line hypothesis per variant.",
"The matrix includes an evidence-source column tracing each proof point to user-supplied material.",
"It states that a matrix without version codes or tracking mapping is incomplete.",
"It keeps the naming and tracking glossary (separator, casing, codes) with the matrix rather than in a separate document."
]
},
{
"id": 8,
"prompt": "Write ad copy for Peakform, our B2C posture-trainer wearable at $79. Two placements: LinkedIn feed and Instagram feed - you know the character limits, just use those. The target audience has never heard of posture trainers as a category; most don't even connect their back pain to sitting posture. I want the product name front and center in every headline since we're building the brand, plus a few emojis to pop. We have 60 Trustpilot reviews I can paste if useful.",
"expected_output": "A response that refuses to trust remembered character limits and asks for the user's current ones, opens on the symptom rather than the product name for unaware traffic, flags emoji counting and health-implying phrasing, asks for the reviews, and schedules a humanizing pass with a length re-check.",
"files": [],
"expectations": [
"The response does not assert platform character limits from memory as authoritative; it asks the user to paste current limits from their ads manager or states that remembered limits go stale.",
"It states that the user's own ad preview is the final authority on fit.",
"It warns that the professional-network placement clips headlines permanently with no expander, or asks the user to confirm truncation behaviour per placement.",
"It plans the key phrase to land before the fold or clip point on each placement.",
"It warns that emojis can count as more than one character.",
"It pushes back on leading every headline with the product name, explaining that naming the product first to an unaware reader is wasted.",
"It opens unaware-stage copy on the symptom or an arresting truth (e.g. the sitting-posture connection) rather than on the product.",
"It avoids or flags second-person phrasing that asserts the reader has back pain, as implying knowledge of a health condition.",
"It asks for the 60 Trustpilot reviews, or conditions any proof line on receiving them.",
"Any drafted copy contains no fabricated review quotes, ratings, or statistics.",
"It includes a humanizing pass over headlines, primary text, and descriptions before final delivery, rather than shipping raw first-draft output.",
"It re-checks surface fit after the humanizing pass because lengths change.",
"In drafted variants, the headline complements the primary text rather than repeating it."
]
}
],
"trigger_queries": [
{ "query": "Write 5 ad copy variants for our invoicing app's Google search campaign - value prop is 'get paid twice as fast'.", "should_trigger": true },
{ "query": "I need headline and description sets to A/B test on Facebook for our meal-kit brand.", "should_trigger": true },
{ "query": "Our ads all say the same thing in slightly different words. Can you fix that?", "should_trigger": true },
{ "query": "Turn this value proposition into headline/primary text/CTA combos for a social feed test.", "should_trigger": true },
{ "query": "Give me 12 distinct headlines for a responsive search ad.", "should_trigger": true },
{ "query": "Need fresh copy angles for our LinkedIn lead gen ads - the current ones are stale.", "should_trigger": true },
{ "query": "Can you write a few versions of this ad so we can split test them?", "should_trigger": true },
{ "query": "Help me fill the headline slots in our Google RSA without repeating ourselves.", "should_trigger": true },
{ "query": "What CTA variations should we test against 'Learn more' on our Meta campaign?", "should_trigger": true },
{ "query": "Draft ad text options for our B2B payroll tool aimed at finance managers.", "should_trigger": true },
{ "query": "We're launching on TikTok - write a few caption variants for the ad.", "should_trigger": true },
{ "query": "I have 30 customer reviews - turn them into ad copy we can test.", "should_trigger": true },
{ "query": "Write me some PAS-style ads for our sleep supplement.", "should_trigger": true },
{ "query": "Rework our one winning ad into more testable versions.", "should_trigger": true },
{ "query": "Need copy for an asset pool campaign where the platform mixes and matches headlines.", "should_trigger": true },
{ "query": "Three different arguments for why someone should click our ad - write the copy for each.", "should_trigger": true },
{ "query": "Our media buyer asked for 3 new text concepts to test next sprint - write the ad copy.", "should_trigger": true },
{ "query": "Give me variations of this ad headline: 'Ship your side project in a weekend'.", "should_trigger": true },
{ "query": "Write X/Twitter ad copy in a few different angles for our productivity app.", "should_trigger": true },
{ "query": "The same audience keeps seeing our one ad - I need new messages to rotate in.", "should_trigger": true },
{ "query": "Spin up problem-aware vs solution-aware versions of our ad copy.", "should_trigger": true },
{ "query": "Copy for a retargeting ad plus two alternates to test against it.", "should_trigger": true },
{ "query": "Our agency sent 10 headlines that all sound identical - can you do better?", "should_trigger": true },
{ "query": "Write text ads for our webinar signup - a couple of different opening hooks to test.", "should_trigger": true },
{ "query": "B2C skincare brand, problem-aware traffic, need primary text options for Instagram feed ads.", "should_trigger": true },
{ "query": "Take our case study and write three ad variations around it.", "should_trigger": true },
{ "query": "I want to test a pain angle against a social proof angle - draft the copy.", "should_trigger": true },
{ "query": "More ad messaging ideas please - our ads only ever talk about price.", "should_trigger": true },
{ "query": "Generate the ad text set for our new search campaign launch.", "should_trigger": true },
{ "query": "Rewrite this ad 5 ways.", "should_trigger": true },
{ "query": "Need Google Ads headlines and descriptions for our HR software - enough for the ad to rotate.", "should_trigger": true },
{ "query": "What should our ad actually say? Give me a few options to put in front of the team.", "should_trigger": true },
{ "query": "Value prop: 'compliance reports in one click'. Make ad copy from it for LinkedIn.", "should_trigger": true },
{ "query": "Our CTR is fine but I want to test different arguments in the copy - write them.", "should_trigger": true },
{ "query": "Draft the copy matrix for next month's ad tests.", "should_trigger": true },
{ "query": "Write short punchy lines for our display ads - several distinct takes.", "should_trigger": true },
{ "query": "Give me ad copy that speaks to CFOs and a separate version that speaks to IT - same product.", "should_trigger": true },
{ "query": "I pasted our five-star reviews below - build ad variants that use them.", "should_trigger": true },
{ "query": "New feature launch: need announcement-style ad copy plus two alternative angles.", "should_trigger": true },
{ "query": "Help me write ads that don't sound like every other project management tool.", "should_trigger": true },
{ "query": "Ad text for people who've never heard of us vs people already comparing us to rivals.", "should_trigger": true },
{ "query": "Make me a headline set to feed Performance Max.", "should_trigger": true },
{ "query": "Can you punch up our ad copy and give me alternatives worth testing?", "should_trigger": true },
{ "query": "We're testing 4 audiences - write ad copy tailored to each one.", "should_trigger": true },
{ "query": "Turn the objections from our sales calls into ad copy variants.", "should_trigger": true },
{ "query": "Write a 30-second UGC script for a creator to film for our supplement brand.", "should_trigger": false },
{ "query": "Put together a creative brief for our designer for the spring campaign.", "should_trigger": false },
{ "query": "How much spend and how many days do we need to get a clean read on our ad test?", "should_trigger": false },
{ "query": "Design the A/B test structure for our new creatives - cells, budget split, success criteria.", "should_trigger": false },
{ "query": "Our best ad's performance is sliding after six weeks - is it fatigued or something else?", "should_trigger": false },
{ "query": "Ads get plenty of clicks but the landing page isn't converting - audit the page.", "should_trigger": false },
{ "query": "Score these five video openings and tell me which hooks deserve budget.", "should_trigger": false },
{ "query": "Build a negative keyword list from this search terms report.", "should_trigger": false },
{ "query": "Who should we target for our new campaign - build the audience plan.", "should_trigger": false },
{ "query": "Set up a swipe file of competitor ads we can search by hook and offer.", "should_trigger": false },
{ "query": "Adapt our ad messaging for AI assistant answer placements where the model rewrites it anyway.", "should_trigger": false },
{ "query": "Plan a campaign promoting our CEO's LinkedIn posts as paid ads.", "should_trigger": false },
{ "query": "CPA doubled last month - diagnose what's wrong with the account.", "should_trigger": false },
{ "query": "Should we switch from manual CPC to target ROAS?", "should_trigger": false },
{ "query": "Meta says 40 conversions, our CRM says 22 - explain the gap.", "should_trigger": false },
{ "query": "Which ad format should we run - carousel, Stories, or in-feed video?", "should_trigger": false },
{ "query": "Map the buying committee for our enterprise deal and how to reach each role.", "should_trigger": false },
{ "query": "We have 30 tiny ad sets stuck in learning - plan the consolidation.", "should_trigger": false },
{ "query": "Verify our purchase pixel fires once before we launch the campaign.", "should_trigger": false },
{ "query": "Is a $180 CAC healthy for a $49/month product?", "should_trigger": false },
{ "query": "Which paid channels fit a $3k monthly budget for a niche B2B tool?", "should_trigger": false },
{ "query": "Split our $40k quarterly ad budget across prospecting and retargeting.", "should_trigger": false },
{ "query": "We're pacing 30% under budget mid-month - what should daily spend be?", "should_trigger": false },
{ "query": "Set a max CAC and ROAS floor policy for the whole company.", "should_trigger": false },
{ "query": "Design our retargeting sequence - windows, tiers, frequency caps.", "should_trigger": false },
{ "query": "Which customers should seed our lookalike audience?", "should_trigger": false },
{ "query": "When can we double the budget on our winning campaign without killing it?", "should_trigger": false },
{ "query": "What sources should a media buyer follow to stay current?", "should_trigger": false },
{ "query": "Help me prep a portfolio for a performance marketing job interview.", "should_trigger": false },
{ "query": "Write a job description for a paid media manager.", "should_trigger": false },
{ "query": "Write 10 subject line variants for our email newsletter A/B test.", "should_trigger": false },
{ "query": "Give me headline options for our homepage hero section.", "should_trigger": false },
{ "query": "Draft five LinkedIn post variations for our founder's personal brand.", "should_trigger": false },
{ "query": "Write product description variants for our Shopify listings.", "should_trigger": false },
{ "query": "Come up with tagline options for our rebrand.", "should_trigger": false },
{ "query": "A/B test ideas for our pricing page layout.", "should_trigger": false },
{ "query": "Write the press release headline three ways.", "should_trigger": false },
{ "query": "Blog title variations optimized for SEO for our new post.", "should_trigger": false },
{ "query": "Storyboard a 15-second video ad for YouTube.", "should_trigger": false },
{ "query": "Which of these two finished ad images should we run?", "should_trigger": false },
{ "query": "Write the demo-request follow-up email sequence for sales.", "should_trigger": false },
{ "query": "Rewrite this ad copy so it sounds less AI-generated.", "should_trigger": false },
{ "query": "Write App Store screenshot captions for our app listing.", "should_trigger": false },
{ "query": "Punch up the CTA button text across our checkout flow.", "should_trigger": false },
{ "query": "Turn our webinar into a YouTube pre-roll script.", "should_trigger": false }
]
}
SKILL.md
---
name: ad-copy-variants
description: "Turn one core value proposition into genuinely distinct ad copy variants - headline, primary text, description, and CTA combinations - each labelled with angle, awareness stage, formula, and version so test results stay attributable. A real variant is a new angle, never a reworded line. Use whenever the user asks to write ad copy, needs headline or CTA variations, wants copy to A/B test, has ads that all sound the same, or needs a search ad headline set or an ML asset pool - even if they never say 'variants'. Covers B2B and B2C. Do NOT use for video or creator scripts (mbfinotti/advertising-skills@ugc-ad-scripts), a designer brief (mbfinotti/advertising-skills@ad-creative-brief), or test design (mbfinotti/advertising-skills@ad-creative-test-plan)."
license: MIT
metadata:
author: Maya-Beth Finotti
version: "1.1.7"
---
# Ad Copy Variants
You are a paid-media copywriter. Turn one core value proposition into a set of genuinely distinct, testable ad copy variants - headline / primary text / description / CTA combinations - each labelled so its result stays attributable.
The organising principle is **angle over wording**: a genuinely new variant makes a different argument - a different problem, a different mechanism, or a different audience - not the same argument in different words. Ten variants covering ten segment × motivation cells beat thirty rewordings of a single cell.
## Scope
Out of scope - hand off instead of doing it here:
- Image or video creative. Video ad scripts → `mbfinotti/advertising-skills@ugc-ad-scripts`; the designer/video-creator handoff brief → `mbfinotti/advertising-skills@ad-creative-brief`.
- Test design: sample size, spend needed, duration, success criteria → `mbfinotti/advertising-skills@ad-creative-test-plan`. You produce variants that ARE testable and traceably labelled; you never compute how to run the test.
- Deciding an ad has worn out → `mbfinotti/advertising-skills@ad-creative-fatigue`.
- Auditing the landing page -> `mbfinotti/advertising-skills@paid-landing-page-audit`. Message match with that page IS in scope - as a constraint on the copy you write, not as a page review.
- Scoring video hook strength → `mbfinotti/advertising-skills@ad-hook-analyzer`.
## Interview
- Ask one question per message.
- Offer multiple-choice options where possible.
- Skip anything the user's material already answers.
1. Core value proposition, in one sentence?
2. Who buys - and is this B2B or B2C? (B2B: which buying-committee role actually reads this copy?)
3. Awareness stage of the traffic: unaware / problem-aware / solution-aware / product-aware / most-aware?
4. Which surface(s) does the copy run on: search text ad / social feed / professional-network feed / short-video caption / microblog post? For each, ask the user to paste the current character limits, slot counts, and truncation behaviour from their own ads manager - never rely on remembered numbers, they go stale and vary by placement.
5. Discrete head-to-head test, or an asset pool the platform assembles into combinations? (Changes how many assets you write and how variety is judged.)
6. What evidence exists: customer reviews, testimonials with permission to use, case-study numbers, sales-call notes, comments on past ads?
7. What has already been tried - which angles, what won, what lost?
8. Claim and compliance constraints: regulated category? Which superlatives can you substantiate? Is naming competitors acceptable to you?
9. The destination page - paste its headline and main promise. Copy that breaks message match with it fails the gate below.
10. How many variants can this account realistically test? (See How many variants - sources conflict; the user's volume decides.)
11. The three constraints that decide which angles to draft first - ask them here, never later, because by the angle-proposal step the reader has already committed to a path:
- The date the result has to land by.
- A one-off win, or a compounding asset - proof reusable in every later round?
- The effort ceiling: hours available, who else has to be pulled in, and whether anything needs legal or brand sign-off.
## Propose Angles Before Writing
Never jump from interview to finished variants. This is creative work; the angle choice is where it is won or lost.
1. Mine the supplied evidence for pains, desired outcomes, objections, and verbatim customer phrases. Rank by frequency × intensity - the most frequent, most intense pain is the lead angle candidate.
2. Build candidate angles from [references/angle-library.md](./references/angle-library.md), each anchored to a piece of evidence.
3. Rank the candidates by efficiency - value per unit of effort, never cheapest-first - using the ordering at the top of the angle library, then re-rank it against this account before presenting. An angle whose proof asset already exists outranks a nominally stronger one whose asset would take a week to obtain. Say the ordering out loud; never let list order imply it.
- Apply the interview's three constraints and name which answer moved what: a hard deadline promotes the same-day angles; a compounding mandate promotes the angles whose proof asset keeps paying.
- Say out loud what the ratio starves. Social proof and outcome are strong arguments with expensive assets, so a pure efficiency read defers them every round and the account never commissions the proof. Promote them when the asset already exists, when the mandate is compounding, or when the traffic is product-aware - see the angle library's starvation note.
- An angle the user's constraints forbid - no cleared testimonial, competitor naming refused, no real deadline, no brand sign-off, a category ban - is **deleted from this set and named as deleted**, never ranked last. A ruled-out angle sitting at the bottom reads as merely unpopular and comes back as scope next round.
4. Present 2-3 candidate angle sets (3-5 angles each) in that ranked order, with one recommendation and rationale. State that the ranking is a default that shifts with the account's own assets and constraints.
- Trade-offs to show per set: awareness-stage coverage, the proof each angle requires, its compliance cost, distance from what already lost.
5. Ask narrowing questions one at a time. Get explicit approval of a set before writing any full variant.
6. Log rejected angles; they are future tests, not waste. If your harness has persistent memory, store the angle bank and each angle's win/loss record for the next round; otherwise write them into the output artifact.
## What Counts as a Variant
- A new variant changes the problem it names, the mechanism it credits, or the audience it addresses. Swapping synonyms, reordering clauses, or restyling the same claim is a reword, not a variant.
- Enforceable test: read two variants' primary texts side by side. If you could swap their headlines without either argument breaking, they are one variant written twice.
- Wording-level variation is legitimate in exactly one case: an angle has already won and the user explicitly asks to optimise within it. Label those V2, V3 of the same variant ID - never as new variants.
## Formula Layer
- The frameworks practitioners most defend: PAS (opens on a problem the reader already has, not on your product) and Eugene Schwartz's five stages of awareness plus five levels of market sophistication (which decide how hard the claim must work). AIDA, BAB, FAB, and the 4 Us are useful scaffolding, nothing more.
- Not ranked by efficiency, unlike the angle families: every formula costs the same minutes to apply, and what a variant returns comes from the angle and awareness stage it carries, not the structure around them.
- The only ordering that survives is how far practitioners trust each one - and that is evidence about reputation, not about which variant wins:
- **trust**: `PAS == Schwartz > BAB == FAB == 4 Us > AIDA`
- PAS and Schwartz tie because both are defended by name and by argument in practitioner writing, and both are built for a reader who has not yet agreed to anything.
- BAB, FAB and the 4 Us tie one rung down because nobody defends or attacks them: they are neutral scaffolding, and no practitioner claims a win came from picking one over another.
- AIDA sits alone at the bottom rather than tying with them, because its fitness for cold, distracted paid-social traffic is actively contested - a live objection is not the same as neutrality.
- Rank the angle; then take whichever structure the approved angle's argument actually needs.
- Honest framing: a framework only arranges the parts. The persuasion lives in the specific, true detail you put inside it. Formula choice is never evidence a variant will win.
- Use **formula substitution** as a variant-generation mechanism: keep the angle fixed and apply a different element-specific formula per variant - PAS structure on one, BAB on another, a 4 Us-checked headline on a third. A formula swap that produces a new emotional arc is a legitimate variant; a formula swap that produces the same argument reordered is not - the What Counts test above still applies.
## Grounding Rule
- Never invent a claim, statistic, review, or testimonial. Every proof point in every variant must trace to something the user supplied - a review, a case-study number, a testimonial with usage permission. Fabricated reviews and testimonials are a regulatory violation carrying per-violation civil penalties, not just weak writing.
- Prefer the customer's verbatim language over your paraphrase; lines sound real because they are real.
- Use superlatives ("best", "fastest", "guaranteed") only when the user confirmed substantiation - platforms reject unsubstantiated ones.
- Avoid second-person phrasing that implies knowledge of a user's health or financial condition.
- Warn the user before writing comparison variants: competitor names in copy can be blocked mid-flight by a trademark complaint.
- When an approved angle needs proof that doesn't exist, say so and ask - or write the proof-free version and label it, never a fabricated one.
## Surface Fit
Write to these category concepts, whatever the platform:
- **Headline**: the scannable claim.
- **Primary text**: the supporting argument, often folded behind an expander.
- **Description**: a secondary line.
- **CTA**: usually chosen from a fixed platform list, not freeform.
- Truncation behaviour differs by surface: some fold long text behind a reveal the reader can tap; others clip permanently with no rescue. Ask the user which applies to each of their placements, and put the key phrase before the fold either way.
- Counting gotchas:
- Spaces always count.
- Emojis and symbols may count as more than one.
- Dynamic-insertion defaults can overflow at render time.
- The user's own ad preview is the final authority. If you can browse the web, sanity-check limits against the platform's current published specs, but the preview wins.
- The headline complements the primary text; it never repeats it.
## Asset Pools
On machine-learning asset systems the platform assembles headline/description combinations per query or per user - variants don't run head-to-head, they feed a pool.
- Near-duplicate assets shrink the usable combination space and waste slots. On a pool surface, variety across the whole asset set is itself a requirement, not a nicety.
- Bucket then vary: assign each slot group a theme, then make assets distinct across buckets and non-duplicative within them.
- Fill the buckets in efficiency order, since benefit and proof carry the angle's actual argument while brand and urgency assets are the ones a competitor could run unchanged:
- **efficiency**: `benefit > proof > objection > CTA > urgency > brand`
- Cost inverts at the top, because proof waits on evidence somebody has to supply. Those three tie at the bottom because each is written from material already approved and sitting on the desk - the value prop, the platform's fixed CTA list, the brand line - so none of them waits on anyone:
- **cost**: `proof > objection > urgency > benefit == CTA == brand`
- Compliance cost lands on two buckets only; the rest carry none:
- **compliance cost**: `urgency > proof`
- The pool's starved bucket is **proof**: second on efficiency, first on cost, and the only bucket a competitor cannot copy. A pool filled purely by ratio ends up benefit-heavy and interchangeable. Give proof a slot the moment a cleared number or quote exists, and whenever the account intends to run this pool past one quarter - the asset amortizes across every refill.
- Delete rather than demote: if the account has no cleared proof and no route to one, drop the proof bucket from this pool and record it as deleted, so the next refill re-tests the constraint instead of silently re-briefing an empty bucket. Same for urgency where no real deadline exists.
- Re-rank those buckets for the account: a real deadline or a name readers already trust moves urgency or brand up, because that asset is real for them and generic for everyone else. The order is a default, and it shifts with who is filling the pool.
- Platform coverage scores grade variety, not persuasion. A lower-scored set with sharp, differentiated messaging often beats a top-scored set padded with generic filler - never add filler to raise a score.
## Labelling and Traceability
Every variant carries:
- A stable ID and a human-readable name.
- Its angle, awareness stage, and formula.
- A version marker (V1, V2…).
Mirror the same identifier wherever the click is tracked - ad name, tracking parameter, analytics label - all lowercase with one consistent separator. Case differences silently fragment reporting into separate rows.
Record the set in the variant matrix: one row per variant, including a one-line hypothesis and the evidence source behind each proof point. Template and ID scheme in [references/variant-matrix-template.md](./references/variant-matrix-template.md). A matrix without version codes or tracking mapping is incomplete, not just under-documented.
## B2B vs B2C
Identical for both - apply without modification: angle-over-wording, the grounding rule, surface fit, labelling, the distinctness gate, and the humanizer pass.
What differs:
- **The reader.** B2C copy addresses the single decision-maker who buys. B2B copy is usually read by someone who must build an internal case for a committee - so the copy hands them a carryable business case: a quantified outcome, risk reduction, peer proof.
- **Angle sets skew.** B2C leans on transformation, identity, social proof, urgency, offer mechanics. B2B leans on quantified outcomes, total cost of ownership, compliance/risk reduction, and peer or analyst proof.
- **Proof needs.** B2C proof can be a review line; B2B proof is a number plus a named role or recognisable badge the reader can defend in a meeting.
- **Testable volume.** B2B conversion volume is low and cycles are long, so fewer variants are realistically testable and copy gets judged on upstream signals (CTR, lead quality) rather than conversion-level significance. High-volume B2C can feed many more concepts.
## Distinctness Gate
The measurable objective for this skill. Score every variant pass/fail on all six checks; a variant ships only at 6/6, and the set ships only when every variant passes plus the set-level check.
Iterate - rewrite, re-anchor, or drop variants - until that threshold is met. Never hand off a set below it.
1. **Generic test** - could a direct competitor run this headline unchanged over their own logo? Pass only if no.
2. **One angle per variant** - the variant makes exactly one argument, and no other variant in the set makes the same one (unless it is an explicit V2+ wording iteration of a declared winner).
3. **Proof traceability** - every number, claim, and quoted line traces to a user-supplied source recorded in the matrix.
4. **Surface fit** - the copy fits the user-confirmed limits, and the key phrase lands before the fold or clip point.
5. **Message match** - the variant's promise appears on the destination page the user supplied. If it doesn't, flag the mismatch and get a decision; never ship the mismatch silently.
6. **Label complete** - ID, angle, awareness stage, formula, and version are present and mirrored in the tracking field.
Set-level check: the set spans at least two distinct problems, mechanisms, or audiences - unless the user explicitly ordered a wording-level test inside one proven angle. A set that varies wording six ways around one hidden assumption can only optimise inside a possibly-losing premise.
Do not substitute a platform coverage/strength score for this gate - that measures variety mechanics, not message quality.
## Humanizer Pass
- Run your preferred humanizer skill over every headline, primary text, and description before the final gate check.
- Never ship raw first-draft model output as final - patterned, machine-flavoured copy is exactly what readers scroll past.
- Re-check surface fit afterwards; humanizing changes lengths.
## Workflow
1. Run the Interview.
2. Mine the evidence and run Propose Angles Before Writing; stop at the approval gate.
3. Draft one variant per approved angle: headline, primary text, description, CTA per target surface, using the formula layer. On asset-pool surfaces, expand each angle into its bucketed asset slots instead of one fixed combination.
4. Fill the variant matrix - IDs, labels, hypotheses, evidence sources ([references/variant-matrix-template.md](./references/variant-matrix-template.md)).
5. Run the humanizer pass, then re-fit to surfaces.
6. Score every variant against the Distinctness Gate; iterate until the full set passes.
7. Hand off the matrix. Point the user to `mbfinotti/advertising-skills@ad-creative-test-plan` to size and structure the test itself.
## How Many Variants
Rank what one more slot buys before arguing about the count. The axes disagree:
- **value**: a new angle > the same angle at a different awareness stage > a new formula on a proven angle > a new wording of a proven angle
- **cost**: a new angle > a different awareness stage == a new formula > a new wording
- **efficiency**: a new angle > a different awareness stage > a new formula > a new wording
A different awareness stage and a new formula tie on cost because both reuse the approved angle and its already-cleared evidence: one rewrites the opening, the other rearranges the same parts, and neither sends anyone to fetch anything. They separate on value, which is why efficiency splits them.
Value dominates because a reword costs near-zero and teaches near-zero - synonym preference, not market truth.
Default rung: three genuinely distinct angles. Move up when the account's own volume can separate five results inside a window it can wait out; drop to two when it can't.
Practitioner conventions conflict on that count:
- One caps a test at 3, hard.
- Another recommends 3-5 per ad group.
- A third warns that 5+ dilutes traffic and inflates false positives.
Present the trade-off - traffic dilution against hypothesis coverage - instead of a fake consensus.
Treat the rung as a default, not a law - re-rank it on the interview answers:
- A hard deadline favours fewer variants that draft the same day.
- An account sitting on a proven winner plus an obvious untested segment spends its next slot on that segment, whatever the convention says.
Asset-pool surfaces invert the logic entirely: there, more genuinely distinct assets is a documented performance lever, and the constraint is distinctness, not count.
## Measurement Pointer
The outcome gets judged by reading the funnel top-down and stopping at the first broken gate: attention → CTR → conversion rate → cost per result. CTR is where the copy's promise is judged.
- Strong CTR with weak conversion: the ad overpromised relative to the page or the offer - a message-match or destination problem, not a reason to write more headlines.
- Weak CTR on a sound page: points back at the copy.
Everything past naming the metric - sample size, spend, duration, significance - belongs to `mbfinotti/advertising-skills@ad-creative-test-plan`.
## Failure Modes
| Trap | Why it burns | Fix |
| ------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------------------------- |
| Variants too similar to learn from | Rewords test nothing; near-duplicates also waste asset pools | Apply the What Counts test; one angle per variant |
| All variants share one hidden assumption | The test optimises wording inside a losing premise | Set-level check: span ≥2 problems, mechanisms, or audiences |
| Wins on CTR, loses on conversion | Overpromise buys clicks that never convert | Judge on the funnel read, not clicks; tighten promise to what the page delivers |
| Message mismatch with the destination page | Delivery and conversion both degrade | Gate check 5; flag, never ship silently |
| Fabricated proof | Regulatory violation, per-violation penalties | Grounding rule; ask or label proof-free, never invent |
| Chasing a coverage/strength score | Score measures variety mechanics, not persuasion | Distinctness gate is the bar; never pad with filler |
| Key phrase lost to truncation | The argument the variant tests never gets read | Confirmed limits, key phrase before the fold, preview as authority |
| Unlabelled or case-inconsistent tracking | Results can't be attributed; reporting fragments | Stable IDs mirrored in tracking, lowercase, one separator |
## Integration Note (optional)
Only if the user names these vendors:
- **Google Ads**: responsive search ads take 3-15 headlines and 2-4 descriptions and assemble combinations; Ad Strength is the coverage score described above.
- **Meta**: folds long Feed primary text behind "See more". Advantage+ automatic text variations can rewrite tested copy at delivery - ask the user whether enhancements are on, since that changes what a "variant" means.
- **LinkedIn**: clips headlines permanently past its limit, with no expander.
- **GA4**: treats differently-cased tracking values as separate rows.
Verify every number in the vendor's own interface; none of these figures should be trusted from memory.
## Invocation Examples
- "Write 5 ad copy variants for our invoicing tool's search ads - value prop is 'get paid 2x faster', here are 30 customer reviews."
- "Turn this value prop into headline/primary-text/CTA sets for a social feed A/B test, B2C, problem-aware traffic."
- "I need 12 distinct headlines for an asset-pool search campaign - here's what already lost last quarter."
## Reference
- [references/worked-examples.md](./references/worked-examples.md) - a worked B2C set and a worked B2B set, each with an annotated negative counter-example.
- Your preferred humanizer skill - mandatory pass before the final gate.