Meta Ads Library Scraper (Pay per Event) avatar

Meta Ads Library Scraper (Pay per Event)

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Meta Ads Library Scraper (Pay per Event)

Meta Ads Library Scraper (Pay per Event)

Scrape Meta Ad Library by keyword or Facebook page URL. Get ad text, CTA, headlines, platforms, languages, targeting, reach data, and delivery dates. Supports all countries, languages, and filters. Works with any Ad Library search URL. Lightning fast, structured JSON output.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Eimantas V

Eimantas V

Maintained by Community

Actor stats

3

Bookmarked

347

Total users

35

Monthly active users

8 days ago

Last modified

Share

Meta Ads Library Scraper

See what a competitor is running on Facebook and Instagram right now.

Give it a keyword, up to 10 Facebook page URLs, or an Ad Library URL with your filters intact. It calls Meta's official Graph API ads_archive endpoint, not a browser, and returns one row per ad: the copy itself — ad text, headline, description, CTA caption, deduplicated across variants — plus how many variants sit behind it, platforms, languages, start date, live status, and a snapshot link to the ad in the Ad Library. Sort by start date and the longest-running creatives rise to the top, the closest public proxy for what is working.

Targeting, demographics and reach are returned for EU and UK ads only; elsewhere they are null. Spend and impressions exist only on political, election and social-issue ads — set Ad category to Political and issue ads to get them. Meta does not publish what an ordinary advertiser spent, and this Actor will not invent a number in place of one it was never given.

What data you get

Every ad, everywhere:

  • Ad text — full copy, deduplicated across creative variants
  • Headline, description, CTA caption — the link preview and button text
  • Creative variants — how many versions of this ad Meta reported, before deduplication. Six variants of near-identical copy is an advertiser running a test
  • Publisher platforms — facebook, instagram, messenger, audience_network, threads
  • Languages — detected ad languages
  • Dates and status — creation date, delivery start and stop, active or not
  • Snapshot URL — a direct link to view the ad, images and all, in the Ad Library
  • Advertiser — page name, page ID, page URL, and bylines

EU and UK ads only, under the DSA transparency rules:

  • Targeting — target ages, gender, locations
  • Reach breakdown — age, country and gender reach
  • EU total reach and beneficiary/payer declarations

Political, election and social-issue ads only, with Ad category set accordingly:

  • Spend — the range Meta publishes
  • Impressions — impression count range
  • Currency, estimated audience size, demographic distribution, delivery by region

Anything outside its bracket comes back null, never zero and never an empty object. A null here means Meta does not publish it, which is a fact about the ad worth recording.

Pricing

$2.00 per 1,000 ads ($0.002 per ad), or $0.01 per query in count-only mode.

No start fee. A keyword that matches nothing returns nothing and costs nothing; a query that fails returns an error row and costs nothing. Full workings in docs/PRICING.md.

Input

Search Queries / Keywords

Search across all ads by keyword. Keywords are matched against ad text, images, and CTA buttons.

Loop Earplugs
Nike running shoes
AG1 supplement

You can also paste full Ad Library URLs here — all filters from the URL are preserved:

https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=Loop+Earplugs
https://www.facebook.com/ads/library/?active_status=active&content_languages[0]=en&publisher_platforms[0]=instagram&publisher_platforms[1]=facebook&view_all_page_id=15087023444&media_type=image

Supported URL parameters: q, view_all_page_id, content_languages[N], publisher_platforms[N], media_type, active_status, country, search_type.

Page URLs (max 10)

Facebook page URLs to scrape all ads from. The page ID is automatically resolved from the page HTML.

https://www.facebook.com/nike
https://www.facebook.com/SHEIN/
https://www.facebook.com/profile.php?id=123456789

You can provide up to 10 page URLs (API limit for search_page_ids).

Filter parameters

ParameterTypeDefaultDescription
Max Resultsinteger50Maximum number of ads to return (across all inputs combined)
Only Total CountbooleanfalseReturn only the count of matching ads — no ad data fetched
Keyword Match TypeselectUnorderedKEYWORD_UNORDERED treats each word independently and finds ads containing all words in any order. KEYWORD_EXACT_PHRASE matches the exact phrase — separate multiple phrases with commas to match all of them
Delivery Date FromstringOnly return ads delivered after this date (inclusive). Format: YYYY-MM-DD
Delivery Date TostringOnly return ads delivered before this date (inclusive). Format: YYYY-MM-DD
Publisher Platformsmulti-select(all)Filter by platform: Facebook, Instagram, Audience Network, Messenger, WhatsApp, Oculus, Threads
Active StatusselectALLALL, ACTIVE, or INACTIVE. Overridden if already set in an Ad Library URL
Countriesmulti-selectUSCountries where ads were delivered. 250+ supported
Languagesmulti-select(all)Filter by language: English, Spanish, French, etc. (80+ languages)
Proxy ConfigurationobjectdisabledOptional proxy configuration

Example input

{
"searchQueries": [
"Loop Earplugs"
],
"pageUrls": [
"https://www.facebook.com/nike",
"https://www.facebook.com/SHEIN/"
],
"maxResults": 100,
"activeStatus": "ACTIVE",
"countries": ["US"],
"searchType": "KEYWORD_UNORDERED"
}

Output

Each ad is pushed as a separate item to the default dataset:

{
"adId": "1926905081295969",
"adArchiveId": "1926905081295969",
"adCreationTime": "2026-03-28",
"advertiserName": "AG1 by Athletic Greens",
"advertiserPageId": "130735813680498",
"advertiserPageUrl": "https://www.facebook.com/130735813680498",
"adText": "AG1 is the daily supplement trusted by thousands. One scoop covers your bases with 75 vitamins, minerals and whole food sourced nutrients.",
"ctaCaption": "drinkag1.com",
"headline": "AG1 Supplement by Athletic Greens",
"description": "Try AG1 and get a free Welcome Kit with your first order.",
"publisherPlatforms": [
"facebook",
"instagram",
"audience_network",
"messenger"
],
"languages": [
"en"
],
"startDate": "2026-03-29",
"endDate": "",
"isActive": true,
"impressions": null,
"snapshotUrl": "https://www.facebook.com/ads/library/?id=1926905081295969",
"ageCountryGenderReachBreakdown": [
{
"country": "US",
"age_gender_breakdowns": [
{
"age_range": "25-34",
"male": 1200,
"female": 980
},
{
"age_range": "35-44",
"male": 850,
"female": 720
}
]
}
],
"bylines": "",
"targetAges": ["25", "65"],
"targetGender": "All",
"targetLocations": [
{
"name": "United States",
"num_obfuscated": 0,
"type": "countries",
"excluded": false
}
],
"euTotalReach": null,
"beneficiaryPayers": null,
"scrapedAt": "2026-04-08T11:15:36.400Z"
}

Output fields

FieldTypeDescription
adIdstringUnique ad identifier (Library ID)
adArchiveIdstringSame as adId
adCreationTimestringDate the ad was created
advertiserNamestringName of the Facebook page running the ad
advertiserPageIdstringNumeric page ID
advertiserPageUrlstringLink to the advertiser's Facebook page
adTextstringFull ad creative body text (multiple variations joined with newlines)
ctaCaptionstringCTA link caption (e.g. domain name)
headlinestringLink preview headline
descriptionstringLink preview description
publisherPlatformsstring[]Platforms the ad runs on (facebook, instagram, messenger, audience_network, threads)
languagesstring[]Detected ad languages (ISO 639-1 codes)
startDatestringDelivery start date
endDatestringDelivery end date (empty if still active)
isActivebooleanWhether the ad is currently running
impressionsobject/nullImpression count range ({lowerBound, upperBound}). Only available for political/issue ads. Returns null for commercial ads
snapshotUrlstringLink to view the ad in the Ad Library
ageCountryGenderReachBreakdownarray/nullReach by age, country, and gender. Available for UK & EU ads and political ads in Brazil
targetAgesstring[]Targeted age range. Available for UK & EU ads
targetGenderstringTargeted gender (Women, Men, or All). Available for UK & EU ads
targetLocationsarray/nullTargeted locations with inclusion/exclusion. Available for UK & EU ads
bylinesstring"Paid for by" disclosure. Available for political/issue ads only
euTotalReachnumber/nullEstimated reach across the EU. Available for EU ads only
beneficiaryPayersarray/nullBeneficiary and payer info. Available for EU ads only
scrapedAtstringISO timestamp when the data was collected