Every ad. Every advertiser.
Creative files and all.
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.
Trusted by developers shipping real products.
480,570 served today
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..."
} 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.
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
No code or setup required · Uses your FetchLayer credits
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.
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
Solutions
Build the workflow around the feedback.
Track the conversation
See how a campaign or a competitor actually lands in public posts and replies.
Explore →Find the demand
Search public discussions for the objections and problems your next creative should answer.
Explore →Read the reaction
Pull public comments on video ads and creator content in the same JSON shape.
Explore →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.
- 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.
- 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.
- 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
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.
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 keyFree tier · no credit card · any MCP host
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.
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.
Works with every MCP-compatible tool
Use cases
What growth teams build with Facebook Ad Library data.
Same API, endless applications. Here is what teams ship with public ad data.
Competitor creative tracking
See every ad a competitor is running right now — copy, hooks, formats, and the surfaces each one is placed on.
AI agent context
Give Claude, Codex, or your MCP agent structured ad copy and creative URLs instead of a folder of screenshots.
Ad fatigue & rotation
Poll an advertiser on a schedule to see which creatives get killed, which survive, and what replaces them.
Political & issue ad research
Filter by disclaimer and read EU transparency reach with age, gender, and location breakdowns for accountability work.
Creative swipe files
Download the actual videos and images behind winning ads and build a searchable inspiration library.
Agency client reporting
Pull a client’s category on demand and turn live competitor activity into a report that writes itself.
Compare approaches
Spend time on the insight, not the collection layer.
| What you need | FetchLayer | Official API | Build it yourself |
|---|---|---|---|
| Search public ads without a Meta app | ✓ | App + verified token | You build it |
| Commercial ads, not just political | ✓ | Political & issue only | You build it |
| Downloadable video & image assets | ✓ | Snapshot URLs | You extract them |
| Bearer auth from one account | ✓ | ID verification required | You manage it |
| Ready for AI and MCP workflows | ✓ | Your integration | Your 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.
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
∞
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.
Used by developers at
Individual developers or teams — not official partnerships