← Resources

Tools

Facebook ads library api

The plural-form keyword variant for the same Meta endpoint. Access flow, the EU/Brazil commercial gate, rate limits, and the production patterns that survive.

Updated

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. 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. 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. 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. 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_terms or search_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.

    Use search_page_ids over search_terms for clean results. Page-ID queries return all ads from that advertiser; keyword queries return everything matching the string and produce noisy results.
  5. 5

    Set ad_type correctly for your region

    Critical parameter. POLITICAL_AND_ISSUE_ADS is available globally. ALL (which includes commercial ads) is only available for EU member states and Brazil. Outside those regions, ALL silently returns the same data as POLITICAL_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. 6

    Paginate via cursors and respect the rate limit

    Standard Graph API cursor pagination. Every response includes paging.next with an embedded cursor; follow it until paging.next is 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. 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) populate ad_creative_bodies, ad_creative_link_titles, ad_delivery_start_time, ad_delivery_stop_time, publisher_platforms, languages, currency. Every ad gets id, page_id, page_name, ad_snapshot_url, ad_delivery_start_time. Plan for sparse responses.

    Always request ad_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

FilterWhat it doesWhen to use
ad_reached_countriesRestricts ads to those that reached at least one user in the specified country.Required parameter. Set to a single country for clean partitioning.
ad_typeToggles POLITICAL_AND_ISSUE_ADS (global) vs ALL (EU + Brazil only).Set to ALL for commercial research where available; POLITICAL_AND_ISSUE_ADS elsewhere.
search_termsFree-text search across ad copy, headlines, and page names.Category-level sweeps where you want broad recall.
search_page_idsRestricts to ads from a specific Facebook Page ID (or list of IDs).Default for clean advertiser-anchored queries.
ad_active_statusToggles ACTIVE / INACTIVE / ALL.ACTIVE for current-state benchmarking; INACTIVE for historical archive work.
ad_delivery_date_min / ad_delivery_date_maxFilters by ad start date range.Time-bounded queries - 'ads started in the last 7 days', 'Q1 2026 launches'.
publisher_platformsFilters 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.

Audit competitors free

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?
Yes - the API is free. You need a Meta developer account and completed business verification (also free). Rate limits apply (200 calls/hour/token default); higher quotas require justification.
Is the Facebook Ads Library API the same as the singular Facebook Ad Library API?
Yes - identical product. The singular/plural variant is a keyword phrasing difference, not a product difference. Both terms refer to the same endpoint at graph.facebook.com/ads_archive.
Does the Facebook Ads Library API return commercial ads outside the EU and Brazil?
No. Outside the EU and Brazil, the API returns political and issue ads only - even when ad_type is set to ALL. For commercial research in non-covered regions, UI scraping or paid third-party tools are the only paths.
How long does business verification take for the Facebook Ads Library API?
3-7 business days typical, longer with first-attempt rejection (which happens 30-40% of the time on trivial document-mismatch issues). Budget 2-3 weeks total and start verification on day one of your project.
What's the rate limit on the Facebook Ads Library API?
200 calls per hour per access token by default, on a rolling-hour basis. Higher quotas can be requested through the App dashboard with documented use cases (1-2 week review). Multi-token rotation is the standard workaround for large-scale sweeps.
Does the Facebook Ads Library API return the actual ad images and videos?
No. The API returns 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?
Yes in the EU and Brazil, with caveats elsewhere. In covered regions you can query a competitor's Page ID with 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

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.