Back to Skills
mbfinotti/advertising-skillsCheck passed

SKILL DETAIL

ad-copy-variants

mbfinotti/advertising-skills/ad-copy-variants

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

Installs · 845View source

Installation

npx skills add https://github.com/mbfinotti/advertising-skills --skill ad-copy-variants

Skill files

SKILL.md

Last synced · Oct 22, 2026

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 }
  ]
}
references/angle-library.md›
# Angle Library

An angle is the argument for why this reader should care - a distinct motivation, stated as a human sentence. Changing the angle changes who the ad attracts; changing the wording only changes how one argument sounds.

## Core angle taxonomy

Eight recurring angle families, each a different reason someone clicks. Anchor every candidate angle to evidence the user supplied; an angle without evidence is a guess wearing a label.

Rows run in efficiency order - value per unit of effort, never cheapest-first. The other axes disagree, so each gets its own line:

- **efficiency**: pain > mechanism > outcome > identity > social proof > contrarian > comparison > urgency
- **proof-asset cost**: social proof > outcome > comparison > contrarian > mechanism > urgency > pain == identity
- **compliance cost**: comparison > urgency > contrarian > social proof > outcome > mechanism > pain == identity

Pain and identity tie on both cost axes, and for the same reason on each: both are written straight out of evidence already in hand, so no asset gets acquired and no checkable claim gets made that anyone could ask you to substantiate.

| Angle            | The argument it makes                                                | Proof it costs you                                                                       | Compliance cost                                                                         | Leans B2B / B2C                              |
| ---------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | -------------------------------------------- |
| Pain point       | "You have this specific problem, and it costs you."                  | Minutes - mined from the interview evidence                                              | None past the grounding rule                                                            | Both - the default anchor                    |
| Mechanism        | "Here is _why_ this works when alternatives didn't."                 | About an hour with whoever knows how the product works                                   | The mechanism must be true as stated                                                    | Both; strongest in sophisticated markets     |
| Outcome          | "Here is the measurable after-state."                                | Waits on a measured before/after somebody has to produce                                 | Substantiation review for every figure and superlative                                  | Both; B2B wants the number quantified        |
| Identity         | "This is what people like you use."                                  | Minutes - the segment's language is already in the evidence                              | None past the grounding rule                                                            | Mostly B2C; B2B as team/craft pride          |
| Social proof     | "People like you already switched, and said this."                   | Days to weeks - testimonials plus usage permission; the one asset you cannot manufacture | Written permission per quote on file                                                    | Both; B2B needs a named role or badge        |
| Contrarian       | "The common advice is wrong; here's the uncomfortable truth."        | About an hour, if the belief is already held and evidenced internally                    | Brand sign-off - the edge is the risk                                                   | Both; requires proof to avoid empty edge     |
| Comparison       | "Against the way you do it now (or a rival), here's the difference." | Every claim about the rival substantiated one by one                                     | Least reversible in the set: a trademark complaint pulls it mid-flight, after the spend | Both; check trademark constraints first      |
| Urgency / stakes | "The cost of waiting is real and near."                              | Near-zero where a real deadline exists; unavailable where it doesn't                     | A manufactured deadline fails platform review                                           | B2C offers; B2B renewal/compliance deadlines |

Value is deliberately not ranked across families. Which family pays best is decided by awareness stage and market sophistication below, not by the family itself - a global value order would be false precision.

### What this order starves

**Social proof, and outcome behind it.** Both sit mid-table on efficiency purely because their assets are expensive - days to weeks for a permission-cleared testimonial, a measured before/after somebody has to produce. The value table above puts them among the strongest arguments in the set, and social proof is the one asset that cannot be manufactured at any price. An account that only ever computes efficiency drafts pain and identity every round and never commissions the proof, so the ceiling on what its ads can argue never moves.

Promote them anyway when any of these holds, and say which one did it:

- The asset already exists - a signed case study, a cleared testimonial, a measured result sitting unused. Its cost is already paid, so it jumps the queue outright.
- The user answered the interview with a compounding mandate. The asset outlives the round that buys it and re-enters every later ranking at near-zero.
- The traffic is product-aware or the market is sophisticated. Proof and comparison are what those readers weigh; a pain angle they have already accepted buys nothing.
- Nothing else is left. Two rounds where pain and identity both flatten means the cheap arguments are exhausted, not that the market is.

### Ruled out is deleted, not demoted

An angle the user's constraints forbid leaves the menu and is named as deleted in the angle bank. Never park it at the bottom of the order, where the next round reads it as merely unpopular and quietly briefs it back in as scope.

- No cleared testimonial and no permission to obtain one → **social proof is deleted**, not last.
- Naming competitors refused, or the trademark exposure unacceptable → **comparison is deleted**.
- No real deadline or scarcity → **urgency is deleted**; a manufactured one fails platform review anyway.
- Brand sign-off unavailable → **contrarian is deleted**; the edge is the whole angle, and an unapproved edge gets sanded off in review.
- A regulated category barring the claim the angle rests on → that angle is deleted for this account, whatever it scores.

Write the deletion and its cause into the angle bank, so a later round re-tests the constraint rather than the angle.

### Other re-ranks

That order is a default, not a law: it shifts with context and with who executes it. Re-rank against this account, and against the constraints answered in the skill's interview, before drafting.

- A hard deadline promotes pain, identity, and urgency; they draft the same day.
- Mechanism moves up on solution- and product-aware traffic; pain moves down at most-aware, where the offer leads.
- A team with an in-house researcher, a public reference customer, or counsel on call pays less than this default assumes for outcome, social proof, and comparison.

## Awareness stages decide the opening

Eugene Schwartz's five stages (Breakthrough Advertising, 1966). The angle stays constant across stages; its expression changes. One stage per variant set unless the user splits traffic by stage.

- **Unaware** - open on the symptom or an arresting truth; naming the product first is wasted.
- **Problem-aware** - open on the problem in the customer's own words (PAS territory); the reader recognises themselves before meeting the product.
- **Solution-aware** - open on the mechanism or differentiator: why this way beats the category's known way.
- **Product-aware** - open on proof and comparison: numbers, named results, objection handling.
- **Most-aware** - open on the offer and the CTA; anything else delays the click.

Companion concept - **market sophistication**: how many times this market has already heard claims like yours. In a fresh market a plain claim works; in a tired one the claim must escalate to mechanism, proof, or identity, because the reader has heard "faster and easier" too many times to register it.

## B2B vs B2C angle skew

- **B2C sets** draw from these, in efficiency order: pain > identity > outcome-as-transformation > social proof > urgency/offer. The reader is the buyer; emotion and a single-decision close are legitimate.
- **B2B sets** draw from these, in efficiency order: quantified outcome > mechanism > risk/compliance reduction > peer proof > total cost of ownership. The reader often builds an internal case for a committee - a strong B2B angle arms that reader with a line they can repeat in a meeting.
- Mechanism leads the B2B order instead whenever no measured number exists yet: quantified outcome is only cheap for an account that has already done the measuring.
- Both orderings are defaults that move with the account - an owned asset outranks a nominally stronger angle whose asset would take a week to obtain.
- This skew is practitioner synthesis, not measured survey data - treat it as a starting bias, and let the user's own evidence override it.

## Angle vs wording - a worked pair

Same value proposition: an invoicing tool that gets freelancers paid faster.

**Three genuine angles** (different problem / mechanism / audience):

1. Pain: "Chasing overdue invoices is a second unpaid job." - the problem is the chasing.
2. Mechanism: "Automatic reminders and card-on-file mean the money moves without you asking twice." - the argument is why it works.
3. Audience/identity: "Built for freelancers who'd rather design than do accounts receivable." - the argument is who it's for.

**Three rewords masquerading as variants** (one angle, three coats of paint):

1. "Get paid faster."
2. "Stop waiting on payments."
3. "Your invoices, paid sooner."

All three make the identical outcome argument; swap any two headlines and nothing breaks. Testing them against each other teaches almost nothing about the market - only about synonym preference.
references/variant-matrix-template.md›
# Variant Matrix Template

The variant matrix is the handoff artifact: one row per variant, complete enough that whoever launches the ads needs no follow-up questions. A matrix without version codes or tracking mapping is incomplete.

## ID scheme

Split the stable ID from the human name, so renaming never breaks tracking history.

- **ID**: `<angle>_<awareness>_<seq>_v<N>` - lowercase, underscores only, no spaces. Awareness codes: `ua` unaware, `pa` problem-aware, `sa` solution-aware, `pra` product-aware, `ma` most-aware. Example: `pain_pa_01_v1`.
- **Name**: a short human label, e.g. "Chasing invoices pain". Free to change; the ID never changes.
- **Version**: `v1` is the first shipped wording of an angle; `v2`, `v3` are wording iterations of that same angle after it wins - never new angles. A new angle gets a new ID at `v1`.
- Mirror the full ID into the ad name and the click-tracking field (e.g. the content parameter) exactly as written. Case differences and mixed separators split one variant's results into multiple reporting rows - lowercase everything, one separator, and have one person approve any new tracking value before launch.

## Columns

| Column          | What goes in it                                                                                                                                  |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| ID              | Stable ID per the scheme above                                                                                                                   |
| Name            | Human label                                                                                                                                      |
| Angle           | One of the taxonomy families, plus the argument in one sentence                                                                                  |
| Awareness stage | One of the five                                                                                                                                  |
| Formula         | PAS / BAB / AIDA / 4 Us headline / other - the structure applied                                                                                 |
| Headline        | The copy, within the user-confirmed limit                                                                                                        |
| Primary text    | The copy; mark where the fold/clip lands                                                                                                         |
| Description     | The copy, or "n/a" where the surface has none                                                                                                    |
| CTA             | The chosen label from the platform's fixed list, or freeform where allowed                                                                       |
| Hypothesis      | One line: "Because [evidence], we believe [this angle] will [outcome] for [audience]"                                                            |
| Evidence source | Where each proof point traces to - review link, case-study figure, call note; `none - proof-free` when the variant deliberately carries no claim |
| Surface(s)      | Which placement(s) this row is written for                                                                                                       |
| Gate            | 6/6 pass record, with date                                                                                                                       |
| Status          | draft / shipped / winner / retired                                                                                                               |

## Asset-pool sheet

On pool surfaces (the platform assembles combinations), replace the single headline/description cells with a bucketed asset list per variant-angle:

```
Angle: mechanism_sa_02_v1
  Headlines (bucket: mechanism)   1. ... 2. ... 3. ...
  Headlines (bucket: proof)       4. ... 5. ...
  Headlines (bucket: cta)         6. ...
  Descriptions                    1. ... 2. ...
```

Buckets keep the pool varied across themes and non-duplicative within them. Every asset still traces to the matrix row's evidence and passes the gate individually.

## Handoff block

Close the matrix with:

- The naming/tracking glossary used (separator, casing, awareness codes) - kept with the matrix, not in a separate document.
- The destination page each variant was matched against, with its headline as pasted by the user on the match date.
- Rejected angles and the reason, as the seed of the next round.
- A pointer to the test design owner: sizing, duration, and success criteria are decided in `mbfinotti/advertising-skills@ad-creative-test-plan`, not here.
references/worked-examples.md›
# Worked Examples

Two fictional products, one B2C and one B2B. Every proof line in the good examples traces to (fictional) user-supplied evidence, as the grounding rule requires. Limits shown are illustrative - in real work they come from the user's ads manager.

## B2C: language-learning app, social feed

Value proposition: "Conversational in a new language on 15 minutes a day." Traffic: problem-aware. Evidence supplied: app-store reviews. Surface: social feed (headline ~40 chars visible, primary text folds after ~125 chars).

**Variant `pain_pa_01_v1` - angle: pain (the quitting cycle), formula: PAS**

- Headline: `The app you won't quit in week 3`
- Primary text: `Started a language three times, quit three times? The problem isn't you - it's courses built for people with two free hours. 15 minutes a day, built around your commute.` _(fold lands after "quit three times?" - hook complete before it)_
- Description: `15 min a day. Free to start.`
- CTA: `Install now`
- Evidence: reviews R12, R31 - "I always quit around week 3", "finally one I stuck with"

**Variant `identity_pa_02_v1` - angle: identity (the almost-bilingual), formula: BAB**

- Headline: `For the "I studied it in school" crowd`
- Primary text: `You can order a coffee, but the conversation dies after two sentences. Users who did a daily 15 minutes told us the difference: they stopped translating in their head. That's the bridge.`
- Description: `Pick up where school left off.`
- CTA: `Install now`
- Evidence: reviews R7, R19 - "school Spanish", "stopped translating in my head"

**Variant `mechanism_sa_03_v1` - angle: mechanism (spaced speaking practice), formula: 4 Us headline over a proof body**

- Headline: `Speaking practice, not flashcards`
- Primary text: `Most apps drill vocabulary you never say out loud. Ours makes you speak from day one and replays what you got wrong right before you'd forget it. Reviewers call it "the first app that made me talk".`
- Description: `Speak from lesson one.`
- CTA: `Try it free`
- Evidence: review R44 (verbatim quote); mechanism description confirmed by the user

Why the set passes: three different arguments (quitting pain / identity / mechanism), one angle each, every quoted line traceable, key phrases before the fold, all labels complete.

### Negative counter-example - rejected set

- `Learn a language in just 15 minutes a day`
- `Master a new language - 15 minutes daily`
- `15 minutes a day to a new language`
- `Voted the #1 language app` - fabricated: no such award exists in the supplied evidence. Fails proof traceability; the line is a fabricated claim, not a variant.

One outcome claim, three word orders across the first three lines. Swap any two headlines and nothing changes - fails the What Counts test and the one-angle-per-variant check. Also fails the generic test: any competitor with a daily-lesson app could run all three unchanged.

## B2B: expense-management SaaS, professional-network feed

Value proposition: "Close the books five days faster." Buyer: finance manager who must convince a CFO. Traffic: solution-aware. Evidence supplied: one customer case study (mid-market retailer, close time 9 days -> 4), two review-site reviews with permission, a sales-call note ("audit prep is the panic moment"). Surface: professional-network feed - headline clips permanently at ~70 chars, no expander.

**Variant `outcome_sa_01_v1` - angle: quantified outcome, formula: PAS**

- Headline: `Month-end close in 4 days, not 9 - how one retail team did it` _(62 chars - fits the permanent clip)_
- Primary text: `Every extra close day is a day finance can't answer "how did we do?" A mid-market retailer cut close from 9 days to 4 by killing manual receipt-chasing. The case study breaks down what changed, week by week.`
- CTA: `Download`
- Evidence: customer case study (user-supplied, publication approved)

**Variant `risk_sa_02_v1` - angle: risk/compliance, formula: BAB**

- Headline: `Audit season without the shoebox of receipts`
- Primary text: `Right now: three weeks of retroactive receipt-hunting every audit. After: every expense already matched, coded, and export-ready. The bridge is capture at the moment of spend - not at month end.`
- CTA: `Learn more`
- Evidence: sales-call note ("audit prep is the panic moment"); workflow claims confirmed by the user

**Variant `committee_sa_03_v1` - angle: peer proof for the internal case, formula: proof-led**

- Headline: `The one-pager your CFO will ask for anyway`
- Primary text: `"We approved it in one meeting - the ROI sheet did the talking," says a finance manager at a 200-person logistics firm. Get the same ROI template, pre-filled with the 9-to-4-day close data.`
- CTA: `Download`
- Evidence: review RS-A (permission on file); case-study figure as above

Why the set passes: three arguments (outcome / risk / the internal-case reader), each proof point traceable, headlines under the permanent clip, and the third variant is written for what B2B copy actually does - arming the reader to sell internally.

### Negative counter-example - rejected set

- Headline: `Trusted by 10,000 CFOs worldwide` - fabricated: no such figure in the evidence. Fails proof traceability, and would also fail platform substantiation review.
- Headline: `Stop wasting money on expense reports - claim your free audit today before spots run out!!` - manufactured urgency with no real deadline, generic enough for any competitor, and clicks it wins won't convert: the destination page offers a demo, not an "audit". Fails the generic test and message match.
- Headline: `The revolutionary AI-powered future of financial operations excellence and workflow transformation` - 98 chars on a surface that clips permanently at ~70: the argument dies mid-sentence. Says nothing specific; fails surface fit and the generic test at once.
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.