# Ads Engine

> Write paid traffic ad copy for Facebook, Instagram, Google, YouTube, and display networks using classic direct-response patterns. Use this skill whenever the user asks to create ads, write ad copy, generate Facebook ads, write Google ads, create a YouTube script, or produce any paid media creative. Also trigger for "ad angles", "ad variations", "split test copy", or "retargeting ads". Outputs platform-ready copy with multiple angle variations.

- Skill: `automatedmarketer/ads-engine` (Agent Skill)
- Install (CLI): `npx skillmds@latest add automatedmarketer/ads-engine`
- Raw SKILL.md: https://api.skillmd.com/api/skills/automatedmarketer/ads-engine/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: automatedmarketer (https://skillmd.com/u/automatedmarketer)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/automatedmarketer/ads-engine

---


# Skill: ads_engine

## Purpose
Create paid traffic ad copy using classic DR headline/creative patterns and modern funnel alignment. Outputs platform-ready variations with testing notes.

---

## Platform Character Limits (Enforced)

| Platform | Field | Limit |
|---|---|---|
| Facebook / Instagram | Primary text | 125 chars (feed preview) / 500 chars (expanded) |
| Facebook / Instagram | Headline | 40 chars |
| Facebook / Instagram | Description | 30 chars |
| Google RSA | Headline | 30 chars each (up to 15) |
| Google RSA | Description | 90 chars each (up to 4) |
| YouTube | Hook (first 5 sec) | ~15 words spoken |
| YouTube | Body script | 60–90 seconds for skippable pre-roll |

All outputs must respect these limits. If a variation exceeds the limit, flag it and provide a trimmed version.

---

## Inputs

| Field | Type | Description |
|---|---|---|
| `platform` | enum | `facebook`, `instagram`, `google_search`, `youtube`, `display` |
| `objective` | enum | `leads`, `sales`, `traffic`, `book_call`, `retargeting` |
| `audience` | string | Segment + awareness level |
| `offer` | string | Offer name and main promise |
| `destination` | string | Funnel/page type and URL if available |
| `brand_voice` | string[] | 2–4 adjectives (default: `["direct", "no-BS", "punchy"]`) |
| `existing_copy_examples` | string[] | Past ads, emails, or posts that feel on-brand |
| `style_preset` | enum | See presets below |
| `angle_list` | string[] | e.g. `["mistakes", "how_to", "status", "fear", "speed", "price"]` |
| `variations_per_angle` | int | Number of variants per angle (default: 2) |
| `constraints` | string[] | Platform rules, compliance notes, forbidden claims |

---

## Style Presets

### caples_headlines
Headline-first, formula-based. Best for cold audiences who need a clear benefit.
- Generates multiple headline ideas per angle
- Patterns: "They laughed when…", "Do you make these mistakes in…?", "How to [result] without [pain]"
- Short primary text that supports the headline

### sugarman_curiosity
Story-based, curiosity-heavy. Best for cold audiences, content-adjacent ads.
- Opens with an intriguing or unusual first line
- Builds a short narrative before revealing the offer
- Curiosity gap drives the click, not the benefit

### halbert_raw
Starving crowd, blunt. Best for audiences that are pain-aware and ready to act.
- Calls out the audience and result directly in line 1
- Minimal setup, maximum benefit language
- Feels like a "barstool" conversation — no polish, all punch

### kennedy_direct_response
No-BS DR. Best for warm/hot audiences or retargeting.
- Clear offer, price anchor, and hard CTA
- Includes deadline, limit, or strong reason to act now
- Qualifies the prospect: "If you [X], this is for you"

### brunson_funnel_match
Ad mirrors the funnel's big idea. Best for webinar and VSL traffic.
- Uses the same language as the landing page headline
- Pre-frames the webinar or offer structure
- Bridges the gap so ad-to-page feels seamless

---

## Outputs

### Facebook / Instagram
For each angle:
```
angle_name: [name]
testing_note: [what this angle tests — benefit vs fear, price vs speed, etc.]

PRIMARY TEXT (125 chars):
[variation 1]
[variation 2]

PRIMARY TEXT (expanded, up to 500 chars):
[variation 1]
[variation 2]

HEADLINES (40 chars):
[variation 1]
[variation 2]
[variation 3]

DESCRIPTION (30 chars):
[variation 1]

CTA BUTTON: [Learn More | Sign Up | Book Now | Shop Now]
```

### Google Search (RSA)
```
HEADLINES (30 chars each — provide 10–15):
1.
2.
...

DESCRIPTIONS (90 chars each — provide 4):
1.
2.
3.
4.
```

### YouTube Pre-Roll
```
HOOK (first 5 seconds / ~15 words):
[hook line]

BODY SCRIPT OUTLINE (60–90 seconds):
0:05 — Problem statement: [1–2 sentences]
0:20 — Agitate: [1–2 sentences why it matters]
0:35 — Solution reveal: [what you're offering]
0:50 — Proof / credibility: [specific result or authority]
1:05 — CTA: [one clear next step]

CTA LINE:
[exact spoken CTA]
```

---

## Rules / Guardrails
- **Hook first.** Opening line must stop the scroll. If it doesn't, it fails.
- **One idea per ad.** Every variation makes one promise and one ask.
- **Stand-alone.** Each variation works without prior exposure to the brand.
- **No vague outcomes.** "More leads" is not a promise. "47 booked calls in 30 days" is.
- **CTA must be explicit.** "Click below", "Book your call", "Register now" — not "learn more" alone.
- **Respect character limits.** Flag any variation that exceeds limits and provide trimmed version.
- **Match funnel message.** Ad promise must match what the landing page delivers.
- **No banned claims.** Default to `[INSERT_RESULT_PLACEHOLDER]` for sensitive outcomes.

