Meta Ad Scraper
Pricing
from $1.00 / 1,000 ad collecteds
Meta Ad Scraper
Meta Ad Scraper extracts profile input, profile name, ad archive id, ad library url, is active, start date, end date, page name, page like count, link url, cta text, images, impressions, spend for every row. Inputs: profile links, usernames, platform filter, ad status filter, ads per profile.
Pricing
from $1.00 / 1,000 ad collecteds
Rating
0.0
(0)
Developer
Crawlix
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
22 days ago
Last modified
Categories
Security
Limited permissionsShare
The Meta Ad Scraper collects the public ads that any Facebook profile or page runs, straight from the Meta Ad Library. Give it a profile link or a username, choose whether you want running ads, stopped ads or both, set how many ads you need for each profile, and every ad lands in your dataset as one clean row: advertiser page, ad text, headline, destination link, images, videos, carousel cards, dates, platforms and, where Facebook publishes them, impression and spend ranges.
Use it as a Facebook page ads scraper to follow competitors, or as a simple way to scrape Facebook page ads for research and reporting. Ads are saved one at a time as they are found, so everything collected is already in your dataset even if a run ends early.
Overview & Core Capabilities: Meta Ad Scraper
The Meta Ad Scraper is a Meta Ad Library scraper built for one job: turning a list of Facebook profiles into a ready-to-use list of the ads they run. It is the quickest way to scrape Facebook page ads without opening the Ad Library, picking a page, scrolling, copying and pasting. Every ad comes back as one row with the same columns, so results from different profiles and different runs line up in a single spreadsheet.
This Facebook page ads scraper covers the full profile workflow:
- Profile links or usernames: paste links such as
https://www.facebook.com/nike, type usernames such asnike, or use both. Links with a tab (for example/videos),profile.php?id=links and/people/links work too, and so does an Ad Library link of a page. - Platform filter: collect ads from every platform at once, or only the ads that run on Instagram, Facebook, Messenger, Audience Network, WhatsApp or Threads.
- Ad status filter: collect ads that are still running, ads that have stopped, or both together.
- Exact volume control: ask for as many ads per profile as you like. There is no upper limit, the same ad is never counted twice, and the run for a profile ends by itself when Facebook has no more ads for it.
- Several profiles in one run: each profile is collected on its own and every row records the profile it came from. A profile that cannot be found, or that has no ads, never stops the others.
- The same page only once: if two of your entries point to the same page, for example a username and its full link, the page is collected once so you are never charged twice for the same ads.
- Rich ad details: advertiser page name, page link and likes, ad text, headline, caption, button text, destination link, every image and video link, carousel and catalogue cards, start and end dates, and the platforms each ad runs on.
- Disclosed reach and spend: impression, spend and reach ranges for the ads where Facebook publishes them, such as political and social-issue ads.
Whether you run the Meta Ad Scraper once for a quick look at a competitor or schedule it every week for ongoing monitoring, the output keeps the same shape, so your spreadsheets, dashboards and automations do not break. Teams that need a dependable Meta Ad Library scraper for repeatable Facebook page ads collection choose it for exactly this reason.
Practical Use Cases & Applications
Marketing teams, agencies and researchers use the Meta Ad Scraper wherever they need to see what a specific advertiser is running right now:
- Competitor ad monitoring: use the Facebook page ads scraper on a competitor's page and see every ad they run, with start dates, formats and destination links. Run it weekly to spot new campaigns.
- Creative and copy research: use the Facebook ad library scraper to scrape Facebook page ads from the brands you admire and study the headlines, offers, buttons and formats they repeat.
- Agency reporting: use the Facebook page ads scraper to pull the full ad history of a client's page, running and stopped ads together, to show what has been tested over time.
- Paid partnership discovery: the
paid_partnershipfield shows which creators a brand works with, so you can find influencers who already advertise for similar brands. - Landing page tracking: export destination links to see which pages and funnels an advertiser sends traffic to.
- Platform mix analysis: compare where a brand's ads run, such as Instagram only against every platform, using the
publisher_platformscolumn. - Political and issue ad review: collect the ads of political pages with disclosed impression and spend ranges for transparency and journalism projects.
- Lead research: use the Meta Ad Library scraper output to build lists of active advertisers and their websites, ready to enrich or contact through your normal channels.
Each use case starts the same way: add the profiles, pick the Ad Status, and let the Meta Ad Scraper do the collecting.
Target Audiences & Engineering Teams
The Meta Ad Scraper suits people who work with ad data but do not want to collect it by hand:
- Performance marketers and media buyers who study competitor offers before launching a campaign.
- Agencies and brand managers who report on what rival brands, and their own clients, are running.
- E-commerce operators and dropshippers who look for products and creatives that advertisers keep running.
- Market researchers and academics who need repeatable, structured samples of public advertising.
- Journalists and watchdog groups who review political and social-issue advertising.
- Data engineers and developers who scrape Facebook page ads and load the results into warehouses, dashboards and automations through the Apify API.
- Sales and growth teams who want to know which companies advertise and where they send their traffic.
Anyone who needs a Facebook ad library scraper without writing code can start from the Apify Console. No programming is needed to use this Facebook page ads scraper there, and developers can call it from code and receive the same rows as JSON.
Key Architectural Advantages & Reliability
Doing this by hand means finding the page in the Ad Library, scrolling, and copying ads one at a time. Browser extensions break whenever the page changes. As a Facebook page ads scraper, the Meta Ad Scraper replaces both with a single run:
| Manual or browser extension | Meta Ad Scraper |
|---|---|
| Search for each page by hand | Paste links or usernames and start |
| Scroll and copy ads one by one | Hundreds of ads per minute straight into a dataset |
| Hard to repeat the same collection | Same input gives the same columns every time |
| One page at a time | Many profiles in one run, each tagged in the results |
| Duplicates appear across scrolls | Repeated ads are skipped and never counted |
| Easy to lose work on a crash | Every ad is saved the moment it is found |
| Running and stopped ads mixed together | Ad Status filter saved in the input |
| Every platform mixed together | Platform filter saved in the input |
Reliability features you can count on:
- Repeatable results: the Facebook ad library scraper returns the same columns every time for the same input.
- Exact counts: the target is reached only with different ads. If you ask for 50 ads per profile you get 50 unique ads, not 50 including repeats.
- No double charging: the same page entered twice, under any spelling, is collected once.
- Early stop protection: if a run ends before the target, for any reason, the ads already collected stay in your dataset, and the run log says why it stopped.
- One profile never blocks another: a profile that cannot be completed is skipped and the next profile starts.
- Short interruptions are handled for you: a brief temporary problem does not end your run or spoil your results.
- Clear logs: the run log shows how many ads are collected and how many are left, with no clutter.
- Spending limit respected: if you set a maximum cost for a run, the Meta Ad Scraper stops as soon as that limit is reached and keeps what it collected.
Quickstart: Step-by-Step Execution Guide
You can have your first results from the Meta Ad Scraper in under a minute:
- Open the actor in the Apify Console and go to the Input tab.
- Add your Profile Links. The prefilled example is the Nike page. You can also type Usernames, one per line.
- Choose a Platform and an Ad Status. The defaults, All platforms and Active & inactive, collect everything. A specific Platform or Ad Status narrows the ads and adds a small extra charge for each ad collected.
- Set Ads per Profile. The default is 10, a quick way to check the output before you raise it. Free Apify accounts collect up to 50 ads per run in total; paid plans have no limit.
- Press Start. Watch the run log fill with progress lines.
- When the run finishes, open the Output tab, review the table, and export to JSON, CSV, Excel, XML or HTML.
That is all it takes to scrape Facebook page ads.
The run log of this Meta Ad Library scraper follows four clear phases:
============================================================Meta Ad Scraper============================================================[1/4] PreparingProfiles: 2Platform: All platformsAd status: Active onlyTarget: 100 ads per profilePlan: Paying user detected - no limit on ads[2/4] Finding profiles[1/2] "nike" - profile found: Nike[1/2] "nike" - ads ready, about 14,065 ads found[3/4] Collecting[1/2] "nike" [#####-----] 50 of 100 ads | 50 left | 31s[1/2] "nike" - completed, 100 of 100 ads collected[4/4] Finished200 ads from 2 profile(s) in 3m 12s============================================================
A progress line also appears about every 20 seconds while a slow step is running, so a working run never looks stuck. The Plan line shows what the run detected about your account: on a free account it reads "Free user detected" and the run stops after 50 ads in total.
Input Parameters & Configuration Reference
Every setting of the Meta Ad Scraper is optional, but at least one profile link or username is needed to collect anything:
| Setting | Control | Default | What it does |
|---|---|---|---|
| Profile Links | link list | Nike page | Links of the Facebook profiles or pages whose ads you want. Tab links, profile.php?id= links, /people/ links and Ad Library links of a page are accepted. |
| Usernames | text list | empty | Facebook usernames of the profiles or pages whose ads you want, one per line. They work exactly like profile links. |
| Platform ($) | dropdown | All platforms | Only collect ads that run on the chosen platform: All platforms, Instagram, Facebook, Messenger, Audience Network, WhatsApp or Threads. A specific platform adds a small extra charge for each ad collected. |
| Ad Status ($) | dropdown | Active & inactive | Collect running ads only, stopped ads only, or both together. Active only or Inactive only adds a small extra charge for each ad collected. |
| Ads per Profile | number box | 10 | How many unique ads to collect for each profile. There is no upper limit: the run stops by itself when Facebook has no more ads. A free Apify account is capped at 50 ads per run, all profiles together. |
| Connection Country | dropdown | United States (US) | The country your run connects from, chosen from more than 150 countries. If the country is not available right now, the run connects from the United States instead and the log says so. |
How the settings combine:
- The Platform and the Ad Status apply to every profile in one run. To compare platforms or running and stopped ads, start one run per option.
- Each filter that is not on its default adds its own small extra charge to every ad collected. With both defaults there is no extra charge, and ads that do not match your filters are never collected or charged.
- Ads per Profile applies to each profile separately. Three profiles at 100 ads can return up to 300 ads.
- A large page can have far more ads than you need. A small page may have fewer ads than you ask for, and the run says so.
- Profile Links and Usernames can be mixed. The same profile is only collected once, however many times or ways you enter it.
If a value is wrong, the run explains what it changed instead of stopping: a link to a group or a video is skipped, text that is not a username or profile link is skipped, a number out of range is corrected, and an unknown option falls back to the default. The run only ends early when no usable profile is left.
Extracted Dataset Schema & Field Definitions
Every ad the Meta Ad Scraper collects becomes one row, so output from this Meta Ad Library scraper always lines up across profiles and runs. A field with no value is left out of that row, so a field appears only when the ad has something to show, and nothing is invented. Nothing Facebook provides is dropped: details without a column of their own are in technical_data. Values are written to be read by people: dates look like 2026-05-26, and codes are spelled out in plain words, for example Paid for by, Shop now or Audience Network. Every row has number, profile_input, ad_archive_id and ad_library_url, and almost every ad also has is_active and start_date. Next to profile_input, profile_name shows the page name Facebook has for that profile, so you can see at a glance that a username led to the page you meant.
| Field | Type | What it contains |
|---|---|---|
ad_archive_id | text | The unique Ad Library identifier of the ad. |
ad_library_url | text | Link to the ad in the Meta Ad Library. |
number | number | Position of the ad within the results of its profile. |
profile_input | text | The profile link or username you entered that the ad came from. |
profile_name | text | The name of the Facebook page found for that profile, so you can check it is the page you wanted. |
is_active | on / off | True while the ad is still running. |
start_date | date | The day the ad started running (YYYY-MM-DD). |
end_date | date | The day the ad stopped running. Left out while the ad is still running. |
page_name | text | The Facebook page that publishes the ad. |
page_id | text | Identifier of that page. |
page_profile_url | text | Link to that page. |
page_profile_picture_url | text | Link to the page profile picture. |
page_like_count | number | Likes of the page. |
page_categories | list | Categories of the page. |
byline | text | Payer or publisher named on ads that carry a disclaimer. |
disclaimer_label | text | Disclaimer type, such as Paid for by or Published by. |
paid_partnership | object | The brand page when the ad is a paid partnership. Left out for ordinary ads. |
display_format | text | Image, Video, Carousel, Multi images, Multi videos, or the catalogue formats Dynamic product ad and Dynamic creative ad. |
body_text | text | The main text of the ad. |
title | text | The headline. |
caption | text | The short caption, usually the website name. |
link_url | text | Where the ad sends people. |
link_description | text | Description text shown with the link. |
cta_text | text | Text of the call-to-action button. |
cta_type | text | Type of button, such as Shop now or Learn more. |
images | list | The images of the ad, each with Facebook's own fields such as original_image_url and resized_image_url. |
videos | list | The videos of the ad, each with video_hd_url, video_sd_url and video_preview_image_url. |
cards | list | Carousel and catalogue cards, each with its own text, links, images and videos. |
publisher_platforms | list | Where the ad runs: Facebook, Instagram, Messenger, Audience Network, WhatsApp, Threads. |
collation_count | number | How many ads Facebook groups together because they share the same creative and text. |
impressions | text | Impressions range, for ads that disclose it. |
spend | text | Spend range, for ads that disclose it. |
currency | text | Currency of the spend range. |
reach_estimate | text | Reach range, for ads that disclose it. |
categories | list | The ad category as Facebook labels it: Unknown for a regular ad, or Political, Credit or Housing. |
technical_data | object | Every other detail Facebook provides about the ad: flags, the grouping id, disclosure details for political ads, and any field Facebook adds later. |
Sample JSON Dataset Record
{"number": 24,"profile_input": "https://www.facebook.com/nike","profile_name": "Nike","ad_archive_id": "1520310666349109","ad_library_url": "https://www.facebook.com/ads/library/?id=1520310666349109","is_active": false,"start_date": "2026-04-29","end_date": "2026-05-25","page_name": "Nike","page_id": "15087023444","page_profile_url": "https://www.facebook.com/nike/","page_profile_picture_url": "https://scontent.fbcdn.net/v/t39.35426-6/683200075_206...","page_like_count": 39503418,"page_categories": ["Sportswear"],"display_format": "Image","body_text": "Add a retro touch to any fit.","title": "Find Nike Near You","caption": "nike.com","link_url": "https://www.nike.com/w/womens-summer-essentials-lifestyle-13jrmz5e1...","link_description": "Shop Nike","cta_text": "Shop now","cta_type": "Shop now","images": [{"original_image_url": "https://scontent.fbcdn.net/v/t39.35426-6/680632406_16...","resized_image_url": "https://scontent.fbcdn.net/v/t39.35426-6/680240861_22..."}],"publisher_platforms": ["Facebook", "Instagram"],"collation_count": 3,"categories": ["Unknown"],"technical_data": {"collation_id": "1009950398382085","page_is_deleted": false,"has_user_reported": false,"impressions_with_index": { "impressions_index": -1 },"gated_type": "ELIGIBLE","is_aaa_eligible": true,"contains_digital_created_media": false,"contains_sensitive_content": false,"regional_regulation_data": {"finserv": { "is_deemed_finserv": false, "is_limited_delivery": false },"tw_anti_scam": { "is_limited_delivery": false }},"hide_data_status": "NONE","snapshot": { "page_is_deleted": false, "is_reshared": false }}}
Long media links are shortened here for readability. This ad has no byline, paid_partnership, videos, cards, impressions or spend, so those fields are not in the row. Rows for other ads carry whichever of them have a value.
Operational Constraints & Platform Limits
Know the boundaries of the Meta Ad Scraper before you plan a project:
- As a Meta Ad Library scraper, it collects only what the Meta Ad Library publishes publicly. No login is used and nothing private is reached.
- The Ad Library lists ads of Facebook pages, so the Facebook page ads scraper needs a page that runs ads. A profile that runs no ads, or that is not a page, returns no ads and the run says so.
- This Facebook ad library scraper reads ads exactly as the Ad Library shows them, so what you see in the library is what you get in the dataset.
- A link must lead to a profile or page. Links to groups, events, posts, videos, reels and the marketplace are skipped with an explanation.
- The ad count in the run log, "about N ads found", is Facebook's own estimate and is often a little higher than the number of ads actually returned.
- Impression, spend and reach ranges are published only for some ads, mainly political and social-issue ads. For most ads those columns are left out of the row.
- There is no limit on Ads per Profile. Facebook can stop returning ads for a very large page before your number is reached. The run then ends that profile, says so in the log, and keeps everything collected. To reach more, run once per Platform or Ad Status.
- The Platform filter is applied by Facebook. For some platforms, WhatsApp in particular, Facebook also returns ads that do not list that platform in
publisher_platforms. The Meta Ad Scraper leaves those ads out, does not charge for them and says how many it skipped, so every ad you receive runs on the platform you chose. - For a paid partnership, the page that publishes the ad is the creator's page, so
page_nameshows the creator and the brand is inpaid_partnership. - Image and video links come from Facebook's own servers and expire after some time. Download the files soon after the run if you need to keep them.
- Catalogue ads use placeholders such as
{{product.name}}in their text. The real product details are incards. - Charges are per ad collected. The current rate is shown on the actor's pricing tab, and a spending limit you set for a run is always respected. Choosing a Platform or an Ad Status other than the default adds a separate small charge for each ad, also listed on the pricing tab.
- Free Apify accounts have a cap: one run saves up to 50 ads in total, whatever the number of profiles, and then finishes successfully with those ads in the dataset. Paid plans are not capped. At the start of each run the log states whether it detected a free or a paying user.
- Use the data lawfully. You are responsible for how you use and store information about advertisers and for any rules that apply to your outreach.
Best Practices & Performance Optimization
Get the most from the Meta Ad Scraper with a few habits:
- Test small, then scale: the first time you scrape Facebook page ads for a profile, stay with the default of 10 ads per profile, check the columns you need, then raise the number.
- Use Active only to see what is live: it shows what an advertiser pushes today. Use Inactive only to learn from past campaigns.
- Use the Platform filter to study one channel: pick Instagram to see what an advertiser runs there, or WhatsApp to see the ads that run on WhatsApp.
- Give the page's own link or username: use the profile that actually runs the ads. A personal profile, or a different page with a similar name, returns other results.
- Group related profiles in one run: competitors, a brand's regional pages or a client's portfolio fit in a single input, and every row is tagged with its profile.
- Schedule repeat runs: use the Apify scheduler to run this Facebook ad library scraper weekly and compare
start_datevalues to spot new ads. - Use a spending limit: set a maximum cost per run in the Apify Console for large pages.
- Keep memory modest: this Meta Ad Library scraper needs little memory. The default setting is enough for long profile lists.
- Pick a sensible connection country: choose the country closest to the market you are studying.
- Remove duplicates across runs by ID: when you merge results from several runs, use
ad_archive_idas the unique key.
Troubleshooting & Frequently Asked Questions
Frequently Asked Questions
Do I need a Facebook account or login? No. This Facebook ad library scraper reads the public Meta Ad Library, so no account or login is needed.
Which formats can I export? JSON, CSV, Excel, XML and HTML, directly from the Output tab or through the Apify API.
What can I enter as a profile?
The Meta Ad Scraper accepts a username such as nike, a profile link such as https://www.facebook.com/nike, a link with a tab, a profile.php?id= link, a /people/ link, or the Ad Library link of a page. You can mix them freely.
What does the Platform filter do? It limits the results to ads that run on the platform you choose. Leave it on All platforms to collect the ads of every platform.
Is there an extra charge for the filters? Yes, a small one for each ad collected, and only while a filter is not on its default. A specific Platform adds one extra charge per ad, and Active only or Inactive only adds another. With All platforms and Active & inactive there is no extra charge. The rates are on the actor's pricing tab.
Why does the log say some ads outside my filters were skipped? Facebook sometimes returns an ad that does not actually run on the platform you chose, most often with WhatsApp. The Meta Ad Scraper leaves such an ad out and does not charge for it, so every ad in your dataset matches your filters. Your target is reached only with matching ads.
Does a free Apify account have a cap? It does. One run on a free account saves 50 ads at most, all profiles added together, and then ends as a normal finished run. Ads per Profile still counts for each profile separately: three profiles set to 20 ads ask for 60, so a free account receives 50 and a paid plan receives 60.
Is that cap daily, or tied to my account? Neither. It belongs to the single run: each new run on a free account may collect 50 ads again. There is no daily or lifetime total. A paid Apify plan has no cap at all.
The log says "Free user detected", yet I pay for Apify. What now? Please open an issue in the actor's Issues tab with your plan name and the run ID, and we will fix it as soon as possible. In the meantime the run stays within the free cap.
What is the difference between Active and Inactive ads?
Active ads are still running. Inactive ads have stopped, and their end_date shows when. Active & inactive returns both.
Why does a profile show "No ads found"?
The profile is not running ads with the Platform and Ad Status you chose, or it does not run ads at all. Try All platforms and Active & inactive. Also check which page was found: the run log shows its name next to your username, and every row has it in profile_name. Facebook can have several pages with similar usernames, so type the exact username from the profile link, including any dots, or paste the page's full link.
Why does a profile show "Profile not found"? No Facebook page could be found for it. Check the spelling, or paste the page's full link. A deleted page also ends this way.
Why was a profile skipped as "the same page"? You entered the same page twice, for example a username and its full link. It is collected once, so you are not charged twice for the same ads.
Will I get exactly the number of ads I asked for? Yes, the Meta Ad Scraper returns exactly that many whenever the profile has that many ads. Repeated ads are skipped and never counted, so the number is always made of different ads.
Why did a profile return fewer ads than I asked for? Either Facebook had no more ads for that profile with your Platform and Ad Status (the run log says "no more ads available"), or Facebook stopped returning ads for a very large page before your limit (the run log says so). Try another Platform or Ad Status, or run again later.
Why does page_name show a different page than the one I entered?
profile_name is the page found for the profile you entered. page_name is the page that publishes each ad. They differ for a paid partnership: the ad is published by a creator's page, and the brand you entered is in paid_partnership.
Why do some rows have fewer fields than others? A field with no value is left out of the row. Every field Facebook provides for an ad is kept, so rows for ads with more details simply have more fields. Exports to CSV and Excel list every field that appears in any row.
Why does a row have no end_date?
The ad is still running, so it has not ended yet.
Why do some rows have no impressions or spend? Facebook publishes those ranges only for some ads, mainly political and social-issue ads.
Can I search ads by keyword instead of by profile? Yes, with Meta Ad Search, a companion tool built for keyword search. This actor works from profiles.
Error Resolution Guidelines
If this Facebook ad library scraper shows one of these messages, here is what it means:
| What you see | What it means | What to do |
|---|---|---|
Ignored - Profile link 2: ... | The entry is not a profile or page link, for example a group or a video. | Use the link or username of the page that runs the ads. The other profiles still run. |
Ignored - Username 1: ... | The entry is not a Facebook username. | Type a username or paste a profile link. |
Adjusted - ... is not one of the options | A setting had a value outside its list. | The run used the default and says which one. |
could not find a Facebook page for this profile | No page exists for the entry. | Check the spelling or paste the page's full link. |
no ads found for this profile | The page runs no ads with this Platform and Ad Status. | Try All platforms and Active & inactive. |
Moving on to the next profile | One profile could not be completed after a short retry. | The ads already collected are kept. Run it again later for the rest. |
Facebook stopped returning ads for this profile | Facebook ended a very large collection before your number was reached. | The ads already collected are kept. Try another Platform or Ad Status, or run again later. |
Spending limit reached - stopping here | The maximum cost you set was reached. | Raise the limit and run again to collect more. |
Free user detected - up to 50 ads per run | The run belongs to a free Apify account, which is capped at 50 ads. | Upgrade your Apify plan to lift the cap. Already on a paid plan? Report it in the Issues tab. |
Free plan limit reached - 50 ads per run | The run used up the 50 ads of the free plan. | The ads are saved in the dataset. Upgrade your Apify plan for more. |
Stopped early with a reference | Something unexpected ended the run. | Your collected ads are in the dataset. Run again, and quote the reference in an issue if it repeats. |
Code Integration: Python, JavaScript & REST API
Run the Meta Ad Scraper as a Facebook ad library scraper from your own code and read the results as JSON.
Python Integration Example
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")# Scrape Facebook page ads with the Facebook page ads scraperrun_input = {"facebook_urls": [{"url": "https://www.facebook.com/nike"}],"username": ["adidas"],"platform": "instagram","active_status": "active","max_ads": 100,}run = client.actor("Crawlix/meta-ad-scraper").call(run_input=run_input)for ad in client.dataset(run["defaultDatasetId"]).iterate_items():print(ad["profile_input"], "|", ad["page_name"], "|", ad["start_date"], "|", ad["ad_library_url"])
JavaScript / Node.js Integration Example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });// Meta Ad Scraper inputconst input = {facebook_urls: [{ url: 'https://www.facebook.com/nike' }],username: ['adidas'],platform: 'instagram',active_status: 'active',max_ads: 100,};const run = await client.actor('Crawlix/meta-ad-scraper').call(input);const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((ad) => {console.log(`${ad.profile_input} | ${ad.page_name} | ${ad.start_date} | ${ad.ad_library_url}`);});
Direct cURL REST API Execution
# Scrape Facebook page ads in one callcurl -X POST "https://api.apify.com/v2/acts/Crawlix~meta-ad-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"username": ["nike"],"platform": "all","active_status": "all","max_ads": 10}'
For large runs, start the run with the asynchronous endpoint and read the dataset when it finishes, instead of waiting on one long call.
Technical Architecture Glossary
| Term | Meaning |
|---|---|
| Run | One execution of the actor with the input you gave it. |
| Dataset | The table where every ad row is stored. Export it from the Output tab or read it through the API. |
| Meta Ad Library | Meta's public archive of ads that run on its platforms. |
| Profile | A Facebook profile or page, entered as a link or a username. Each profile is collected on its own. |
| Ad ID | The unique Ad Library identifier of an ad, in ad_archive_id. |
| Platform | The place an ad runs: Facebook, Instagram, Messenger, Audience Network, WhatsApp or Threads. The Platform filter keeps only the ads that run there. |
| Ad Status | The filter for running ads, stopped ads, or both. |
| Extra charge | A small additional charge for each ad collected while the Platform or the Ad Status is not on its default. |
| Free plan cap | What one run may save on a free Apify account: 50 ads in total, all profiles together. |
| Ads per Profile | The limit of unique ads collected for each profile in a run. |
| Paid partnership | An ad published by a creator's page together with a brand, shown in paid_partnership. |
| Schedule | An Apify setting that starts the actor automatically, for example once a week. |
| Spending limit | The maximum cost you set for a run. The run stops when it is reached. |
Complementary Scrapers in the Ecosystem
If the Meta Ad Scraper fits your workflow, its companion tool covers the other half of Meta Ad Library research.
- Meta Ad Search — finds Meta ads by keyword, with platform and ad status filters.
Browse everything at apify.com/Crawlix.
Support & Feedback Channels
The Meta Ad Scraper is actively maintained, so this Meta Ad Library scraper stays compatible with changes to the Meta Ad Library.
If you see unexpected results, a column that looks wrong, or you want a new feature:
- Open the Issues tab on the actor page in the Apify Console.
- Create a new issue with your Run ID and the input you used.
- The team reviews the run log and publishes updates promptly.