Meta Ads Library Scraper API | ๐ต from $0.40/1K
Under maintenancePricing
from $0.40 / 1,000 meta ads
Meta Ads Library Scraper API | ๐ต from $0.40/1K
Under maintenance[from $0.40 / 1K ads + small per-run fee] Paste a Meta Ads Library URL or search by keyword/Page ID. Export Facebook and Instagram ads with creatives, landing pages and optional reach/spend details, or count-only results.
Pricing
from $0.40 / 1,000 meta ads
Rating
0.0
(0)
Developer
WebData Labs
Maintained by CommunityActor stats
1
Bookmarked
38
Total users
18
Monthly active users
5 days ago
Last modified
Categories
Share
Meta Ads Library Scraper
Paste a Meta Ads Library URL and export public Facebook and Instagram ads, or search by filters from an API or AI agent.
Meta Ads Library Scraper returns clean ad rows with copy, creatives, CTAs, landing pages, advertiser identity, platforms, and delivery dates. Optional premium modes add public reach/spend disclosures or a fast total-count result. No Facebook login or Meta developer token is required.
โ What you get / โ What this isn't
โ You get:
- URL-first input that preserves Meta's complete filter state
- Keyword and Page-ID inputs for APIs, n8n, and AI agents
- Ad copy, headlines, CTAs, landing pages, images, videos, and carousel cards
- Optional per-ad reach, spend, impressions, and regulation data when Meta exposes it
- Count-only monitoring without downloading ad rows
- Deep pagination up to 10,000 unique ads per run
- Pay-per-event pricing: a small per-run fee plus a price per ad, and runs Meta refuses are free
โ This is not:
- An Ads Manager or private-account scraper
- A source of audience or spend data Meta does not publish
- An AI creative-analysis product
- A guarantee that inactive commercial ads remain available forever
๐ Why use this Meta Ads Library scraper?
Use a copied URL when you already configured a search in the Meta Ads Library. The URL carries country, status, category, media, platform, language, and future filters that a fixed form may not know about.
Use searchQueries or pageIds when an API, automation, or AI agent needs to construct the input. Both entry paths live in one Actor so scheduled monitoring and interactive research use the same output contract.
๐ What data do you get?
| Data | Main fields |
|---|---|
| Ad identity | libraryId, adUrl, collationId |
| Advertiser | pageId, pageName, pageUrl, pageCategories, pageLikeCount |
| Creative | bodyText, headline, description, ctaText, landingPageUrl |
| Media | imageUrls, videoUrls, videoThumbnailUrls, cards, creativeType |
| Delivery | isActive, startDate, endDate, publisherPlatforms |
| Transparency | adDetails.reachEstimate, spend, impressions, targetedCountries, regionalRegulationData |
| Provenance | sourceType, sourceValue, sourceUrl, countryCode, observedAt |
| Count mode | totalCount, countIsEstimate |
๐ฅ Who is it for?
- Performance marketers tracking competitor ads and offers
- Creative strategists building swipe files
- Agencies monitoring client categories
- Researchers studying political, issue, employment, housing, credit, or EU ad transparency
- Developers and AI agents that need predictable JSON instead of browser work
โ๏ธ How to scrape Meta Ads Library
- Open Meta Ads Library and configure the filters you want.
- Copy the full browser URL into
startUrls. - Choose a result limit.
- Enable ad details or count-only mode only when needed.
- Run the Actor and export the dataset as JSON, CSV, Excel, XML, or another Apify-supported format.
๐ฅ Input
By URL
The copied URL is the primary input. Its filters are preserved. A fallback field changes the URL only when you explicitly supply that field.
{"startUrls": [{"url": "https://www.facebook.com/ads/library/?active_status=active&ad_type=all&country=US&q=running+shoes&media_type=video"}],"maxResults": 100}
By filters - for API and AI agents
{"searchQueries": ["running shoes"],"countryCode": "US","activeStatus": "active","mediaType": "video","category": "all","sortBy": "recent","maxResults": 100}
For an exact advertiser:
{"pageIds": ["20409006880"],"countryCode": "US","activeStatus": "active","maxResults": 100,"isDetailsPerAd": true}
At least one entry mode is required: startUrls, searchQueries, or pageIds. Compatibility aliases are also accepted: url, urls, adLibraryUrls, query, queries, keywords, searchTerms, and pageId. A Page ID can also be pasted as an Ads Library link containing view_all_page_id.
If one entry is unusable (for example a Page username instead of a numeric ID), it is skipped and listed in the run's OUTPUT record while the other entries still run. If nothing usable is left, the run ends without charge and its single dataset row (resultType: "error") says what to fix.
| Field | Purpose |
|---|---|
startUrls | Copied Meta Ads Library URLs |
searchQueries | Keywords or advertiser names |
pageIds | Numeric Facebook Page IDs |
countryCode, activeStatus, mediaType | Filters or explicit URL overrides |
dateFrom, dateTo | Inclusive date overrides in YYYY-MM-DD |
sortBy | Meta default, impressions, or recent |
category | All, political/issue, housing, employment, or credit ads |
isDetailsPerAd | Add the public per-ad transparency payload |
onlyTotal | Return one count row per input source, without ad rows |
maxResults | Total unique ad rows, up to 10,000 |
Reliability settings, retries, delays, and proxy rotation are managed by the Actor.
๐ค Output
Ad row with optional premium fields:
{"resultType": "ad","libraryId": "266617227767457","pageId": "108824017345866","pageName": "Example Advertiser","bodyText": "Public ad copy","headline": "Public headline","landingPageUrl": "https://example.com/offer","publisherPlatforms": ["FACEBOOK", "INSTAGRAM"],"adDetails": {"reachEstimate": ">1M","spend": "$100K - $125K","currency": "USD","disclosureAvailable": true},"observedAt": "2026-07-30T12:00:00.000Z"}
Count-only row:
{"resultType": "count","sourceType": "keyword","sourceValue": "shopify","totalCount": 10681,"countIsEstimate": true,"observedAt": "2026-07-30T12:00:00.000Z"}
๐ต How much does it cost to scrape Meta Ads Library?
Platform usage and proxies are included. Each run pays one small start fee, charged only once Meta has actually answered, so a run Meta refuses or an unusable input costs nothing.
| Event | Free | Bronze | Silver | Gold, Platinum, Diamond |
|---|---|---|---|---|
actor-start once per run | $0.0100 | $0.0080 | $0.0060 | $0.0040 |
ad-scraped per ad | $0.0010 | $0.0008 | $0.0006 | $0.0004 |
ad-details-scraped per available detail row | $0.0030 | $0.0024 | $0.0018 | $0.0012 |
total-count per input source | $0.0100 | $0.0100 | $0.0100 | $0.0100 |
On the Free plan:
- 100 base ad rows cost $0.11 ($0.01 start + $0.10).
- 1,000 base ad rows cost $1.01.
- 100 ads with per-ad details cost $0.41.
- One count-only query costs $0.02.
Meta usually publishes reach and spend for regulated ad categories and EU transparency records, not ordinary commercial ads. When those disclosures are absent, adDetails.disclosureAvailable is false, the row explains why, and ad-details-scraped is not charged.
๐ Example tasks
| Task | Job |
|---|---|
| Track Shopify Facebook ads | Exact advertiser Page ID |
| Find Facebook competitor ads | Competitor discovery |
| Export ecommerce Meta ad creatives | Ecommerce swipe file |
| Research SaaS ad copy | SaaS messaging research |
| Find AI tool ads | AI category research |
| Research real estate ads | Real-estate creative research |
| Research solar lead-generation ads | Lead-gen offer research |
| Research skincare creatives | Consumer creative research |
๐ค Use with AI agents via MCP
Install Apify MCP for Claude Code or Cursor and expose this Actor:
apify mcp install claude-code --tools webdata_labs/meta-ads-library-scraperapify mcp install cursor --tools webdata_labs/meta-ads-library-scraper
You can also configure the remote MCP server at https://mcp.apify.com and authenticate through OAuth. Then ask the agent: "Run webdata_labs/meta-ads-library-scraper for Nike ads in the US and return 20 results." Filter inputs are designed so the agent does not need to construct a Meta URL.
See the Apify MCP documentation.
๐ Use this Actor in n8n
- Add the Apify community node. Self-hosted n8n uses
@apify/n8n-nodes-apify; n8n Cloud can install it from the node panel. - Add Run Actor and choose
webdata_labs/meta-ads-library-scraper. - Paste one of the JSON inputs above and enable Wait for finish.
- Add Get Dataset Items and map
defaultDatasetIdfrom the run result. - Send rows to Google Sheets, a database, Slack, or your AI workflow.
See the Apify n8n integration guide.
๐ Ad intelligence across Meta, Google, LinkedIn, and TikTok
| Actor | Use it for |
|---|---|
| Google Ads Transparency Scraper | Google advertiser creatives and campaigns |
| LinkedIn Ads Library Scraper | B2B competitor ads |
| TikTok Creative Center Ad Intelligence | TikTok ads and creative trends |
| AI Ad Creative Intelligence API | Analyze creative patterns after collection |
| Website Contact Extractor | Enrich advertiser landing pages with public contacts |
โ ๏ธ Limits and caveats
- The Actor extracts only public Meta Ads Library data.
- Reach, spend, demographics, and inactive history are not available for every category or country.
- Search totals are approximate and can change between runs.
- Creative CDN URLs can expire, so download media promptly if you need durable copies.
- Dynamic creative can contain many text and media variants; arrays preserve them.
- Meta can change public page structures and may temporarily throttle requests.
- Do not use the output for unlawful profiling, harassment, spam, or policy-violating automation.
๐งฉ Related Actors
- Google Ads Transparency Scraper - search, YouTube and Shopping ads by advertiser.
- LinkedIn Ads Library Scraper - the B2B side of the same question: who is advertising what to whom.
- TikTok Creative Center Ad Intelligence - the ads TikTok itself rates as top performing, by industry and region.
- Threads Scraper - posts, profiles and search on Meta's text network.
- TikTok Comments Scraper - the comment thread under any video, with authors and engagement.
โ FAQ
Does it require a Facebook login or Meta developer token?
No. It uses public Meta Ads Library pages.
Does a URL override the fallback filters?
The URL wins by default. A fallback field overrides the corresponding URL parameter only when you explicitly supply it.
Can it return only the number of ads?
Yes. Set onlyTotal: true. The Actor returns one count row per URL, keyword, or Page ID and does not download ad rows.
Why are reach or spend empty on a commercial ad?
Meta does not publish those disclosures for most ordinary commercial ads. Select a regulated category or use EU transparency records when that data is required.
Is it legal to scrape the Meta Ads Library?
The Actor accesses public advertising-transparency data, but legality depends on your jurisdiction and use. Follow applicable laws, Meta's terms, data-protection rules, and your organization's policies. Obtain legal advice for regulated or high-risk use.
๐ Changelog
-
2026-09-26: Focused on ads and ad details: advertiser About profiles were removed (
includeAboutPageis now ignored and never charged). Deep searches recover from Meta's per-IP rate limits instead of stopping early. Unusable entries are skipped instead of failing the run, more input aliases are accepted, and the start fee is charged only after Meta answers. -
2026-07-30: URL-first input, explicit URL overrides, aliases, sorting and category filters, count-only mode, per-ad transparency details, advertiser About profiles, and premium event pricing.
-
2026-07-23: Initial public release with keyword, Page-ID, URL, date-range, and deep-pagination support.
๐ ๏ธ Support
Open an issue from the Actor page and include the run URL, non-secret input, expected result, and one affected query, Page ID, or public Ads Library URL.