# Competitor Ad Teardown

> Use when the user wants to see, analyze, or learn from competitors' ads — Facebook/Instagram or Google. Triggers include "what are my competitors running", "show me competitor ads", "what's working for [firm]", "analyze their creative", "what ads should I steal/beat", "teardown", or any competitor creative research. Produces a structured teardown of hooks, angles, offers, CTAs, formats, and proven winners that feeds the ad-creative-studio skill. Requires ranql-recon.

- Skill: `redwoodmeridian/competitor-ad-teardown` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add redwoodmeridian/competitor-ad-teardown`
- Raw SKILL.md: https://api.skillmd.com/api/skills/redwoodmeridian/competitor-ad-teardown/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Research & Search
- Author: redwoodmeridian (https://skillmd.com/u/redwoodmeridian)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/redwoodmeridian/competitor-ad-teardown

---


# Competitor Ad Teardown

Goal: turn a competitor's live ads into a structured, honest teardown you can build better creative from. The output feeds `ad-creative-studio`.

## Step 1 — Get the exact Facebook page URLs from the user (do NOT guess)

**You don't need a saved Ranql profile to do this.** A teardown runs entirely off what the user gives you in the chat — you pass it straight to `ads_facebook_ads` as parameters. So don't send them to onboarding first; just collect what you need and run.

Facebook ad lookups fail silently if you just pass a domain. The single most reliable move is to have the **exact Facebook page URL** for every firm you'll analyze — theirs and each competitor's.

**Ask the user to paste them.** Say something like:

> "To pull accurate ads, paste the Facebook page URL for your firm and for each competitor you want me to analyze — e.g. `https://www.facebook.com/YourFirm`. (Open their page on Facebook and copy the address bar.) If you don't have one, tell me the firm name + city and I'll try to find it, but I'll confirm it with you before trusting the results."

Rules:
1. **Never assume or invent a page URL.** If you don't have a confirmed URL and can't find one you're confident about, ask — don't guess. A wrong guess shows the firm a stranger's (or spam) ads.
2. When you *do* try to find one yourself: web-search `"<firm name> <city> facebook"`, take the official page, and **verify** (next step). If unsure, show the user the page you found and ask "is this you/them?" before pulling.
3. **Call `ads_facebook_ads` with `facebook_page_url` set** (plus `domain`, `firm_name`, `city`, `state`).
4. **For a creative teardown, add `deep=true`** — this returns each ad's `video_url`, `video_preview_url`, and DCO carousel `cards` (the real creative behind `{{product.name}}` placeholder ads). Without it you're blind to the video and DCO ads, which are usually the winners.
5. **Check `data.ownership.verified`.** If `false`, you got the wrong page — the `headline` says so. Get a better URL from the user and retry. **Never present unverified ads as theirs** (a lookup once returned an adult-app spam page for a law firm — see `ranql-recon` → `data-trust.md`).

Once you have the URL and ownership is verified, the pull is reliable — the endpoint won't mislabel a confirmed page. For Google ads, call `ads_google_ads` (domain-based). For a fast own-vs-sector view, `ads_creative_analysis`.

A verified **zero is a real finding**: "they're not advertising on Facebook" is an opportunity, not a dead end.

## Step 2 — Read the creative like a strategist

For each verified ad you get back, capture:

- **Hook** — the first line / headline. What attention-grab? (question, stat, fear, offer, social proof)
- **Angle** — the underlying promise or emotion (max compensation, speed, empathy, "no fee unless we win", local trust, urgency).
- **Offer / CTA** — "Free Case Review", "Learn more", "Sign up", a giveaway, a guarantee.
- **Format** — IMAGE / VIDEO / DCO (dynamic). Video and DCO signal budget and testing maturity.
- **Longevity** — `days_running` / `longest_running_days`. **Anything running 90+ days is a proven winner** — the firm doesn't pay to keep losers live. These are the ads to study hardest.
- **Landing destination** — `landing_url` on each ad. Tells you their funnel (dedicated LP vs homepage vs intake form) — and confirms ownership (an ad linking to the firm's own domain is theirs).
- **Platforms** — Facebook, Instagram, Audience Network, Messenger, Threads. Breadth = spend.

**Look at the actual image/video, not just the text.** Each ad carries `image_url` and `video_preview_url` — **fetch and view them.** Note the visual pattern: real photos vs graphics, faces vs scenes, production quality (a cinematic studio spot signals a big-brand competitor; a talking-head reel signals UGC/educational), brand colors, text density, logo placement, emotional register. Creative wins or loses on the visual — the copy is half the story. (Verified in the field: the market leader's 72-day winner was a TV-quality cinematic brand spot, not a direct-response graphic — you only learn that by looking.)

> **DCO (dynamic) ads** show `{{product.name}}` placeholders instead of real copy. With `deep=true`, their real creative comes back in the ad's **`cards[]`** array — each card has its own `image_url` / `video_preview_url` and copy. Fetch and view those. **Video ads** return a `video_url` (the actual file — download it to sample frames or read the on-screen text) and a `video_preview_url` (poster frame — view it fast). The winners are usually here, so always run a teardown with `deep=true`.

## Step 3 — Find the patterns (across ads, across competitors)

Run 2–4 top competitors (the profile's `competitors` list is your starting set). Then synthesize:

- **What's the dominant angle in this market?** (e.g. PI firms nearly all lead with "how much is your case worth")
- **Which hooks recur?** Recurrence + longevity = what converts in this market.
- **What formats dominate?** If everyone runs static and one firm runs video, that's a gap.
- **What's the offer convention?** ("Free Case Review" is table stakes in PI — matching it is necessary, beating it is the opportunity.)
- **Where are the gaps?** An angle nobody uses, an audience nobody targets, a format nobody runs. That's your opening.

## Step 4 — Produce the teardown

Deliver a structured teardown (see `references/teardown-template.md`):

1. **Market creative snapshot** — the dominant angles, hooks, offers, formats across competitors.
2. **Proven winners** — the specific 90+-day ads, with their hook/angle/why-it-works.
3. **Per-competitor summary** — what each is doing and how aggressively.
4. **Gaps & openings** — where this firm can differentiate.
5. **Spin recommendations** — for the top 2–3 winning angles, how to take the proven structure and make it *better* for this firm (sharper hook, stronger proof, better offer, a format nobody's using). This is the bridge to `ad-creative-studio` — never copy, always spin and improve.

## Reliability checklist before you present
- [ ] Every competitor's ads came back `ownership.verified: true`
- [ ] You looked at the actual creative (images), not just the JSON
- [ ] Landing destinations make sense for that firm/practice area
- [ ] Any "0 ads" is a verified zero, not a failed lookup

Then hand the teardown to **`ad-creative-studio`** (to build) or **`campaign-builder`** (to plan the buy). Pull the firm's own look with **`brand-kit-extractor`** first so new creative is on-brand.

