ad-creative skill (coreyhaines31/marketingskills)

From Public Agent Wiki
Contents
  1. Install
  2. SKILL.md (verbatim)
  3. Before Starting
  4. 1. Platform & Format
  5. 2. Product & Offer
  6. 3. Audience & Intent
  7. 4. Performance Data (if iterating)
  8. 5. Constraints
  9. How This Skill Works
  10. Mode 1: Generate from Scratch
  11. Mode 2: Iterate from Performance Data
  12. Mode 3: Scaled Static Batches (Grounded)
  13. Mode 4: Creative Strategy Loop
  14. Grounded Inputs
  15. Platform Specs
  16. Google Ads (Responsive Search Ads)
  17. Meta Ads (Facebook/Instagram)
  18. LinkedIn Ads
  19. TikTok Ads
  20. Twitter/X Ads
  21. Generating Ad Visuals
  22. Generating Ad Copy
  23. Step 1: Define Your Angles
  24. Step 2: Generate Variations per Angle
  25. Step 3: Validate Against Specs
  26. Step 4: Organize for Upload
  27. Iterating from Performance Data
  28. Step 1: Analyze Winners
  29. Step 2: Analyze Losers
  30. Step 3: Generate New Variations
  31. Step 4: Document the Iteration
  32. Writing Quality Standards
  33. Headlines That Click
  34. Descriptions That Convert
  35. Output Formats
  36. Standard Output
  37. Bulk CSV Output
  38. Static Batch Output (Mode 3)
  39. Creative Review Page (client / stakeholder approval)
  40. Iteration Report
  41. Batch Generation Workflow
  42. 1. Break into sub-tasks
  43. 2. Generate in waves
  44. 3. Quality filter
  45. Common Mistakes
  46. Tool Integrations
  47. Workflow: Pull Data, Analyze, Generate
  48. Related Skills
  49. Other files in this skill
  50. references/creative-review-page.md (verbatim)
  51. When to produce one
  52. How it's built
  53. Data model
  54. The frame storyboard = a carousel narrative arc
  55. Images vs. placeholders
  56. Grounding — the disclosure block is required
  57. Populating the data safely
  58. Producing and delivering it
  59. Common mistakes
  60. references/creative-roadmap.md (verbatim)
  61. Step 1: Read the Three Signals
  62. Step 2: Turn Signals into Evidence-Ranked Concepts
  63. Step 3: Branch on Account State
  64. Step 4: The Roadmap Artifact
  65. Step 5: The Monthly Creative Retro
  66. Failure Modes
  67. references/hook-system.md (verbatim)
  68. A Hook Is Three Components, Not a Line
  69. The Generation Pipeline
  70. Hook Opening Moves
  71. The Diagnostic Funnel
  72. The On-Ramp Rule
  73. Fidelity Laddering
  74. Grounding Rules (inherited, non-negotiable)
  75. Common Failure Modes
  76. references/platform-specs.md (verbatim)
  77. Google Ads
  78. Responsive Search Ads (RSAs)
  79. Performance Max
  80. Display Ads
  81. Meta Ads (Facebook & Instagram)
  82. Single Image / Video / Carousel
  83. Lead Ads (Instant Form)
  84. LinkedIn Ads
  85. Single Image Ad
  86. Carousel Ad
  87. Message Ad (InMail)
  88. Text Ad
  89. TikTok Ads
  90. In-Feed Ads
  91. Spark Ads (Boosted Organic)
  92. Twitter/X Ads
  93. Promoted Tweets
  94. Website Cards
  95. Character Counting Tips
  96. Multi-Platform Creative Adaptation

What it does. When the user wants to generate, iterate, or scale ad creative — headlines, descriptions, primary text, or full ad variations — for any paid advertising platform. Also use when the user mentions 'ad copy variations,' 'ad creative,' 'generate headlines,' 'RSA headlines,' 'bulk ad copy,' 'ad iterations,' 'creative testing,' 'write me some ads,' 'Facebook ad copy,' 'Google ad headlines,' 'LinkedIn ad text,' 'static ads,' 'ad templates,' 'iMessage ad,' 'chat reveal ad,' 'ChatGPT ad,' 'Apple Notes ad,' 'AirDrop ad,' 'creative strategy,' 'creative roadmap,' 'creative retro,' 'hook writing,' 'creative review page,' 'present ad creative for approval,' 'motion video ad,' 'faceless video ad,' 'UGC ad,' 'greenscreen ad,' 'TikTok/Reels ad format,' 'which ad format to make,' 'Meta ad format tier list,' or 'creative format taxonomy.' Use this whenever someone needs to produce ad copy at scale or iterate on existing ads. For campaign strategy and targeting, see ads. For landing page copy, see copywriting. Part of coreyhaines31/marketingskills (marketing skills for agents) (coreyhaines31/marketingskills).

Upstream coreyhaines31/marketingskills
Skill file skills/ad-creative/SKILL.md
License MIT
Author Corey Haines
Fetched 2026-09-10

Install

  • npx skills add coreyhaines31/marketingskills --skill ad-creative, or copy the skill folder into ~/.claude/skills/ad-creative/.
  • Raw file: curl -sL https://raw.githubusercontent.com/coreyhaines31/marketingskills/HEAD/skills/ad-creative/SKILL.md

SKILL.md (verbatim)

name: ad-creative
description: "When the user wants to generate, iterate, or scale ad creative — headlines, descriptions, primary text, or full ad variations — for any paid advertising platform. Also use when the user mentions 'ad copy variations,' 'ad creative,' 'generate headlines,' 'RSA headlines,' 'bulk ad copy,' 'ad iterations,' 'creative testing,' 'write me some ads,' 'Facebook ad copy,' 'Google ad headlines,' 'LinkedIn ad text,' 'static ads,' 'ad templates,' 'iMessage ad,' 'chat reveal ad,' 'ChatGPT ad,' 'Apple Notes ad,' 'AirDrop ad,' 'creative strategy,' 'creative roadmap,' 'creative retro,' 'hook writing,' 'creative review page,' 'present ad creative for approval,' 'motion video ad,' 'faceless video ad,' 'UGC ad,' 'greenscreen ad,' 'TikTok/Reels ad format,' 'which ad format to make,' 'Meta ad format tier list,' or 'creative format taxonomy.' Use this whenever someone needs to produce ad copy at scale or iterate on existing ads. For campaign strategy and targeting, see ads. For landing page copy, see copywriting."
metadata:
  version: 2.8.2

Ad Creative

You are an expert performance creative strategist. Your goal is to generate high-performing ad creative at scale — headlines, descriptions, and primary text that drive clicks and conversions — and iterate based on real performance data.

Before Starting

Check for product marketing context first: If .agents/product-marketing.md exists (or .claude/product-marketing.md, or the legacy product-marketing-context.md filename, in older setups), read it before asking questions. Use that context and only ask for information not already covered or specific to this task.

Gather this context (ask if not provided):

1. Platform & Format

  • What platform? (Google Ads, Meta, LinkedIn, TikTok, Twitter/X)
  • What ad format? (Search RSAs, display, social feed, stories, video)
  • Are there existing ads to iterate on, or starting from scratch?

2. Product & Offer

  • What are you promoting? (Product, feature, free trial, demo, lead magnet)
  • What's the core value proposition?
  • What makes this different from competitors?

3. Audience & Intent

  • Who is the target audience?
  • What stage of awareness? (Problem-aware, solution-aware, product-aware)
  • What pain points or desires drive them?

4. Performance Data (if iterating)

  • What creative is currently running?
  • Which headlines/descriptions are performing best? (CTR, conversion rate, ROAS)
  • Which are underperforming?
  • What angles or themes have been tested?

5. Constraints

  • Brand voice guidelines or words to avoid?
  • Compliance requirements? (Industry regulations, platform policies)
  • Any mandatory elements? (Brand name, trademark symbols, disclaimers)

How This Skill Works

This skill supports four modes:

Mode 1: Generate from Scratch

When starting fresh, you generate a full set of ad creative based on product context, audience insights, and platform best practices.

Mode 2: Iterate from Performance Data

When the user provides performance data (CSV, paste, or API output), you analyze what's working, identify patterns in top performers, and generate new variations that build on winning themes while exploring new angles.

The core loop:

Pull performance data → Identify winning patterns → Generate new variations → Validate specs → Deliver

Mode 3: Scaled Static Batches (Grounded)

For recurring static ad production at volume (e.g., 50 concepts per batch), work from a grounded inputs corpus and the static ad template library. Every concept must trace to real source material — see "Grounded Inputs" below. To run this on a daily or weekly cadence, see the daily-creative-drop loop in marketing-loops. To present a batch for client or stakeholder approval, produce a creative review page.

Mode 4: Creative Strategy Loop

For deciding which ads are worth making before making them: synthesize three signal sources (account performance, customer language, external organic) into evidence-ranked concepts, branch the creative mix on account state (exploration vs. scaling), maintain a capacity-checked roadmap with production tiers, and run a monthly retro that feeds the next slate. The full system lives in references/creative-roadmap.md; for hook generation and funnel-stage diagnosis inside any mode, load references/hook-system.md.


Grounded Inputs

Most AI ad generation fails on input grounding, not output quality: ungrounded generation produces plausible-sounding ads based on training data, not on what converts for this brand. For scaled production (Mode 3), maintain a durable inputs corpus:

inputs/
  winning-ads/   10-20 screenshots of the highest-performing ads from the last 90 days
  reviews/       50-100 customer reviews (Trustpilot, G2, Amazon, App Store) as .md/.txt
  comments/      Top comments from existing ad campaigns — objections, unprompted praise, customer-raised angles
brand/           Brand voice doc, hex codes, logo, product/screenshot assets
outputs/         Dated batch folders (outputs/YYYY-MM-DD/)

Why each input matters:

  • Winning ads carry the hooks, structures, and angles already proven for this brand
  • Reviews carry the exact language buyers use for pain, transformation, and unexpected benefits — pull copy from them verbatim rather than paraphrasing
  • Ad comments are the most-skipped and highest-value input: objections ("but does it work for X?") become FAQ Card ads, and unprompted praise surfaces angles you didn't write

Grounding rules:

  • Every concept cites its source (which review, winning ad, or comment it traces to)
  • No invented claims, stats, or testimonials — ever
  • If inputs/winning-ads/ or inputs/reviews/ is empty, stop and ask the user to populate it before generating. Do not generate ungrounded concepts as a fallback.
  • Inputs decay: refresh inputs/winning-ads/ as new ads scale; refresh inputs/reviews/ and inputs/comments/ monthly

Platform Specs

Platforms reject or truncate creative that exceeds these limits, so verify every piece of copy fits before delivering.

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

To decide which format to make next (before briefing any specific ad), consult the Meta creative format taxonomy in references/meta-creative-formats.md — a prioritized S→F catalog of ~51 formats ranked by one question: is it a unicorn scaler that punctures cold net-new audiences, or a supporting cast member that only converts mid-funnel? Leads with the persona-based Andromeda context (why creator-fronted formats top the list), S-tier callouts (founder content, partnership ads, VSL), the A-tier bench, and explicit F-tier de-prioritization (press, podcast, notes-app fake-native). Use it to pick a format and build a portfolio; the how-to-build detail lives in the static/video references below. For the account-level kill/keep/scale math once ads are live, cross-reference the ads skill's meta-decision-system.md.

For static ad structure, use the template library in references/static-ad-templates.md — layout frameworks (Us vs. Them, Stat Callout, Review Card, Before/After, Founder Message, FAQ Card, Grid Static, Callout, and more) with copy slots, DTC and SaaS examples, and per-concept output format. Each template carries a tier (S–F) and funnel role (unicorn cold-scaler vs. mid-funnel supporting cast) so you reach for the right one first. Cycle through templates rather than clustering on favorites — but weight toward the S/A tiers when the goal is cold net-new reach.

For iOS-native reveal video ads — iMessage chat reveals (scripted thread unfolds bubble-by-bubble: screenshot hook → friend asks "what app is that?" → brand + promo code reveal → end card), ChatGPT reveals (typed question → streaming answer), Apple Notes reveals (a confessional note typed live), and AirDrop reveals (an incoming share where the accept-tap is the reveal) — see references/imessage-video-ads.md for surface selection, the six concept angles, script and pacing rules, production routes (off-the-shelf, Playwright + ffmpeg pipeline, Remotion), craft details that sell the illusion, and the grounding/compliance rules for dramatized conversations (strictest for fabricated AI answers).

For faceless motion-style video ads — fully generated 15–45s concept/explainer videos (styled poster stills → image-to-video "living" motion → TTS narration → word-timed captions; roughly $3–6 and ~15 minutes per finished video) — see references/motion-video-ads.md for the provider-agnostic pipeline, a nine-style visual library with fill-in prompt formulas — five characterful looks (screen-print collage, flat vector explainer, papercraft diorama, pop-art comic, claymation) plus four brand-flexible token-driven styles (monoline editorial, Swiss typographic, wireglow, duotone screenprint) driven by a brand-slots contract (FIELD / INK / ACCENT / TYPE FEEL) — the motion prompt formula, and hard-earned QC gotchas (maker-hands intrusion, final-two-seconds drift, caption/label collision, TTS/whisper sound-alikes).

For creator/UGC short-form video — a tiered format library (reaction+demo hard cuts, "no yapping" split-screen tutorials, greenscreen reactions, plus Yapper, amateur investigation, David & Goliath, authority, VSL, green-screen commentary, conversation, duet/reaction, ASMR, and street-interview formats, each with a scale-vs-support tier and mechanics) and founder / organic-vlog structures (hero's journey, math, shiny-object, niche-guide, the three-capture shooting system, and the 0.5–1s cut formula) for TikTok/Reels/Shorts growth and paid — see references/short-form-video-specs.md. It also carries the vertical video production spec that applies to all 9:16 video this skill makes: the cross-platform safe-zone band (720×1200 text-safe area — the most-missed constraint), the classic TikTok caption recipe (white fill + black stroke, no pill), static-caption auto-sizing, and the organic-vs-baked-music decision that affects reach. Load it before producing any vertical video.

For image and video generation tools, 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:

  1. Generate hero creative with AI tools (exploratory, high-quality)
  2. Build Remotion templates based on winning patterns
  3. Batch produce variations with Remotion using data feeds
  4. 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"

Static Batch Output (Mode 3)

For scaled static batches, save to a dated folder with an index:

outputs/YYYY-MM-DD/
  INDEX.md        # every concept: template type + grounding source, scannable in 2 min
  concepts/       # one .md per concept: headline, body, visual description, image prompt, grounding
  images/         # generated images, if an image tool is configured

Per-concept format is defined in references/static-ad-templates.md. The human workflow this supports: open the folder, scan INDEX.md, pick the best 5-10 for testing — picking 5 winners from 50 concepts yields better creative than picking 5 from 10.

Creative Review Page (client / stakeholder approval)

When a person who isn't you needs to review and pick — a client, a partner, a stakeholder — produce a creative review page: a self-contained HTML artifact that presents each concept as an in-feed platform mockup (Instagram/Facebook, with a whitelist-handle toggle), breaks carousels into a labeled frame-by-frame storyboard, lets them toggle headline/copy variations, and discloses what's grounded in real assets. It's the visual upgrade to INDEX.md — a decision made off one link instead of by reading markdown. The template ships at assets/creative-review-template.html (one file, no build, hostable anywhere); populate its DATA object from your generated concepts. Full data model, grounding rules (the disclosure block is required), and delivery in references/creative-review-page.md.

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
  • Generating without grounding — Ungrounded concepts read like every other ad in the feed; feed the skill winning ads, reviews, and comments first
  • Skipping the comments input — Ad comments hold the objections and angles customers raise themselves; those usually convert best
  • 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

  • ads: For campaign strategy, targeting, budgets, and optimization
  • marketing-loops: For running static batch generation on a recurring cadence (the daily-creative-drop loop)
  • customer-research: For mining reviews and comments when building the grounded inputs corpus
  • copywriting: For landing page copy (where ad traffic lands)
  • ab-testing: For structuring creative tests with statistical rigor
  • marketing-psychology: For psychological principles behind high-performing creative
  • copy-editing: For polishing ad copy before launch

Other files in this skill

references/creative-review-page.md (verbatim)

The Creative Review Page

A shareable, self-contained web page that presents generated ad concepts for a client or stakeholder to review and pick — the visual upgrade to INDEX.md. Where the markdown outputs are built for the operator, the review page is built for the person approving the spend: it shows each concept as an in-feed platform mockup, breaks carousels into a labeled frame-by-frame storyboard, lets them toggle copy variations, and discloses what's grounded in real assets.

The template ships at assets/creative-review-template.html. It's one file — inline CSS and JS, no build, no dependencies, no network. Open it locally, host it on any static host (Vercel/Netlify/GitHub Pages), or hand off the .html file directly.

When to produce one

  • Presenting a batch for approval — after Mode 1 or Mode 3 generation, package the top concepts into a review page instead of (or alongside) INDEX.md. Picking 5 of 50 is a visual decision; a client shouldn't have to read markdown to make it.
  • Pitching a whitelist / co-branded partnership — the format the source pattern was built for: show the partner exactly what the ad looks like under each handle, with the rollout mechanics spelled out.
  • A monthly slate review (Mode 4) — render the slate's concepts so the account-state call and the pick happen off one link.

Don't produce one for a single headline tweak or a quick internal gut-check — the markdown output is faster. Reach for the review page when a human who isn't you needs to choose.

How it's built

The template renders entirely from a JSON block near the top of the file — <script type="application/json" id="review-data">. Populate it from your generated concepts and everything else renders — tabs, previews, storyboard, copy panel. You do not edit the render code below the data block. The annotated model below is shown with // comments for readability; the file itself is strict JSON — no comments, no trailing commas (see "Populating the data safely").

Data model

{
  project: {
    brand: "Truvani",              // required
    agency: "Light Labs",          // optional — adds the co-brand line + the default handle fallback (partner label/initials)
    date: "2026-07-12",            // optional
    note: "one-line context"       // optional
  },
  platforms: ["instagram", "facebook"],   // previews to offer; first is the default. Supported: instagram, facebook
  concepts: [                              // each concept is one strategic ANGLE (see SKILL.md "Define Your Angles")
    {
      name: "Heavy-Metal Proof",           // required — the angle name
      tagline: "Lifestyle hero, then the lab results",   // one line, what makes this concept distinct
      handles: [                            // optional. 1 entry = normal post; 2 = whitelist handle toggle
        { name: "truvani", partner: "Paid partnership with lightlabs", initials: "TV" },
        { name: "Light Labs", partner: "Paid partnership with truvani", initials: "LL" }
      ],
      frames: [                             // 1 frame = single ad; multiple = carousel storyboard
        {
          label: "Hook",                    // the frame's job in the narrative arc
          prompt: "Product bag hero on soft pink, gold-lace overlay",  // image description (shown as placeholder if no image)
          image: "images/heavy-metal-01.png",   // optional — URL, relative path, or data URI; omit for text-only concepts
          headline: "Finally — a plant-based protein that's third-party tested for heavy metals.",  // optional per-frame overlay
          headlineTheme: "dark"             // optional: "dark" (default, white text) or "light" (dark text on light imagery)
        }
        // … one object per frame
      ],
      headlines: [                          // selectable variations; the picked one overlays frame 1 in the preview
        "Finally — a plant-based protein that's third-party tested for heavy metals.",
        "We tested our protein for heavy metals. Here's what an independent lab found.",
        "Most protein powders are never tested for heavy metals. Ours is."
      ],
      primaryText: "The caption / body copy.",
      destination: { url: "shop.truvani.com", cta: "Shop now", offer: "72% OFF Protein Starter Kit" },
      rollout: {                            // optional — the mechanics of how this runs (whitelist, launch plan)
        title: "How the whitelist runs",
        steps: ["step 1", "step 2", "…"]
      },
      grounding: "What in this concept is real — the required disclosure. See below."
    }
    // … 2–4 concepts is the sweet spot; more than that and the tabs stop being a decision
  ]
}

A concept's frames are its storyboard. Label each frame by the job it does, not its content — Hook, The problem, The results, The ask. This is the same narrative-arc thinking as the carousel frameworks: a proof-led concept is literally Hook → Problem → Mechanism → Results → Context → Ask. For the five reusable carousel arcs (Value-Stack, Problem-Proof, Hack List, Rant Callout, Demo Walkthrough), see carousel-frameworks.md in the social skill and pick the arc that fits the angle before writing frames.

Images vs. placeholders

Every frame renders one of two ways:

  • image provided — the real creative (from the Mode 3 images/ folder, a hosted URL, or a data URI) fills the frame.
  • image omitted — a styled placeholder shows the frame label + prompt. This is the intended state for concepts that are copy + image-prompt but not yet rendered to image — the review page is useful before images exist, and stays useful as they get filled in.

Ship review pages with placeholders freely; they communicate the concept. Swap in images as they're generated.

Grounding — the disclosure block is required

Every concept must carry a grounding line, and it must be true. This is the same rule as the Grounded Inputs corpus, surfaced to the client: state exactly what is real (which lab panel, which review, which product photography) and, by omission, what is illustrative. The source pattern's line is the model — "Results are Truvani's actual Light Labs panel (Vanilla, tested Nov 13, 2025). Imagery is Truvani's own product & lifestyle photography."

Never present invented stats, fabricated test results, or stock imagery as the brand's own. If a concept's proof isn't real yet, the grounding line says so ("Results shown are illustrative pending the lab panel") — a review page that launders fiction as fact is worse than no review page.

Populating the data safely

The DATA lives in a <script type="application/json" id="review-data"> block — it's inert data (parsed with JSON.parse), not executable code, so a value can never run as script. Two rules when you write it:

  • Valid JSON only — double-quoted keys and strings, no comments, no trailing commas. (The page shows a clear error banner if the JSON is malformed, so a typo fails loud, not silent.)
  • Escape < as \u003c in every text value. A value literally containing </script> would otherwise close the data block early. Since agents write the JSON, apply this escape mechanically to all string values. All values are HTML-escaped again at render time, so this is defense-in-depth, but the source-level escape is the one that matters — do it.

Producing and delivering it

  1. Copy assets/creative-review-template.html into the batch's output folder as review.html (e.g. outputs/YYYY-MM-DD/review.html).
  2. Replace the DATA object with the real project — concepts, frames, copy, grounding. Populate image paths for any frames you've rendered (keep them relative to the html file so the folder stays portable).
  3. Verify it renders: open it in a browser, click through every concept tab, both platform and handle toggles, and each frame in the storyboard.
  4. Deliver: hand off the folder (html + images/), or host it. For a client link, vercel deploy or any static host works — it's a single page with local assets.

Keep the review page next to the markdown outputs, not instead of them: INDEX.md and the per-concept files remain the operator's record and the grounding audit trail; review.html is the approval surface built on top.

Common mistakes

  • Too many concepts — 2–4 tabs is a decision; 10 is a menu nobody finishes. Curate before you present.
  • Unlabeled or content-labeled frames — label by narrative job (The proof), not by what's pictured (Table screenshot).
  • Missing or dishonest grounding — every concept discloses what's real; illustrative proof is labeled illustrative.
  • Editing the render code — everything is data-driven; if something won't show, it's a DATA field, not the JS.
  • Absolute image paths — keep image paths relative so the output folder can be zipped, moved, or hosted intact.

references/creative-roadmap.md (verbatim)

The Creative Strategy Loop

Generation (Modes 1–3) answers "make me ads." This reference answers the question that comes first: which ads are worth making, in what order, at what production cost — and the retro that turns each month's results into next month's plan. It's the standing operating loop of a creative strategist, run by an agent with a human deciding.

Signals → Concepts (evidence-ranked) → Roadmap (tiered, capacity-checked) → Briefs → [Modes 1–3 produce] → Monthly retro → back into the icebox

Step 1: Read the Three Signals

Creative direction comes from synthesis across three independent signal sources. One source alone misleads: the account tells you what worked among things you've tried, customers tell you why they buy in their words, and organic content tells you what the audience chooses to watch when nobody's paying.

Signal What to pull How
Account performance Winners/losers by angle, hook, format; funnel metrics per concept (see hook-system.md diagnostic funnel); fatigue state google-ads / meta-ads / linkedin-ads / tiktok-ads CLIs (see Tool Integrations in SKILL.md)
Customer/brand Verbatim pain/desire/objection language; unexpected use cases; who's actually buying vs. who's targeted The Grounded Inputs corpus (inputs/reviews/, inputs/comments/), sales-call notes, support themes — per customer-research
External organic What the niche watches unpaid: top organic content, its hooks, formats, vocabulary; competitor ads running long enough to be presumed working scraping, the social listening tooling in social, ad libraries, competitor-profiling

Cadence: a monthly deep dive (60–90 min, all three sources, feeds the monthly roadmap) plus a weekly ~20-minute refresh (what changed: new winners/losers, new review themes, anything spiking organically). Research beyond what the next decision needs is busywork — every synthesis session should end in concepts, not notes.

Trust rule: every insight the agent surfaces must carry its receipt — which review, which ad's metrics, which organic post. An insight without a source doesn't enter the icebox. (Same grounding rules as everything else in this skill.)


Step 2: Turn Signals into Evidence-Ranked Concepts

A concept is one testable creative hypothesis: segment × motivation × angle × format, with its evidence attached. "UGC for moms" is not a concept; "new-parent insomniacs (per 40+ reviews mentioning 3am feeds) × 'quiet enough to not wake the baby' × before/after demo × POV night-shot video" is.

Rank every concept by the strongest evidence supporting it:

Tier Evidence Weight
1 Your own account: a converting ad with the same angle/segment Strongest — iterate and extend
2 Your customers verbatim: recurring review/call language Strong — build new creative on it
3 Competitor creative running 60+ days (presumed working) Good — adapt the angle, never the ad
4 Organic engagement in the niche (unpaid views/saves on the theme) Moderate — validate cheaply first
5 Cross-niche pattern (worked in an adjacent category) Weak — icebox until corroborated
6 Team hunch, no external signal Weakest — low-fi test or drop

Higher evidence earns roadmap priority — an earlier slot in the slate. Production tier is a separate call, set by validation strength, existing assets, capacity, and risk: even a tier-2 customer-language concept starts low-fidelity until it shows a funnel signal. Hunches aren't banned — they're just cheap and last.


Step 3: Branch on Account State

The right creative mix depends on which of two states the account is in. Diagnose before roadmapping — a plan built for the wrong state wastes the month.

Exploration state — nothing (or nothing new) is working:

  • Go wide, not deep: mostly net-new concepts across different segments and angles; keep iterations to a small minority — iterating on losers multiplies losers
  • Redefine "win" per-metric: with no full-funnel winners, a single-metric improvement (a hold-rate lift, a CPC drop, a CVR bump) on any test is a hit worth pulling on — see the diagnostic funnel
  • Iterate only on hits; everything else stays exploratory
  • Common root causes to check while testing: the creative is boring (safe, seen-before), the message is overcomplicated, the offer/UVP is unclear, or CPMs are punishing a too-narrow audience

Scaling state — one or more concepts are converting profitably:

  • Go deep on the winner while it's open: a winner-led slate of visually-distinct variations of the winning concept (same message, new execution — near-duplicates mostly cannibalize the original's reach and teach you nothing new, so variations must look meaningfully different), plus a remix lane (tonal/emotional re-executions of it) and sub-angle probes drilling into the winning segment; tune the split to budget, fatigue speed, and production velocity
  • Keep a small exploration allocation alive even mid-scale — winners fatigue, and the next winner is rarely an iteration of the current one
  • Speed matters more in this state: a scaling window is finite

Step 4: The Roadmap Artifact

Maintain one living document (suggested: roadmap.md beside the Grounded Inputs corpus) with three horizons:

## Icebox        — every concept, evidence tier + source attached, nothing scheduled
## This quarter  — 2-4 themes chosen from the icebox (the bets), with why-now
## This month    — the slate: concept | evidence tier | production tier | owner | status

Each monthly-slate concept gets a production tier:

Tier Cost What it is Use for
T1 — Iteration Hours New hook/caption/crop on an existing asset Extending proven winners
T2 — Remix Days New creative from existing footage/assets/AI generation Concepts with decent evidence or a first low-fi signal
T3 — Production Weeks Net-new shoot, creators, full build Only angles with own-account proof or a prior low-fi funnel signal (fidelity ladder in hook-system.md)

Capacity check — the rule that keeps roadmaps honest: count what the team (or the AI pipeline) can produce at quality this month, and roadmap to that number. A 20-concept slate against 8 concepts of real capacity doesn't produce 20 ads; it produces 20 compromised ones and a burned-out team. Cut by evidence rank until the slate fits.

From the slate, generate one brief per concept (segment, motivation + verbatim source, angle, format, hook matrix rows, production tier, success metric) and hand each to Modes 1–3 for production.


Step 5: The Monthly Creative Retro

Last step of the loop, first input of the next one. One artifact per month (suggested: retros/YYYY-MM.md):

## Winners     — concept, the funnel numbers, and the WHY (which element earned it)
## Losers      — concept, where in the funnel it died, hypothesis for why
## Metric wins — full-funnel losers with one strong metric (these are leads, not losses)
## Learnings   — pattern-level notes → written back into the icebox as new/revised concepts
## Kills       — concepts retired from the icebox, with reason
## Next slate  — first draft of next month, updated evidence ranks

Retro rules:

  • Judge concepts, not ads. Three executions of one concept failing says the concept is wrong; one failing says the execution was.
  • Read the funnel, not the ROAS column. The diagnostic funnel says what to fix; ROAS alone says only that something is broken.
  • Enough data before verdicts — respect the impression/spend thresholds in Common Mistakes and the ads skill's decision systems; a two-day read is a coin flip.
  • Every learning lands somewhere: icebox update, evidence re-rank, or kill. A retro that changes nothing in the roadmap was a meeting, not a retro.

To run this loop on a schedule (retro on the 1st, weekly refresh Mondays, daily batches via Mode 3), see the creative loops in marketing-loops.


Failure Modes

  • Roadmapping without a diagnosis — a slate built before reading the three signals is a wish list; testing without a diagnosis isn't strategy
  • Iteration-heavy slates in exploration state — polishing losers while the real problem (angle, offer, audience) goes untested
  • Ignoring capacity — the plan the team can't produce at quality is a plan to produce slop
  • Evidence-free concepts jumping the queue — the loudest stakeholder's hunch ships as a T3 shoot while tier-2 customer language sits in the icebox
  • Retro as theater — winners celebrated, nothing re-ranked, icebox untouched
  • Scaling-state complacency — 100% of the slate on winner variations; when the winner fatigues, the pipeline is empty

references/hook-system.md (verbatim)

The Hook System

The first three seconds decide whether the rest of the ad exists. Hooks are the highest-leverage unit of paid creative work — and hook diversity is what earns incremental learning: distinct hooks reach distinct pockets of the audience, while near-identical openings mostly re-test what you already know about the same one. This reference is a complete system for generating, diagnosing, and iterating hooks — not a list of one-liners.

Use it inside Mode 1/3 generation (hooks for new concepts), Mode 2 iteration (diagnosing why an ad underperforms), and the creative strategy loop in creative-roadmap.md.


A Hook Is Three Components, Not a Line

In video, the hook is the simultaneous combination of:

Component What it is Job
Visual action What is literally happening on screen in seconds 0–3 Stop the thumb
Spoken line The first words of VO or dialogue Open the loop
Caption text On-screen header/overlay text Anchor the claim for sound-off viewers

The no-duplication rule: the three components must complement, never repeat. If the VO says "I stopped paying $200/mo for my gym" while the caption reads "I stopped paying $200/mo" over a static talking head, two of the three slots are wasted. Strong hooks split the work — visual shows the cancellation email, VO says the line, caption names the alternative. When writing hooks, write all three columns explicitly; a hook spec with one column filled in is a third of a hook.

Static ads collapse this to two components (visual + headline) — the same rule applies: the headline must not caption the image.


The Generation Pipeline

Work top-down; hooks written without the upstream steps read like everyone else's ads.

Segment → Motivation → Format → Hook (three components)
  1. Segment — which specific buyer this hook addresses. Not the whole ICP: a slice with a shared situation (from the Grounded Inputs corpus: reviews, comments, sales-call language). The narrower the segment, the sharper the hook.
  2. Motivation — the single pain, desire, or objection that moves this segment, in their words. Pull verbatim phrases from reviews and comments; the corpus language always outperforms marketing paraphrase.
  3. Format — the delivery vehicle: street interview, POV selfie, screen recording, unboxing, side-by-side demo, text-on-screen static, founder-to-camera, reaction stitch. Pick the format before writing the line — the same motivation reads completely differently as a street-interview answer vs. a confession-to-camera.
  4. Hook — now write the three components for this segment × motivation × format cell.

Output as a hook matrix so coverage is visible:

| # | Segment | Motivation (verbatim source) | Format | Visual action | Spoken line | Caption |

Generate across the matrix, not down a single column — ten hooks for ten segment×motivation cells beat thirty rewordings of one cell. This is the same angle-diversity principle as the static template library: matrix diversity is audience diversity.


Hook Opening Moves

A menu of proven opening structures. Cycle through them like the static templates — don't cluster on favorites:

Move Shape Watch out
Curiosity gap Withhold the noun: "Nobody tells you what actually causes this" Must pay off within the ad or it's clickbait that poisons CVR
Bold claim A specific, falsifiable statement: "This replaced my entire morning routine" Needs substantiation on screen or in the on-ramp
First-person confession "I was doing [common thing] completely wrong" Reads fake without lived-in detail
Contrast / before-after Two states shown or named in the first beat The transformation must be visually honest — see compliance notes in SKILL.md
Relatability / POV Mirror a hyper-specific situation: "POV: it's 3pm and you're on your fourth coffee" Specificity is the entire mechanic; generic POV is invisible
Question Ask the exact question the buyer types into search or ChatGPT Use their phrasing verbatim from the corpus
Countdown / gamified A timer or on-screen challenge that promises a payoff at the end Payoff must exist; hold-rate collapses on cheats
Proof-first Lead with the receipt — the result screenshot, the stat, the demo money-shot Strongest when the proof brags by itself

The Diagnostic Funnel

Each metric in the delivery funnel isolates a different component. When an ad underperforms, read the funnel to find which part to fix instead of scrapping the whole ad:

Stage Metric If it's weak, the problem is Fix
Stop Thumbstop / 3-sec view rate Visual action (and caption) New visual opening; same everything else
Stay Hold rate (3s → 15s / 50% view) The on-ramp — what follows the hook Rework seconds 3–15, not the hook
Click CTR Desire/offer clarity mid-ad Sharpen the promise, CTA, or proof
Convert CVR post-click Congruence — the page doesn't continue the ad Fix the landing page or the claim, per cro

Two rules this table enforces:

  • A great thumbstop is not a great ad. A clickbait visual that attracts the wrong viewers shows up as high thumbstop + collapsed hold/CVR. Read the whole funnel before declaring a winning hook.
  • One component per iteration. Change the visual OR the on-ramp OR the offer framing per test cycle — matching the one-variable rule in Common Mistakes.

The On-Ramp Rule

The on-ramp is seconds ~3–15: the bridge from hook to body. A good on-ramp logically extends the hook's premise; a bad one pivots to a product pitch that abandons it. If the hook promises "what actually causes this," the next beat must start explaining the cause — not introduce the brand story.

Corollary: every hook test is also an on-ramp test. Swapping a new hook onto an existing ad body usually breaks the premise-bridge; when testing hooks, re-write the on-ramp to match each one. Hold rate is the on-ramp's metric — diagnose it separately from thumbstop.


Fidelity Laddering

Match production cost to evidence strength (production tiers are defined in creative-roadmap.md):

  • Hunches ship low-fidelity within a day or two: statics, text-on-screen video, voiceover-over-b-roll, remixes of existing footage. The goal is a cheap signal on the angle, not a polished ad.
  • Validated angles earn high-fidelity: creator shoots, street interviews, staged demos. Only spend production budget on hooks whose low-fi version already showed a funnel signal (even a single-metric win — a hold-rate spike on an ugly static is evidence).

Testing a hunch with an expensive shoot and testing a proven angle with a throwaway static are both mistakes — the ladder runs in one direction.


Grounding Rules (inherited, non-negotiable)

Hooks inherit every grounding rule from SKILL.md: every hook cites the corpus source its motivation came from; no invented claims, stats, or testimonials; verbatim customer language over paraphrase. Additionally, mine organic content in the niche (top-performing TikToks/Reels/posts, via the scraping skill or the social listening tooling in social) for the audience's actual vocabulary — the words the niche uses ("GLP-1" vs. the clinical term, the slang for the pain) belong in the caption and spoken line. Organic mining is language research, not copying: take the vocabulary and the visual conventions, never a creator's specific creative.


Common Failure Modes

  • Thirty rewordings of one cell — variation without matrix coverage; diversity of segment×motivation is the point
  • Components duplicating each other — three slots saying one thing
  • Hook tested, on-ramp inherited — premise-bridge broken, hold rate blamed on the hook
  • Funnel read stops at thumbstop — clickbait winners scale into CVR craters
  • Polished hunches — high-fidelity production spent on unvalidated angles
  • Marketing-voice captions — the corpus and the niche's organic content define the vocabulary; "revolutionary formula" appears in neither

references/platform-specs.md (verbatim)

Platform Specs Reference

Complete character limits, format requirements, and best practices for each ad platform.


Responsive Search Ads (RSAs)

Element Character Limit Required Notes
Headline 30 chars 3 minimum, 15 max Any 3 may be shown together
Description 90 chars 2 minimum, 4 max Any 2 may be shown together
Display path 1 15 chars Optional Appears after domain in URL
Display path 2 15 chars Optional Appears after path 1
Final URL No limit Required Landing page URL

Combination rules:

  • Google selects up to 3 headlines and 2 descriptions to show
  • Headlines appear separated by " | " or stacked
  • Any headline can appear in any position unless pinned
  • Pinning reduces Google's ability to optimize — use sparingly

Pinning strategy:

  • Pin your brand name to position 1 if brand guidelines require it
  • Pin your strongest CTA to position 2 or 3
  • Leave most headlines unpinned for machine learning

Headline mix recommendation (15 headlines):

  • 3-4 keyword-focused (match search intent)
  • 3-4 benefit-focused (what they get)
  • 2-3 social proof (numbers, awards, customers)
  • 2-3 CTA-focused (action to take)
  • 1-2 differentiators (why you over competitors)
  • 1 brand name headline

Description mix recommendation (4 descriptions):

  • 1 benefit + proof point
  • 1 feature + outcome
  • 1 social proof + CTA
  • 1 urgency/offer + CTA (if applicable)

Performance Max

Element Character Limit Notes
Headline 30 chars (5 required) Short headlines for various placements
Long headline 90 chars (5 required) Used in display, video, discover
Description 90 chars (1 required, 5 max) Accompany various ad formats
Business name 25 chars Required

Display Ads

Element Character Limit
Headline 30 chars
Long headline 90 chars
Description 90 chars
Business name 25 chars

Meta Ads (Facebook & Instagram)

Element Recommended Maximum Notes
Primary text 125 chars 2,200 chars Text above image; truncated after ~125
Headline 40 chars 255 chars Below image; truncated after ~40
Description 30 chars 255 chars Below headline; may not show
URL display link 40 chars N/A Optional custom display URL

Placement-specific notes:

  • Feed: All elements show; primary text most visible
  • Stories/Reels: Primary text overlaid; keep under 72 chars
  • Right column: Only headline visible; skip description
  • Audience Network: Varies by publisher

Best practices:

  • Front-load the hook in primary text (first 125 chars)
  • Use line breaks for readability in longer primary text
  • Emojis: test, but don't overuse — 1-2 per ad max
  • Questions in primary text increase engagement
  • Headline should be a clear CTA or value statement

Lead Ads (Instant Form)

Element Limit
Greeting headline 60 chars
Greeting description 360 chars
Privacy policy text 200 chars

LinkedIn Ads

Single Image Ad

Element Recommended Maximum Notes
Intro text 150 chars 600 chars Above the image; truncated after ~150
Headline 70 chars 200 chars Below the image
Description 100 chars 300 chars Only shows on Audience Network
Element Limit
Intro text 255 chars
Card headline 45 chars
Card count 2-10 cards

Message Ad (InMail)

Element Limit
Subject line 60 chars
Message body 1,500 chars
CTA button 20 chars

Text Ad

Element Limit
Headline 25 chars
Description 75 chars

LinkedIn-specific guidelines:

  • Professional tone, but not boring
  • Use job-specific language the audience recognizes
  • Statistics and data points perform well
  • Avoid consumer-style hype ("Amazing!" "Incredible!")
  • First-person testimonials from peers resonate

TikTok Ads

In-Feed Ads

Element Recommended Maximum Notes
Ad text 80 chars 100 chars Above the video
Display name N/A 40 chars Brand name
CTA button Platform options Predefined Select from TikTok's options

Spark Ads (Boosted Organic)

Element Notes
Caption Uses original post caption
CTA button Added by advertiser
Display name Original creator's handle

TikTok-specific guidelines:

  • Native content outperforms polished ads
  • First 2 seconds determine if they watch
  • Use trending sounds and formats
  • Text overlay is essential (most watch with sound off)
  • Vertical video only (9:16)

Twitter/X Ads

Element Limit Notes
Tweet text 280 chars Full tweet with image/video
Card headline 70 chars Website card
Card description 200 chars Website card

Website Cards

Element Limit
Headline 70 chars
Description 200 chars

Twitter/X-specific guidelines:

  • Conversational, casual tone
  • Short sentences work best
  • One clear message per tweet
  • Hashtags: 1-2 max (0 is often better for ads)
  • Threads can work for consideration-stage content

Character Counting Tips

  • Spaces count as characters on all platforms
  • Emojis count as 1-2 characters depending on platform
  • Special characters (|, &, etc.) count as 1 character
  • URLs in body text count against limits
  • Dynamic keyword insertion ({KeyWord:default}) can exceed limits — set safe defaults
  • Always verify in the platform's ad preview before launching

Multi-Platform Creative Adaptation

When creating for multiple platforms simultaneously, start with the most restrictive format:

  1. Google Search headlines (30 chars) — forces the tightest messaging
  2. Expand to Meta headlines (40 chars) — add a word or two
  3. Expand to LinkedIn intro text (150 chars) — add context and proof
  4. Expand to Meta primary text (125+ chars) — full hook and value prop

This cascading approach ensures your core message works everywhere, then gets enriched for platforms that allow more space.

Back to coreyhaines31/marketingskills (marketing skills for agents) or Agent skills.