Facebook Pages Scraper - Business Info & Contacts avatar

Facebook Pages Scraper - Business Info & Contacts

Pricing

from $6.40 / 1,000 pages

Go to Apify Store
Facebook Pages Scraper - Business Info & Contacts

Facebook Pages Scraper - Business Info & Contacts

Export public Facebook Page names, categories, descriptions, follower text and published contact details with source URLs. No Facebook login or external API key.

Pricing

from $6.40 / 1,000 pages

Rating

0.0

(0)

Developer

Ben

Ben

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Facebook Pages Scraper: business information and public contacts

Turn public Facebook Page URLs into structured records with the page name, category, description, follower text, source links and published contact fields. The Actor reads page-owned metadata and the Page Intro section. Each contact includes its source URL and source section so you can trace where it was published.

No Facebook login, session cookie or separate data-provider API key is required. The default engine uses direct HTTP to retrieve public page data. It does not run a browser or call another paid scraping Actor. You can export the dataset as JSON, CSV or Excel and connect its API to your existing workflow.

Page information only: this Actor enriches known organization Page URLs; it does not collect Page posts, comments, group content or personal-profile data. Free-plan result events cost $8 per 1,000 Pages, plus the start event. A contact field is returned only when the Page exposes it.

Quick start

Start with a tested example for public Page contacts:

Open the example and choose Try for free to copy its input into your account. Check the input and set a maximum run charge before starting; Actor fees still follow the pricing below. When the run finishes, open the run's dataset and select the Overview view and download JSON for nested fields or CSV/Excel for a table.

Your goalInput to use
Research known organizationsSupply their main public Facebook Page URLs
Refresh a company directoryRepeat the same URL list and upsert by page_id

The real output example shows the record shape. The Python workflow saves your own export to a local JSON file with a $0.05 maximum Actor charge.

Page URL input

{
"pageUrls": [
"https://www.facebook.com/NASA/",
"https://www.facebook.com/BBCNews/",
"https://www.facebook.com/Microsoft/"
],
"maxResults": 3
}

Start with a few known Page URLs, inspect the output, and then increase the cap. The overview table contains the page name, category, follower text, emails, phones, websites and Facebook URL. JSON also contains the description, identity fields, contact provenance and the full collected Intro text.

These are examples of public organizational pages. Their fields can change, and source access can differ by region or route. A successful sample is evidence for that sample; it does not establish that every Facebook URL can be collected without restriction.

What is supported?

Provide main Page URLs such as https://www.facebook.com/NASA/. Mobile and web subdomain variants are normalized to www.facebook.com. Numeric Page/profile URLs using profile.php?id=... are also accepted when they resolve to a public Page. Tracking parameters on named Page URLs are removed before fetching.

The Actor identifies Facebook's public Page representation, including the newer representation that uses a profile ID linked to a delegated Page ID. It keeps those two IDs in separate fields. This avoids treating an arbitrary visitor or commenter as the business that owns the page.

Inputs for posts, groups, searches, Marketplace and login screens are outside this Actor's scope. Personal profiles are not a supported substitute for Page metadata. A missing or ambiguous Page record causes a failed run rather than a fabricated business record. Use the main Page URL when a copied share link contains several path segments.

Output fields

FieldDescription
page_idFacebook's delegated Page ID, returned as a string
profile_idPublic profile representation associated with that Page
name, urlPage name and canonical source URL
requested_urlNormalized URL supplied to the fetch
categoryPage category supplied by Facebook
descriptionPublic Page description, when present
followers_text, following_textDisplay text such as “28M followers”
verified_badgeWhether the page response exposes the visible verification badge
picture_urlPublic profile image URL where available
emails, phones, websitesContact values published in this Page's Intro records
addressIntro address text when explicitly identified by the source
contactsContact values with type, source URL and source section
intro_textsOther public text collected from the Page Intro
scraped_atUTC timestamp of extraction

Absent contact lists are empty arrays. Other unavailable fields are null. The Actor does not turn an absent website into a guessed domain, expand a rounded follower count into a supposedly exact number, or manufacture a phone number from a business name.

Example output

One complete record from a verified September 9, 2026 cloud run. Values and public media URLs can change or expire; this is a dated sample.

{
"page_id": "54971236771",
"profile_id": "100044561550831",
"name": "NASA - National Aeronautics and Space Administration",
"url": "https://www.facebook.com/NASA",
"requested_url": "https://www.facebook.com/NASA/",
"category": "Government organization",
"description": "Explore the universe and discover our home planet. \nThere's space for everybody. ✨",
"followers_text": "28M followers",
"following_text": "52 following",
"verified_badge": true,
"picture_url": "https://scontent-iad3-2.xx.fbcdn.net/v/t39.30808-1/243095782_416661036495945_3843362260429099279_n.png?stp=dst-png&cstp=mx800x800&ctp=s480x480&_nc_cat=1&ccb=1-7&_nc_sid=2d3e12&_nc_ohc=EW2je1zCzQ4Q7kNvwEvXg6J&_nc_oc=Adr0V-HkuEvMqa6R6YJmdauiucOXwqMP8F0tMsDXd7PYDaWtG7emeJupB-rDDEOw_2c&_nc_zt=24&_nc_ht=scontent-iad3-2.xx&_nc_gid=JCyj3475jdgXawyXTzusYA&_nc_ss=7b289&oh=00_AQLZ4Yx5XbpF1DA39HNiaMlzrQaoH_d_wJAEtbGQFTYa_w&oe=6AA78455",
"emails": [
"public-inquiries@hq.nasa.gov"
],
"phones": [],
"websites": [
"https://www.nasa.gov/",
"https://www.nasa.gov/nasa-app/"
],
"address": null,
"contacts": [
{
"type": "email",
"value": "public-inquiries@hq.nasa.gov",
"source_url": "https://www.facebook.com/NASA",
"source_section": "Page Intro"
},
{
"type": "website",
"value": "https://www.nasa.gov/",
"source_url": "https://www.facebook.com/NASA",
"source_section": "Page Intro"
},
{
"type": "website",
"value": "https://www.nasa.gov/nasa-app/",
"source_url": "https://www.facebook.com/NASA",
"source_section": "Page Intro"
}
],
"intro_texts": [
"NATIONAL AERONAUTICS AND SPACE ADMINISTRATION",
"Page · Government organization",
"nasa.gov",
"nasa.gov/nasa-app",
"public-inquiries@hq.nasa.gov"
],
"scraped_at": "2026-09-09T17:54:36.079280+00:00"
}

Contact provenance and quality

Contact extraction is limited to the target Page's own Intro records. Email-like strings in visitor comments or unrelated embedded entities are not treated as the Page's contact. The parser associates the Intro block with the same profile identity as the Page header before collecting values.

Website links sometimes use Facebook's outgoing redirect URL. The Actor unwraps the public destination and preserves the actual website link instead of returning Facebook's redirect wrapper. It does not visit those websites, scrape their contact pages, or guess additional email addresses.

Published does not mean deliverable. This Actor performs no SMTP mailbox verification and makes no claim that a listed phone is current. verified_badge reflects a Facebook display field, not independent business verification by this tool. Retain source URLs and check important details before relying on them.

Limits and duplicate handling

pageUrls accepts up to 100 URLs and maxResults caps distinct returned Pages from 1 to 100. Exact normalized URLs are deduplicated before fetching; repeated Page IDs are deduplicated before export. Several aliases can therefore result in fewer rows than input URLs.

Requests run sequentially with a short delay. The default run has 512 MB of memory and a five-minute timeout. Large batches or slow source responses can require a longer timeout. Start with a small run and an explicit maximum charge to understand your expected output and cost.

If an HTTP-200 response temporarily lacks a public Page record, the Actor retries the same URL twice with a delay. One persistently inaccessible input causes a failed run. Earlier saved rows remain available in its dataset, so inspect that dataset before rerunning a mixed batch. A failed run should not be interpreted as a complete export. The Actor does not report a private or blocked Page as an empty but successfully scraped business.

Pricing

Free-plan pricing is $0.008 per exported Page, or $8 per 1,000 Pages, plus a $0.00005 start event at 512 MB. Progressive plan discounts apply. Published contact fields are included in the Page price; there is no separate email, phone or website charge.

At the Free price, three returned Pages cost $0.02405 at 512 MB. Ten returned Pages cost $0.08005. A run that returns no Pages has no dataset-result charge, although the start charge remains. These calculations illustrate the event formula, not guaranteed output. Larger memory settings incur one start event per GB, with a minimum of one.

The Actor stops exporting when Apify reports that the maximum result charge has been reached. No paid external data service is required for the default engine. Optional proxy usage depends on the configuration and allowances of your Apify account; inspect the current pricing panel before a large batch.

Scheduling and integrations

Save tested input as an Apify Task for repeated snapshots. Schedule that Task at a sensible interval and use the dataset API or an integration to write records to a spreadsheet, database or CRM. page_id is the preferred destination key when comparing rows across runs. Preserve scraped_at if you need a history of observations.

This version returns the current snapshot on each run. It does not maintain a change-only baseline, collect posts or claim an exhaustive history. Destination-side upserts by page_id prevent duplicate business rows when importing another snapshot.

Python API workflow

Copy the first input JSON above into input.json and save this code as export.py. In a Python virtual environment, install apify-client with python -m pip install apify-client. Set APIFY_TOKEN to your own Apify token in your environment, then run python export.py. Keep the token out of source files and shared screenshots.

import json
import os
from decimal import Decimal
from pathlib import Path
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("benthepythondev/facebook-pages-scraper").call(
run_input=json.loads(Path("input.json").read_text(encoding="utf-8")),
max_total_charge_usd=Decimal("0.05"),
memory_mbytes=512,
timeout_secs=300,
)
if not run or run["status"] != "SUCCEEDED":
raise RuntimeError(f"Inspect the run before retrying: {run and run['id']}")
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
Path("facebook-pages.json").write_text(
json.dumps(rows, ensure_ascii=False, indent=2), encoding="utf-8"
)
print(f"Saved {len(rows)} records from run {run['id']}")

This starts a run in your account, waits for completion and saves facebook-pages.json. The $0.05 limit bounds Actor charges; it is not a promised bill or result count. Check the printed run ID and server log if the result is shorter than expected. If your client loses its connection, inspect the existing run in Console before starting another one. See the official Python client for other run options.

Upsert business rows by page_id, keeping profile_id separate. Retain each contact's source_url and source_section in your CRM so a reviewer can trace it. Empty contact arrays are valid. This workflow exports Page information and does not send messages or collect visitor contacts.

For recurring runs without writing a scheduler, copy a tested public Task into your account and attach an Apify Schedule to that copy. Keep its maximum-charge limit and avoid overlapping runs when using monitor state. The Python example above is also suitable for an existing scheduler; run it from the directory containing input.json and provide the token through that scheduler's secret settings.

Support

If an expected public Page fails, open an Actor issue with its URL, the run URL and the expected fields. Do not include login cookies, passwords or private account data. Source layouts and access rules can change; clear examples help reproduce the problem. An honest review after a useful export helps other users assess this Actor.

For businesses discovered by keyword and city, see Google Maps Business Scraper. For contacts published on business websites, see Website Contact Extractor. Those products have separate input contracts and pricing.

Keywords: Facebook Pages scraper, Facebook business data, public Page contacts, Facebook Page export, business contact provenance, Facebook pages CSV, Facebook page metadata API.