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.
9,199,140 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.
One command.
Your agent does the rest.
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 Run one command, then sign in
$ npx fetchlayer
◇ Agents
│ Claude Code and Codex
◇ Signed in as you@company.com
◇ Connected
│ ✓ Claude Code ✓ Codex
It opens a sign-in page in your browser. New here? Signing in creates your free account.
2 Ask
›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.
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.
No key to copy and nothing to install. New accounts are free, with no credit card.
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.
Start free. Scale when ready.
Try it free, buy credits as you go, or take a monthly plan when your volume is steady.
Free
$0
30 requests
Enough to call the platforms you care about and read real responses before you pay anything.
- Every platform and endpoint
- REST and MCP
- No credit card
Pay as you go
$1.99
per 1,000
Buy credits when you need them. They stay on your account until you use them.
- Credits never expire
- No monthly commitment
- Same access as subscribers
- ∞ req/min, ∞ API keys
Monthly plan
Starter$25
per month
15,000 requests a month, about 500 a day.
$1.67 per 1,000, $5 less than credits each month
- ∞ req/min, ∞ API keys
1 page fetched is 1 credit
A normal call reads one page. Ask for more pages and each one is one more credit.
The same on every platform
No multiplier for harder targets, and no charge per result returned.
Nothing back, nothing billed
If a request does not return usable data, it costs 0 credits.
Not sure which volume fits?
15 minutes with the founder. Tell us the workload, we tell you what it needs.
Guaranteed throughput on the platform you run on
A dedicated platform from $400/mo, plus $500 for each ~21 req/s. Every other platform on the same key. 99.8% uptime, 24-hour support on Slack or Telegram.
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' (or 'POLITICAL') | 'HOUSING_ADS' | 'EMPLOYMENT_ADS' | 'FINANCIAL_PRODUCTS_AND_SERVICES_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 up to 30 ads 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 (5–17 digits), Ad Library advertiser URL, facebook.com page URL, username (with or without @), or the page’s exact name 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 up to 30 ads 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' (or 'POLITICAL') | 'HOUSING_ADS' | 'EMPLOYMENT_ADS' | 'FINANCIAL_PRODUCTS_AND_SERVICES_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 (5–17 digits), Ad Library advertiser URL, facebook.com page URL, username (with or without @), or the page’s exact name 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?
1 credit per page of up to 30 ads delivered, and every listing states how many as pagesScraped, so a bill is never a surprise. An empty result still costs the 1 credit every request pays. Parsing an Ad Library URL with /resolve-url is free and consumes nothing; streaming media bytes bills as a normal request.
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