---
name: ad-library-deep-dive
description: "Systematically mine a brand's Meta Ads Library — creative angles, hooks, formats, longevity (long-running = winning) — to search competitor patterns and inform your own creative."
license: MIT
compatibility: "Works with any Agent-Skills-compatible AI (Claude, ChatGPT, Cursor, Codex, and more). Ad-account actions run through Adspirer."
metadata:
  author: "Adspirer"
  version: "1.0.0"
  adspirer_category: "research-intelligence"
  adspirer_source: "https://www.adspirer.com/skills/ad-library-deep-dive"
  adspirer_connection_url: "https://adspirer.ai/sign-up"
  adspirer_primary_keyword: "facebook ads library"
  adspirer_secondary_keywords: "meta ads library, competitor ad research"
  adspirer_launch_wave: "1"
  adspirer_kind: "skill"
  adspirer_level: "operator"
  adspirer_platforms: "meta"
  adspirer_supported_clients: "claude,claude-code,chatgpt,codex,cursor,gemini,windsurf"
  adspirer_summary: "Systematically mine a brand's Meta Ads Library — creative angles, hooks, formats, longevity (long-running = winning) — to search competitor patterns and inform your own creative."
  adspirer_connections_required: "adspirer"
  adspirer_connections_optional: ""
---

# Meta Ads Library Deep Dive: Competitor Ad Research

## Use this when

Use this when you need to search the Meta Ads Library — the FB/Meta ads library covering Facebook, Instagram, Messenger, and Audience Network — before a creative refresh, a new campaign launch, or entering a new market/audience, when you want to reverse-engineer what's actually working for a competitor (or a brand you admire) rather than guessing at angles. Best triggered when your own creative has been fatiguing (frequency climbing, CPMs up, CTR down) and you need fresh hooks, or when you're about to brief a new set of ads and want a grounded starting point instead of a blank page. This is a Meta Ads Library search workflow specifically — it doesn't extend to platforms outside Meta's ad library (no Google, TikTok, Amazon, etc.). Also weak for brand-new competitors with under ~15 active ads; small libraries don't give you enough signal to separate a real pattern from noise.

## What you need

1) 1-5 target Page names or Page IDs (competitors or aspirational brands in your category — precise Page ID is safer than name search, since name search on the Meta Ads Library returns fuzzy matches and duplicate/impersonator pages). 2) Your own vertical/niche so pattern-matching stays relevant (e.g. "DTC skincare," "B2B SaaS demo booking") — without it the agent can't tell a relevant hook from noise. 3) Optional: a specific market/country if you only care about ads running there (the ads library defaults to all countries; EU ads carry extra transparency fields — spend range and impressions — that non-EU ads don't). 4) Optional: your own Meta connection via Adspirer if you want the session to end with a side-by-side against your own account's current live creative and CPMs — this step is skippable and the research still stands alone without it.

## Procedure

1. Resolve each target to an exact Page ID via the Meta Ads Library's page search (facebook.com/ads/library) rather than trusting a typed name — brands often run multiple Pages (regional, sub-brand, acquired brand) and impersonator/fan pages pollute name search; confirm the Page's verified checkmark, follower count, and "About" match the real brand before pulling ads.
2. Pull the FULL active ad set per Page (filter: Active, All countries or your target country, All ad categories unless the brand runs Housing/Employment/Credit/Social-Issue ads which sit in a separate restricted registry with different fields). Do not sample — a brand testing 40 creatives and running 3 is a different signal than one running 40; undercounting active ads is the most common mistake here.
3. For EACH active ad, log: launch/"Started running on" date, platforms (FB feed / IG feed / IG Reels / Stories / Audience Network — placement choice itself is a signal), format (single image / carousel / video / collection), primary hook (first 3 seconds of video or headline of static), CTA button, landing page/offer, and — for EU-visible ads only — the spend range and impression range Meta discloses; do not extrapolate US/global spend from EU disclosure, it's not a valid proxy.
4. Compute longevity per creative: today's date minus "Started running on." Rank all active ads by longevity descending. Meta doesn't let advertisers cherry-pick which ads count as "active" — an ad stays in the library as long as it's delivering, so an ad still live at 45+ days is Meta's algorithm confirming it's still winning on relevance/CPA, not the brand's opinion that it's good. Flag anything running 30+ days as a probable winner (default threshold — tell the user this is adjustable, e.g. lower to 14 days for fast-fashion/flash-sale verticals where creative cycles are inherently short, raise to 60+ for considered-purchase B2B).
5. Cluster the long-runners into angle/hook families (e.g. "founder-story UGC," "before/after," "price-anchor comparison," "problem-agitate-solve testimonial," "social-proof stat overlay") — 3+ winners in the same family is a stronger signal than one standalone winner, since it suggests the brand's own testing already converged on that angle.
6. Cross-reference format mix against longevity: if 80% of long-runners are UGC-style vertical video and static images all die within 10 days, that's a directional format signal for the category, not just the brand — note it as such, not as universal truth (n=1 brand).
7. If the user has connected their own Meta account, pull their current active ads via Adspirer and diff: which of their own hooks/formats overlap with the competitor's long-runners (validation), which competitor patterns are totally absent from their account (whitespace/opportunity), and what their own CPMs/CTR look like on the closest-matching format so any "go build this" recommendation is grounded in their real cost baseline, not just borrowed inspiration.
**Connect Adspirer (the ads connection):** when you reach a step that touches a live ad account, connect Adspirer first. In Claude Code, run `/plugin marketplace add anthropics/claude-plugins-community` then `/plugin install adspirer-ads-agent@claude-community`. In claude.ai or ChatGPT, add the Adspirer connector from https://www.adspirer.com/docs/ai-clients. Any other agent: follow https://www.adspirer.com/docs/ai-clients for your client. Sign-in link for the user: https://adspirer.ai/sign-up. Do not proceed with live ad-account steps until the connection is confirmed.
8. Synthesize a ranked shortlist (5-8 angle/hook/format combinations) with: the pattern, supporting evidence (N ads, longevity range, which brands), a one-line creative brief per angle the user's team or agency can hand to a creator, and an explicit caveat where evidence is thin (e.g. only 2 ads support a pattern).

## Fixed checks

Every "winner" claim must trace to a live Meta Ads Library entry with a captured Start Date at time of pull — never assert longevity from memory or a prior session's snapshot, the ads library changes daily as ads get paused/relaunched. Verify Page ID resolution against the Page's own verification badge/follower count before attributing any ad to a brand — misattributing a fan page or knockoff's ads as the real brand's strategy is the single most damaging failure mode here. If cross-referencing the user's own account, pull their current campaign/ad performance live via Adspirer at diff-time, not from an earlier conversation — CPMs and CTR benchmarks go stale within days. Do not report EU-only spend/impression ranges as if they apply to non-EU delivery of the same ad — Meta discloses them separately and they are not interchangeable.

## Stop conditions

Success: ranked shortlist of angle/hook/format patterns delivered with supporting ad counts, longevity data, and (if connected) a diff against the user's own account. No-op: fewer than ~15 active ads found across all target Pages — flag that the library is too thin for pattern-mining and suggest either widening to more competitors or waiting for the brand's next campaign wave rather than force-fitting patterns to sparse data. Blocked: target Page cannot be confidently resolved (no verified match, multiple identically-named pages, or the brand runs no discoverable Meta ads) — report which Pages resolved and which didn't rather than guessing. Needs-approval: user wants the agent to actually brief/build new creative based on the findings, or to launch a test campaign against these angles — that's a separate build/spend action requiring explicit go-ahead, this skill stops at the research handoff.

## Approval boundaries

Read-only for the competitive-research leg — Meta Ads Library data is public and requires no approval to pull or analyze. The ONLY live-account touch is the optional step 7 diff against the user's own Meta account, which is read-only (pulling their existing campaign/ad performance, not modifying anything) and still requires the Adspirer connection to access. No spend, budget, campaign, or creative changes are made at any point in this skill — turning the findings into new ads/campaigns is explicitly out of scope and would require a separate, explicitly approved action.

## What you get

A ranked shortlist (5-8 items) of angle/hook/format patterns pulled from real, currently-active competitor ads via the Meta Ads Library — each backed by ad count, longevity range, and platform/placement mix, not opinion. Per-pattern creative brief lines ready to hand to a designer or UGC creator. A whitespace map showing which winning patterns your own account isn't currently testing (if connected). Explicit confidence flags on any pattern backed by thin evidence (fewer than 3 supporting ads), and a longevity leaderboard of the single longest-running creatives per competitor as the highest-confidence "definitely still working" signals.
