Generate performance ad creative at scale — headlines, descriptions, primary text — and iterate on it using real performance data.
Step 0: Context Check
Read .agents/product-marketing-context.md (or .claude/product-marketing-context.md
on older setups) first. Only ask for what isn't there.
Pull this context before writing:
1. Platform & Format
- Platform: Google Ads, Meta, LinkedIn, TikTok, Twitter/X
- Format: Search RSAs, display, social feed, stories, video
- Iterating on existing ads or starting from scratch?
2. Product & Offer
- What's being promoted (product, feature, free trial, demo, lead magnet)
- Core value proposition
- Real differentiator vs. competitors
3. Audience & Intent
- Target audience
- Awareness stage: problem-aware, solution-aware, product-aware
- Pain points or desires that drive them
4. Performance Data (if iterating)
- Creative currently running
- Top performers (by CTR, CVR, ROAS)
- Underperformers
- Angles/themes already tested
5. Constraints
- Brand voice rules or banned words
- Compliance (industry regs, platform policies)
- Mandatory elements (brand name, trademark, disclaimers)
Two Modes
Mode 1: Generate from scratch. Produce a full creative set from product context, audience insight, and platform best practices.
Mode 2: Iterate from performance data. User supplies CSV / paste / API output. Identify patterns in winners, generate variations that double down on them and probe new angles.
The loop:
Pull performance data → Identify winning patterns → Generate new variations → Validate specs → Deliver
Platform Specs
Platforms truncate or reject creative that exceeds these limits. Verify every line before delivery.
Google Ads (Responsive Search Ads)
| Element | Limit | Quantity |
|---|---|---|
| Headline | 30 characters | Up to 15 |
| Description | 90 characters | Up to 4 |
| Display URL path | 15 characters each | 2 paths |
RSA rules:
- Headlines must read independently and in any combination
- Pin headlines only when necessary (reduces optimization)
- Include at least one keyword-focused headline
- Include at least one benefit-focused headline
- Include at least one CTA headline
Meta Ads (Facebook/Instagram)
| Element | Limit | Notes |
|---|---|---|
| Primary text | 125 chars visible (up to 2,200) | Front-load the hook |
| Headline | 40 characters recommended | Below the image |
| Description | 30 characters recommended | Below headline |
| URL display link | 40 characters | Optional |
LinkedIn Ads
| Element | Limit | Notes |
|---|---|---|
| Intro text | 150 chars recommended (600 max) | Above the image |
| Headline | 70 chars recommended (200 max) | Below the image |
| Description | 100 chars recommended (300 max) | Appears in some placements |
TikTok Ads
| Element | Limit | Notes |
|---|---|---|
| Ad text | 80 chars recommended (100 max) | Above the video |
| Display name | 40 characters | Brand name |
Twitter/X Ads
| Element | Limit | Notes |
|---|---|---|
| Tweet text | 280 characters | The ad copy |
| Headline | 70 characters | Card headline |
| Description | 200 characters | Card description |
Full specs and placement variants: references/platform-specs.md.
Generating Ad Visuals
For image and video creative, see references/generative-tools.md. It covers:
- Image generation — Nano Banana Pro (Gemini), Flux, Ideogram for static ads
- Video generation — Veo, Kling, Runway, Sora, Seedance, Higgsfield
- Voice & audio — ElevenLabs, OpenAI TTS, Cartesia for voiceover, cloning, multilingual
- Code-based video — Remotion for templated, data-driven video at scale
- Platform image specs — Exact dimensions per placement
- Cost comparison — Pricing for 100+ variations across tools
Scaled production workflow:
- Generate hero creative with AI tools (exploratory, high quality)
- Build Remotion templates from winning patterns
- Batch-produce variations with Remotion using data feeds
- Iterate — AI for new angles, Remotion for scale
Generating Ad Copy
Step 1: Define Angles
Set 3-5 distinct angles — different motivations to click — before writing any headlines.
| Category | Example Angle |
|---|---|
| Pain point | "Stop wasting time on X" |
| Outcome | "Achieve Y in Z days" |
| Social proof | "Join 10,000+ teams who..." |
| Curiosity | "The X secret top companies use" |
| Comparison | "Unlike X, we do Y" |
| Urgency | "Limited time: get X free" |
| Identity | "Built for [specific role/type]" |
| Contrarian | "Why [common practice] doesn't work" |
Step 2: Generate Variations per Angle
For each angle, vary:
- Word choice — synonyms, active vs. passive
- Specificity — numbers vs. general claims
- Tone — direct vs. question vs. command
- Structure — short punch vs. full benefit statement
Step 3: Validate Against Specs
Check every line against platform character limits. Flag anything over and provide a trimmed alternative.
Step 4: Organize for Upload
Hand back creative in a structure that maps to the ad platform's upload format.
Iterating from Performance Data
Step 1: Analyze Winners
Top performers by CTR, CVR, or ROAS (ask which matters). Look for:
- Winning themes — what topics or pains appear repeatedly
- Winning structures — questions, statements, commands, numbers
- Winning word patterns — recurring words or phrases
- Character utilization — top performers shorter or longer
Step 2: Analyze Losers
- Themes that fall flat — angles not landing
- Patterns in low performers — too generic, too long, wrong tone
Step 3: Generate New Variations
- Double down on winning themes with fresh phrasing
- Extend winning angles into new variations
- Test 1-2 new angles
- Avoid the patterns found in underperformers
Step 4: Document the Iteration
## Iteration Log
- Round: [number]
- Date: [date]
- Top performers: [list with metrics]
- Winning patterns: [summary]
- New variations: [count] headlines, [count] descriptions
- New angles being tested: [list]
- Angles retired: [list]
Writing Quality
Headlines That Click
Strong:
- Specific ("Cut reporting time 75%") over vague ("Save time")
- Benefits ("Ship code faster") over features ("CI/CD pipeline")
- Active voice ("Automate your reports") over passive
- Numbers when possible ("3x faster," "in 5 minutes," "10,000+ teams")
Avoid:
- Jargon the audience won't recognize
- Vague superlatives ("Best," "Leading," "Top")
- All caps or excessive punctuation
- Clickbait the landing page can't deliver
Descriptions That Convert
Don't repeat the headline. Use the slot to:
- Add proof (numbers, testimonials, awards)
- Handle objections ("No credit card required," "Free forever for small teams")
- Reinforce the CTA ("Start your free trial today")
- Add urgency when genuine ("Limited to first 500 signups")
Output Formats
Standard Output
By angle, with character counts:
## Angle: [Pain Point — Manual Reporting]
### Headlines (30 char max)
1. "Stop Building Reports by Hand" (29)
2. "Automate Your Weekly Reports" (28)
3. "Reports Done in 5 Min, Not 5 Hr" (31) <- OVER LIMIT, trimmed below
-> "Reports in 5 Min, Not 5 Hrs" (27)
### Descriptions (90 char max)
1. "Marketing teams save 10+ hours/week with automated reporting. Start free." (73)
2. "Connect your data sources once. Get automated reports forever. No code required." (80)
Bulk CSV Output
At scale (10+ variations), hand back CSV for direct upload:
headline_1,headline_2,headline_3,description_1,description_2,platform
"Stop Manual Reporting","Automate in 5 Minutes","Join 10K+ Teams","Save 10+ hrs/week on reports. Start free.","Connect data sources once. Reports forever.","google_ads"
Iteration Report
## Performance Summary
- Analyzed: [X] headlines, [Y] descriptions
- Top performer: "[headline]" — [metric]: [value]
- Worst performer: "[headline]" — [metric]: [value]
- Pattern: [observation]
## New Creative
[organized variations]
## Recommendations
- [What to pause, what to scale, what to test next]
Batch Generation Workflow
For large-scale production (Anthropic's growth team runs 100+ variations per cycle):
1. Split into sub-tasks
- Headlines — focused on click-through
- Descriptions — focused on conversion
- Primary text — focused on engagement (Meta/LinkedIn)
2. Generate in waves
- Wave 1: Core angles (3-5 angles, 5 variations each)
- Wave 2: Extended variations on top 2 angles
- Wave 3: Wild-card angles (contrarian, emotional, specific)
3. Quality filter
- Drop anything over the character limit
- Drop duplicates and near-duplicates
- Flag potential platform-policy violations
- Verify headline/description combinations make sense
Common Mistakes
- Headlines that only work together — RSA headlines get combined randomly
- Ignoring character limits — Platforms truncate without warning
- All variations sound the same — Vary angles, not just word choice
- No CTA headlines — RSAs need action-oriented headlines; include 2-3
- Generic descriptions — "Learn more about our solution" wastes the slot
- Iterating without data — Gut feelings lose to metrics
- Testing too many things at once — One variable per cycle
- Retiring creative too early — Allow 1,000+ impressions before judging
Tool Integrations
For pulling performance data and managing campaigns, see the tools registry.
| Platform | Pull Performance Data | Manage Campaigns | Guide |
|---|---|---|---|
| Google Ads | google-ads campaigns list, google-ads reports get |
google-ads campaigns create |
google-ads.md |
| Meta Ads | meta-ads insights get |
meta-ads campaigns list |
meta-ads.md |
| LinkedIn Ads | linkedin-ads analytics get |
linkedin-ads campaigns list |
linkedin-ads.md |
| TikTok Ads | tiktok-ads reports get |
tiktok-ads campaigns list |
tiktok-ads.md |
Workflow: Pull, Analyze, Generate
# 1. Pull recent ad performance
node tools/clis/google-ads.js reports get --type ad_performance --date-range last_30_days
# 2. Analyze output (identify top/bottom performers)
# 3. Feed winning patterns into this skill
# 4. Generate new variations
# 5. Upload to platform
Related Skills
- iblai-marketing-paid-ads: For campaign strategy, targeting, budgets, and optimization
- iblai-marketing-copywriting: For landing page copy (where ad traffic lands)
- iblai-marketing-ab-test-setup: For structuring creative tests with statistical rigor
- iblai-marketing-psychology: For psychological principles behind high-performing creative
- iblai-marketing-copy-editing: For polishing ad copy before launch