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:
- 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.
- 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.
- Call
ads_facebook_ads with facebook_page_url set (plus domain, firm_name, city, state).
- 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.
- 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):
- Market creative snapshot — the dominant angles, hooks, offers, formats across competitors.
- Proven winners — the specific 90+-day ads, with their hook/angle/why-it-works.
- Per-competitor summary — what each is doing and how aggressively.
- Gaps & openings — where this firm can differentiate.
- 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
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.
1---2name: competitor-ad-teardown3description: 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.4---56# Competitor Ad Teardown78Goal: turn a competitor's live ads into a structured, honest teardown you can build better creative from. The output feeds `ad-creative-studio`.910## Step 1 — Get the exact Facebook page URLs from the user (do NOT guess)1112**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.1314Facebook 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.1516**Ask the user to paste them.** Say something like:1718> "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."1920Rules:211. **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.222. 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.233. **Call `ads_facebook_ads` with `facebook_page_url` set** (plus `domain`, `firm_name`, `city`, `state`).244. **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.255. **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`).2627Once 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`.2829A verified **zero is a real finding**: "they're not advertising on Facebook" is an opportunity, not a dead end.3031## Step 2 — Read the creative like a strategist3233For each verified ad you get back, capture:3435- **Hook** — the first line / headline. What attention-grab? (question, stat, fear, offer, social proof)36- **Angle** — the underlying promise or emotion (max compensation, speed, empathy, "no fee unless we win", local trust, urgency).37- **Offer / CTA** — "Free Case Review", "Learn more", "Sign up", a giveaway, a guarantee.38- **Format** — IMAGE / VIDEO / DCO (dynamic). Video and DCO signal budget and testing maturity.39- **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.40- **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).41- **Platforms** — Facebook, Instagram, Audience Network, Messenger, Threads. Breadth = spend.4243**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.)4445> **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`.4647## Step 3 — Find the patterns (across ads, across competitors)4849Run 2–4 top competitors (the profile's `competitors` list is your starting set). Then synthesize:5051- **What's the dominant angle in this market?** (e.g. PI firms nearly all lead with "how much is your case worth")52- **Which hooks recur?** Recurrence + longevity = what converts in this market.53- **What formats dominate?** If everyone runs static and one firm runs video, that's a gap.54- **What's the offer convention?** ("Free Case Review" is table stakes in PI — matching it is necessary, beating it is the opportunity.)55- **Where are the gaps?** An angle nobody uses, an audience nobody targets, a format nobody runs. That's your opening.5657## Step 4 — Produce the teardown5859Deliver a structured teardown (see `references/teardown-template.md`):60611. **Market creative snapshot** — the dominant angles, hooks, offers, formats across competitors.622. **Proven winners** — the specific 90+-day ads, with their hook/angle/why-it-works.633. **Per-competitor summary** — what each is doing and how aggressively.644. **Gaps & openings** — where this firm can differentiate.655. **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.6667## Reliability checklist before you present68- [ ] Every competitor's ads came back `ownership.verified: true`69- [ ] You looked at the actual creative (images), not just the JSON70- [ ] Landing destinations make sense for that firm/practice area71- [ ] Any "0 ads" is a verified zero, not a failed lookup7273Then 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.