agentsclimarketplace

Competitor ad teardown

Skill redwoodmeridian/ranql-skills/plugins/ranql/skills/competitor-ad-teardown

Claude Code plugin: turn Claude into your law firm's marketing operator with the Ranql MCP. Competitor ad teardowns, brand extraction, on-brand creative (static and video), landing pages and campaigns. Built by Irfad Imtiaz, CTO of Ranql.

Install
npx -y skills add redwoodmeridian/ranql-skills --skill competitor-ad-teardown

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

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.md

7.0 KB, as published. Nobody here has run it

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-recondata-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.
  • Longevitydays_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 destinationlanding_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_urlfetch 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.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.