# Platform Constraints — Character Limits and Formatting Rules

> **Loading rule:** Load this reference when writing copy that must fit specific platform constraints. Most often loaded in **Mode 2 (section ads)** or **Mode 6 (campaign package)** when generating multi-platform ad copy. Skip when writing landing pages or VSL scripts (they have no platform-imposed limits).

This is a tactical reference. It tells you the **hard limits** (truncation), the **ideal limits** (engagement), and the **format hooks** (where the eye lands first) per platform. It does not teach copy strategy — for that, load `ads-cpgc.md`, `patterns.md`, or the master genome of your choice.

---

## Why constraints matter

A 200-character Facebook headline gets truncated to "...". Truncated copy = wasted impression.
A Google Search ad with a 35-char headline gets rejected by the platform.
A LinkedIn intro that breaks at character 151 is the difference between "click to expand" and silent scroll-past.

**Rule:** if the copy doesn't fit, it doesn't ship. Rewrite tighter.

---

## Facebook / Instagram (Meta Ads)

### Feed ad

| Field | Ideal | Max | Notes |
|---|---|---|---|
| Primary text (caption) | 125c | 500c (truncates with "See More") | First 80c are the hook — must contain the lead |
| Headline | 25-40c | 40c | Bold below the image; it's the second hook |
| Description (link) | 30c | 30c | Below headline, often clipped on mobile |
| CTA button | (preset) | — | Choose from: Learn More / Sign Up / Shop Now / Get Offer / Subscribe / Download / Book Now |

### Story / Reel

| Field | Ideal | Max | Notes |
|---|---|---|---|
| Caption (overlay text) | 20-30c per line | — | Hand-drawn or sticker text — short and high-contrast |
| Reel caption | 100c hook + tags | 2200c | First 125c shown before "more" |

### Carousel ad

| Field | Ideal | Max | Notes |
|---|---|---|---|
| Primary text | 125c | 500c | One per ad set |
| Card headline | 25-40c | 40c | Per card |
| Card description | 18-20c | 20c | Per card |

### Hooks that work on Meta

- Open with a curiosity gap or pain in the FIRST line (before truncation)
- Use line breaks to create visual rhythm
- Emojis sparingly — one or two anchor points, not a wall
- "See more" should be earned by the first line creating an itch

### Anti-patterns (Meta-specific)

- Burying the hook past the 80c truncation line
- Stacking 5+ emojis (algorithmic flag for low quality)
- Long URLs in primary text (use the link field)
- Asking for engagement explicitly ("Comment YES below") — engagement bait penalty

---

## Google Search Ads

### Responsive Search Ads (RSA)

| Field | Ideal | Max | Notes |
|---|---|---|---|
| Headline 1 | 30c | 30c | The match-to-search-intent line |
| Headline 2 | 30c | 30c | Differentiator / brand / promise |
| Headline 3 | 30c | 30c | CTA or offer |
| Description 1 | 90c | 90c | Lead benefit |
| Description 2 | 90c | 90c | Proof or secondary benefit |
| Final URL | — | 2048c | Match keyword for Quality Score |
| Display Path 1 | 15c | 15c | Vanity URL slug |
| Display Path 2 | 15c | 15c | Second slug |

**Up to 15 headlines and 4 descriptions** can be uploaded — Google rotates and combines them.

### Hook position

The first headline must contain the **search keyword** verbatim or near-verbatim. Otherwise Quality Score tanks.

### Anti-patterns (Google-specific)

- Repeating the same phrase across multiple headlines (Google penalizes redundancy)
- Punctuation tricks ("F*R*E*E", "!!!") — disapproved
- ALL CAPS beyond a single word — disapproved in most regions
- Generic brand-only headlines without keyword match
- Mismatched URL keywords (hurts Quality Score)

---

## LinkedIn Ads

### Sponsored Content (single image / video)

| Field | Ideal | Max | Notes |
|---|---|---|---|
| Intro text | 150c | 600c | Truncates with "...see more" at 150c on mobile |
| Headline | 70c | 200c | Below image; 70c shown before clip on most layouts |
| Description | — | 100c | Visible on desktop, hidden on mobile |

### Sponsored Messaging

| Field | Ideal | Max | Notes |
|---|---|---|---|
| Subject | 40c | 60c | Like an email subject line |
| Body | 500c | 1500c | Conversational, not promotional |
| CTA button | 12c | 20c | Single CTA |

### Hook position

LinkedIn rewards **professional-toned curiosity** and **named credibility** (company, role, result). It penalizes hype, capslock, and excessive emoji.

### Anti-patterns (LinkedIn-specific)

- Emojis beyond one or two — tone mismatch
- Selling-first copy without credibility — "Buy now!" reads as desperate on this platform
- Generic role-targeting ("Hey marketers!") without value
- Hashtags as filler — 3-5 specific hashtags max

---

## Twitter / X

| Field | Ideal | Max | Notes |
|---|---|---|---|
| Tweet | 240-260c | 280c | Leave space for retweet quote |
| Thread first tweet | 200-260c | 280c | Hook only — promise the thread payoff |
| Reply / Quote tweet | 100-200c | 280c | Punchier than original tweets |
| Bio | 140-160c | 160c | Includes positioning + 1 link |

### Hook position

First 8 words decide the scroll. Use **specificity** (numbers, named outcomes), **contrast** ("X but Y"), or **counter-intuition** ("Stop doing Z").

### Format hooks

- Line breaks every 1-2 lines (mobile readability)
- Threads: number them ("1/", "2/") OR don't number — pick one and be consistent
- Quote tweets gain reach when they add new value, not just "this 👇"

### Anti-patterns

- "Hot take:" or "Unpopular opinion:" intros — overused, scroll past
- Engagement bait ("RT if you agree") — algorithm down-ranks
- Stacked hashtags at the end — 1-2 max, integrated into the sentence
- Long URLs (always use the platform shortener or a clean redirect)

---

## TikTok / Reels (caption + on-screen text)

### Caption

| Field | Ideal | Max | Notes |
|---|---|---|---|
| TikTok caption | 100-150c | 2200c (recently raised from 300) | First 60c are the hook in the feed |
| Reels caption | 125c | 2200c | First 125c shown before "more" |
| Hashtags | 3-5 | 30 (TikTok), unlimited (Reels) | Niche + trending mix |

### On-screen text (overlays)

- 6-8 words per line max
- Stay in the safe zone (avoid platform UI overlap — bottom 20% and top 10%)
- Use bold sans-serif, white-on-black or black-on-white
- 1-2 lines visible at once
- Match the spoken word — but condense (talking + reading = cognitive overload)

### Hook position

**First 1-3 seconds** decide retention. Lead with:
- Curiosity ("You've been doing X wrong")
- Pattern interrupt (visual or verbal)
- Promise + specificity ("Saved $400 in 5 minutes — here's how")
- Negation hook ("This isn't another productivity tip — it's...")

### Anti-patterns

- Long intros before the hook
- Music too loud over voice
- Captions that explain instead of tease
- Hashtag spam with irrelevant tags

---

## YouTube

### Video metadata

| Field | Ideal | Max | Notes |
|---|---|---|---|
| Title | 60-70c | 100c | First 60c shown in search; the hook |
| Description (first 100c) | 100c | 100c critical | Above the fold; CTA + value summary |
| Description (full) | 1500-3000c | 5000c | Search-indexed; expand value + links |
| Tags | — | 500c total | 8-15 specific tags |
| Thumbnail text overlay | 3-5 words | — | High contrast, complementary to title (don't repeat title) |

### YouTube Ads (in-stream)

| Field | Ideal | Max | Notes |
|---|---|---|---|
| Hook (first 5 seconds) | — | — | Skippable — must earn the next 25 seconds in the first 5 |
| Headline | 15c | 15c | Shown beside video |
| Description | — | 70c | Below headline |
| CTA button | (preset) | — | Same CTA list as Google Ads |

### Hook position (organic videos)

- First 8 seconds: pattern interrupt + promise
- Open loop: tease something resolved later in the video
- Avoid "Hi guys, welcome back to my channel..." — biggest retention killer

---

## Pinterest

| Field | Ideal | Max | Notes |
|---|---|---|---|
| Pin title | 40-60c | 100c | Shown below image in search |
| Pin description | 200-300c | 500c | Keyword-rich, helpful tone |
| Board name | 20-30c | 50c | Niche-specific |

### Hook position

Pinterest is a **search engine for visuals**. Treat titles like Google search ads (keyword-driven) and descriptions like helpful blog intros.

---

## Email subject lines

| Context | Ideal | Notes |
|---|---|---|
| Mobile inbox preview | 30-40c | Most opens decided here |
| Desktop inbox preview | 50-60c | Slightly more room |
| Preheader (preview text) | 80-100c | Reinforces or extends the subject — never repeat it |

### Hook position

The first 30 characters decide the open on mobile. Lead with:
- Curiosity gap
- Specific number or outcome
- Personalization (first name OR specific behavior)
- Loss aversion ("[Last day]", "[Closing soon]")

### Anti-patterns

- ALL CAPS — spam filter signal
- Excessive punctuation (!!!) — spam filter signal
- "Re:" or "Fwd:" prefixes when the email isn't a reply — manipulative, breaks trust
- Vague ("Important update") — opens drop

---

## Display ad dimensions (banner ads)

These are size constraints, not character limits. Copy must fit the visual frame.

| Format | Dimensions (px) | Use case |
|---|---|---|
| Leaderboard | 728×90 | Top of page banner |
| Medium Rectangle | 300×250 | Sidebar / inline |
| Half Page | 300×600 | Sidebar tower |
| Mobile Banner | 320×50 | Mobile sticky bottom |
| Large Mobile Banner | 320×100 | Mobile sticky alt |
| Skyscraper | 160×600 | Sidebar tall |
| Square | 250×250 | Inline |
| Rectangle | 180×150 | Sidebar small |

**Rule of thumb for display ad copy:**
- 1 headline (4-7 words)
- 1 supporting line (8-12 words)
- 1 CTA button (1-3 words)
- No more — visual carries the rest

---

## Quick reference table — char limits at a glance

| Platform | Hook field | Hook limit | Body field | Body limit | CTA |
|---|---|---|---|---|---|
| Facebook feed | Primary text | 125c ideal | Headline | 40c | Preset button |
| Instagram feed | Caption | 125c ideal | — | — | Preset button |
| Google Search | Headline 1 | 30c | Description | 90c | — |
| LinkedIn Sponsored | Intro text | 150c | Headline | 70c | Preset button |
| Twitter / X | Tweet | 280c (max) | — | — | (link in tweet) |
| TikTok | Caption | 100-150c ideal | — | — | (link in bio) |
| Reels | Caption | 125c ideal | — | — | (link in bio) |
| YouTube ad | Headline | 15c | Description | 70c | Preset button |
| Email | Subject | 30-40c (mobile) | Preheader | 80-100c | (link in body) |
| Pinterest | Title | 40-60c | Description | 200-300c | (link on pin) |

---

## Platform × format crosswalk

When writing for a campaign that spans channels, ensure these stay consistent across platforms:

- **Hook** (the first line / first 5 seconds) — same psychological promise, adapted to platform tone
- **One Belief** — never change across platforms; the proof and angle adapt, not the belief
- **CTA** — consistent action verb; URL same destination; button text may shift to platform preset
- **Voice** — consistent tone descriptor (LightCopy style if pt-BR), never switch from formal to casual mid-campaign

When NOT to keep consistent:
- **Length** — mobile-first platforms get tighter copy
- **Format conventions** — LinkedIn is professional, TikTok is casual native — adapt without breaking voice
- **Hashtag/keyword strategy** — platform-specific

---

## Combining with genomes

| Master genome | Platform fit |
|---|---|
| Schwartz (foundational) | Universal — governs awareness/sophistication on every platform |
| Halbert (direct mail) | Best on long-form: email body, sales pages, LinkedIn long-posts. Poor fit for Twitter/TikTok |
| Kennedy (No B.S.) | Email, LinkedIn, podcast ad reads. Premium positioning needs space — not Twitter |
| Brunson (storytelling) | Reels/TikTok hooks, YouTube ad opens, email subject lines. Long-form on YouTube |
| Georgi (RMBC) | Long sales letters, YouTube VSLs, Facebook ad sets with mechanism teaser |
| Ladeira (BR mainstream) | Reels, TikTok, Instagram, Stories — daily-system content |
| Ícaro (Brazilian intellectual) | Twitter threads, LinkedIn posts, long captions on Instagram |
| Diogo Gomes (Brazilian periphery) | Facebook ads, YouTube ads, VSLs — high-volume aggressive direct response |

---

## Source

Compiled from:
- Meta Ads documentation (Primary text, Headlines, Descriptions per ad format)
- Google Ads Help — Responsive Search Ads spec
- LinkedIn Marketing Solutions — Sponsored Content guidelines
- Twitter / X best practices for ads and organic content
- TikTok for Business — Caption and creative spec
- YouTube ads spec + organic algorithm patterns
- Pinterest Business — Pin title and description spec
- Email deliverability heuristics from major ESPs (mobile vs desktop subject preview)

Limits change. When in doubt, verify in the platform's current documentation before shipping a campaign.
