Ad testing is slow, and learnings rarely compound
Writing enough variants to test properly is a grind, half get disapproved on policy, and once a test ends the insight lives in someone's head — not in the next batch of copy. Budget burns while you wait for winners, and the same mistakes repeat.
This solution generates on-policy variants across real angles and closes the loop from results back to copy.
Generate → policy check → score → learn from results
- ✓ Multi-angle variant generation
- ✓ Headline / description / CTA sets
- ✓ Character-limit compliance
- ✓ Policy-risk screening
- ✓ Predicted-strength scoring
- ✓ Results-driven next round
- ✓ Claude for copy & angle reasoning
- ✓ Google Ads & Meta APIs
- ✓ Historical performance store
- ✓ Policy-rule knowledge base
- ✓ Human approval before launch
- ✓ No claims without support
- ✓ Prohibited-content filtering
- ✓ Brand & legal tone limits
- ✓ Human sign-off before spend
- ✓ Full variant audit trail
Angle-diverse variants, grounded in past winners
Generate genuinely different angles rather than reworded twins, and bias toward what has converted before — with a policy screen ahead of any spend.
from anthropic import Anthropic from policy import screen # flags likely disapprovals client = Anthropic() ANGLES = ["pain-relief", "social-proof", "speed", "price", "authority"] def generate_variants(product: str, winners: list[str]) -> list: prompt = f"""Write one Google RSA headline (<=30 chars) per angle. Angles: {ANGLES} Product: {product} These converted well before — learn from them, don't copy: {winners} Reply as JSON: [{{"angle":..., "headline":...}}]""" msg = client.messages.create( model="claude-sonnet-4-20250514", max_tokens=700, temperature=0.7, messages=[{"role": "user", "content": prompt}], ) variants = parse_json(msg.content[0].text) # Screen before a human ever sees them — never launch on red flags for v in variants: v["policy"] = screen(v["headline"]) return [v for v in variants if v["policy"].ok]
Make every ad test teach the next
Pairs with Keyword Intelligence for angles and the Content Engine for landing pages.