Skip to content
    ↑↓ to choose · Enter to open

    · 13 min read

    Facebook Ads Scraper Pro: 15 Data Fields per Record (2026)

    By CrawlerBros Engineering Team

    Each record carries 15 output fields covering ad text, media URLs, platform distributions, landing page links, and start dates directly from the Facebook Ad Library. The dataset charges $2.00 per 1,000 results on the free plan, requiring no accounts, cookies, or manual session handling. It is built for media buyers and competitive analysts tracking active ad copy, CTA selections, and destination funnels. It is not for anyone who needs advertiser audience targeting parameters, buyer demographics, or impression counts on commercial ads, which the Facebook Ad Library does not expose.

    Try it: open Facebook Ads Scraper Pro on Apify, sign in on the free plan and run the prefilled example.

    Can you try Facebook Ads Scraper Pro before paying?

    Yes. Apify's free plan includes $5.00 of prepaid usage every month and asks for no credit card. At $0.002 per result, that covers up to 2,500 results of Facebook Ads Scraper Pro a month, before run-start charges and platform usage.

    The example request further down caps resultsPerSearch at 3 for each of its 1 searchTerms, so a first run returns at most 3 results and costs at most $0.006 in result charges. That is enough to see the real shape of the data before deciding anything.

    Facebook Ads Scraper Pro was last updated on 2026-09-15. It is one of 1,725 Actors CrawlerBros publishes on Apify, which together have 680,173 lifetime public runs and an average rating of 4.63 out of 5 across 416 reviews.

    What does it cost to run Facebook Ads Scraper Pro?

    Each result costs $0.002 on Apify's free plan, which is $2.00 per 1,000 results. Starting a run is charged separately at $0.05 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.002 $2.00
    BRONZE $0.00167 $1.67
    SILVER $0.00133 $1.33
    GOLD $0.001 $1.00
    PLATINUM $0.001 $1.00
    DIAMOND $0.001 $1.00

    Total run expenses are driven almost entirely by the number of queries in searchTerms multiplied by your resultsPerSearch limit, as result billing tracks items written to the dataset. Secondary filters like mediaType or adType restrict what qualifies but do not impact the unit rate. The most economical approach is running a single search term with resultsPerSearch set to 3 before triggering multi-brand extractions.

    How do you run Facebook Ads Scraper Pro from the API?

    The schema marks 2 of its 7 controls as required: searchTerms, proxyConfiguration. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for Facebook Ads Scraper Pro, so the request works once your token is in place.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~facebook-ads-scraper-pro/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"searchTerms":["coffee"],"country":"ALL","adActiveStatus":"active","adType":"all","mediaType":"all","resultsPerSearch":3,"proxyConfiguration":{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"]}}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "searchTerms": [
        "coffee"
      ],
      "country": "ALL",
      "adActiveStatus": "active",
      "adType": "all",
      "mediaType": "all",
      "resultsPerSearch": 3,
      "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": [
          "RESIDENTIAL"
        ]
      }
    }
    
    run = client.actor("crawlerbros~facebook-ads-scraper-pro").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "searchTerms": [
        "coffee"
      ],
      "country": "ALL",
      "adActiveStatus": "active",
      "adType": "all",
      "mediaType": "all",
      "resultsPerSearch": 3,
      "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
          "RESIDENTIAL"
        ]
      }
    }
    
    const run = await client.actor('crawlerbros~facebook-ads-scraper-pro').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.

    Which Facebook Ads Scraper Pro inputs matter, and which can you skip?

    The primary drivers of your output volume are searchTerms and resultsPerSearch, which together dictate how broadly the scraper searches and how many ads it extracts per term. Settings like adActiveStatus, adType, and mediaType let you filter for specific formats or statuses without altering the scraping mechanism itself. Keep country set to ALL on initial exploratory passes unless your deliverable strictly demands geo-targeted creative.

    • searchTerms (array): Keywords or page names to search for in the Facebook Ad Library. Each term will be searched separately.
    • country (string): Country to filter ads by. Use 'ALL' for all countries, or a 2-letter country code (e.g., 'US', 'GB', 'DE'). Default: "ALL".
    • adActiveStatus (string): Filter by ad active status. Default: "active".
    • adType (string): Filter by ad category type. Default: "all".
    • mediaType (string): Filter by media type in the ad. Default: "all".
    • resultsPerSearch (integer): Maximum number of ads to extract per search term. Default: 50.
    • proxyConfiguration (object): Required - Facebook blocks ad data from data center IPs. Use residential proxy for best results.

    Fixed-choice controls: adActiveStatus accepts all (All Ads), active (Active Only), inactive (Inactive Only); adType accepts all (All Types), political_and_issue_ads (Political & Issue Ads), housing, employment, credit; mediaType accepts all (All Media), image, video, meme, none (No Media).

    What does Facebook Ads Scraper Pro return?

    Returned items provide clean creative copy, CTA labels, media links, and verified destination URLs mapped against distinct ad IDs. They are ideal for monitoring competitive angles, identifying creative longevity, and tracking outbound marketing funnels. They do not contain backend audience targeting criteria, conversion data, or commercial impression figures.

    • ad_id: string - Unique Facebook ad archive ID
    • page_name: string - Name of the Facebook page running the ad
    • page_id: string - Facebook page ID
    • ad_text: string - Ad creative text / copy
    • ad_snapshot_url: string - Direct link to view the ad in the Facebook Ad Library
    • start_date: string - When the ad started running
    • end_date: string - When the ad stopped (if inactive)
    • status: string - active or inactive
    • platforms: string[] - Platforms where the ad runs (Facebook, Instagram, Messenger, Audience Network)
    • media_type: string - image, video, meme, or none
    • media_url: string - Direct URL to the ad media asset
    • cta_text: string - Call-to-action button text (e.g. "Shop Now", "Learn More")
    • link_url: string - Landing page URL the ad sends users to
    • search_term: string - The input search term that found this ad
    • scraped_at: string - ISO-8601 timestamp of when the ad was scraped

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Facebook Ads Scraper Pro and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Configure searchTerms with your target brand names or discovery keywords, keeping the array to a single term for your initial check.
    2. Verify proxyConfiguration has useApifyProxy set to true and specifies the RESIDENTIAL group, as Facebook blocks data center addresses.
    3. Set country to a specific 2-letter ISO country code or ALL to determine your geographical filtering.
    4. Set resultsPerSearch to 3 to keep result charges capped during schema and connectivity testing.
    5. Run the Actor and inspect the dataset to verify non-empty strings in ad_id, page_name, and ad_snapshot_url.
    6. Verify link_url and cta_text exist when assessing traffic destinations, noting that text-only records omit media_url.
    7. Increase resultsPerSearch up to 500 or add additional terms to searchTerms once fields and formats pass inspection.

    How do you apply it? Three worked playbooks

    These are Facebook Ads Scraper Pro's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: Competitive analysis

    Outcome: See exactly what ads your competitors are running, when they started, and on which platforms

    Configure: searchTerms: ["competitorbrand"], country: "US", adActiveStatus: "active", adType: "all", mediaType: "all", resultsPerSearch: 50, proxyConfiguration: {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

    Working method: Start with a single known competitor brand name in searchTerms to evaluate their current campaign structure. Compare the retrieved platforms values to see if they emphasize Facebook or Instagram placements. Check start_date to determine whether their active creative relies on legacy promotions or recent weekly pushes.

    Deliverable: A structured table of live competitor ads detailing creative copy, launch dates, active networks, and destination URLs.

    Stop condition: The returned page_name does not match the intended competitor entity across multiple ad records.

    Use case 2: Agency reporting

    Outcome: Track the ad cadence of clients and their competitors for monthly decks

    Configure: searchTerms: ["clientbrand", "rivalbrand"], country: "ALL", adActiveStatus: "all", adType: "all", mediaType: "all", resultsPerSearch: 100, proxyConfiguration: {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

    Working method: Execute a scheduled monthly run containing client and competitor brand names across all territories. Filter the returned records by scraped_at to isolate creative introduced or retired within the monthly billing window. Group by status and page_name to calculate creative refresh velocity and flight duration.

    Deliverable: A comparative monthly summary sheet containing total active creative counts, format ratios, and landing page changes.

    Stop condition: The returned dataset returns fewer than client-confirmed active ads, signalling a regional country filter mismatch.

    Use case 3: Creative research

    Outcome: Build swipe files of winning ad copy, formats, and CTAs in your niche

    Configure: searchTerms: ["ergonomic chair"], country: "US", adActiveStatus: "active", adType: "all", mediaType: "video", resultsPerSearch: 150, proxyConfiguration: {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

    Working method: Search broadly by category keywords rather than brand names to survey high-volume messaging trends. Filter down to records where media_type matches video and sort by start_date to identify creative concepts that have stayed active the longest. Extract recurring patterns from cta_text and ad_text hooks.

    Deliverable: A curated creative swipe file containing video URLs, direct ad library links, and high-performing CTA copy.

    Stop condition: Generic terms pull predominantly irrelevant industries due to broad keyword matching.

    What breaks, and how do you design around it?

    • Facebook may throttle very large runs - the actor uses a residential proxy and adds delays to stay within limits, but for multi-thousand-ad runs expect occasional retries
    • Some older inactive ads may have reduced media quality or missing CTA data
    • Ad creative impressions and spend are only available for political & issue ads in countries where Facebook discloses them
    • Location targeting data is not included - the Ad Library does not expose advertiser targeting parameters

    Large volume runs risk throttling if Facebook restricts access during rapid multi-page traversals; break wide brand lists into smaller, phased runs to maintain throughput. Older inactive records occasionally drop CTA metadata or media asset links, so downstream pipelines should handle null media_url values gracefully. Commercial ads omit reach metrics by default, requiring workflows to rely on start_date duration rather than native spend numbers.

    When should you not use Facebook Ads Scraper Pro?

    Do not use this Actor if you require engagement metrics, public community feedback, user comments, or page posts rather than sponsored promotional copy. Facebook Ad Library data is strictly limited to advertiser creatives and excludes page comment threads, organic post shares, and user reactions. If your goal is to extract regular organic timeline content or video updates, use Facebook Posts Scraper instead, which provides reaction breakdowns, post shares, and nested comments. Similarly, if you need community discussions from public groups, use Facebook Group Posts Scraper. For direct consumer feedback on brand reputation, choose Facebook Reviews Scraper. Additionally, if your pipeline strictly requires commercial ad spend and demographic audience profiles, do not use scrapers at all; this data is legally protected and unavailable outside official political transparency disclosures.

    What should you check before trusting the output?

    • Check that ad_id is a populated string matching the ID parameter in ad_snapshot_url.
    • Verify media_url is non-empty whenever media_type is set to image or video.
    • Confirm platforms contains valid string elements such as facebook or instagram.
    • Halt downstream ingestion if search_term does not match any entry provided in the input searchTerms array.
    • Inspect start_date to ensure it conforms to an ISO date format before writing to analytical tables.

    None of this proves a record is correct. It gives a scheduled Facebook Ads Scraper Pro run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    What is the cost of running Facebook Ads Scraper Pro on the free plan?

    Results cost $0.002 per result, which is $2.00 per 1,000 results on the free plan. Apify bills platform usage separately on top of result and run-start fees. Apify's free plan includes $5.00 of monthly usage with no credit card, covering up to 2,500 results of this Actor.

    Do I need a Facebook account or browser cookies to scrape ads?

    No. The Facebook Ad Library is publicly accessible. This Actor extracts structured ad data without needing cookies, session tokens, or account logins.

    Why does proxyConfiguration require residential proxies?

    Facebook blocks ad library access originating from data center IP ranges. The Actor requires residential proxy routing to prevent request blocks and maintain extraction stability.

    Does Facebook Ads Scraper Pro return Instagram ads?

    Yes. The Facebook Ad Library contains creatives deployed across Meta platforms. Creative records that appeared on Instagram contain instagram inside the returned platforms array.

    Can I retrieve spend and impression figures for standard commercial ads?

    No. Meta only reports spend, impressions, and demographic ranges for political and issue ads. Standard commercial product ads omit spend and reach metrics in the Ad Library.

    Where to go next

    When you are ready to run it, open Facebook Ads Scraper Pro on Apify; the free plan covers up to 2,500 results a month.

    Start with the Facebook Ads Scraper Pro Actor page for the current input schema, pricing tier, and run history.

    It is part of the Facebook Scraping Suite, which puts every related Actor on one page with its price and run history.

    Other Actors we maintain for related data:

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-27.

    • Actor last updated by its maintainers on 2026-09-15.

    • Run outcome figures cover the 30 day public window ending 2026-09-27.

    • Facebook Ads Scraper Pro on Apify

    Featured actors

    Facebook Ads Scraper Pro

    Extract Facebook ads data from the Ad Library. Search by keywords or page names, filter by country, status, ad type, and media type. Get ad text, page info, media URLs, dates, CTA buttons, landing page links, and more - no login required.

    Run on Apify ↗