Facebook Ad Library Scraper: Days Running, No Login
Pricing
from $5.00 / 1,000 ads
Facebook Ad Library Scraper: Days Running, No Login
Facebook ad library scraper with no login or cookies. Get every ad a brand runs on Facebook and Instagram: copy, image or video, start date, days running and EU reach. $5 per 1,000 ads.
Pricing
from $5.00 / 1,000 ads
Rating
0.0
(0)
Developer
Agnes Maina
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Facebook Ad Library Scraper: every Meta ad a brand runs, with days running
This Facebook ad library scraper returns every ad a brand runs on Facebook and Instagram, with the copy, the picture or video, the start date, how many days the ad has been running, and for ads shown in the EU the reach by country, age and gender. You pay $5 per 1,000 ads delivered, and rows export to JSON, CSV or Excel.
Limits before you run it: no Facebook account or cookies, and you search by keyword or advertiser page; each search returns up to 5,000 ads (maxAdsPerSearch, default 100). Meta publishes reach, targeting and payer only for ads shown in the EU, and no spend at all except for political and social-issue ads, which this Actor does not target. No impressions, clicks, conversions or bids, and no removed ads.
It reads the same public library Meta also calls the Facebook Ads Library, so Instagram and Messenger ads come back too. Sort by daysRunning to find the ads a brand has kept paying for, or schedule monitor mode to get only what launched since last time, what crossed 30, 60 or 90 days, and what stopped.
What you get
Each row is one ad. Every field comes from the Meta Ad Library.
| Field | What it is |
|---|---|
adId, libraryUrl | The ad's Library ID and its page in the Ad Library |
advertiserName, advertiserId, advertiserUrl | The Facebook page that runs the ad |
startDate, endDate, daysRunning, isActive | When it started, when it was last seen, how many days it has run, whether it is still running |
platforms, displayFormat | facebook, instagram, messenger or audience_network; IMAGE, VIDEO, DCO or DPA |
headline, body, linkDescription, ctaText, landingUrl, landingDomain | The ad copy as text, and where the ad sends people |
imageUrls, videoUrls, thumbnailUrl, collationCount | The creative, and how many versions Meta groups together |
euTotalReach, euReachByCountry, euReachByAgeGender | People reached in the EU, by country and by age and gender |
targetAges, targetGender, targetLocations, payerName, beneficiaryName | Targeting and payer Meta publishes for EU ads |
searchTerm, searchAdvertiser | The search that found this ad |
isNew, milestone, stopped | Monitor mode: new, crossed 30, 60 or 90 days running, or stopped since your last run |
charged, reason, scrapedAt | Whether the row was charged and why, and when |
This Actor computes daysRunning for every ad, reads the EU reach breakdown Meta only shows behind a second click, and tells you in monitor mode what changed since your last run.
Try it in 30 seconds
- Open the Store page and click Try for free.
- Enter a page name in Advertisers, for example
Nike, or a keyword in Search terms, for exampleprotein powder, then click Start. - Open the Ads table when the run finishes, or download JSON, CSV or Excel.
{ "advertisers": ["Nike"], "country": "ALL", "activeStatus": "active", "maxAdsPerSearch": 50 }
Every Apify account gets $5 of free credit a month, about 1,000 ads at this price.
Example output
One record from a real Nike run, collected on 2026-10-02. The CDN links are shortened and euReachByCountry is cut to 6 of its 33 countries here. The run was made before pricing was set, so charged, isNew and milestone are left out.
{"adId": "1382287983621487","advertiserId": "15087023444","advertiserName": "Nike","advertiserUrl": "https://www.facebook.com/nike/","collationCount": 1,"startDate": "2026-09-30","endDate": "2026-10-02","isActive": true,"daysRunning": 2,"platforms": ["facebook", "instagram"],"displayFormat": "DCO","headline": "Festive Sale","body": "Up to 40% off* is here. Get an extra 15% off from now till 5 October. Use code GEARUP","linkDescription": "Nike - Official Online Store for Athletic Shoes, Clothing & Sports Gear. Shop the latest Nike products and enjoy free shipping.","ctaText": "Shop now","landingUrl": "https://www.nike.in/lp/eoss-mweb","landingDomain": "nike.in","imageUrls": [],"videoUrls": ["https://video-hou1-1.xx.fbcdn.net/o1/v/t2/f2/m366/AQO96AbQbm...", "https://video-hou1-1.xx.fbcdn.net/o1/v/t2/f2/m366/AQNptjGKuE..."],"thumbnailUrl": "https://scontent-hou1-1.xx.fbcdn.net/v/t39.35426-6/832745501...","libraryUrl": "https://www.facebook.com/ads/library/?id=1382287983621487","euTotalReach": 22032,"euReachByCountry": { "PT": 3701, "IT": 2842, "ES": 2821, "GR": 1465, "RO": 1315, "FR": 1030 },"euReachByAgeGender": {"18-24": { "male": 709, "female": 290, "unknown": 247 },"25-34": { "male": 2725, "female": 1160, "unknown": 412 },"35-44": { "male": 3163, "female": 1707, "unknown": 368 },"45-54": { "male": 2551, "female": 1741, "unknown": 301 },"55-64": { "male": 1653, "female": 1650, "unknown": 238 },"65+": { "male": 1281, "female": 1749, "unknown": 162 }},"targetAges": null,"targetGender": "All","targetLocations": null,"payerName": null,"beneficiaryName": null,"searchTerm": null,"searchAdvertiser": "Nike","stopped": false,"reason": "ad with advertiser, start date and content","scrapedAt": "2026-10-02T09:56:34.247Z"}
Pricing
Pay per event. No monthly fee.
| Event | Price | When you pay |
|---|---|---|
| Actor start | $0.00005 | once per run |
| Ad | $0.005 | an ad is delivered with its advertiser, its start date and its creative |
Worked example: 1,000 ads cost 1,000 x $0.005 = $5, plus $0.00005 for the run start. Rows without a start date or a creative still arrive, with charged: false, and cost $0. EU reach, targeting and payer are included in the ad price. In monitor mode you pay for ads that are new since your last run and for ads that crossed 30, 60 or 90 days running (milestone). Stopped rows are free.
Input
| Field | Type | Default | Description |
|---|---|---|---|
searchTerms | array | Keywords, for example protein powder. Add at least one search term or advertiser | |
advertisers | array | Facebook page names, IDs or URLs, for example Nike | |
country | string | ALL | Two-letter code such as US, GB or DE. Only ads shown in that country are delivered |
activeStatus | string | active | active, inactive or all |
mediaType | string | all | all, image, video, meme or none |
minDaysRunning | integer | 0 | Deliver only ads running at least this many days. 0 turns the filter off |
maxAdsPerSearch | integer | 100 | Stop after this many ads per search term or advertiser, up to 5,000 |
fetchEuDetails | boolean | true | Read reach, targeting and payer for EU-eligible ads |
onlyNewSinceLastRun | boolean | false | Monitor mode. Later runs deliver only new, milestone and stopped ads |
proxyConfiguration | object | Apify residential | The Ad Library blocks datacenter addresses |
Monitor mode
Set onlyNewSinceLastRun to true and schedule the run weekly. The first run delivers current ads and remembers them. Each later run delivers and charges for ads that appeared since, marked isNew, and for ads that crossed 30, 60 or 90 days (milestone). Rows for ads that disappeared (stopped) are free.
Use cases
- Competitor ad monitoring. Schedule monitor mode weekly on ten competitors and get only the new ads, the ones that proved themselves by running 90 days, and the ones that got cut.
- Winning-ad research. Set
minDaysRunningto 30 and search a category. Ads a brand keeps paying for are the ads that work. - Agency pitches. Pull a prospect's rivals' active ads and open the pitch with their copy and creative.
Integrations
curl -X POST "https://api.apify.com/v2/acts/agnes.developer.queen~meta-ad-library-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"advertisers": ["Nike"], "maxAdsPerSearch": 50}'
The same call works from Python and Node.js with the Apify client, and from Make, n8n or Zapier with the Apify node.
Any MCP client can also call the Actor as a tool at https://mcp.apify.com/?tools=agnes.developer.queen/meta-ad-library-scraper. Ask which of a competitor's ads have run longest this quarter. The assistant should read daysRunning, headline, body and libraryUrl.
FAQ
Is the Meta Ad Library free?
Yes. Meta runs it as a free public website at facebook.com/ads/library. It has no export and its official API covers only political and social-issue ads. This Actor turns the same public data into rows you can export, with no account or cookie needed.
Can I see how much a competitor spends on Facebook ads?
No. Meta publishes spend only for political and social-issue ads. For everyone else you get the ads, their start dates, how long they have run, and for EU ads the people reached. An ad that has run 90 days and reached 20,000 people in the EU is a strong signal of where the budget goes.
What does days running mean, and why do some rows have no EU reach?
daysRunning is the days between the ad's start date and the day the row was collected, or its end date if it stopped. Brands keep paying for ads that work, so long runners are usually the winners. EU reach, targeting and payer exist only for ads shown in the EU, so euTotalReach is null on the rest.
Does it get video ads, and why was an ad not charged?
Video ads return the file links in videoUrls and a still in thumbnailUrl, and mediaType set to video filters to those. An uncharged row means the Library gave no start date or no creative, usually a card still loading. It still arrives with charged: false, a reason and a libraryUrl that opens it.
Why did an advertiser name return nothing, and can I monitor a brand weekly?
The name must match a Facebook page exactly, so use the name as it shows on the page, or paste the page URL or ID. To monitor, turn on onlyNewSinceLastRun and add a weekly schedule: the first run sets the baseline, and each later run charges for new ads and for ads that crossed 30, 60 or 90 days (milestone). Stopped rows are free.
Is it legal to scrape the Meta Ad Library?
It reads only public pages Meta publishes for anyone to see and collects no personal data. You are responsible for how you use the data and for the laws and terms that apply to you.
Related Actors
- LinkedIn Ad Library Scraper does the same job for LinkedIn, with impressions by country and targeting.
- Google Ads Transparency Scraper returns the ads a brand runs on Google, with creatives and shown dates.
- LinkedIn Company Scraper turns a company name, LinkedIn slug or URL into industry, size and headquarters facts.
Support
Open an issue on the Issues tab of the Store page. Bug reports with a run ID get fixed fastest.