Facebook Ads Library Scraper - Meta Ad Library, No Login avatar

Facebook Ads Library Scraper - Meta Ad Library, No Login

Pricing

from $2.10 / 1,000 results

Go to Apify Store
Facebook Ads Library Scraper - Meta Ad Library, No Login

Facebook Ads Library Scraper - Meta Ad Library, No Login

Facebook Ads Library scraper for competitor research: search the Meta Ad Library by keyword, page ID or URL across countries. Export ad copy, advertiser, Library ID, start/stop dates, CTA, landing domain and ad links. No login, cookies or Meta API token.

Pricing

from $2.10 / 1,000 results

Rating

0.0

(0)

Developer

Group Oject

Group Oject

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

11 hours ago

Last modified

Share

Search the public Meta Ad Library (Facebook Ads Library) by keyword, Facebook page ID, or a pasted Ad Library URL, and export every visible ad to JSON, CSV, or Excel. You get the ad copy, advertiser page, Library ID, start and stop dates, active status, landing domain, call-to-action button, and a direct link to the ad. No Facebook login, no cookies, no Meta API token.

Facebook Ads Library Scraper output in Apify: page name, ad text, landing domain, call to action, start date, status and country

Real output from a default run of Facebook Ads Library Scraper in Apify Console.

What can this Facebook Ads Library scraper do?

  • Keyword search across all advertisers - type crm software or protein powder and get ads from every page that mentions it, the same as the Ad Library search box.
  • Competitor ad tracking by page ID - pull the ads a specific Facebook page is running right now, or its inactive ads.
  • Paste any Ad Library URL - set up filters in your browser (country, media, platform), copy the URL, and scrape exactly that view.
  • Many countries in one run - run the same keywords against US, GB, CA, AU, DE and up to 20 country codes.
  • Filter at the source - active / inactive / all ads, image or video ads, all ads or political and issue ads, sort by estimated impressions or relevancy.
  • Bulk input - paste dozens of search terms one per line; duplicates are removed automatically.
  • Deduplicated output - the same Library ID found by two keywords or two countries is saved once.
  • Ready-made groupings - besides the dataset, the run saves ADS_BY_PAGE (ads grouped by advertiser) and a SUMMARY with the top pages by ad count.

What data can I extract from the Meta Ad Library?

FieldDescription
adArchiveIdMeta Ad Library ID (unique per ad)
adSnapshotUrlDirect link: facebook.com/ads/library/?id=<ID>
pageNameAdvertiser (Facebook page) shown on the ad
activeStatusACTIVE, INACTIVE, or UNKNOWN
adCreativeBodyPrimary ad text
adCreativeLinkTitleHeadline under the creative, when shown
adCreativeLinkDescriptionLink description, when shown
adCreativeLinkCaptionLanding domain, e.g. nike.com
ctaCall-to-action button, e.g. Shop Now, Learn More, Sign Up
adDeliveryStartTime"Started running on" date (ISO)
adDeliveryStopTime"Stopped running on" date for inactive ads
hasMultipleVersionstrue when the ad has several creative versions
hasEuTransparencytrue when Meta shows an EU transparency panel
publisherPlatformsPlatforms, only when Meta prints them as text (often empty)
query, queryType, country, searchUrlWhich search produced the row
rawTextFull visible text of the ad card, for your own parsing
fetchedAtScrape timestamp

The scraper reads what the public Ad Library page displays. Image and video file URLs, spend, and reach are not part of the output today (see FAQ).

How much does it cost to scrape the Facebook Ads Library?

This Actor uses pay-per-event pricing: you pay per ad saved, not for compute time.

Ads savedPrice
100 ads$0.20
1,000 ads$2.00
10,000 ads$20.00

Plus a tiny Actor start event ($0.00005 per GB of memory, about $0.0001 at the default 2 GB). Searches that find nothing and failed queries cost nothing beyond the start event. Set Max total ads or a maximum run charge to cap spend. Check the Pricing tab for the current rate.

How to scrape the Meta Ad Library

  1. Open the Actor and click Try for free.
  2. Enter one or more Search terms (brands, products, or topics), or Facebook page IDs, or paste Meta Ad Library URLs.
  3. Pick Countries (default US) and filters: active status, media type, ad type.
  4. Set Max ads per query and Max total ads (default 100 so your first run is cheap).
  5. Click Start. Export from the Output tab as CSV, Excel, JSON, or via API.

Where do I find a page ID? Open the advertiser in the Ad Library; the number after view_all_page_id= in the browser URL is the page ID. You can also paste that whole URL into Meta Ad Library URLs.

Input example: competitor keyword research

{
"searchTerms": ["crm software", "email marketing tool"],
"countries": ["US", "GB"],
"activeStatus": "ACTIVE",
"mediaType": "ALL",
"sortMode": "total_impressions",
"maxAdsPerQuery": 100,
"maxTotalAds": 400
}

Input example: one advertiser's active video ads

{
"pageIds": ["15087023444"],
"countries": ["US"],
"activeStatus": "ACTIVE",
"mediaType": "VIDEO",
"maxAdsPerQuery": 200,
"maxTotalAds": 200
}

Input example: a filtered view from your browser

{
"adLibraryUrls": [
"https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=running%20shoes&search_type=keyword_unordered&media_type=video"
],
"maxAdsPerQuery": 150
}

Output example

{
"query": "nike",
"queryType": "search_term",
"country": "US",
"searchUrl": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=nike&search_type=keyword_unordered&media_type=all",
"adArchiveId": "925321173274919",
"adSnapshotUrl": "https://www.facebook.com/ads/library/?id=925321173274919",
"activeStatus": "ACTIVE",
"pageName": "Nordstrom Rack",
"adCreativeBody": "Buy online and pick up in store for free! Get up to 70% off Nike, Vince, Madewell, adidas and more.",
"adCreativeLinkTitle": null,
"adCreativeLinkDescription": null,
"adCreativeLinkCaption": null,
"adDeliveryStartTime": "2026-08-03T00:00:00.000Z",
"adDeliveryStopTime": null,
"publisherPlatforms": [],
"targetedOrReachedCountries": ["US"],
"hasMultipleVersions": false,
"hasEuTransparency": false,
"cta": null,
"fetchedAt": "2026-09-24T12:12:53.025Z"
}

Fields are null when the ad card does not show them (for example, ads without a link have no landing domain or CTA). rawText is included in every row and omitted above for brevity.

Extra run outputs (key-value store)

KeyContents
SUMMARYQueries processed, total and unique ads, failed queries, top pages by ad count, duration
ADS_BY_PAGEAll ads grouped by advertiser page name
ERRORSAny query that failed, with the reason
RUN_METADATAInput settings used for the run

Use cases

  • Competitor ad monitoring - schedule a saved task with your competitors' page IDs and compare which Library IDs appear or disappear week to week.
  • Creative research - collect ad copy and CTAs for a niche before writing your own ads; long-running ads (old adDeliveryStartTime, still ACTIVE) are usually the ones that work.
  • Find new advertisers - keyword search surfaces every page advertising on a topic, useful for agencies and B2B lead lists.
  • Market and messaging analysis - export thousands of ad texts to a spreadsheet or LLM pipeline to find common hooks and offers.
  • Landing page discovery - group ads by adCreativeLinkCaption to see which domains advertisers send traffic to.

Run the Meta Ad Library scraper via API

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("groupoject/meta-ads-library-scraper-no-login").call(run_input={
"searchTerms": ["crm software"],
"countries": ["US"],
"maxTotalAds": 100,
})
for ad in client.dataset(run["defaultDatasetId"]).iterate_items():
print(ad["pageName"], ad["adArchiveId"], ad["adCreativeBody"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('groupoject/meta-ads-library-scraper-no-login').call({
pageIds: ['15087023444'],
activeStatus: 'ACTIVE',
maxTotalAds: 200,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, 'ads');

cURL

curl -X POST "https://api.apify.com/v2/acts/groupoject~meta-ads-library-scraper-no-login/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"searchTerms":["protein powder"],"countries":["US"],"maxTotalAds":50}'

Integrations

Connect results to Google Sheets, Slack, Airtable, Make, Zapier, or n8n with Apify integrations and webhooks, or call the Actor from AI agents through the Apify MCP server.

FAQ

Do I need a Facebook account, cookies, or a Meta API token?

No. The Actor opens the public Ad Library website in a headless browser, the same page anyone can view without logging in.

Does it return ad images, videos, spend, or reach?

Not today. The output covers the text and metadata visible on each ad card plus a direct link to the ad. Spend and impressions are only published by Meta for political and issue ads and for some EU transparency data, and this Actor does not extract them.

Up to 500 ads per keyword, page ID, or URL (maxAdsPerQuery) and up to 10,000 per run (maxTotalAds). The Actor scrolls the results page; it stops early when Meta stops loading new ads.

Why do result counts vary between runs?

The Ad Library is live: ads start and stop all the time, and results differ by country, sort order, and filters.

Why did a query fail?

Meta occasionally shows a block page or loads slowly. Failed queries are listed in ERRORS and are not charged. Enabling an Apify residential proxy in Proxy configuration usually helps for large runs.

The Ad Library is a public transparency tool that Meta publishes for anyone to search. This Actor collects only what is publicly displayed. You are responsible for how you store and use the data, including compliance with Meta's terms and privacy laws such as GDPR.