September 24, 2026 · 15 min read
Facebook Pages Scraper: Up to 1,000 Free Results a Month (2026)
Records return 32 fields in the Sample Output schema, capturing page identities, follower counts, and public contact metadata. The free-plan price is $5.00 per 1,000 results, while an initial verification run with maxItems set to 10 costs at most $0.05 in result charges. Search engines and Facebook's internal discovery query businesses across keywords and locations, using residential proxies automatically. This setup serves teams mapping local markets, tracking competitor reach, or gathering public business profiles. It is not for anyone who needs private group posts or personal profile timelines, which the records do not include.
Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 1,000 results at $0.005 each before platform usage. Open Facebook Pages Scraper on Apify and run the prefilled example.
How reliable is Facebook Pages Scraper in production?
Across the last 30 days of public runs on the Apify platform, Facebook Pages Scraper recorded 99 runs with the following outcomes.
| Outcome | Runs | Share |
|---|---|---|
| Succeeded | 94 | 94.9% |
| Failed | 0 | 0.0% |
| Aborted by the user | 2 | 2.0% |
| Timed out | 3 | 3.0% |
| Total | 99 | 100.0% |
In the last 30 days, 3.0% of runs failed or timed out, about 3 in a hundred. Schedule automated pipelines with standard retries to absorb the occasional timeout. Because zero runs failed outright, transient platform network delays represent the primary operational interruption to plan around.
What does it cost to run Facebook Pages Scraper?
Each result costs $0.005 on Apify's free plan, which is $5.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.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. With 3.0% of runs failing or timing out in the last 30 days, budget for re-running a portion of those batches rather than assuming every run completes.
The primary billing driver is maxItems, which caps the total number of dataset rows written to storage. Because result charges apply only to items delivered to your dataset, setting a conservative item cap prevents excess spending during exploratory queries. Test discovery terms with maxItems set to 10 to inspect data richness before deploying large keyword lists.
How do you run Facebook Pages Scraper from the API?
None of its 6 controls is strictly required, so the defaults below produce a valid run on their own. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for Facebook Pages Scraper, 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-pages-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"searchTerms":["Coffee Shop"],"locations":["London"],"maxItems":10,"includeReviews":true,"cookies":""}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"searchTerms": [
"Coffee Shop"
],
"locations": [
"London"
],
"maxItems": 10,
"includeReviews": True,
"cookies": ""
}
run = client.actor("crawlerbros~facebook-pages-scraper").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 Shop"
],
"locations": [
"London"
],
"maxItems": 10,
"includeReviews": true,
"cookies": ""
}
const run = await client.actor('crawlerbros~facebook-pages-scraper').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 Pages Scraper inputs matter, and which can you skip?
The controls that govern your output volume are searchTerms, locations, and startUrls. Supplying startUrls skips search discovery entirely, while pairing searchTerms with locations queries candidate intersections. For a first run, leave includeReviews at its default and focus only on setting valid cookies and a low maxItems cap.
startUrls(array): Direct list of Facebook page URLs to scrape (skips keyword/location discovery entirely for these). Accepts full page URLs, e.g. https://www.facebook.com/McDonalds. Can be combined with searchTerms - results from both are merged. Either startUrls or searchTerms is required.searchTerms(array): Search terms for page discovery. Each term is combined with each location (if provided) to find matching Facebook pages. Either searchTerms or startUrls is required.locations(array): Optional locations to combine with each search term for location-aware discovery. For example, adding 'London' will search for 'Coffee Shop London'.maxItems(integer): Maximum number of page rows to output. For 500-1000+ results, provide Facebook session cookies and use multiple search terms or locations to maximize discovery. Also scales SERP pagination depth automatically. Default:60.includeReviews(boolean): Fetch and include real reviews (reviewer name, recommend/don't-recommend verdict, review text, date) for each page, when available. Adds one extra request per page. Disable for faster/cheaper runs if you don't need reviews. Default:true.cookies(string): Facebook session cookies. STRONGLY RECOMMENDED - without valid cookies, Facebook blocks ~94% of discovered pages with a login wall, most contact/business fields (phone, email, address, hours) will be empty, and page discovery itself is far less reliable. Accepts EITHER (1) a JSON array of Playwright-style cookie objects, OR (2) a rawname=value; name2=value2Cookie header string. Required cookies: c_user, xs, datr, fr, sb. Export them from your logged-in Facebook session via browser DevTools (Application > Cookies > facebook.com). Example: [{"name":"c_user","value":"1000...","domain":".facebook.com","path":"/"}]
What does Facebook Pages Scraper return?
Output rows provide structured business snapshots containing page identifiers, follower counts, category tags, and verified contact links. They are ideal for building B2B directories or monitoring social proof metrics. They conspicuously do not contain personal Facebook profile timelines or private group membership rosters.
Sample Output
facebookUrl(e.g.https://www.facebook.com/ozonecoffeeuk)pageUrl(e.g.https://www.facebook.com/ozonecoffeeuk)pageName(e.g.ozonecoffeeuk)pageId(e.g.191234567)facebookId(e.g.191234567)title(e.g.Ozone Coffee Roasters | Facebook)categoriescategory(e.g.Coffee Shop)infointro(e.g.Specialty coffee roaster and cafe in London.)phoneemailmessenger(e.g.https://m.me/191234567)priceRangeaddressaddressUrlwebsitewebsitesfollowers(e.g.9100)followings(e.g.12)checkinstalkingAboutCountprofilePictureUrlcoverPhotoUrlratingOverallratingCountratingTextrecommendPercentageownerOrganizationbusiness_hourspageAdLibrary(e.g.https://www.facebook.com/ads/library/?active_...)reviews
Classification
categories: Array or null - Page categoriescategory: String or null - Primary categoryinfo: Array or null - Short info lines from the pageintro: String or null - Page introduction or description
Contact & Business
phone: String or null - Public phone numberemail: String or null - Public contact emailmessenger: String or null - Messenger linkaddress: String or null - Address or coordinatesaddressUrl: String or null - Google Maps link for the addresswebsite: String or null - Primary linked websitewebsites: Array or null - All detected website linkspriceRange: String or null - Price range (e.g."££")
Engagement
followers: Number or null - Follower countlikes: Number or null - Like countfollowings: Number or null - Following countcheckins: Number or null - Check-in count ("were here")talkingAboutCount: Number or null - Talking-about count
Media
profilePictureUrl: String or null - Profile picture URLcoverPhotoUrl: String or null - Cover photo URL
Business Details
business_hours: String or null - Business hours inforatingOverall: Number or null - Overall rating score, synthesized to a 0-5 scale for compatibility (Facebook Pages actually use a recommend %, not 1-5 stars - seerecommendPercentage)ratingCount: Number or null - Review/rating countratingText: String or null - Human-readable rating textrecommendPercentage: Number or null - Raw recommend percentage (0-100) as shown on the page - the authentic Facebook Pages rating metricownerOrganization: String or null - Confirmed owning organization/business ("X is responsible for this Page"), when Facebook discloses itpageAdLibrary: Object or null - Ad library metadata or linkreviews: Array or null - Real reviews when available:[{reviewerName, recommends, reviewText, reviewDate}]. Controlled by theincludeReviewsinput (default on)
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 Pages Scraper 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.
- Export session cookies from a logged-in Facebook browser profile, ensuring c_user, xs, datr, fr, and sb are present, then paste them into the cookies parameter as a JSON array.
- Set searchTerms to a targeted array of business categories and locations to a small list of target cities, leaving startUrls empty for general discovery.
- Keep maxItems capped at 10 for the initial test run to verify authentication and parsing while keeping result charges at or below $0.05.
- Run the Actor and inspect the dataset to ensure the output contains 32 fields in the Sample Output schema with populated values for pageName, pageId, and category.
- Verify that contact fields like email, phone, and address are not consistently arriving as null, which indicates cookie failure or aggressive login walls.
- Scale up discovery by increasing maxItems and expanding searchTerms and locations, calculating approximately 40 potential candidate pages per keyword-location pair.
- Export the structured dataset to JSON or CSV for downstream processing, filtering out records that lack vital outreach fields.
How do you apply it? Three worked playbooks
These are Facebook Pages Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Local business discovery
Outcome: Local business discovery: find businesses in specific cities or regions
Configure: Set searchTerms to ["Bakery", "Artisan Bread"], locations to ["London", "Bristol"], maxItems to 40, and supply valid Facebook cookies in cookies.
Working method: Execute the run across the cross-product of terms and locations. Check that returned items match regional entities by inspecting address and title fields before widening the search array.
Deliverable: A structured dataset containing localized business profiles with addressUrl, business_hours, and categories.
Stop condition: Abort if returned address fields consistently reflect locations outside the configured locations parameter.
Use case 2: Competitive intelligence
Outcome: Competitive intelligence: build datasets of competitor pages in your industry
Configure: Populate startUrls with exact URLs like [{"url": "https://www.facebook.com/McDonalds"}], leave searchTerms empty, and set includeReviews to true.
Working method: Directly target explicit brand pages to bypass external discovery. Compare follower count, likes, talkingAboutCount, and reviews across the competitors.
Deliverable: A benchmark dataset comparing engagement metrics, ratingOverall, and ad library links in pageAdLibrary.
Stop condition: Stop the run if pageUrl targets return unavailable and are skipped without generating output rows.
Use case 3: Lead generation
Outcome: Lead generation: collect pages with contact info for outreach
Configure: Set searchTerms to ["HVAC Repair", "Plumber"], locations to ["Manchester"], maxItems to 100, and includeReviews to false to speed up throughput.
Working method: Run discovery with session cookies provided to unlock contact containers. Review the first 10 rows to verify email, phone, and messenger values are extracting properly.
Deliverable: An outreach-ready CSV containing business identities paired with populated email and phone columns.
Stop condition: Pause execution if consecutive records have null values for both phone and email despite valid session cookies.
What breaks, and how do you design around it?
- Over the last 30 days, 0.0% of public runs failed and 3.0% timed out. Build retries and alerting around those rates rather than assuming every run completes.
When Facebook serves login walls that block public scrapers, supply valid session cookies containing c_user and xs to unlock restricted business views. If discovery yield drops below maxItems, expand the search space by multiplying terms across adjacent locations. When scraping specific targets without discovery overhead, pass direct page URLs into startUrls instead of guessing keywords.
When should you not use Facebook Pages Scraper?
Do not use this Actor if you require commercial directory contacts from regional yellow pages rather than social profiles; instead, use PaiPt Scraper - Portugal Business Directory (Paginas Amarelas) for Portuguese businesses or Vrisko Scraper - Greek Business Directory (vrisko.gr) for Greek markets. If your goal is tracking creative assets and sponsored messaging rather than company profiles, use Facebook Ads Library Scraper. Finally, avoid this Actor if your target list demands verified email addresses enriched from local maps; a dedicated tool like Google Maps Email Extractor extracts map-listed corporate emails directly without depending on Facebook profile configurations.
What should you check before trusting the output?
- Check that pageId and facebookId are populated; null values across entire batches signal blocked page fetches or dead redirect loops.
- Monitor the null rate across phone, email, and website; if these exceed 90% across known commercial targets, the cookies parameter likely expired.
- Verify that recommendPercentage contains numeric values between 0 and 100 rather than corrupted text when ratingOverall is analyzed.
- Halt execution or reject output batches if the dataset row count remains 0 after consuming over 20 search discovery queries.
None of this proves a record is correct. It gives a scheduled Facebook Pages Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
What is the cost of running Facebook Pages Scraper on Apify?
Results cost $0.005 each, which equals $5.00 per 1,000 results on the free tier. Paid Apify tiers pay lower per-result rates. A run-start fee is charged whenever a run begins, regardless of whether results are produced, alongside standard platform usage. The free tier includes $5.00 in monthly usage credit, which covers up to 1,000 output records before start charges.
Why are phone and email values returning as null?
A null field occurs when a page owner omits contact details, or when Facebook serves a login wall. Providing session cookies through the cookies input parameter allows authenticated page parsing, which unlocks gated contact elements like email, phone, and street address.
Can I target direct Facebook URLs instead of using keyword discovery?
Yes. Pass full page links into the startUrls input array. Doing so bypasses search engine discovery entirely and routes the scraper directly to the target Facebook entities, outputting their structured data into your dataset.
How reliable is Facebook Pages Scraper during scheduled operations?
Over the last 30 days, 94 of 99 runs succeeded (94.9%), with 0 failing and 3 timing out. About 3 in a hundred runs encounter timeouts or failures. Production pipelines should implement automated retry logic to rerun interrupted tasks.
Can this Actor scrape posts from Facebook Groups or personal profiles?
No. This tool targets public Facebook Pages such as companies, organizations, and public figures. It cannot parse personal Facebook profiles or extract discussions from Facebook Groups due to different underlying layouts and permission models.
Where to go next
When you are ready to run it, open Facebook Pages Scraper on Apify; the free plan covers up to 1,000 results a month.
Start with the Facebook Pages Scraper 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.
If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:
- Contact and email scrapers covers 73 Actors in this family.
Readers running Facebook Pages Scraper commonly pair it with:
- Facebook Followers & Following Scraper: Scrape Facebook Page and Profile followers, following, and friends previews plus aggregate follower/following counts, with structured location/workplace/school parsing.
- Facebook Ads Library Scraper: Scrape ads from Facebook Ad Library without cookies or authentication.
- Facebook Ads Scraper Pro: Extract Facebook ads data from the Ad Library.
- Facebook Group Posts Scraper: Scrape public Facebook group posts without login or cookies.
- Facebook Posts Scraper: Scrape public Facebook Page and Profile posts and Reels - text, reactions, comments, shares, photos, videos with captions, and hashtag/link entities.
- Google Maps Email Extractor: Extract business emails, phone numbers, and social media links from Google Maps.
- PaiPt Scraper - Portugal Business Directory (Paginas Amarelas): Scrape pai.pt (Portugal's Yellow Pages / Paginas Amarelas business directory) listings.
- Vrisko Scraper - Greek Business Directory (vrisko.gr): Scrape vrisko.gr, Greece's leading business directory.
Related guides:
- Facebook Followers Scraper: Get 8-Row Previews and Total Counts (2026)
- Facebook Events Scraper: Practical Use Cases and Workflows
- Facebook Comments Scraper: 24 Data Fields per Record (2026)
- Google Maps Email Extractor: 3 Practical Use Cases
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-24.
Actor last updated by its maintainers on 2026-09-13.
Run outcome figures cover the 30 day public window ending 2026-09-24.
Featured actors
Facebook Pages Scraper
Discover Facebook pages through search engines and extract structured page data including IDs, names, categories, addresses, follower counts, phone numbers, emails, websites, business hours, ratings, and media.
Run on Apify ↗