Facebook Ad Library API — Competitor Ads as JSON | FetchLayer
Unofficial Third-party API
8 endpoints live

Every ad. Every advertiser.
Creative files and all.

Ad copy & creative Downloadable video & images EU transparency data AI-ready JSON

Search the public Facebook Ad Library by keyword or advertiser and get the copy, the call to action, the run dates, the publisher platforms, and the actual video and image files as structured JSON. No Meta developer account, no access token, no app review.

Free tier included No credit card No scraper maintenance

Trusted by developers shipping real products.

480,570 served today

POST /facebook-ad-library/search-ads
200 OK

Request

$ curl -X POST \
  https://api.fetchlayer.dev/facebook-ad-library/search-ads \
  -H "Authorization: Bearer ss-your-key" \
  -H "Content-Type: application/json" \
  -d '{"query":"running shoes","country":"US"}'

Response

{
  "ads": [{
    "adArchiveId": "1204458274639...",
    "advertiser": "Nike",
    "body": "Built for the long run...",
    "ctaText": "Shop Now",
    "startDate": "2026-07-14",
    "platforms": ["FACEBOOK", "INSTAGRAM"],
    "video": "https://.../hd.mp4"
  }],
  "nextCursor": "eyJwYWdlIjoy..."
}

Used by developers at

Individual developers or teams — not official partnerships

Built for feedback workflows

Fetch the public signal. Use it wherever your team works.

Keyword and advertiser search

Search the Ad Library by keyword, or pull every ad one advertiser is running right now — filtered by country, status, creative format, publisher platform, language, and impression date.

The creative files, not screenshots

Get each video, image, and thumbnail as a downloadable asset URL, then stream the bytes through GET /media with HTTP Range support so video seeking works in a player.

Every variation in the ad group

One ad detail call returns the full copy, the call to action, the destination link, and every creative version running under the same ad group — not just the one you opened.

Political and issue ad transparency

Restrict a search to political and issue ads, filter by "paid for by" byline, and read EU transparency reach with age, gender, and location audience breakdowns.

Advertiser profiles

Resolve a brand name into a page ID, then pull category, verification status, follower and Instagram counts, about text, and political spend by disclaimer.

Paste a URL, get filters

Hand any Ad Library URL to resolve-url and it comes back as the structured filters it encodes — ad, advertiser, or search. Parsing a URL is free and consumes no credit.

AI-ready JSON

Pass ad copy, CTAs, run dates, and creative URLs to an LLM or an MCP agent to cluster hooks, spot rotation, and write the brief — no HTML parsing, no wrapper code.

FetchLayer Research Chat

Build a competitor swipe file with AI—then export it to CSV.

Prefer not to write code? Give FetchLayer Research Chat a brand, ask what it is running and which creative has survived longest, and turn the whole ad set into a structured file for your swipe folder, client deck, or creative brief.

  • Ask questions in plain English
  • Analyze themes, sentiment, and pain points
  • Download the structured results as CSV or JSON
Research ads in Chat

No code or setup required · Uses your FetchLayer credits

Facebook Ad Library research

Pull every ad this brand is running in the US right now. Group them by hook and format, flag which creatives have been live longest, then export it as CSV.

Y

I found the active ads across Facebook and Instagram, grouped them into six hooks, and marked the three creatives that have run continuously for over 90 days. The full ad-level breakdown is ready to download.

facebook-ad-library-competitor-ads.csv

128 ads · 11 columns · ready to download

CSV

From raw feedback to action

One request is the start of the workflow.

Store the structured response, run it on a schedule, pass it to an LLM, or feed it into the system your team already uses. FetchLayer handles retrieval so you can focus on the outcome.

  1. 01

    Find the advertiser

    Search a brand name to get its page ID, or pass an Ad Library advertiser URL or plain facebook.com page URL you already have.

  2. 02

    Pull the ads and the creative

    Filter by country, status, format, platform, and date, then request the media assets for the ads worth keeping.

  3. 03

    Turn ads into intelligence

    Build a swipe file, diff the rotation week over week, ship a client report, or hand the JSON to an agent to write the creative brief.

MCP & agents

Live

Your AI already knows how to use this.

Use the Facebook Ad Library endpoint directly from your MCP-compatible agent. Ask it to retrieve public feedback, identify patterns, and turn the result into a useful brief without writing integration glue.

1
Pick your editor
2
Agent discovers 8+ tools
3
Query any platform instantly
connect your agent ~30s

Pick your editor and we hand you the config with your key already in it — no JSON to hand-edit, no wrapper code.

Get your free API key

Free tier · no credit card · any MCP host

New chat fetchlayer connected

Find every ad this brand is running in the US right now, tell me which creative has been live the longest, and get me the video files.

Used fetchlayer.facebook_ad_library_advertiser_ads

Pulled 37 active ads across Facebook and Instagram. The longest-running creative has been live for 94 days, three hooks repeat across formats, and the HD video assets are ready to download.

Ask a follow-up…

Works with every MCP-compatible tool

Cursor
Claude
VS Code
Windsurf
Cline
Hermes
OpenClaw
Kiro
No wrapper code
All 8 endpoints exposed as tools
Official & maintained
Free to install

Use cases

What growth teams build with Facebook Ad Library data.

Same API, endless applications. Here is what teams ship with public ad data.

01

Competitor creative tracking

See every ad a competitor is running right now — copy, hooks, formats, and the surfaces each one is placed on.

competitorsadsresearch
02

AI agent context

Give Claude, Codex, or your MCP agent structured ad copy and creative URLs instead of a folder of screenshots.

llmagentsmcp
03

Ad fatigue & rotation

Poll an advertiser on a schedule to see which creatives get killed, which survive, and what replaces them.

alertsmonitoringcron
04

Political & issue ad research

Filter by disclaimer and read EU transparency reach with age, gender, and location breakdowns for accountability work.

politicstransparencyeu
05

Creative swipe files

Download the actual videos and images behind winning ads and build a searchable inspiration library.

creativeassetsswipe
06

Agency client reporting

Pull a client’s category on demand and turn live competitor activity into a report that writes itself.

agenciesreportingcsv

Compare approaches

Spend time on the insight, not the collection layer.

What you needFetchLayerOfficial APIBuild it yourself
Search public ads without a Meta appApp + verified tokenYou build it
Commercial ads, not just politicalPolitical & issue onlyYou build it
Downloadable video & image assetsSnapshot URLsYou extract them
Bearer auth from one accountID verification requiredYou manage it
Ready for AI and MCP workflowsYour integrationYour integration

FetchLayer provides access to publicly available data. It is not affiliated with, endorsed by, or sponsored by the platform.

Pricing

Start free. Scale when ready.

Pay per request with no commitment, or lock in a flat monthly rate with built-in savings.

Free plan — 30 requests

Verify responses, inspect the API, no credit card required.

Try free

Pay as you go

$1.99

per 1,000 requests

$0.00199 per request · credits never expire

How credits work — no multipliers

One credit = one API call, on every endpoint and platform. No matter how many results come back, you pay for the call, not the output size. Most scraping APIs charge multipliers of 5x, 25x, even 75x per call depending on the target — here it's always 1.

  • No multipliers — 1 request = 1 credit
  • No monthly commitment
  • Credits never expire
  • Same API & MCP access as subscribers
  • ∞ req/min, ∞ API keys
Get API key

Expiry

Credits stay until you use them. No monthly reset, no pressure to hit a quota.

0

Commitments

No subscription, no contract, no minimums. Start, pause, or scale whenever.

100%

Access

Every endpoint and MCP included. Not a limited tier — same data as any subscriber.

API reference

Every parameter, documented.

All requests are POST with a JSON body and Bearer auth header.

POST /facebook-ad-library/search-ads

Search the public Ad Library by keyword. Returns live and inactive Facebook, Instagram, Messenger, and Threads ads with their copy, creative, run dates, and advertiser.

query* string Keyword or phrase to search the Ad Library for
searchType string 'keyword_unordered' | 'keyword_exact_phrase' | 'page'. Default keyword_unordered.
country string Two-letter country code, or ALL. Defaults to ALL.
countries string[] Several countries at once (max 20); overrides country.
activeStatus string 'active' | 'inactive' | 'all'. Defaults to active.
adType string 'ALL' | 'POLITICAL_AND_ISSUE_ADS'. Defaults to ALL.
mediaType string 'all' | 'image' | 'meme' | 'image_and_meme' | 'video' | 'none'.
publisherPlatforms string[] FACEBOOK, INSTAGRAM, MESSENGER, THREADS, AUDIENCE_NETWORK, WHATSAPP.
contentLanguages string[] Two-letter ad language codes, e.g. 'en' or 'es'.
bylines string[] Political-ad disclaimers ("paid for by") to filter on.
startDateFrom string Only ads whose impressions start on or after this YYYY-MM-DD date.
startDateTo string Only ads whose impressions start on or before this YYYY-MM-DD date.
limit number Maximum ads returned, or -1 for everything available. Defaults to 30.
pages number Pages of results to collect in one request (max 100).
cursor string Resume from a previous response's nextCursor.
sortBy string 'start_date' | 'end_date' | 'total_active_time' | 'none'.
POST /facebook-ad-library/advertiser-ads

Every ad one advertiser is running, with the same filters as a keyword search. The fastest way to see a competitor’s entire live rotation.

advertiser* string Page ID, Ad Library advertiser URL, or facebook.com page URL
query string Optional keyword to filter within the advertiser's ads
activeStatus string 'active' | 'inactive' | 'all'. Defaults to active.
mediaType string Creative format filter — image, video, meme, or none.
limit number Maximum ads returned, or -1 for everything available.
pages number Pages of results to collect in one request (max 100).
POST /facebook-ad-library/search-advertisers

Find advertisers and brands by name. Returns the page ID, ad count, categories, and follower count — use it to resolve a brand name into the ID every advertiser lookup needs.

query* string Advertiser or brand name to look up
country string Two-letter country code, or ALL. Defaults to ALL.
adType string 'ALL' | 'POLITICAL_AND_ISSUE_ADS'.
limit number Maximum advertisers returned, or -1 for everything available.
POST /facebook-ad-library/advertiser-profile

An advertiser’s Ad Library profile: page name, category, verification, follower and Instagram counts, about text, and political spend broken down by disclaimer.

advertiser* string Page ID, Ad Library advertiser URL, or facebook.com page URL
country string Two-letter country code, or ALL.
POST /facebook-ad-library/ad-detail

One ad in full: complete copy, call to action, destination link, every creative version in the same ad group, and EU transparency reach with age, gender, and location breakdowns.

ad* string Ad archive ID, or an Ad Library URL containing one
country string Two-letter country code, or ALL.
includeVariations boolean Also fetch every other creative version in the ad group. Defaults to true.
POST /facebook-ad-library/ad-media

An ad’s videos and images as downloadable asset URLs, optionally probed for availability, size, and content type. Pair it with GET /facebook-ad-library/media, which streams the bytes themselves with HTTP Range support so video seeking works.

ad* string Ad archive ID, or an Ad Library URL containing one
kinds string[] 'video' | 'image' | 'thumbnail'. Defaults to all three.
preferHighQuality boolean Pick HD video and original images. Defaults to true.
includeVariations boolean Include media from every creative version of the ad.
probe boolean Confirm each asset is still downloadable and report its size and content type.
POST /facebook-ad-library/resolve-url

Parse any Ad Library URL into the structured filters it encodes — whether it points at one ad, an advertiser, or a search, plus the country, status, and media filters in the query string. Free: it never consumes a credit.

url* string Any Ad Library URL, to be parsed into structured filters

Fields marked * are required. Full API reference →

FAQ

Common questions.

Is the Facebook Ad Library public data?

Yes. Meta publishes the Ad Library so anyone can see the ads running across Facebook, Instagram, Messenger, and Threads. FetchLayer retrieves those publicly available records and returns them as structured JSON. FetchLayer is not affiliated with, endorsed by, or sponsored by Meta.

Do I need a Meta developer account or an access token?

No. You authenticate with your FetchLayer API key — the same Bearer token you use for every other platform. There is no Meta app to register, no app review, no identity verification, and no token to refresh.

What identifiers can I pass in?

For an advertiser: a page ID, an Ad Library advertiser URL, or a plain facebook.com page URL. For a single ad: an ad archive ID, or any Ad Library URL that contains one. If you only have a brand name, /search-advertisers turns it into a page ID, and /resolve-url parses any Ad Library URL into the structured filters it encodes.

Can I download the actual video and image files?

Yes. /ad-media returns every video, image, and thumbnail in an ad as a downloadable asset URL, optionally probed to confirm it is still live and to report its size and content type. GET /facebook-ad-library/media then streams the bytes themselves with HTTP Range support, so video seeking works in a player. You get creative files, not screenshots.

Can I research political and issue ads?

Yes, and it is one of the reasons this platform is on FetchLayer. Restrict a search to political and issue ads, filter by byline (the “paid for by” disclaimer), and read the EU transparency data returned with an ad — total reach plus age, gender, and location audience breakdowns. Advertiser profiles include political spend broken down by disclaimer.

Can I see every creative variation of an ad?

Yes. /ad-detail returns the full ad copy, the call to action, the destination link, and every creative version running under the same ad group — not just the one variation you happened to open.

Can I use this with an AI model or MCP agent?

Yes. Every response is structured JSON you can store, embed, or hand to an LLM, and all eight endpoints are exposed through FetchLayer’s MCP server — so an agent can pull a competitor’s live ads, read the copy, and fetch the creative without any wrapper code.

How does billing work?

One API request equals one credit, the same as every other FetchLayer platform — no multipliers. Parsing an Ad Library URL with /resolve-url is free and consumes nothing; streaming media bytes bills as a normal request. Facebook Ad Library is in Beta while coverage expands, at standard pricing.

Start pulling Facebook Ad Library data today.

Get a free API key, make your first request, and put public feedback to work in your own product or research workflow.