Facebook Ads Library Scraper: Meta Ads by Keyword or Page
Pricing
from $0.17 / 1,000 ads
Facebook Ads Library Scraper: Meta Ads by Keyword or Page
Meta Ad Library ads by keyword, Page or Ad Library link, with text, images, videos and dates. $0.25 per 1,000 ads. Carousel cards, platforms and political spend.
Pricing
from $0.17 / 1,000 ads
Rating
0.0
(0)
Developer
Luzi
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 minutes ago
Last modified
Categories
Share
Get the ads in the Meta Ad Library (Facebook, Instagram, Messenger, Threads, WhatsApp and Audience Network) for any words, any Facebook Page or any Ad Library link, with the Ad Library's main filters, for $0.25 per 1,000 ads and no start fee. No Facebook account, login or cookies needed.
Tested daily. Latest check: 4,946 ads from five searches in 13 minutes: a Page's ads, political ads with their spend, and searches filtered by country, media type, platform, dates and language.
What does this Actor do?
You give it searches (the words you would type in the Ad Library's search box), Facebook Page links, Ad Library Page ids, or Ad Library links. For each one it reads the Ad Library's results page after page, as you would by scrolling, and saves one row per ad until it reaches your limit or the end of the results.
Each row comes with:
- the ad's Library id and link, its place in the results, whether it is running now, the day it started and the last day it was shown
- the Page that runs it: id, name, link, picture, likes and categories
- the platforms it runs on (Facebook, Instagram, Messenger, Threads, WhatsApp, Audience Network) and its format (image, video, carousel, catalogue)
- the ad itself: text, title, caption, link, link description and button, every image and video (HD and SD), and every card of a carousel or catalogue ad with its own text, link, price line and image
- how many versions of the ad run (the Ad Library groups them)
- for ads about social issues, elections or politics: who paid for it (with the contact details on the disclaimer), spend, impressions, reach and currency, as ranges the Ad Library shows
- Meta's own flags: AI or digitally created media, sensitive content, financial-services rules
- the search, Page or link it came from, with the Ad Library link for it
Why use it?
- The Ad Library's main filters. Country, active or not, ad category, media type, exact phrase, most recent first, a date range, platforms and languages, or paste an Ad Library link with the filters you already picked.
- A Page's link is enough. Paste facebook.com/
- Carousel and catalogue ads in full. Each card with its own product title, price line, link and image, not only the ad's first frame.
- Political ads with their paper trail. Spend, impressions, reach and the "Paid for by" disclaimer with its address, phone, email and website.
- No start fee. You pay per ad saved, nothing per search or per run.
- Use the data anywhere. Download as JSON, CSV or Excel, or send it to your own tools through Apify's API and integrations.
How to use it
- Type one or more searches into Searches, or paste Facebook Page links or Ad Library links into Links.
- Optionally, set Max ads per search, Country and the other filters.
- Click Start. When the run ends, open the Output tab to view the ads or download them.
Input
| Field | What it does | Default |
|---|---|---|
Searches (searchQueries) | Words to search the Ad Library for, one search each | — |
Links (startUrls) | Facebook Page links, Ad Library Page ids, or Ad Library links (a search or a Page's ads) | — |
Max ads per search (maxAdsPerSearch) | Stop each search, Page or link after this many ads (1 to 10,000) | 100 |
Country (country) | Ads shown in this country ("US", "GB", "VN"), or ALL | ALL |
Active or not (activeStatus) | active, inactive or all | active |
Ad category (adType) | all, or political_and_issue_ads (issues, elections or politics) | all |
Media type (mediaType) | all, image, meme, image_and_meme, video or none | all |
Exact phrase (exactPhrase) | Match the search words as one exact phrase | off |
Sort by (sortBy) | relevance or most_recent | relevance |
Shown from / until (startDate, endDate) | Only ads shown in this date range (YYYY-MM-DD) | any |
Platforms (platforms) | Any of facebook, instagram, audience_network, messenger, threads, whatsapp | all |
Languages (languages) | Two-letter language codes ("en", "es") | all |
Give at least one search or one link. Example input:
{"searchQueries": ["running shoes"],"startUrls": ["https://www.facebook.com/nike"],"country": "US","activeStatus": "active","maxAdsPerSearch": 200}
Output
One row per ad. An example, with made-up values:
{"ad_archive_id": "1234567890123456","ad_library_url": "https://www.facebook.com/ads/library/?id=1234567890123456","position": 1,"page_name": "A Shoe Brand","page_id": "100000000000001","page_url": "https://facebook.com/ashoebrand","page_profile_picture_url": "https://scontent.xx.fbcdn.net/…","page_like_count": 123456,"page_categories": ["Shoe store"],"page_is_deleted": false,"is_active": true,"start_date": "2026-09-01T07:00:00.000Z","end_date": "2026-10-17T07:00:00.000Z","total_active_time": null,"publisher_platforms": ["FACEBOOK", "INSTAGRAM"],"display_format": "IMAGE","body_text": "The ad's text.","title": "The ad's headline","caption": "ashoebrand.example","link_url": "https://ashoebrand.example/","link_description": null,"cta_text": "Shop now","cta_type": "SHOP_NOW","images": [{"original_image_url": "https://scontent.xx.fbcdn.net/…","resized_image_url": "https://scontent.xx.fbcdn.net/…"}],"videos": [],"cards": [],"collation_id": null,"collation_count": null,"categories": ["UNKNOWN"],"contains_digital_created_media": false,"paid_for_by": null,"spend": null,"impressions_text": null,"reach_estimate": null,"search_query": "running shoes","search_page_id": null,"search_country": "US","search_url": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&…"}
| Field | What it holds |
|---|---|
ad_archive_id | The ad's id in the Ad Library |
ad_library_url | A link to the ad in the Ad Library |
position | Its place in the search's results, 1 = the first |
page_name, page_id | The Page that runs the ad |
page_url | A link to the Page |
page_profile_picture_url | The Page's picture |
page_like_count | The Page's likes |
page_categories | The Page's categories |
page_is_deleted | Whether the Page was deleted |
is_active | Whether the ad is running now |
start_date | The day it started (ISO date) |
end_date | The last day it was shown (today for a running ad) |
total_active_time | Seconds it ran, when the Ad Library gives it (some political ads) |
publisher_platforms | Where it runs: FACEBOOK, INSTAGRAM, MESSENGER, THREADS, WHATSAPP, AUDIENCE_NETWORK |
display_format | IMAGE, VIDEO, CAROUSEL, DCO (several versions), DPA (a product catalogue), MULTI_IMAGES … |
body_text | The ad's text |
title, caption | The headline and the link's caption |
link_url, link_description | Where the ad links to, and the line under the headline |
cta_text, cta_type | The button ("Shop now") and its kind |
images | Each image: full size and resized |
videos | Each video: HD and SD links and the preview image |
cards | A carousel or catalogue ad's cards, each with its text, title, link, price line, button, image or video |
extra_texts, extra_links, extra_images, extra_videos | The other versions' texts, links, images and videos, when the ad has them |
collation_id, collation_count | The group of versions the ad belongs to, and how many there are |
categories | The Ad Library's categories for the ad (POLITICAL, UNKNOWN …) |
contains_digital_created_media | Whether Meta marks it as AI-made or digitally created |
contains_sensitive_content | Whether Meta marks it as sensitive |
is_reshared, root_reshared_post, branded_content, event | A reshared post, branded content or an event the ad promotes, when it does |
byline, disclaimer_label | The "Paid for by" line |
paid_for_by | Who paid for an issue, election or political ad |
disclaimer | The disclaimer's details: the payer, the date it was submitted, its address, phone, email and website |
spend, currency | An issue, election or political ad's spend, as the range the Ad Library shows |
impressions_text, impressions_index | Its impressions, as the range shown |
reach_estimate | Its estimated reach, as the range shown |
targeted_or_reached_countries | The countries it reached, when the Ad Library gives them |
country_iso_code, brazil_tax_id, additional_info, ec_certificates | What the Ad Library shows for some countries' ads |
gated_type, hide_data_status, state_media_run_label, report_count, has_user_reported, menu_items | The Ad Library's own marks on the ad |
is_aaa_eligible, is_deemed_finserv, finserv_limited_delivery, tw_anti_scam_limited_delivery | Meta's rules that apply to the ad |
ad_id | The ad's delivery id, when the Ad Library shows it |
search_query | The search it came from |
search_page_id | The Page it came from |
search_country | The country searched |
search_url | The Ad Library link for that search |
input_url | The link you gave, when it came from one |
Spend, impressions and reach are shown by the Ad Library only for ads about social issues, elections or politics; other ads leave them empty. Not included: the EU audience breakdown (age, gender and country reach of ads shown in the EU) and the Page's own "About" details, which the Ad Library shows only on an ad's own page.
How much does it cost?
You pay for what you get:
- $0.25 per 1,000 ads ($0.00025 an ad). Each ad is charged once per run.
- No start fee, and nothing per search.
So 1,000 ads cost $0.25. If you set a maximum cost for a run, the Actor stops when it reaches it and keeps every ad saved so far.
How long does a run take?
About 20 to 35 seconds for two searches of up to 50 ads each, and 11 to 13 minutes for five searches of up to 1,000 ads each (about 4,950 ads).
Good to know
- About 10 ads a page. The Ad Library lists ads 10 at a time, so a large search takes a while: 11 to 13 minutes for five searches of 1,000 ads read together.
- An ad found by two searches is saved and charged once, under the search that reached it first, so two searches can save fewer ads than their two maximums.
- A pasted Ad Library link keeps its own filters. The fields below fill in only what the link leaves out.
- Check your links first. A link that is not a Facebook Page or an Ad
Library search stops the run before anything is read, and the message names
it. A single ad's link (
?id=) is not a search. - One search that cannot be read does not stop the run. The others carry on, and the run's status lists the ones that could not be read.
- A search with no ads is not an error. It saves nothing.
FAQ
Do I need a Facebook account or cookies? No. The Actor reads what anyone can see in the Ad Library.
Can I get every ad a competitor runs?
Yes. Paste the competitor's Facebook Page link (or its Ad Library Page id) under
Links, set Active or not to all for their past ads too, and raise
Max ads per search.
Can I run it from my own code, on a schedule, or with other apps? Yes. Like any Apify Actor, you can start it through the Apify API, run it on a schedule, and connect it to other apps with Apify's integrations and webhooks.
Is it legal to scrape the Meta Ad Library?
The Ad Library is a public transparency tool: anyone can see these ads without logging in. Check Meta's terms and the laws that apply to you before you use the data, and only collect personal data (such as a disclaimer's contact details) when you have a legitimate reason to. If you are unsure, ask a lawyer.
Support
Found a problem or missing a feature? Open an issue on the Issues tab and include the run's link.
This Actor is not affiliated with, endorsed by or sponsored by Meta or Facebook.