Facebook Ad Library Scraper avatar

Facebook Ad Library Scraper

Pricing

from $0.80 / 1,000 ad scrapeds

Go to Apify Store
Facebook Ad Library Scraper

Facebook Ad Library Scraper

Search Meta's public Ad Library without login or API key. Get ad text, creatives, spend range, impressions, platforms and funding entity, by keyword or for a specific Facebook Page. $0.0008 per ad plus $0.005 per run start.

Pricing

from $0.80 / 1,000 ad scrapeds

Rating

0.0

(0)

Developer

NanoScrape

NanoScrape

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 days ago

Last modified

Categories

Share

Scrape any ad from Meta's public Ad Library: Facebook, Instagram, WhatsApp, Threads, Messenger, Audience Network. No login, no API key, no access token.

Why this scraper

  • Paste any Ad Library URL: the filters in the URL (country, ad type, active status, media type, publisher platforms, content languages, page IDs, date range, sort) are parsed automatically. Apply filters in your browser, copy the URL, paste it here.
  • Full creative data: ad text, headline, link, call to action, every image, every video (HD, SD, preview), every carousel card with its own link and CTA. Meta's raw creative object is passed through in snapshot, so new fields are never lost.
  • Page info: page name, ID, profile picture, page likes, categories.
  • Political and issue ads: spend range, reach range and impressions as Meta publishes them.
  • EU ad transparency details (reach, targeting, payer): switch on includeAdDetails to get total EU reach, reach by country, age and gender, targeting and the declared payer and beneficiary for each ad.
  • Fast and light: about 1,000 ads in roughly 3 minutes.
  • Pay-per-result: you pay for the ads you receive.

Input sources (mix and match)

FieldExampleUse when
searchUrlshttps://www.facebook.com/ads/library/?active_status=all&country=DE&q=nike&search_type=keyword_exact_phrase&publisher_platforms[0]=instagram&start_date[min]=2025-06-01You've already built a filtered view in the browser
searchQueries["Tesla Model 3", "electric vehicles"]Quick keyword searches across all of Meta's network
pageIds["15087023444"]You know the advertiser's numeric Page ID and want all their ads
advertiserNames["Baulig Consulting"]You know the brand name (searched as exact phrase)

Filters (apply to keyword / page / advertiser searches)

Note: when you paste a searchUrl, filters from that URL take precedence. The fields below apply to searchQueries, pageIds, and advertiserNames.

FilterValuesDefault
countryISO code (US, GB, DE, ...) or ALLALL
adTypeALL, POLITICAL_AND_ISSUE_ADS, HOUSING_ADS, EMPLOYMENT_ADS, CREDIT_ADSALL
activeStatusALL, ACTIVE, INACTIVEALL
mediaTypeALL, IMAGE, VIDEO, MEME, NONEALL
publisherPlatformsarray of facebook, instagram, messenger, audience_network, whatsapp, threads, oculusall
contentLanguagesISO 639-1 codes (en, de, ...)all
searchTypekeyword_unordered (broad) or keyword_exact_phrase (strict)keyword_unordered
maxAdsPerInput / maxResultsads per source / total ads (0 = no total limit)20 / 0
sortBytotal_impressions_DESC, total_impressions_ASC, time_active_DESC, time_active_ASC (Meta has no newest-first sort)relevancy
startDateMin / startDateMaxYYYY-MM-DDnone
includeAdDetailstrue adds EU ad transparency details (reach, targeting, payer) to every ad. Runs take longer because each ad needs one extra lookupfalse

What you get

One row per ad. Spend and reach are published by Meta only for political and issue ads, so they are empty for other ads. Meta may add fields over time; they are passed through in snapshot.

FieldTypeDescription
ad_archive_idstringUnique Ad Library archive ID
ad_idstringInternal ad ID (rare)
collation_idstringMeta's grouping ID for ad variants (group by it to see distinct creatives)
collation_countintegerNumber of ad variants in this group
page_idstringFacebook Page ID of the advertiser
page_namestringDisplay name of the advertiser's Page
page_is_deletedbooleanWhether the advertiser Page has been deleted
page_like_countintegerLikes on the advertiser's Page
page_profile_picture_urlstringDirect URL to the Page's profile picture
page_profile_uristringPublic URL of the Page
is_activebooleanWhether the ad is currently running
start_dateintegerUnix timestamp when the ad started running
end_dateintegerUnix timestamp when the ad stopped running (empty if still active)
start_date_formattedstringStart date as YYYY-MM-DD
end_date_formattedstringEnd date as YYYY-MM-DD
total_active_timeintegerTotal seconds the ad has been active
publisher_platformarrayPlatforms where the ad runs (FACEBOOK, INSTAGRAM, MESSENGER, AUDIENCE_NETWORK, WHATSAPP, THREADS)
targeted_or_reached_countriesarrayCountries the ad targets or reaches
categoriesarrayMeta's ad categories
display_formatstringCreative format (IMAGE, VIDEO, CAROUSEL, DCO, ...)
cta_typestringCall-to-action button type (LEARN_MORE, SHOP_NOW, ...)
cta_textstringDisplay text of the call-to-action button
link_urlstringDestination URL the ad links to
link_descriptionstringDescription text below the link title
titlestringAd headline
body_textstringMain body text of the ad
ad_captionstringCaption on the link card (usually the domain)
snapshotobjectMeta's full creative object: body, images[], videos[], cards[] for carousels, page categories, byline, disclaimer label and more
currencystringCurrency code for spend figures
spendstringSpend range as text, for example >$1M (political and issue ads only)
reach_estimatestringReach range as text, for example >1M (political and issue ads only)
impressions_with_indexobjectImpression range with text representation
has_user_reportedbooleanWhether users have reported the ad
report_countintegerNumber of user reports
is_aaa_eligiblebooleanWhether the ad is eligible for ad authorization (political and issue ads)
gated_typestringAd gating status (ELIGIBLE, GATED, ...)
hide_data_statusstringWhether transparency data is hidden (NONE, HIDDEN, ...)
contains_digital_created_mediabooleanWhether the ad contains AI-generated or digitally altered media
contains_sensitive_contentbooleanWhether Meta flagged sensitive content
is_violating_eu_siepbooleanWhether the ad violates the EU policy on sensitive issues, elections or politics
violation_typesarrayPolicy violations associated with the ad
verified_voice_contextobjectVerified-voice transparency information
state_media_run_labelobjectState-controlled media label
menu_itemsarrayInteractive menu items in the ad
fev_infoobjectExternal review information
regional_regulation_dataobjectRegional regulatory data
aaa_infoobjectAd authorization data, included when Meta returns it
transparency_by_locationobjectPer-jurisdiction transparency data, included when Meta returns it
advertiserobjectAdvertiser metadata, included when Meta returns it
total_advertiser_spend_lowerintegerLifetime Page spend, lower bound (only when Meta returns it)
total_advertiser_spend_upperintegerLifetime Page spend, upper bound (only when Meta returns it)
total_advertiser_spend_currencystringCurrency of the lifetime Page spend
eu_total_reachintegerTotal EU reach of the ad (with includeAdDetails; empty when the ad was not delivered in the EU)
targets_eubooleanWhether the ad targets the EU (with includeAdDetails)
beneficiarystringBeneficiary declared by the advertiser (with includeAdDetails)
payerstringPayer declared by the advertiser (with includeAdDetails)
target_agesstringTargeted age range, for example 18-65+ (with includeAdDetails)
target_genderstringTargeted gender, for example All (with includeAdDetails)
target_locationsarrayTargeted locations, an empty list when unknown (with includeAdDetails)
reach_breakdownarrayEU reach per country and age range: country, age_range, male, female, unknown (with includeAdDetails)
ad_details_statusstringok, not_eu (ad not delivered in the EU) or failed (details could not be fetched) (with includeAdDetails)
ad_library_urlstringDirect link to the ad in the Ad Library
advertiser_urlstringLink to all ads of the Page
countrystringCountry filter applied to the request
search_inputstringWhich input produced the ad: query:X, page_id:X, advertiser:X or url:X
source_urlstringThe Ad Library URL used to fetch the ad
scraped_atstringISO 8601 UTC timestamp when the record was extracted

Pricing

Pay-per-result. An ad is charged only after it has been saved to the dataset, and each ad is charged once. A run with no results costs nothing.

EventWhenPrice
actor-startOnce per run, right before the first ads are saved$0.005
facebook-ad-resultPer ad saved to the dataset$0.0008

Example: 1,000 ads cost one start event plus 1,000 ad events (about $0.81).

Usage examples

Paste any Ad Library URL

{
"searchUrls": [
"https://www.facebook.com/ads/library/?active_status=all&ad_type=all&country=DE&q=baulig&search_type=keyword_exact_phrase&publisher_platforms[0]=facebook&publisher_platforms[1]=instagram&start_date[min]=2025-06-06"
],
"maxResults": 200,
"maxAdsPerInput": 200
}

Search by keyword in a specific country

{
"searchQueries": ["Tesla Model 3", "electric vehicles"],
"country": "US",
"activeStatus": "ACTIVE",
"mediaType": "VIDEO",
"maxAdsPerInput": 100
}

Get all ads for a specific advertiser Page

{
"pageIds": ["15087023444"],
"maxAdsPerInput": 500
}

Research political advertisers in the EU

{
"searchQueries": ["vote 2026", "election"],
"adType": "POLITICAL_AND_ISSUE_ADS",
"country": "DE",
"contentLanguages": ["de"],
"maxAdsPerInput": 200
}

Compare a brand across platforms

{
"advertiserNames": ["Nike"],
"country": "ALL",
"publisherPlatforms": ["facebook", "instagram"],
"maxAdsPerInput": 500
}

EU ad transparency details (reach, targeting, payer)

{
"searchQueries": ["nike"],
"country": "DE",
"maxAdsPerInput": 20,
"includeAdDetails": true
}

Example of the added fields for one ad:

{
"eu_total_reach": 140850,
"targets_eu": true,
"payer": "Example Media Ltd.",
"beneficiary": "Example Media Ltd.",
"target_ages": "21-65+",
"target_gender": "All",
"target_locations": ["Germany"],
"reach_breakdown": [
{ "country": "DE", "age_range": "25-34", "male": 1200, "female": 800, "unknown": 12 }
],
"ad_details_status": "ok"
}

Use with AI agents (MCP)

Connect this actor to any MCP-compatible AI client, including Claude Desktop, Claude.ai, Cursor, VS Code, LangChain and LlamaIndex.

{
"mcpServers": {
"apify": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp.apify.com?tools=santamaria-automations/facebook-ad-library-scraper",
"--header",
"Authorization: Bearer <APIFY_TOKEN>"
]
}
}
}

Example prompt: "Use facebook-ad-library-scraper to find 30 active Nike video ads in Germany, including page like count and call to action."

Use cases

  • Competitive intelligence: see what ads your competitors are running, with copy, creative and call to action
  • Creative research: analyse ad hooks, CTAs and carousel structures at scale
  • Political ad transparency: spend and reach ranges for political and issue ads
  • Market sizing: measure category-level ad activity across countries and platforms
  • Lead generation: find companies that advertise on Meta in your vertical
  • Compliance auditing: surface AI-generated, sensitive or flagged ads

Notes

  • Meta's Ad Library is publicly accessible without login under their ad transparency policy
  • Spend and reach ranges are Meta's own and only published for political and issue ads
  • collation_id groups ad variants of one creative: group by it to see distinct creatives
  • Meta serves 10 ads per page. The scraper waits about 1.5 seconds between requests, so 1,000 ads take roughly 3 minutes
  • pageIds must be numeric Page IDs. To search by brand name use advertiserNames
  • Meta limits how fast the Ad Library can be read. Blocked or rate-limited requests are retried automatically (maxIPRotations, default 5 retries). Large runs may need a higher value.
  • Changes on Meta's side are handled automatically, so runs keep working without any action from you

Data protection

This actor returns only data that is publicly visible on the source pages. Results can include personal data, such as names, phone numbers, email addresses and addresses of private persons, sole traders or contact persons. Where the source labels an entry type, it is included so you can filter the results yourself.

You are responsible for using the data lawfully, including the GDPR/DSGVO, national data-protection laws and unfair-competition rules (e.g. UWG) for marketing and outreach.

Issues and feedback