Meta Ads Library Scraper 📣 $0.75/1k
Pricing
from $0.68 / 1,000 ads
Meta Ads Library Scraper 📣 $0.75/1k
Collect structured Meta and Facebook ad data from Ad Library searches and advertiser Page URLs. Very high data coverage: up to 48 fields are available for each ad.
Pricing
from $0.68 / 1,000 ads
Rating
0.0
(0)
Developer
123 Webdata
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Meta Ads Library Scraper
Collect live and historical ads from Meta's public Ad Library. Scrape keyword searches, Ad Library filters, and ads run by specific Facebook Pages. The Actor returns structured ad, advertiser, creative, spend, reach, transparency, and regional-registration data without opening an ad page in a browser.
Issues and feature requests
If you encounter an issue or need a field added, open an issue on the Actor page or write to hello@123webdata.com.
For custom requirements, contact 123 Web Data.
Output example (simplified)
| Advertiser | Ad | Active | Started | Platforms | Currency | Position |
|---|---|---|---|---|---|---|
| Nike | https://www.facebook.com/ads/library/?id=1550534860016399 | true | 2024-03-04 12:00:00 | FACEBOOK, INSTAGRAM | USD | 1 |
Every row also contains the complete Meta creative snapshot and the other declared fields listed below.
How to scrape the Meta Ad Library
- Open Meta Ad Library.
- Choose a country, ad category, active status and any keyword or filters.
- Copy the final URL from the address bar.
- Paste one or more URLs into Ad Library URLs.
Example search URL:
https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=nike
The Actor sends supported search filters from the pasted URL to Meta's own JSON search endpoint. It does not reject a URL because of its locale, regional hostname, path, query names, filter combination, or pagination state. Unsupported or inaccessible page shapes are reported in the run status and recorded in the Actor's support notes.
Scrape advertiser Pages
Paste Facebook Page or advertiser URLs into Advertiser Page URLs. Vanity names, numeric IDs, profile.php?id= URLs and regional hostnames are accepted.
https://www.facebook.com/depophttps://www.facebook.com/profile.php?id=156405867784232
Optional Page filters control active status, date period, sort order and country for advertiser Page runs.
Collect creative details
Enable Include ad details to make an additional JSON request for each emitted ad. This adds advertiser registration, AAA eligibility, violation, verification and location-transparency data. Leave it disabled for faster, lower-cost runs.
Pagination and limits
Enable Use pagination to follow Meta's result cursor until a limit is reached. Disable it to collect only the first result page. Maximum ads per source applies to each URL. Maximum ads to save is the global cap across all URLs.
Pricing
This Actor uses pay-per-event pricing. Its running costs are included.
- Actor start:
$0.015per GB. The default 2 GB memory allocation charges$0.03once per run. - Ad:
$0.00075each ($0.75 per 1,000). One event is charged for each saved unique ad.
| Ads in one run | Ads | Actor start | Total |
|---|---|---|---|
| 100 | $0.075 | $0.03 | $0.105 |
| 1,000 | $0.75 | $0.03 | $0.78 |
Apify's Free plan currently includes $5 in monthly usage credits. If the full $5 is available for this Actor, one run covers about 6,600 ads after the start charge. Other Apify usage reduces the available credit.
Input
| Field | Type | Description |
|---|---|---|
adLibraryUrls | array | Meta Ad Library search and filter URLs |
advertiserPageUrls | array | Facebook advertiser or Page URLs |
maxTotalResults | integer | Maximum ads saved across every source |
maxResultsPerSource | integer | Maximum ads saved from each source |
scrapeAdDetails | boolean | Add the detail-only fields listed below |
usePagination | boolean | Follow Meta cursors beyond the first result page |
pageAdFilters | object | Active status, period, sort order and country for advertiser Pages |
proxyConfiguration | object | Optional Apify Residential proxy controls, including countryCode |
runTag | string | Optional label copied unchanged to every row |
The Actor always requires Apify Residential proxy because Meta applies stricter limits to datacenter traffic.
What data you get in each mode
Every saved ad is one record. A unique ad is charged once.
Standard result
The standard result contains:
ad_archive_id, ad_id, collation_count, collation_id, is_active, page_id, page_is_deleted, page_name, snapshot, has_user_reported, report_count, menu_items, state_media_run_label, impressions_with_index, gated_type, categories, is_aaa_eligible, contains_digital_created_media, reach_estimate, currency, spend, start_date, end_date, start_date_formatted, end_date_formatted, publisher_platform, targeted_or_reached_countries, contains_sensitive_content, total_active_time, regional_regulation_data, hide_data_status, fev_info, url, ad_library_url, total, position, runTag, ads_count, scraped_at
Page-scoped searches also include pageInfo.
Detailed result
Include ad details adds:
advertiser, aaa_info, insights, violation_types, verified_voice_context, transparency_by_location, is_siep_advertiser_eligible_for_ai_disclosure, is_violating_eu_siep
Creative text, titles, calls to action, links, cards, images and videos remain in the nested snapshot object exactly as Meta returns them.
Output example (full)
{"ad_archive_id": "1550534860016399","collation_count": null,"collation_id": null,"is_active": true,"page_id": "115939511520844","page_is_deleted": false,"page_name": "Nike","snapshot": {"body": {"text": "Example ad copy"},"title": "Example title","cta_text": "Shop now","link_url": "https://www.nike.com/","images": [],"videos": [],"cards": []},"publisher_platform": ["FACEBOOK","INSTAGRAM"],"start_date": 1709553600,"end_date": 1712232000,"start_date_formatted": "2024-03-04 12:00:00","end_date_formatted": "2024-04-04 12:00:00","currency": "USD","url": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=nike","ad_library_url": "https://www.facebook.com/ads/library/?id=1550534860016399","total": 10000,"position": 1,"runTag": "campaign-2026-10","ads_count": 1,"scraped_at": "2026-10-23T16:00:00.000Z"}
Use cases
- Monitor ads by competitor, brand or Facebook Page
- Research creative and copy across markets
- Build political, issue and regional-transparency datasets
- Track active periods, spend ranges, impressions and reach
- Compare placement and platform behavior
- Create recurring ad-monitoring workflows through the Apify API
Limitations
- Meta controls the data it exposes and can rate-limit requests across a residential address.
- Some fields are valid only for political, issue, EU, UK or Brazil transparency datasets and are empty elsewhere.
- Advertiser Page rows include the complete
pageInfoobject when Meta returns it in the Page JSON response. The current logged-out Page search can omit that auxiliary object; the ad rows remain complete, but the Actor does not fetch Page HTML merely to reconstruct it. - Exact spend and reach ranges depend on the country and ad category selected in the supplied URL.
- The Actor follows Meta's cursors and limits; it does not invent additional ads after Meta stops returning pages.
- A public Page URL can be valid while Meta still refuses its Page search. The exact limitation is recorded in the Actor's support documentation when observed.
Integrations
Use the Actor with the Apify API, JavaScript or Python clients, webhooks, schedules, Make, Zapier, Google Sheets, Airtable, BigQuery or your own data pipeline. Every ad is one dataset item for simple export and event billing.
Questions or custom integrations: hello@123webdata.com.