agenttoolworks

An Apify Actor Store listing soon

Facebook Ad Library scraper, with Google and Bing ads in the same run

Search a brand, a keyword or a domain once. Get the public ads of the Meta Ad Library, the Google Ads Transparency Center and the Microsoft Ad Library back in one table: advertiser, text, creatives, landing page, dates, reach and targeting. No Facebook account, no API token.

soon Coming to the Apify Store. Until it is listed, ask us for access.How the Facebook Ad Library can be read
One search for nike in France goes in; the Actor reads the Meta, Google and Microsoft ad libraries and returns one row per ad in the same format, 20 per platform plus 9 advertiser rows
The output row and the counts are from a real cloud run, trimmed for space.

What you get

One row per ad, the same fields on every platform.

Where a library does not publish a field, it is null rather than guessed, so a Meta row and a Bing row sit in the same spreadsheet without a mapping step.

The Ads view of a real run in Apify Console: Meta ads for nike in France with creative thumbnail, advertiser, title, text, format, first and last day shown
The Ads view of a real run, in Apify Console.

Meta, Google and Microsoft, side by side

What each ad library actually publishes.

The three libraries do not expose the same things, and the logged-out Meta page shows less than Meta's own transparency details. This is what the Actor reads from each.

FieldMetaGoogleMicrosoft
Read fromThe public Ad Library search page, logged out, in a real browserThe Ads Transparency Center's public pagesMicrosoft's official public Ad Library API, no key
CountriesAll; one search per countryAll; reach for the EEAEEA only
Ad textTitle and bodyNot extracted (image or preview URL)Title and body
CreativesImage and video URLsArchived image or preview URLImage URLs
DatesFirst and last day shown, active todayFirst and last day shown, per country tooFirst and last day shown
ReachNot on the logged-out pageImpressions range, per countryImpressions range, share per country
TargetingNot on the logged-out pageCriteria used and excludedCriteria used and excluded
Depth per runUp to 1,000, by start dateUp to 1,000Up to 1,000

Past the first 30 Meta ads

Meta shows 30 results logged out. The Actor reads 1,000.

Logged out, the Ad Library page shows the first 30 results of a search and answers "Rate limit exceeded" to every request for more, from every network we tried. So the Actor never asks for page two. It reads the top 30 by impressions, then the page's own "most recent" order, moving the start-date filter back one day at a time: each page load brings up to 30 ads that started before the last one read.

1,000Nike ads in France in one run, 139 seconds on Apify, no proxy
500in 69 seconds, 20 page loads
30new ads at most per page load, so at most 30 per start day
0accounts, logins or cookies

The blind spot: a start day with more than 30 new ads shows only its first 30. The run summary says so whenever it makes a result short, and every platform reports "partial" with the reason when the library shows more than was read. The guide explains the walk step by step.

Reach by country

The transparency data the EU requires, in one view.

The EU's Digital Services Act requires very large platforms to keep a public, searchable ad repository with, at least, the content of each ad, who it was presented for, who paid, the period, the main targeting parameters and the recipients reached, broken down by Member State for targeted groups (Regulation (EU) 2022/2065, Article 39). Google and Microsoft publish those figures per ad; the Actor reads them with details on and lays them out one row per ad and country.

The Reach by country view of a real run: one row per Google ad and country with impressions from and to and the last day shown in that country
The Reach by country view. Apify views show every row of the dataset, so the three Meta advertiser rows at the top appear with these columns empty.

A real run

Nike in France, three platforms, 22.5 seconds.

This input returned 60 ads (20 per platform) and 9 advertiser rows on 2026-10-02. Two of the rows, trimmed:

input
{
  "query": "nike",
  "countries": ["FR"],
  "platforms": ["meta", "google", "microsoft"],
  "maxResultsPerPlatform": 20,
  "includeDetails": true,
  "maxAdvertisers": 3
}
a Meta rowreal
{
  "rowType": "ad",
  "platform": "meta",
  "adId": "1870984290951787",
  "adLibraryUrl": "https://www.facebook.com/ads/library/?id=1870984290951787",
  "advertiserName": "Nike",
  "firstShown": "2026-09-02",
  "lastShown": "2026-10-01",
  "isActive": true,
  "format": "dynamic",
  "title": "Nike Sportswear Club Essentials",
  "body": "Get the gear that's up for it all. Any time. Anywhere.",
  "linkUrl": "https://www.nike.com/",
  "ctaText": "Shop now",
  "publisherPlatforms": ["FACEBOOK", "INSTAGRAM", "AUDIENCE_NETWORK", "MESSENGER", "THREADS"],
  "impressionsMin": null,
  "payer": null
}
a Microsoft rowreal
{
  "rowType": "ad",
  "platform": "microsoft",
  "adId": "71124892377247",
  "advertiserName": "Groupe COURIR",
  "firstShown": "2023-06-03",
  "lastShown": "2026-09-30",
  "title": "Baskets & Vêtements Streetwear NIKE pour - Tendances 2026",
  "displayUrl": "courir.com",
  "countries": ["FR", "LU"],
  "impressionsMin": 1000000,
  "impressionsMax": 2500000,
  "reachByCountry": [
    { "country": "FR", "countrySharePercent": 100 },
    { "country": "LU", "countrySharePercent": 0 }
  ],
  "targeting": { "included": ["location", "microsoft_audiences", "advertiser_audiences"], "excluded": ["location"] }
}

A search for a brand also returns ads that mention it: in France, "nike" brings Courir, Foot Locker and Amazon.fr ads alongside Nike's own. Use the advertiser domain, or filter on advertiserName, for one advertiser only.

Pricing

Pay per ad, no subscription.

$0.50 per 1,000 ads on any platform and $0.003 per advertiser row, billed by Apify with platform usage included. 1,000 Meta ads cost $0.50; the run above cost $0.057, of which $0.027 for the 9 advertiser rows (set them to 0 if you only want ads). Apify's free plan covers about 10,000 ads a month.

soon Coming to the Apify Store. Until it is listed, ask us for access.

For developers

The Apify Actor, in one HTTP call.

Run it and get the ads back in the same request through the Apify API. Snippets for Node.js and Python are in the Actor's README.

http
curl -X POST "https://api.apify.com/v2/acts/agenttoolworks~ad-library-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"query": "nike", "countries": ["FR"], "maxResultsPerPlatform": 50, "maxAdvertisers": 0}'

Questions

Do I need a Facebook account to scrape the Facebook Ad Library?

No. The Actor reads the Ad Library the way a logged-out visitor sees it, in a real browser with no account and no cookies. Meta's own Ad Library API needs a Facebook account and an identity confirmation, and it returns commercial ads only when they reached the EU.

How many ads can it read from the Facebook Ad Library?

Up to 1,000 per platform per run. Logged out, Meta shows the first 30 results of a search and refuses further pages, so the Actor walks back through start dates instead: 1,000 Nike ads in France came back in a 139-second run. A start day with more than 30 new ads shows only its first 30, and the run summary says so.

Which platforms does it cover?

Meta (Facebook, Instagram, Messenger, Threads, Audience Network), Google (Search, YouTube, Display, Shopping, through the Ads Transparency Center) and Microsoft (Bing, through Microsoft's official public Ad Library API, which covers ads served in the European Economic Area only).

Does it return reach and targeting?

For Google and Microsoft, yes, with details on: impressions per country, first and last day shown, and the targeting criteria used and excluded. On Meta, reach, payer and beneficiary are null for commercial ads, because the logged-out page does not include Meta's EU transparency details.

Does it return the text of Google ads?

No. Google rows carry the archived image or the preview URL Google renders the ad from, with dates, reach and targeting. Meta and Microsoft rows carry the title and body text.

What does it cost?

$0.50 per 1,000 ads on any platform and $0.003 per advertiser row, billed by Apify with platform usage included. Apify's free plan includes $5 of monthly usage, about 10,000 ads.

Public ad library data only: no login, no account, no data about the people who saw the ads. Not affiliated with Meta, Google or Microsoft.