ad-meta — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited ad-meta (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill defines exactly what to produce for a Meta ad creative across Facebook and Instagram. It is platform-spec only: the slots Meta exposes, the truncation thresholds that decide what users see, the asset ratios per placement, and the CTA button enum. It does not cover audience setup, conversion events, Advantage+ settings, or attribution.
Meta is unusual: most copy fields have no hard cap, only truncation thresholds. Writing past the threshold is fine — but the text after the truncation point is read by almost no one. Treat thresholds as your real limits.
| Placement | What You Produce |
|---|---|
| Facebook Feed | Primary text, headline, description, image/video, CTA button |
| Instagram Feed | Primary text, image/video, CTA button (headline shows less prominently) |
| Stories (FB + IG) | Vertical video/image, optional sticker text, CTA |
| Reels (FB + IG) | Vertical video, primary text, CTA — sound-on but caption-required |
| Marketplace | Same as Feed, narrower visible primary text |
| Audience Network | Headline, description, image/video, CTA |
| Threads Ads | Advertiser access since 2025; ads shown to users in all markets from early 2026 with a gradual ramp. Image, video, carousel; 1:1 or 4:5. Included in Advantage+ placements by default (opt out per ad set) |
| Carousel Ads | 2-10 cards with per-card image/headline/URL; shared primary text |
| Collection Ads | Hero (1:1 or 1.91:1) + 4 product tiles from catalog; opens Instant Experience; mobile-only |
| Lead Ads | Native in-app form, no landing page; intro card + ≤3-5 questions + privacy URL + thank-you |
| Messenger / Click-to-Messenger Ads | Feed creative + "Send Message" CTA → opens Messenger thread with welcome template (≤3 quick-reply chips) |
| Click-to-WhatsApp Ads | Feed/Reels/Stories creative + "Send WhatsApp Message" CTA → opens WA chat with pre-filled message (≤160 char, editable) |
| Advantage+ sales campaigns (formerly Advantage+ Shopping) | Meta merged manual and Advantage+ setup into one flow in 2025–26; legacy ASC/AAC creation ended with Marketing API v25. 2026: up to 50 ads per ad set, 150 per campaign (verify live). Catalog feed should include 1:1 + 4:5 (+ 9:16 for Reels) |
| Slot | Preview Threshold | Hard Cap | Notes |
|---|---|---|---|
| Primary text | ~125 chars before "See more" | 63,206 (effectively unlimited) | First 125 chars decide click-through |
| Headline | 27 chars before truncation | 40 chars recommended | Below image on Feed; smaller on IG |
| Description | 27 chars before truncation | 30 chars recommended | News-Feed-only on FB |
| URL | n/a | n/a | Destination URL |
| CTA button | Enum | n/a | See CTA section below |
| Slot | Notes |
|---|---|
| Primary text | Optional, smaller display, treat 60 chars as visible budget |
| Headline | Not always shown on Stories — Reels show it but small |
| Visual | 9:16 vertical, full screen, sound-on but assume sound-off readability |
| CTA button | Enum, anchored to bottom of screen |
| Sticker text | Manual overlay on the asset itself, not a Meta-managed field |
| Placement | Recommended Ratio | Notes |
|---|---|---|
| Facebook Feed | 1:1 (1080×1080) or 4:5 (1080×1350) | 4:5 takes more mobile screen |
| Instagram Feed | 1:1 or 4:5 | Same — 4:5 outperforms 1:1 on mobile |
| Stories | 9:16 (1080×1920) | Full screen, safe zone matters |
| Reels | 9:16 (1080×1920) | Same as Stories |
| Right Column | 1.91:1 (1200×628) | Desktop only, tiny — use brand visuals |
| Audience Network | 1:1 or 1.91:1 | Varies by publisher |
| Marketplace | 1:1 | Same as Feed |
| Video minimum | 1 second | Practical min: 6–15s for short, 15–30s for full |
| Video max | 241 minutes (Feed) | Practical max: 60s for performance ads |
| Reels video max | Varies by placement (2026 sources disagree: 90s to 15 min — verify in Ads Manager) | Sweet spot: 15–30s |
| Stories video max | 60 seconds (auto-split into 15s cards) | Each card is its own segment |
| File size — image | 30 MB | JPG or PNG |
| File size — video | 4 GB | MP4, MOV, GIF |
Many enhancements are on by default for new ads, and Meta keeps adding and renaming them. Review the enhancement list per ad before publishing. Common ones:
Brand-safety opt-outs (toggle per ad; confirm whether your choice persists to new ads):
Meta only allows CTAs from this enum (selection depends on campaign objective). Cannot use custom CTA text.
Action / commerce:
Info / engagement:
Messaging-objective only:
Pick the CTA that matches the actual landing-page action. "Learn More" is the universal default but converts worse than a verb that names the action.
Variant strategy: Meta's ad retrieval (Andromeda, 2024–) rewards genuinely different concepts — different hooks, angles, formats, people — over near-duplicate tweaks of one ad. Build the variant set from distinct concepts.
Meta is brutal about scroll-speed. The first 3 elements decide everything:
So:
# Meta Ads — [Product] [Campaign Name]
## Placements
[Facebook Feed / Instagram Feed / Stories / Reels / Audience Network]
## Final URL
[Landing page URL]
## Primary Text
> [Copy — first sentence ≤125 chars must hook]
> [Rest of copy if any]
Preview slice (first 125 chars): "[show what users see before See more]"
## Headline (≤27 char recommended, ≤40 hard)
> [Headline] — [chars]
## Description (≤27 char recommended)
> [Description] — [chars]
## CTA Button (enum only)
[Selected CTA from enum] — [why this one matches the landing action]
## Visual Spec
- Ratio: [1:1 / 4:5 / 9:16]
- Shot: [concrete scenario, not stock]
- Text overlay: "[copy on the image/video]"
- First frame (video): [what's visible at 0s]
- Caption track: [yes — list per-scene captions if video]
## Variant Set
| # | Angle | Primary Text Opener | Headline | CTA | Visual |
|---|-------|---------------------|----------|-----|--------|
| 1 | [angle] | [≤125 char] | [≤27] | [enum] | [ratio + shot] |
| 2 | ... | ... | ... | ... | ... |
## Pre-Submit Checklist
- [ ] Primary text hook within first 125 chars
- [ ] First 3 words of primary text are not brand-name throat-clearing
- [ ] CTA button from enum, matches landing action
- [ ] Video first frame is the hook
- [ ] All video text captioned (85% mute viewing)
- [ ] Safe zones respected for Stories/Reels
- [ ] No personal-attribute language ("you, the [condition]")
- [ ] No before/after for restricted verticals
- [ ] No misleading scarcity
- [ ] Visual ratio matches placement~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.