Meta & Facebook Ad Library Scraper: Ads, Hooks, Landing Intel
Pricing
from $10.40 / 1,000 advertiser summaries
Meta & Facebook Ad Library Scraper: Ads, Hooks, Landing Intel
Facebook and Meta Ad Library scraper for competitor ad research: give page URLs, page IDs or keywords and get every ad, creative image and video URLs, hook analysis of the ad copy, landing domain profiles, an advertiser summary and competitor comparisons. Batch input, pay per result.
Pricing
from $10.40 / 1,000 advertiser summaries
Rating
0.0
(0)
Developer
daehwan kim
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Paste competitor Facebook pages, page IDs or keywords. Get every ad they run, and what it all adds up to. One page turns into many rows: the advertiser, one row per ad (text, headline, CTA, landing URL, start date, days running, platforms), every image and video URL, a hook analysis of each ad text, a profile of every landing domain the ads point to, and a one-row advertiser summary. Enter two or more competitors and switch on comparisons to get one row per pair, side by side.
This Actor is an independent, unofficial tool. It is not affiliated with, endorsed by, or sponsored by Meta Platforms, Facebook, Instagram, rdap.org or any advertiser it reads. It reads the public, logged-out Meta Ad Library the same way a browser does: no login, no cookies from any account, no captcha solving, no account pools. Creative images and videos are linked, never downloaded or re-hosted. You are responsible for using the output for a lawful purpose, for complying with Meta's terms of service, and for respecting the rights in the advertisers' pages and creatives. Every result row carries this notice in its
responsibilityfield.
Who this is for
Performance marketers and media buyers researching competitor ads, agencies building creative swipe files and pitch decks, e-commerce brands watching who runs what and for how long, and copywriters studying which hooks and offers keep running.
What one run returns
rowType | One row per | Key fields |
|---|---|---|
advertiser | advertiser page | pageId, pageName, pageCategories, pageLikeCount, activeAdCount (all matching ads in the library), adsInResults, adLibraryUrl |
ad | ad | adArchiveId, startDate, endDate, runDays, isActive, publisherPlatforms, displayFormat, adText, headline, linkDescription, ctaText, ctaType, landingUrl, landingDomain, appStoreLink, isDynamicTemplate, cardCount, assetCount, adLibraryUrl |
creative-asset | image or video URL | assetType (image, video), assetUrl, previewImageUrl, videoSdUrl, fileFormat, cardIndex |
hook | unique ad text of an advertiser | hookText (the opening line), hookTypes, bodyHookTypes, hookScore (0–100), hookWordCount |
landing-domain | domain the ads link to | registeredAt, domainAgeDays, registrar, registrantCountry, mailProvider, hasSpf, hasDmarc, pageTitle, metaDescription, techHints, socialLinks, advertiserNames |
advertiser-summary | advertiser | activeAdCount, adsStartedLast30Days, averageRunDays, longestRunningAdId, longestRunningAdDays, topCtas, topHookTypes, averageHookScore, topLandingDomains, displayFormats, platformShare, uniqueAdTexts |
competitor-comparison | pair of advertisers you entered | activeAdCountDiff, moreActiveAdvertiser, averageRunDaysA/B, sharedCtas, ctaOverlap, sharedHookTypes, hookTypesOnlyA/B, sharedLandingDomains, platformsOnlyA/B, formatsOnlyA/B |
notice | message | noticeCode, message — never charged |
Hook types. question, number, contrast, promise, discount, urgency, social-proof,
detected by transparent rules on the opening line (hookTypes) and on the whole ad text
(bodyHookTypes). The score adds 15 points per device in the opening line, 10 for an opener of 12
words or fewer and 5 for an emoji or a direct "you".
Long-running ads. runDays counts from the ad's start date to today (active ads) or to its end
date. Ads that keep running for months are usually the ones that make money, so the summary names the
longest-running one.
Pricing (pay per event)
| Event | Charged per | USD (FREE plan) | Bronze | Silver | Gold+ |
|---|---|---|---|---|---|
run-started | run | 0.005 | 0.004 | 0.00325 | 0.0026 |
advertiser-resolved | advertiser row | 0.02 | 0.016 | 0.013 | 0.0104 |
ad-scraped | ad row | 0.01 | 0.008 | 0.0065 | 0.0052 |
creative-asset-captured | image or video URL row | 0.005 | 0.004 | 0.00325 | 0.0026 |
hook-classified | hook row (unique ad text) | 0.02 | 0.016 | 0.013 | 0.0104 |
landing-domain-profiled | landing domain row | 0.01 | 0.008 | 0.0065 | 0.0052 |
advertiser-summary | advertiser summary row | 0.02 | 0.016 | 0.013 | 0.0104 |
competitor-compared | comparison row (opt-in) | 0.03 | 0.024 | 0.0195 | 0.0156 |
What is charged and what is not.
- A row written to the dataset is charged once under its event. The same ad, asset, ad text, landing domain or advertiser is never charged twice in one run, even when two entries lead to it.
- Hook rows are per unique ad text of an advertiser: 40 ads that share one text give one hook row.
- A page with no ads matching your filters still gets its
advertiserrow (the lookup was done and the page is named), followed by a freeno-ads-activenotice. - For a search term, every advertiser in the results gets an
advertiserrow; theadvertiser-summaryrow is added only for advertisers with 2 or more ads in the results. Pages you enter directly always get a summary. - Landing domains where no source answered produce no row and no charge. Up to 60 domains per run.
- Notice rows (
advertiser-not-found,no-ads-active,region-blocked,partial-results,spending-limit,invalid-input) are messages, never charged. - When your maximum charge per run is reached the run stops paid work and ends with a notice row.
Example (measured 2026-09-19): Nike's page with maxAdsPerPage 50 returned 50 ads, 25 unique ad
texts, 286 creative URLs (most ads are catalog carousels with up to 10 product cards each) and 8
landing domains: start $0.005 + advertiser $0.02 + ads $0.50 + assets $1.43 + hooks $0.50 + domains
$0.08 + summary $0.02 = about $2.56. With creative assets switched off the same run costs about
$1.13. Lower maxAdsPerPage to cap the ad rows.
Input
{"pageUrls": ["https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=ALL&view_all_page_id=15087023444&search_type=page&media_type=all","https://www.facebook.com/NordstromRack/","running shoes"],"countries": ["ALL"],"adStatus": "active","maxAdsPerPage": 50,"captureCreativeAssets": true,"classifyHooks": true,"profileLandingDomains": true,"compareAdvertisers": false}
pageUrls— array, up to 50 entries. Each one can be an Ad Library URL (a page view or a search; its own country and status are kept), a Facebook page URL, a numeric page ID, or a search term.countries— delivery countries (US,GB,DE…) orALL.adStatus—active,inactiveorall.maxAdsPerPage— ad rows per entry, 1–1000.compareAdvertisers— off by default; with two or more pages entered, adds one comparison row per pair.proxyConfiguration— fallback only: when the Ad Library refuses or rate-limits the run's own network, that search is redone once through this proxy (residential by default).
Output example
{ "rowType": "advertiser", "pageId": "89516513179", "pageName": "Nordstrom Rack", "pageCategories": ["Clothing (Brand)"], "pageLikeCount": 2518001, "activeAdCount": 147, "adsInResults": 50 }{ "rowType": "ad", "adArchiveId": "925321173274919", "pageName": "Nordstrom Rack", "startDate": "2026-08-03", "runDays": 47, "displayFormat": "VIDEO", "adText": "Buy online and pick up in store for free! Get up to 70% off Nike, Vince, Madewell, adidas and more.", "ctaText": "Learn more", "landingDomain": "stores.nordstromrack.com", "publisherPlatforms": ["FACEBOOK", "INSTAGRAM", "MESSENGER"] }{ "rowType": "hook", "adArchiveId": "925321173274919", "hookText": "Buy online and pick up in store for free!", "hookTypes": ["discount"], "bodyHookTypes": ["number", "discount"], "hookScore": 25 }{ "rowType": "advertiser-summary", "pageName": "Nordstrom Rack", "activeAdCount": 147, "adsStartedLast30Days": 40, "averageRunDays": 23.5, "longestRunningAdDays": 50, "topHookTypes": [{"value": "number", "count": 33}, {"value": "discount", "count": 24}] }
Limits worth knowing
- The Ad Library shows commercial ads without spend or reach figures (Meta publishes those only for
political and issue ads and for ads delivered in the EU). When the library carries them,
spend,impressionsTextandtargetedOrReachedCountriesare filled in. - The library occasionally refuses or rate-limits some networks. The run then redoes the search once
through your proxy; if that fails too it writes a free
region-blockednotice (nothing delivered) or a freepartial-resultsnotice (the ads it did get are delivered) and moves on. - CTA text follows the language the library serves to the run's network;
ctaType(SHOP_NOW, LEARN_MORE…) is the same everywhere, so summaries and comparisons countctaType.
Runs on the Apify platform
Schedule it to watch competitors weekly, call it from the API, or plug it into a workflow. It needs no browser; 2 GB of memory is plenty.