Facebook Ad Library Scraper: Meta Ads, Creatives and Dates avatar

Facebook Ad Library Scraper: Meta Ads, Creatives and Dates

Pricing

from $0.97 / 1,000 ad scrapeds

Go to Apify Store
Facebook Ad Library Scraper: Meta Ads, Creatives and Dates

Facebook Ad Library Scraper: Meta Ads, Creatives and Dates

Export ads from the Meta Ad Library across Facebook and Instagram. Search by keyword, advertiser or Page ID and get ad copy, creative type, call to action, run dates, platforms, active status and the ad snapshot link. No login, no API key.

Pricing

from $0.97 / 1,000 ad scrapeds

Rating

5.0

(1)

Developer

Oski

Oski

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

1

Monthly active users

6 days ago

Last modified

Share

Facebook Ad Library Scraper

Scrape the Meta Ad Library (Facebook, Instagram, Messenger, Audience Network and Threads ads) into clean, structured data. Search by keyword or advertiser Page ID and get every ad's copy, images, videos, carousel cards, call to action, landing URL, run dates and platforms. A 200-ad pull costs about $0.24, with no login, no access token and no Meta API key.

Part of an ad-intelligence suite with the Google Ads Transparency Center Scraper and the LinkedIn Ad Library Scraper, so you can see what a competitor runs on Meta, Google and LinkedIn from one account.

What you can use it for

  • Agencies: pull a prospect's live Facebook and Instagram ads before a pitch, with the exact copy and landing pages.
  • Founders and marketers: monitor competitors' active ads each week and spot new offers soon after they go live.
  • Creative teams: build a swipe file of images, videos and carousels with headline, body and call-to-action text.
  • Media buyers: see how long an ad has run (start and end dates) and which Meta platforms it is placed on.
  • Researchers and journalists: collect political and issue ads, where Meta publishes spend and impression figures.

How to use it

  1. Under Search terms, add brands or keywords, such as Nike. A link copied from Facebook's Ad Library works too.
  2. To get every ad from one advertiser, paste their Ad Library link under Advertisers.
  3. Set Country (a name such as United Kingdom, a code, or ALL) and click Start.
  4. When it finishes, open the Output tab and download as CSV, Excel or JSON.

While it runs, the status line at the top of the run page shows progress (for example "Search 1 of 3: Nike. 120 ads so far."). When it finishes, the same line says what was found and explains anything that was skipped, so you never have to read the log.

How much does it cost?

You pay a $0.04 start fee (the actor runs a real browser) plus $0.001 per ad returned. You only pay for ads actually delivered.

Ads returnedMathsCost
100$0.04 + 100 x $0.001about $0.14
1,000$0.04 + 1,000 x $0.001about $1.04
10,000$0.04 + 10,000 x $0.001about $10.04

Because the start fee is paid once per run, it is cheaper to put several search terms in one run than to start many small runs. A typical 1,000-ad competitor export (five brands, 200 ads each) costs about $1.04.

Input

FieldWhat it does
searchTermsBrands or keywords, one per line. A pasted Ad Library link is read for its search.
pageIdsAn advertiser's Ad Library link, or the number after view_all_page_id=. A name typed here is searched as a keyword.
countryCountry to search in: a name or code (United Kingdom, UK, US), or ALL.
activeStatusall, active, or inactive.
adTypeall, or political_and_issue_ads (those carry spend and impression data).
mediaTypeall, image, video, meme, image_and_meme or none.
maxAdsPerSearchHow many ads per search term or Page ID (default 200). You pay per ad returned.
maxScrollsAdvanced safety stop. It grows automatically to fit Max ads per search.
proxyConfigurationAdvanced. Residential proxy, required and on by default (Meta blocks datacenter IPs).

Example for a five-brand competitor sweep:

{
"searchTerms": ["nike", "adidas", "gymshark", "puma", "under armour"],
"country": "GB",
"activeStatus": "active",
"maxAdsPerSearch": 200
}

Output

One record per ad:

{
"ad_archive_id": "2211032446353868",
"page_name": "IControl: Easy Widgets Themes",
"page_id": "721404351056614",
"is_active": true,
"display_format": "IMAGE",
"title": "a FREE and personalized APP for you",
"body": "Aesthetic presets for your phone",
"cta_text": "Install now",
"cta_type": "INSTALL_MOBILE_APP",
"link_url": "http://play.google.com/store/apps/details?id=...",
"start_date": "2026-06-27",
"end_date": "2026-07-21",
"publisher_platform": ["FACEBOOK", "INSTAGRAM", "AUDIENCE_NETWORK", "MESSENGER", "THREADS"],
"images": [{"url": "https://...", "resized_url": "https://..."}],
"videos": [],
"cards": [],
"page_like_count": 4210,
"impressions_text": null,
"spend": null,
"ad_snapshot_url": "https://www.facebook.com/ads/library/?id=2211032446353868",
"search": "nike",
"search_kind": "query",
"country": "US",
"scraped_at": "2026-07-22T02:15:00+00:00"
}

Records also carry caption, link_description, byline, page_profile_uri, page_profile_picture_url, page_categories, categories, collation_id, collation_count, reach_estimate, currency, contains_sensitive_content and contains_digital_created_media when Meta provides them. Videos include a preview_image, and each carousel card has its own title, body, CTA, link, image and video. Dates are converted from Meta's timestamps to YYYY-MM-DD.

Spend and impression figures are only published by Meta for political and issue ads. They come through when present and are null otherwise.

Tips for bigger runs

  • Add more search terms or Page IDs. Each one is a separate search with its own maxAdsPerSearch budget, and the start fee is paid once.
  • Use Page IDs for complete advertiser coverage. A keyword search also returns other advertisers who mention the word; a Page ID pulls one advertiser's ads only.
  • Going past about 400 ads in one search? Raise maxScrolls along with maxAdsPerSearch: each scroll loads roughly 10 ads, so 1,000 ads needs about 100 scrolls.
  • Use activeStatus: active when you only care about what is running now, so the budget goes on live ads.
  • Run one country per task and schedule several tasks if you track many markets. The Ad Library is scoped by country.

Scheduling and integrations

Save your input as a task and schedule it daily or weekly in Apify to track new ads. Results can go straight to Google Sheets, a webhook, Make, Zapier or your own code via the Apify API:

curl -X POST "https://api.apify.com/v2/acts/oski~facebook-ad-library-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms": ["nike"], "country": "US", "activeStatus": "active", "maxAdsPerSearch": 100}'

The sync endpoint waits up to 5 minutes. For bigger runs, start the actor with the runs endpoint and fetch the dataset when it finishes.

If something looks wrong

The status line at the end of every run explains anything that was skipped or came back empty. The common messages:

MessageWhat to do
Input problem: ...Something in the input needs changing, and the message says what. The run stopped before anything was charged.
No ads for "..." in GBTry another country, set Active status to All, or check the spelling.
"..." is not a numeric Page ID, so it was searched as a keywordNothing to fix, but for one advertiser's ads paste their Ad Library link.
The search for "..." failedFacebook was busy. Run it again later.

Still stuck? Open an issue on the actor page with the run link and it gets looked at quickly.

FAQ

Is it legal? It reads only the public Ad Library, which Meta publishes for transparency. No login and no private account are involved. You are responsible for how you use the data, including respecting privacy law where it applies.

Do I need a Facebook account or access token? No. The actor opens the public Ad Library in a headless browser and reads the same data the page loads.

Why did I get fewer ads than expected? The search may have fewer matching ads in that country or with your filters, or the Ad Library stopped returning new results (the actor stops after four scrolls in a row with no new ads, each retried with a longer wait). Try ALL countries, activeStatus: all, or a Page ID.

How fresh is the data? Every run reads the Ad Library live, so you get what Meta shows at that moment.

Why is spend empty? Meta only publishes spend and impressions for political and issue ads.

What if it breaks? Open an issue on the actor page. It gets fixed fast.

Other scrapers from Oski