Facebook Pages Scraper avatar

Facebook Pages Scraper

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Facebook Pages Scraper

Facebook Pages Scraper

Facebook Pages Scraper extracts emails, phones, likes, followers, business hours, social links and Ad Library data — scrape Facebook page details in bulk for lead generation, local business data and competitor research

Pricing

from $3.50 / 1,000 results

Rating

0.0

(0)

Developer

Data Minds

Data Minds

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

2

Monthly active users

10 days ago

Last modified

Categories

Security

Limited permissions

Share

What is Facebook Pages Scraper?

Facebook Pages Scraper is an Apify Actor for Facebook lead generation, competitor monitoring and influencer research. Paste public page links or usernames and it returns one row per page with name, category, likes, followers, rating, email, phone, website, address, business hours and social links, with no Facebook login. Export JSON, CSV or Excel. Pricing starts at $0.0035 per page result on the Gold plan, or $0.007 on the Free plan. Try it free

Facebook Pages Scraper turns a list of public Facebook page links, usernames or numeric page IDs into a clean table of page details. You give it the pages; it gives you one row per page that you can download, schedule, or pull into your own tools through the Apify API.

Typical ways to use it:

  • 🎯 Facebook lead generation. Build a local business lead list with email, phone, website and address for every page you scrape.
  • 🔍 Competitor monitoring on Facebook. Re-run the same list on a schedule and compare followers, likes and rating between runs.
  • 🤝 Influencer research. Shortlist pages by followers, verified badge, creation date and linked social profiles.
  • 📊 Market research data. Group pages by category and compare audience size and price range across a niche.
  • 🗂 Business directory enrichment. Add missing contact details and hours to a list of businesses you already have.
  • 📢 Ad Library link lookup. Get the ad status and a ready-to-open Ad Library link for each page.

Because it runs on Apify, you also get the API, scheduling, webhooks, integrations with other apps and exports to JSON, CSV, Excel, XML and HTML.

What can Facebook Pages Scraper do?

  • 📧 Contact details in one row. Use it as a Facebook page email scraper and contact info scraper: extract emails and phone numbers from Facebook business pages, together with website, address, map link and Messenger link. Get the Facebook page phone number and website in the same row.
  • 📈 Audience numbers. Facebook page followers and likes count, plus following, talking-about count and check-ins, as plain integers with the display text kept next to them.
  • ⭐ Rating and reviews. Facebook page rating and review count, with the recommendation percentage, when the page shows them.
  • 🕐 Business info. Facebook page business hours and price range, plus category, intro text and listed services.
  • 🔗 Social links. Facebook page social media links to Instagram, TikTok, X, YouTube, LinkedIn, Pinterest, Telegram, WhatsApp, Threads and Snapchat links when the page lists them.
  • 📢 Ad status and transparency. Facebook page creation date and page transparency, confirmed owner, plus the ad status and Ad Library link. You can switch this off.
  • ✅ Verified badge. A simple Facebook page verified badge checker through isVerified.
  • 🧩 Same fields for every page type. Use it as a Facebook company page scraper for brand pages. It also works as a Facebook page data extractor and bulk scraper: the same fields come back for each page.
  • ⚡ Bulk and live. Scrape Facebook pages in bulk. Each page is saved to the dataset as soon as it is ready, and duplicates are removed by default.

What data can Facebook Pages Scraper extract?

Each run returns one JSON object per page. A field is null, an empty list or an empty object when the page does not publish it.

DataFields
🔎 Page identity (Facebook page username and page ID lookup)facebookUrl, url, pageUrl, pageName, pageId, page_id, facebookId, userId, type
🏷 Name and texttitle, name, category, categories, intro, bio, description, info
📈 Audiencelikes, likesCount, likesText, likesDisplay, followers, followersCount, followersText, followersDisplay, followings, followingCount, followingDisplay, talkingAboutCount, checkins
⭐ Ratingrating, ratings, ratingOverall, ratingCount, ratingPercentage, ratingReviewCount
📇 Contact and locationemail, emails, phone, phones, website, websites, messenger, address, addressUrl, mapsAddress
🕐 Business infobusinessHours, business_hours, businessHoursRaw, priceRange, price_range, priceRangeText, priceRangeSymbol, business_price, businessPrice, services, business_services, businessServices
🖼 Media (Facebook page profile picture and cover photo URLs)profilePictureUrl, image, imageAlt, coverPhotoUrl, coverPhoto, cover_image, profilePhoto, profilePhotoUrl
🔗 Social linksinstagram, tiktok, twitter, youtube, linkedin, pinterest, telegram, whatsapp, threads, snapchat, alternativeSocialMedia, socialLinks
🏆 Status and transparencyisVerified, verified, status, confirmedOwnerLabel, confirmed_owner, isBusinessPageActive, creation_date, pageCreatedYear, ad_status, pageTransparency, delegate_page_id
📢 Ad LibraryadPageId, pageAdLibrary, pageAdLibraryUrl
✅ Run statussuccess, error, scrapedAt, additionalProperties

Note: Many fields exist under more than one name so older exports keep working. email, phone, website, address, hours, price range and rating appear only when the page shows them. Turning off fetchAboutSubpages leaves most of the contact and transparency fields empty. Turning off includeAdLibrary empties the Ad Library fields and ad_status. Turning off showVerifiedBadge empties isVerified and verified.

What data can't Facebook Pages Scraper extract?

It does not collect posts, comments, review texts, photos beyond the profile and cover images, follower lists, or private and login-only pages. It does not search Facebook by keyword: you supply the pages.

How to scrape Facebook page contact information

  1. Create a free Apify account or log in.
  2. Open Facebook Pages Scraper in Apify Console.
  3. Add page links in startUrls, or usernames and page IDs in pages. Use Bulk edit to paste a long list.
  4. Optionally set maxItems for a quick test, pick a language, and switch the About details, Ad Library and verified badge options on or off.
  5. Click Start and watch rows appear in the Output tab while the run is still going.
  6. Open the Overview, Contact and Location or Business Info view, then download the dataset as JSON, CSV or Excel.

How much does Facebook Pages Scraper cost?

Facebook Pages Scraper uses pay-per-event pricing: you pay for each page result, and the price per result drops on higher Apify plans. Apify platform usage is billed in addition.

Apify planPrice per page resultPrice per 1,000 results
Free$0.007$7.00
Bronze$0.00595$5.95
Silver$0.0049$4.90
Gold$0.0035$3.50

Each run also pays one Actor start event of $0.00005 per GB of memory, with a minimum of one. The default memory is 1,024 MB (1 GB), so a start costs $0.00005.

Worked example: scraping 1,000 pages on the Gold plan costs 1,000 x $0.0035 = $3.50 plus the $0.00005 start event, with platform usage billed in addition. On the Free plan, 100 pages cost 100 x $0.007 = $0.70.

Each page row saved to the dataset counts as one result, including a row marked success: false. If you set a maximum spend for the run in Apify, the run stops when it is reached and the results saved so far are kept.

Is scraping Facebook pages free?

You can try it for free: the $5 monthly credit on the Free plan covers about 714 page results at $0.007 each ($5 / $0.007), before platform usage. Beyond that you pay per result, and the price falls on Bronze, Silver and Gold. See the pricing page.

Input

Facebook Pages Scraper needs only one input: at least one page in startUrls or pages. Everything else has a default. The default input below is valid as it is and returns data:

{
"startUrls": [
"https://www.facebook.com/MrBean",
"https://www.facebook.com/humansofnewyork"
],
"pages": [],
"language": "en-US",
"proxyConfiguration": {
"useApifyProxy": false
}
}

The full list of options is on the input schema page.

FieldTypeRequiredDefaultDescription
startUrlsarray of stringsYestwo example pagesFacebook page links. Also accepts facebook.com/<username>, profile.php?id=, facebook.com/people/, facebook.com/pages/, app share links (facebook.com/share/<code>/), fb.me short links and tab links such as /<page>/posts/.
pagesarray of stringsNoemptyExtra pages as usernames, numeric page IDs or full links. Merged with startUrls.
maxItemsintegerNo0Maximum number of pages to scrape. 0 means no limit. Range 0 to 100000.
languagestringNoen-USLanguage of category names, ad status, dates and other labels.
fetchAboutSubpagesbooleanNotrueAlso collect the About details: contact info, hours, price range, rating, creation date, ad status and owner.
includeAdLibrarybooleanNotrueAdd pageAdLibrary, pageAdLibraryUrl and ad_status.
showVerifiedBadgebooleanNotrueFill isVerified and verified. When off they stay empty.
normalizeNumbersbooleanNotrueReturn likes and followers as integers. When off they keep the display text.
deduplicatebooleanNotrueSkip a page that appears more than once across your lists.
proxyConfigurationobjectNo{"useApifyProxy": false}Optional proxy configuration. Leave the default unless pages repeatedly fail to load.
concurrencyintegerNo5Pages fetched at the same time. Range 1 to 20.
requestDelaynumberNo0.3Minimum pause in seconds between requests. Range 0 to 10.
maxRetriesintegerNo3How many times a failed request is retried. Range 1 to 10.
requestTimeoutSecsintegerNo45Seconds before a single request is abandoned. Range 5 to 180.

Pages and limits

  • ✅ Good: https://www.facebook.com/MrBean, humansofnewyork or 100044139564343 (a numeric page ID).
  • ✅ Good: a share link copied from the Facebook app, such as https://www.facebook.com/share/1GozcyE5pW/?mibextid=wwXlfr. It is followed to the page it points at.
  • ❌ Bad: a link to a single post, reel, video or photo (/share/r/…, /share/v/…, /reel/…, /watch/?v=…), or to a group or event. These do not name a page and are saved as a failed row with an error message that says so.
  • ❌ Bad: a link to another website, or text that is not a Facebook page. Such entries are saved as a failed row with an error message.
  • ✅ Good: maxItems set to 10 for a quick test of a long list.
  • ❌ Bad: expecting maxItems to cap spend. It limits how many pages are scraped; use the maximum spend setting in Apify to cap cost.

Warning: A higher concurrency finishes faster but makes failed pages more likely. If you see warnings in the log, lower concurrency or raise requestDelay.

Language

Use it as a Facebook page scraper in multiple languages: language changes the text Facebook shows, so category names, ad status wording and date labels in the output follow it. Numeric counters are still parsed into integers when normalizeNumbers is on.

Output

Results appear in the run's Output tab as they are scraped, and in the default dataset. Download them as JSON, CSV, Excel, XML or HTML, or read them through the API. The Output tab has these views: Overview, Contact and Location, Engagement and Stats, Business Info, Media, Social Links, Transparency and Ads, and Issues. When the run finishes, a combined JSON file with every row in input order is also saved to the key-value store under the key OUTPUT.

JSON example

This example continues the input above and lists every field name the Actor writes, with sample values. In a real row, fields the page does not publish are null or empty.

{
"facebookUrl": "https://www.facebook.com/example-page",
"url": "https://www.facebook.com/example-page",
"pageUrl": "https://www.facebook.com/example-page",
"pageId": "100000000000001",
"page_id": "100000000000001",
"facebookId": "100000000000001",
"userId": "100000000000001",
"adPageId": "100000000000002",
"delegate_page_id": "100000000000002",
"pageName": "example-page",
"name": "Example Page",
"title": "Example Page",
"type": "page",
"categories": [
"Local business",
"Coffee shop"
],
"category": "Local business",
"info": [
"12,345 likes",
"12,900 followers"
],
"intro": "Example intro text.",
"description": "Example intro text.",
"bio": "Example intro text.",
"likes": 12345,
"likesCount": 12345,
"likesDisplay": "12K",
"likesText": "12,345 likes",
"followers": 12900,
"followersCount": 12900,
"followersDisplay": "12K",
"followersText": "12,900 followers",
"followings": 10,
"followingCount": 10,
"followingDisplay": "10",
"talkingAboutCount": 210,
"checkins": 530,
"rating": "95% recommend (80 Reviews)",
"ratings": "95% recommend (80 Reviews)",
"ratingOverall": 4.8,
"ratingCount": 80,
"ratingPercentage": 95,
"ratingReviewCount": 80,
"address": "1 Example Street, Example City",
"addressUrl": "https://example.com/map",
"mapsAddress": "1 Example Street, Example City",
"phone": "+1 555 0100",
"phones": [
"+1 555 0100"
],
"email": "hello@example.com",
"emails": [
"hello@example.com"
],
"messenger": "https://example.com/messenger",
"website": "https://example.com",
"websites": [
"https://example.com"
],
"alternativeSocialMedia": "https://example.com/social",
"priceRange": "$$",
"price_range": "$$",
"priceRangeText": "Price range $$",
"priceRangeSymbol": "$$",
"services": "Example services",
"business_hours": "Mon-Fri 09:00-17:00",
"businessHours": "Mon-Fri 09:00-17:00",
"businessHoursRaw": "Mon-Fri 09:00-17:00",
"business_price": "$$",
"businessPrice": "$$",
"business_services": "Example services",
"businessServices": "Example services",
"profilePictureUrl": "https://example.com/profile.jpg",
"image": "https://example.com/profile.jpg",
"imageAlt": "Example Page profile picture",
"coverPhotoUrl": "https://example.com/cover.jpg",
"coverPhoto": "https://example.com/cover.jpg",
"cover_image": "https://example.com/cover.jpg",
"profilePhoto": "https://example.com/profile",
"profilePhotoUrl": "https://example.com/profile",
"isVerified": true,
"verified": true,
"status": "Active",
"confirmedOwnerLabel": "Example Company",
"confirmed_owner": "Example Company",
"isBusinessPageActive": false,
"creation_date": "January 1, 2015",
"pageCreatedYear": 2015,
"ad_status": "This Page is not currently running ads.",
"pageTransparency": {
"creation_date": "January 1, 2015",
"ad_status": "This Page is not currently running ads.",
"is_business_page_active": false,
"confirmed_owner": "Example Company",
"page_id": "100000000000002",
"admin_country_count": null
},
"instagram": [
{
"username": "example",
"url": "https://example.com/instagram"
}
],
"tiktok": [],
"socialLinks": {
"instagram": [
"https://example.com/instagram"
]
},
"linkedin": "https://example.com/linkedin",
"pinterest": null,
"telegram": null,
"twitter": "https://example.com/x",
"youtube": "https://example.com/youtube",
"whatsapp": null,
"threads": null,
"snapchat": null,
"pageAdLibrary": {
"id": "100000000000002",
"is_business_page_active": false,
"pamv_comms_data": null,
"url": "https://example.com/ad-library"
},
"pageAdLibraryUrl": "https://example.com/ad-library",
"additionalProperties": {
"messenger": "https://example.com/messenger",
"priceRange": "$$",
"address": "1 Example Street, Example City",
"category": "Local business"
},
"scrapedAt": "2026-01-01T12:00:00.000Z"
}

Notes and limitations

  • A page that cannot be loaded still produces a row with success set to false and a short error message. Use the Issues view to find them.
  • The run saves one row per page, not per post or review.
  • Likes, followers and ratings are only returned when the page shows them. Facebook no longer shows a likes count to signed-out visitors on most pages, so likes is often null while followers is filled.
  • Pages that need a login to view cannot be scraped. When Facebook shows the login form for the main page only, the Actor reads the page's About section instead and the row is still complete.
  • Use the Contact and Location view to find the email address of a Facebook business page, when the page lists one.

Tips and advanced usage

  • Test first. Set maxItems to 5 or 10, check the Overview view, then run the full list.
  • For faster runs on long lists, switch fetchAboutSubpages off if you only need names, likes, followers and photos. You then lose most contact and transparency fields.
  • To schedule Facebook page scraping and monitor competitors, save a Task with your page list and run it daily or weekly, then compare followers, likes and rating between datasets.
  • If many rows come back with success: false, run only those pages again later with a lower concurrency.
  • The default of 5 pages in parallel is a good starting point (allowed range 1 to 20). Lower it if pages fail.

Integrations and API

Can I use Facebook Pages Scraper as an API?

Yes. Start runs and read results with the Apify API or the official apify-client libraries for Node.js and Python. Open the API tab of the Actor for ready-made calls.

How to scrape Facebook pages with Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("data_minds/facebook-pages-scraper").call(run_input={
"startUrls": [
"https://www.facebook.com/MrBean",
"https://www.facebook.com/humansofnewyork",
],
"pages": [],
"language": "en-US",
"proxyConfiguration": {"useApifyProxy": False},
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["followers"], item["email"])

Can I integrate Facebook Pages Scraper with other apps?

Yes. Connect it to Make, Zapier, Google Sheets, Slack and other apps through Apify integrations, or trigger your own endpoint with webhooks. You can also run it on a schedule from Apify Console.

Can I use Facebook Pages Scraper with AI agents (MCP)?

Yes. Apify Actors can be used as tools by AI agents through the Apify MCP server. See the MCP tab of this Actor for the connection details.

Other Facebook and social media scrapers

ActorWhat it does
Facebook Ads Library ScraperScrapes public ads from the Meta Ad Library by keyword, page or link: ad copy, creatives, landing pages and run dates.
Facebook Event ScraperScrapes public Facebook events in bulk: dates, places, attendance, tickets and organizers.
Facebook Reels ScraperScrapes Facebook Reels from public pages, profiles or reel links: captions, play counts, reactions, comments and shares.
Instagram ScraperScrapes public Instagram profiles, posts, reels, comments and hashtags.
🔗 Facebook Page Contact Info ScraperScrape emails, phone numbers, websites, address, social links and follower counts from public Facebook pages.

FAQ

Collecting public data is permitted in many places, but the rules depend on your country, the data and how you use it. Personal data such as emails and phone numbers may fall under privacy laws. This is not legal advice. Read Is web scraping legal? and consult a lawyer for your case.

How does Facebook Pages Scraper work?

You supply public page links, usernames or page IDs, choose the options you want, and start the run. The Actor reads each public page, collects the fields it shows, and saves one row per page to the dataset while the run is still going. You then download or fetch the results.

Can I scrape Facebook pages without a Facebook account?

Yes. You do not provide a Facebook account, password or cookies. Facebook Pages Scraper returns what a visitor can see on a public page without logging in. Pages that require a login to view, such as restricted or private ones, are saved as failed rows with an error message instead of data.

Why scrape Facebook page data?

Teams extract emails and phone numbers from Facebook business pages to build local business lead lists, monitor competitors, shortlist influencers, enrich business directories and gather market research data. Pages publish contact details, hours, categories, follower counts and linked social profiles in one place, which is faster to collect in bulk than by copying each page by hand.

Why does a Facebook page have no email in the results?

A field stays empty when the page does not publish that detail. Many pages show no email or phone at all. Check that fetchAboutSubpages is on, because contact details come from the About details. If the page shows an email in your browser but the row is empty, rerun it and report it in the Issues tab.

Why did I get fewer results than I expected?

The most common reasons are duplicate entries removed by deduplicate, a maxItems limit, a maximum spend setting that stopped the run, or pages that failed. Failed pages are still saved as rows with success set to false and an error message, so filter the dataset on success first.

How to download Facebook page data to Excel or CSV?

Open the finished run, go to the Output or Storage tab, choose Export, and export Facebook page data to CSV or Excel (JSON is also available). You can pick a view such as Contact and Location to download only those columns. You can also fetch the same data through the API or send it to Google Sheets with an integration.

Facebook Pages Scraper is not working. What should I do?

First check the run log and the error field of the failed rows. Then try a lower concurrency or a higher requestDelay, and rerun the failed pages later. If the problem continues, open a ticket in the Issues tab with the run link and a sample page.

Support and feedback

Facebook Pages Scraper is an independent tool and is not affiliated with, endorsed by or sponsored by Meta or Facebook. You are responsible for using the data in line with the law and the terms of the platforms involved.