Overview
Write Meta ad copy that’s matched to the actual image creative — not generic copy pasted across every ad. Each image gets copy that reinforces its specific message, written in the brand’s voice, informed by what’s already working in the account. The critical rule: Copy reinforces the image, never repeats it. If the image shows “$17K/month”, the body tells the story behind that number. If the image shows a stressed host, the copy describes the chaos. Image and copy are two halves of one message.Brand Memory Integration
This skill reads brand context to make every piece of copy sound like the brand, not a template.Reads
Match tone, vocabulary, forbidden words. Show: “Voice loaded — [tone summary].”
Use angle as copy’s foundation. Show: “Positioning: [angle].”
Know who we’re talking to, their awareness level, their language. Show: “Writing for [audience summary].”
If
workspace/brand/ doesn’t exist, the skill works standalone. It will ask for ICP, voice notes, and forbidden words inline.The Process
Step 1: Pull What’s Already Working
Before writing a single word, look at the account. What copy is converting?- Headline length and structure (questions? numbers? commands?)
- Body copy hooks (opens with pain? data? question? story?)
- Social proof claims (X customers, Y% increase, Z revenue)
- Reading level (short punchy vs. narrative)
- CTA that converts (Learn More vs Get Started vs Book Demo)
Step 2: Load Brand Context
| Need | Where | Fallback |
|---|---|---|
| ICP | audience.md or CLAUDE.md | Ask: “Who’s this for?” |
| Voice | voice-profile.md | Ask: “Any words to avoid? Tone preference?” |
| Pain points | audience.md | Extract from top-performing copy |
| Key stats | Brand brief / CLAUDE.md | Ask: “What proof points can I use?” |
| Forbidden words | voice-profile.md | Default ban list (see below) |
Step 3: Analyze Each Image Creative
For every image that needs copy, use vision to identify:- Visual format — Notes app, receipt, tweet, chart, kitchen photo, poster, review, slack, etc.
- On-image text — What copy is already baked into the image?
- Angle/hook — What psychology is the image pulling?
- Mood — Organic/found-footage, professional, urgent, casual, dark, bright
- Funnel stage — Awareness (problem), consideration (solution), conversion (offer)
Step 4: Write Copy Using Psychology
Every ad pulls at least one psychological lever. Rotate across variants so Meta can test.The Four Horsemen (Kallaway Framework)
| Horseman | Trigger | Opening Pattern |
|---|---|---|
| Money | Revenue loss, ROI, cost savings | ”Every [thing] you miss is worth $X.” |
| Time | Wasted hours, efficiency, speed | ”Your [person] isn’t a [wrong role].” |
| Status | Peer comparison, industry moves | ”X+ [peers] already [did thing].” |
| Fear | Loss aversion, competitive threat | ”The [competitor] down the street already has this.” |
Matching Psychology to Image Format
| Image Format | Best Psychology | Copy Tone |
|---|---|---|
| Notes app / screenshot | Fear + Money | Casual first-person discovery |
| Fake tweet / social | Status + Fear | Conversational, peer voice |
| Data visualization | Money + Status | Authority, numbers-forward |
| Receipt / POS | Money + Time | Specific, transactional |
| Kitchen / still life | Fear + Time | Emotional, atmospheric |
| Review / testimonial | Status + Money | Third-person proof |
| Slack / workplace | Time + Status | Insider, operational |
| News article | Fear + Status | Urgent, newsjacking |
| Before/after | Money + Time | Contrast, transformation |
| Bold text / poster | Any | Direct, declarative |
| Google review | Status + Money | Social proof, customer voice |
| Whiteboard / letter board | Time + Fear | Physical, tangible |
| Lock screen / notifications | Fear + Time | Urgency, real-time |
Step 5: Apply Copy Specs
These specs come from analyzing hundreds of winning Meta ads:| Element | Spec | Why |
|---|---|---|
| Headline length | 25-40 chars, never >50 | Truncation on mobile kills CTR |
| Body word count | 50-120 words | Short enough to read, long enough to convince |
| Paragraphs | 2-3, each 1-2 sentences | Mobile readability — walls of text = scroll past |
| Numbers required | ≥1 per variant ($, %, or count) | Specificity = credibility |
| Social proof | Include where natural | ”X+ customers” is the highest-converting pattern |
| Opening line | Pain, stat, or bold claim | Never brand name, never “Introducing” |
| Closing line | Social proof + soft CTA | ”X+ already made the switch.” |
| Line breaks | After every 1-2 sentences | Scannability on mobile |
| No em dashes | Use hyphens or restructure | Rendering inconsistency across placements |
| No emojis in body | Unless brand voice uses them | Most B2B/professional ads don’t |
Step 6: Generate Degrees of Freedom Variants
Meta’s algorithm tests combinations. Give it options: Per creative:- 3-5 headline variants (different angles)
- 3-5 body copy variants (different psychology)
- 1-2 description variants (supporting stat or benefit)
- Each variant MUST hit a different Horseman. V1=Fear, V2=Money, V3=Status, etc.
- No two headlines should use the same structure. Mix questions, statements, numbers, commands.
- No two body variants should open the same way.
- At least one variant should feel like organic content (not an ad).
Step 7: Cross-Reference with Account Winners
Before finalizing, check your copy against Step 1 findings:- Does headline length match what’s working?
- Are you using similar hook structures?
- Does reading level match?
- Are your social proof claims consistent with what the account already says?
Funnel Stage Adjustments
| Stage | Objective | Copy Focus | CTA | Proof Level |
|---|---|---|---|---|
| ToFu | Awareness / Traffic | Problem awareness, curiosity | Learn More | Light — “X+ use this” |
| MoFu | Consideration / Leads | Solution proof, specific features | Get Free Audit / See Demo | Medium — case study snippets |
| BoFu | Conversion / Sales | Urgency, risk reversal, pricing | Start Free Trial / Book Demo | Heavy — ROI numbers, testimonials |
- ToFu: 50-80 words (fast read, curiosity-driven)
- MoFu: 80-120 words (more detail, proof points)
- BoFu: 60-100 words (tight, urgent, specific offer)
Output Format
For each creative:asset_feed_spec Output
The skill outputs copy in Meta’s Graph API format, ready for upload:This JSON format is required by Meta’s Graph API
asset_feed_spec field when creating creatives. It enables Degrees of Freedom optimization where Meta tests all combinations.Campaign File Output
After generation, save to campaign directory:workspace/brand/assets.md:
Graph API Integration
Fetch Top Performers
Extract Copy from Winning Ads
Anti-Patterns
- Reusing copy across creatives — Every image gets unique copy that matches IT
- Same psychology across variants — V1/V2/V3 must hit different Horsemen
- Starting with brand name — Nobody cares about your brand in ToFu
- Generic SaaS language — See forbidden words list
- Emoji bullet lists — Looks like every other ad on Meta
- Ignoring account data — Always check what’s working first
- Copy that repeats the image — Image says the number, copy tells the story
- Long paragraphs — 3+ sentences = scroll past on mobile
- Same headline structure — Mix questions, stats, commands, statements
- Hard sell CTAs in ToFu — “Sign up now” in awareness = low CTR
Quick Mode
If the user provides images and says “write copy for these” without specifying a full workflow:- Skip account data pull (or use cached if available)
- Load brand context if it exists
- Analyze images → write matched copy → output in standard format
- Still suggest checking against account data as a next step
Integration with Other Skills
Workflow
Data Flow
Environment Variables
Facebook access token with
ads_read scope for pulling account performance dataNext Steps
- Ad Upload — Push generated copy to Meta via Graph API
- Meta Ads — Monitor performance of new copy
- Ad Creative Monitor — Detect when copy needs refreshing again