The Facebook Ads Library API is the plural-form keyword variant for Meta's official programmatic endpoint that returns the same data the public UI returns. Same product as the Facebook Ad Library API (singular); the plural variant is what people type when they're already thinking in terms of multiple ads being queried at once - the agency or in-house engineer who knows they're going to be sweeping many ads, not querying one. The endpoint lives at graph.facebook.com/ads_archive, requires a Meta developer account with business verification, returns JSON for any matching ad, ships commercial coverage only for the EU and Brazil, and rate-limits at 200 calls per hour per access token by default.
Cost
Free, with business-verification gate
Commercial coverage
EU + Brazil only
Default rate limit
200 calls/hour/token
Walkthrough
How to use it, step by step
- 1
Create a Meta for Developers account
Go to developers.facebook.com and register. The account is separate from a personal Facebook account and a Meta Business Manager. It's free. Use a work email tied to a verifiable business domain - free email domains (Gmail, Yahoo) work for account creation but slow down the next step (business verification).
- 2
Create an App and add the Ad Library API product
Inside the developer dashboard, create a new App with 'Business' as the use case and add the Ad Library API product. Meta will require business verification - submitting business documents (registration, tax ID, proof of address) for review. Typical timeline is 3-7 business days; first-attempt rejection happens 30-40% of the time on trivial issues. Budget two cycles.
Start business verification on day one of your API project, not after building the integration. The verification gate is the longest single step. - 3
Generate an App Access Token
Once verification clears, generate an App Access Token in the dashboard. This authenticates every API call. Store in your secret manager and rotate quarterly. Never embed in client-side code - tokens grant API access at your business's quota.
- 4
Hit /ads_archive with your first query
Endpoint: GET https://graph.facebook.com/v18.0/ads_archive. Required params:
access_token,ad_reached_countries(which country),search_termsorsearch_page_ids(what to look for). Example:GET /ads_archive?access_token=YOUR_TOKEN&ad_reached_countries=['US']&search_terms='glossier'&ad_type=ALL&limit=100. Returns paginated JSON.Usesearch_page_idsoversearch_termsfor clean results. Page-ID queries return all ads from that advertiser; keyword queries return everything matching the string and produce noisy results. - 5
Set ad_type correctly for your region
Critical parameter.
POLITICAL_AND_ISSUE_ADSis available globally.ALL(which includes commercial ads) is only available for EU member states and Brazil. Outside those regions,ALLsilently returns the same data asPOLITICAL_AND_ISSUE_ADS- your code thinks it's getting commercial data and is actually getting nothing for most commercial brands. Always log the response counts when first testing. - 6
Paginate via cursors and respect the rate limit
Standard Graph API cursor pagination. Every response includes
paging.nextwith an embedded cursor; follow it untilpaging.nextis absent. Default page size 100, max 5000 but practical max ~1000. Rate limit: 200 calls per hour per token, rolling-hour basis. Build retry-with-backoff and consider multi-token rotation for large sweeps.Tokens are per-token rate limited, not per-app. Spin up 4-8 tokens (each on a separate App, all under one Business Manager) and rotate calls across them for serious agency-scale work. - 7
Parse the response - know which fields are populated
Response shape varies by ad type. Political/issue ads populate
spend,impressions,demographic_distribution,region_distribution,funding_entity,bylines. Commercial ads (EU/Brazil only) populatead_creative_bodies,ad_creative_link_titles,ad_delivery_start_time,ad_delivery_stop_time,publisher_platforms,languages,currency. Every ad getsid,page_id,page_name,ad_snapshot_url,ad_delivery_start_time. Plan for sparse responses.Always requestad_snapshot_url- it's the link to the rendered ad in the public UI, and the only way to get to the actual creative media. The API does not return image or video URLs directly.
Cheatsheet
Filters that matter
| Filter | What it does | When to use |
|---|---|---|
| ad_reached_countries | Restricts ads to those that reached at least one user in the specified country. | Required parameter. Set to a single country for clean partitioning. |
| ad_type | Toggles POLITICAL_AND_ISSUE_ADS (global) vs ALL (EU + Brazil only). | Set to ALL for commercial research where available; POLITICAL_AND_ISSUE_ADS elsewhere. |
| search_terms | Free-text search across ad copy, headlines, and page names. | Category-level sweeps where you want broad recall. |
| search_page_ids | Restricts to ads from a specific Facebook Page ID (or list of IDs). | Default for clean advertiser-anchored queries. |
| ad_active_status | Toggles ACTIVE / INACTIVE / ALL. | ACTIVE for current-state benchmarking; INACTIVE for historical archive work. |
| ad_delivery_date_min / ad_delivery_date_max | Filters by ad start date range. | Time-bounded queries - 'ads started in the last 7 days', 'Q1 2026 launches'. |
| publisher_platforms | Filters by delivery surface (FACEBOOK, INSTAGRAM, MESSENGER, AUDIENCE_NETWORK). | Placement-specific creative research. |
What it won't tell you
The gaps
Commercial coverage is EU + Brazil only
Outside the EU and Brazil, the API returns political and issue ads only - even with ad_type=ALL. For commercial competitor research in non-covered regions (US, UK, Canada, Australia, APAC), the API does not solve your problem. UI scraping or paid third-party tools become the de facto path.
No direct media URLs in responses
The API returns `ad_snapshot_url` (a link to the rendered public UI page) but no direct URLs for the underlying image or video files. To capture actual media you have to render the snapshot page and scrape the embedded files - which Meta doesn't sanction. Paid tools (Foreplay) maintain this layer.
200/hour rate limit caps serious sweeps
Sweeping 50 competitors with 10-page result sets requires 500 calls minimum - more than the hourly limit on a single token. Multi-token rotation is the standard workaround but adds operational complexity. Higher quotas require justification and a 1-2 week review.
Business verification blocks projects 1-2 weeks
The verification gate blocks API access for the full duration of the review. Teams new to the Meta developer ecosystem routinely lose 2 weeks here before they realize the API is also commercially gated for their region.
Shuttergen
Skip the API plumbing - audit competitors in one click.
Shuttergen handles the business verification, rate limits, multi-token rotation, and EU/Brazil commercial gaps so you get structured competitor data without building a Meta developer integration.
Why we maintain singular and plural API guides separately
Google ranks 'facebook ad library api' (singular) and 'facebook ads library api' (plural) as related-but-distinct queries. Search intent differs subtly: singular phrasing tends to come from people thinking about the tool conceptually ('what is the Ad Library API'); plural phrasing tends to come from people already thinking about query workflows ('I'm going to be pulling many ads via this API'). Same product, marginally different audience mindset, different optimal landing page.
We maintain a guide per variant so whichever phrasing you typed, you land on a clean page rather than getting bounced through a SERP optimized for the other variant. The technical content is largely the same; the framing leans into the audience's mindset.
If you want the singular-variant version, see our Facebook Ad Library API guide. Everything below applies to both variants - same product, same endpoints, same gates.
The EU/Brazil commercial split and what it means for your sweep
Meta's commercial-ad API coverage is bound by the regulatory regimes that mandated the disclosure. EU member states are covered because the Digital Services Act (DSA) requires Very Large Online Platforms to maintain queryable repositories of all advertising shown to EU users. Brazil is covered because Brazilian election and advertising transparency law requires similar disclosure. No other jurisdiction has mandated commercial-ad disclosure at the same level, so Meta has not extended the API's commercial coverage.
The practical workflow split: if your competitive set runs ads in the EU or Brazil, you can query their commercial data programmatically by setting ad_reached_countries to those regions. If your competitive set runs only in non-covered regions, the API returns political ads only (typically empty for commercial brands).
Workaround for non-EU/Brazil markets: route research through EU-targeted queries when the competitor is multinational. A US brand that also runs ads in Germany will have those German-targeted ads exposed via the API. Use the German data as a proxy for global creative strategy. Imperfect (creative may be localized) but sanctioned and structured.
Skip the API plumbing - audit competitors in one click. Shuttergen handles the business verification, rate limits, multi-token rotation, and EU/Brazil commercial gaps so you get structured competitor data without building a Meta developer integration.
Production patterns that survive the rate limit
The 200-calls/hour/token rate limit is the operational bottleneck most teams hit first. Three patterns work in production. Multi-token rotation: maintain 4-8 access tokens (each on a separate App, all owned by the same Business Manager) and rotate calls across them. The limit is per-token, not per-app. Aggressive caching: most competitive monitoring queries don't need real-time data. Cache responses 12-24 hours and serve from cache rather than re-hitting the API. Incremental queries: instead of refetching a competitor's full ad set every run, query only ad_delivery_date_min={yesterday} to get new launches; full re-fetch weekly. Cuts call volume by 90%+ for steady-state monitoring.
If you have a documented use case (research project, agency client deliverable, internal product), you can request a quota increase through the App dashboard. Meta rarely denies legitimate requests but adds a 1-2 week review cycle. For most agencies and research projects, the rate limit is a real constraint worth planning around rather than ignoring.
Plan your retry logic carefully. The API returns 429 on rate-limit hits; build exponential backoff with jitter (start at 5s, max 5 min) and respect the Retry-After header where Meta provides it. Naive retry-without-backoff makes the rate-limit problem worse, not better.
When to use the API vs scrape vs pay for a third-party tool
Three viable paths in 2026. The API is right when you're operating in EU/Brazil markets, you need clean structured data, you can absorb the verification timeline, and you can engineer around the rate limits. Strong fit for academic research, regulatory-compliance audits, and EU-focused competitive monitoring.
UI scraping is the de facto path outside EU/Brazil for commercial-ad research. Against Meta's TOS, exposes you to IP blocks and DOM-change breakage, requires real engineering investment. Most teams that go this route eventually move to a paid tool because the maintenance burden compounds. See our scraper guide for the full options.
Third-party tools (Foreplay, Atria, Motion, AdSpy, Minea) maintain the scrape infrastructure professionally and resell access at $50-500/mo. For competitive marketing teams this is almost always the right choice over building yourself - you get the data plus the tagging layer plus the maintenance team without the engineering burden. Pair with the official API for EU/Brazil markets if you need structured exports for academic or compliance use cases.
Internal: Foreplay deep dive, Atria deep dive, Motion deep dive.
FAQ
Frequently asked
Is the Facebook Ads Library API free?
Is the Facebook Ads Library API the same as the singular Facebook Ad Library API?
Does the Facebook Ads Library API return commercial ads outside the EU and Brazil?
How long does business verification take for the Facebook Ads Library API?
What's the rate limit on the Facebook Ads Library API?
Does the Facebook Ads Library API return the actual ad images and videos?
ad_snapshot_url - a link to the rendered ad in the public Ad Library UI. To capture the actual media you have to render the snapshot page and extract embedded files, which Meta doesn't sanction. Paid third-party tools (Foreplay) maintain this layer.Can I monitor competitors with the Facebook Ads Library API?
search_page_ids and get a structured feed of their commercial ads. Outside covered regions you'll get only political ads (typically none for commercial brands). For non-covered regions, paid third-party tools are the de facto solution.Related
Keep reading
Resource
Facebook ad library api
Singular-form variant of the same guide.
Resource
Ad library api
Platform-agnostic deep dive on ad library APIs.
Resource
Meta ad library
UI-side reference for the same data.
Resource
Facebook ad library scraper
When the API doesn't cover you.
Research
Foreplay Deep Dive
How paid tools layer on top of the API.
Sources
Skip the API plumbing - audit competitors in one click.
Shuttergen handles the business verification, rate limits, multi-token rotation, and EU/Brazil commercial gaps so you get structured competitor data without building a Meta developer integration.