Facebook Ads Library Scraper — Meta & Instagram Ads avatar

Facebook Ads Library Scraper — Meta & Instagram Ads

Pricing

from $15.00 / 1,000 results

Go to Apify Store
Facebook Ads Library Scraper — Meta & Instagram Ads

Facebook Ads Library Scraper — Meta & Instagram Ads

Extract ads from the Meta Ads Library (Facebook & Instagram). Get ad copy, running days, EU spend data, carousel cards, and landing page URLs. The only scraper that tracks how long each ad has been running — your key signal for finding competitor winning ads.

Pricing

from $15.00 / 1,000 results

Rating

0.0

(0)

Developer

Yuliia Kulakova

Yuliia Kulakova

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

3

Monthly active users

8 days ago

Last modified

Categories

Share

Facebook Ads Library Scraper

Collect · Analyze · Outperform
The most data-rich Facebook Ads Library scraper on Apify —
daysRunning, structured spend ranges, full carousel cards, video URLs, and landing pages.

Why this one? · Input · Output · Use cases · Pricing


Facebook Ads Library Scraper extracts ads from the Meta Ads Library — Meta's public database of every ad running on Facebook, Instagram, Messenger, Threads, and Audience Network.

Built for marketers, agencies, and researchers who need clean, structured data — not raw HTML or incomplete JSON. Every field is normalized, deduped, and ready to pipe into your analysis tool or CRM.


✨ What makes this different

FeatureThis actorMost others
daysRunning — how long the ad has been live✅ computed automatically
Spend as structured {min, max} — not a raw string
All carousel cards extracted as individual objectsFirst card only
Video URLs (fbcdn.net CDN)
Image URLs for all image ads
Landing page URL via resolveSnapshotUrls✅ opt-in
Cross-search deduplication
Login wall detection with clear error message
Filters: status, ad category, date range, countryPartial

💡 Why daysRunning is the most valuable field

An ad running for 60+ days is profitable. The advertiser keeps paying because it converts.

daysRunning lets you instantly separate proven winners from tests without any manual calculation. Sort by it descending and you have a ranked list of your competitor's best-performing creatives — right now.

No other Facebook ads scraper on Apify computes this field automatically.


⚙️ Input

FieldTypeDefaultDescription
searchTermsstring[]["Nike"]Brand names or keywords to search
countriesstring[]["US"]ISO 2-letter country codes (e.g. "US", "GB", "DE")
adTypestring"ALL"ALL · POLITICAL_AND_ISSUE_ADS · HOUSING · EMPLOYMENT · FINANCIAL_PRODUCTS_AND_SERVICES
adActiveStatusstring"ACTIVE"ALL · ACTIVE · INACTIVE
maxAdsinteger25Max ads per search term + country pair
resolveSnapshotUrlsbooleanfalseVisit each ad snapshot page to extract the real landing page URL and CDN media files
startDatestringShow ads that were active on/after this date (YYYY-MM-DD)
endDatestringShow ads that were active on/before this date (YYYY-MM-DD)

Note on date filters: Meta shows ads that were running during the specified period, which may include ads that started before startDate if they were still active within your range. This is Meta's behavior, not a scraper limitation.

Example inputs

Quick test — Nike US active ads

{
"searchTerms": ["Nike"],
"countries": ["US"],
"adActiveStatus": "ACTIVE",
"maxAds": 25
}

Agency competitor research — 3 brands × 3 countries

{
"searchTerms": ["Adidas", "Nike", "Puma"],
"countries": ["US", "GB", "DE"],
"adActiveStatus": "ACTIVE",
"maxAds": 200
}

Political ads with spend data (EU/DSA)

{
"searchTerms": ["election"],
"countries": ["DE"],
"adType": "POLITICAL_AND_ISSUE_ADS",
"adActiveStatus": "ALL",
"maxAds": 100
}

Date range — ads from a specific campaign window

{
"searchTerms": ["Nike"],
"countries": ["US"],
"adActiveStatus": "ALL",
"maxAds": 50,
"startDate": "2025-01-01",
"endDate": "2025-06-30"
}

resolveSnapshotUrls — get real landing page URLs

{
"searchTerms": ["Nike"],
"countries": ["US"],
"adActiveStatus": "ACTIVE",
"maxAds": 20,
"resolveSnapshotUrls": true
}

📦 Output schema

Each item in the dataset represents one ad. Carousel ads include all cards as separate objects inside creatives.

{
"adArchiveId": "1234567890",
"pageId": "987654321",
"pageName": "Nike",
"adActiveStatus": "ACTIVE",
"adDeliveryStartTime": "2025-11-01T00:00:00.000Z",
"adDeliveryStopTime": null,
"daysRunning": 154,
"publisherPlatforms": ["facebook", "instagram"],
"mediaType": "VIDEO",
"creativeVariantCount": 3,
"creatives": [
{
"body": "Just Do It. Shop the new Air Max collection.",
"title": "Air Max 2026",
"caption": "nike.com",
"description": null,
"ctaText": "Shop Now",
"ctaType": "SHOP_NOW",
"destinationUrl": "https://www.nike.com/air-max",
"imageUrls": [],
"videoUrl": "https://video.ftbs6-2.fna.fbcdn.net/...",
"cardIndex": 0
}
],
"spend": { "min": 1000, "max": 5000 },
"impressions": { "min": 100000, "max": 500000 },
"estimatedAudienceSize": { "min": 1000000, "max": 2000000 },
"demographicDistribution": null,
"euTotalReach": null,
"targetAges": null,
"targetGender": null,
"targetLocations": null,
"bylines": null,
"fundingEntity": null,
"snapshotUrl": "https://www.facebook.com/ads/library/?id=1234567890",
"scrapedAt": "2026-04-04T12:00:00.000Z"
}

Field reference

FieldTypeNotes
adArchiveIdstringUnique Meta ad ID
pageNamestringAdvertiser page name
adActiveStatusstringACTIVE or INACTIVE
daysRunningintegerDays since ad delivery start — key profitability signal
publisherPlatformsstring[]e.g. ["facebook", "instagram", "messenger", "threads"]
mediaTypestringVIDEO, IMAGE, or NONE
creativesobject[]All creative variants; carousel = multiple objects
creatives[].bodystringAd copy text
creatives[].videoUrlstringDirect CDN video URL (fbcdn.net)
creatives[].imageUrlsstring[]Direct CDN image URLs (fbcdn.net)
creatives[].destinationUrlstringLanding page URL — from GraphQL when available, or via resolveSnapshotUrls
spendobject{min, max} in USD — see availability note below
impressionsobject{min, max} — see availability note below
estimatedAudienceSizeobject{min, max} potential reach
demographicDistributionobjectAge/gender breakdown (political ads only)
fundingEntitystringWho paid for the ad (political ads only)

Spend & impressions availability

Ad typespend & impressions
US / global commercial ads (Nike, Adidas, etc.)null — Meta policy, not a scraper bug
EU/UK commercial adsAvailable for some ad categories under DSA
Political, issue, housing, employment, financial ads✅ Returned as {min, max} objects

🎯 Use cases

Competitor ad intelligence Find which creatives your competitors have kept running for 60, 90, 120+ days. Long-running = profitable. Build a swipe file of proven winners, not guesses.

Agency client reporting Bulk-export all active ads for a brand across every country and platform. Export to CSV, Google Sheets, or push straight into your reporting dashboard via Apify API.

Creative benchmarking What CTAs dominate your category? Which formats (video vs. image vs. carousel) are brands investing in? What copy angles are getting budget behind them?

Political ad monitoring EU/UK DSA transparency data: spend ranges, estimated reach, demographic targeting, and funding entity — all structured and ready for analysis.

Market research & trend tracking Run the same search weekly to track how competitors shift their messaging, seasonal spend, and creative strategy over time.


💰 Pricing

From $15.00 / 1,000 ads — no monthly fees, pay only for what you scrape.

ModeWhat you get~Total cost per 1,000 ads
StandardAll fields — copy, video URLs, image URLs, spend, all carousel cards~$15
resolveSnapshotUrls: trueEverything above + confirmed landing page URL for each ad~$16–17

resolveSnapshotUrls mode visits an extra page per ad (~5 sec each), which adds some Apify platform compute time on top of the base price. No monthly fees — pay only for what you scrape.


⚠️ Limitations

  • Spend/impressions are null for US commercial ads. This is Meta's transparency policy — data is only disclosed for political/issue/housing/employment/financial ads and some EU ads under DSA rules.
  • Meta does not expose exact spend — only ranges (e.g. $1,000–$5,000).
  • resolveSnapshotUrls adds ~5 seconds per ad (one extra page load). For 1,000 ads, budget ~90 minutes of run time.
  • Date range filters rely on Meta's own filtering, which may include ads that started before your startDate if they were still active during your range.
  • Meta periodically updates their internal page structure. If you notice empty results, open an issue and we'll push an update within 24–48 hours.