Platform Specs
Platforms reject or truncate creative that exceeds these limits, so verify every piece of copy fits before delivering.
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 make sense independently and in any combination
- Pin headlines to positions 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 |
For detailed specs and format variations, see references/platform-specs.md.
Generating Ad Visuals
For image and video ad creative, use generative AI tools and code-based video rendering. See references/generative-tools.md for the complete guide covering:
- Image generation — Nano Banana Pro (Gemini), Flux, Ideogram for static ad images
- Video generation — Veo, Kling, Runway, Sora, Seedance, Higgsfield for video ads
- Voice & audio — ElevenLabs, OpenAI TTS, Cartesia for voiceovers, cloning, multilingual
- Code-based video — Remotion for templated, data-driven video at scale
- Platform image specs — Correct dimensions for every ad placement
- Cost comparison — Pricing for 100+ ad variations across tools
Recommended workflow for scaled production:
- Generate hero creative with AI tools (exploratory, high-quality)
- Build Remotion templates based on winning patterns
- Batch produce variations with Remotion using data feeds
- Iterate — AI for new angles, Remotion for scale
Generating Ad Copy
Step 1: Define Your Angles
Before writing individual headlines, establish 3-5 distinct angles — different reasons someone would click. Each angle should tap into a different motivation.
Common angle categories:
| 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, generate multiple variations. 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
Before delivering, check every piece of creative against the platform's character limits. Flag anything that's over and provide a trimmed alternative.
Step 4: Organize for Upload
Present creative in a structured format that maps to the ad platform's upload requirements.
Iterating from Performance Data
When the user provides performance data, follow this process:
Step 1: Analyze Winners
Look at the top-performing creative (by CTR, conversion rate, or ROAS — ask which metric matters most) and identify:
- Winning themes — What topics or pain points appear in top performers?
- Winning structures — Questions? Statements? Commands? Numbers?
- Winning word patterns — Specific words or phrases that recur?
- Character utilization — Are top performers shorter or longer?
Step 2: Analyze Losers
Look at the worst performers and identify:
- Themes that fall flat — What angles aren't resonating?
- Common patterns in low performers — Too generic? Too long? Wrong tone?
Step 3: Generate New Variations
Create new creative that:
- Doubles down on winning themes with fresh phrasing
- Extends winning angles into new variations
- Tests 1-2 new angles not yet explored
- Avoids patterns found in underperformers
Step 4: Document the Iteration
Track what was learned and what's being tested:
## 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 Standards
Headlines That Click
Strong headlines:
- 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 ("Reports are automated")
- Include numbers when possible ("3x faster," "in 5 minutes," "10,000+ teams")
Avoid:
- Jargon the audience won't recognize
- Claims without specificity ("Best," "Leading," "Top")
- All caps or excessive punctuation
- Clickbait that the landing page can't deliver on
Descriptions That Convert
Descriptions should complement headlines, not repeat them. Use descriptions to:
- Add proof points (numbers, testimonials, awards)
- Handle objections ("No credit card required," "Free forever for small teams")
- Reinforce CTAs ("Start your free trial today")
- Add urgency when genuine ("Limited to first 500 signups")
Output Formats
Standard Output
Organize 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
When generating at scale (10+ variations), offer CSV format 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
When iterating, include a summary:
## 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 creative production (Anthropic's growth team generates 100+ variations per cycle):
1. Break into sub-tasks
- Headline generation — Focused on click-through
- Description generation — Focused on conversion
- Primary text generation — 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
- Remove anything over character limit
- Remove duplicates or near-duplicates
- Flag anything that might violate platform policies
- Ensure headline/description combinations make sense together
Common Mistakes
- Writing 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 to drive clicks; include at least 2-3
- Generic descriptions — "Learn more about our solution" wastes the slot
- Iterating without data — Gut feelings are less reliable than metrics
- Testing too many things at once — Change one variable per test 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 Data, 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
- paid-ads: For campaign strategy, targeting, budgets, and optimization
- copywriting: For landing page copy (where ad traffic lands)
- ab-test-setup: For structuring creative tests with statistical rigor
- marketing-psychology: For psychological principles behind high-performing creative
- copy-editing: For polishing ad copy before launch