# Facebook Pages Scraper — Emails, Phones & Contact Details (`zhorex/facebook-page-scraper`) Actor

Scrape Facebook Pages without login: name, category, followers, exact likes, public email, phone, address, website, Instagram, rating and verified badge. One row per Page, no cookies, pay only for Pages found.

- **URL**: https://apify.com/zhorex/facebook-page-scraper.md
- **Developed by:** [Sami](https://apify.com/zhorex) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 facebook page scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Facebook Pages Scraper — Emails, Phones & Contact Details

Paste a list of Facebook Pages and get one clean row per Page: name, category, followers, exact likes, public email and phone, address, website, Instagram, opening status, services, price range, rating and verified badge.

No Facebook account, no cookies, no browser. You pay per Page returned. Pages that don't exist or aren't public come back as error rows and cost nothing.

### What it's for

A Facebook Page contact info scraper and Facebook email scraper in one: give it Page links, get back the business details each Page shows publicly.

- **Lead lists for local businesses.** Turn a list of restaurant, clinic, gym or shop Pages into emails, phone numbers, addresses and websites.
- **Enriching a CRM.** You already have the Facebook links. Add follower counts, category, rating and contact details to each account.
- **Reputation and competitor tracking.** Compare "% recommend", review counts, likes and "talking about this" across a set of Pages, and re-run on a schedule to watch them move.
- **Checking a Page.** Is it verified? Who does Facebook say is responsible for it? Is the business open?

### Input

One Page per line. Any of these work:

```
https://www.facebook.com/katzsdeli
katzsdeli
https://m.facebook.com/katzsdeli/about/
100064806517961
```

Links to a Page's About, Reviews or Photos tab are reduced to the Page itself, and duplicates are removed before anything is fetched. Groups, events, posts and Marketplace links are not Pages: they are reported as error rows and not charged.

The default proxy (Apify datacenter) is all this needs.

### Output

A real row from Katz's Delicatessen, scraped from Apify's datacenter:

```json
{
  "inputUrl": "https://www.facebook.com/katzsdeli",
  "pageName": "Katz's Delicatessen",
  "category": "Deli",
  "profileType": "Page",
  "followers": 929000,
  "followersText": "929K followers",
  "likes": 929322,
  "talkingAbout": 50440,
  "wereHere": 529146,
  "email": "cs@katzsdelicatessen.com",
  "phone": "(212) 254-2246",
  "address": "205 E Houston St, New York, NY, United States, New York",
  "websites": ["http://katzsdelicatessen.com/"],
  "otherAccounts": ["https://www.instagram.com/katzsdeli"],
  "openStatus": "Open now",
  "services": ["Dine-in", "Outdoor seating", "In-store pickup"],
  "priceRange": "$$",
  "ratingRecommendPct": 98,
  "ratingCount": 52526,
  "ratingText": "98% recommend (52,526 reviews)",
  "verified": false,
  "confirmedOwner": "KATZ DELICATESSEN OF HOUSTON STREET INC",
  "intro": "New York City's most iconic deli.",
  "facebookUrl": "https://www.facebook.com/katzsdeli",
  "facebookId": "100064806517961",
  "pageId": "89033874836",
  "username": "katzsdeli",
  "profilePictureUrl": "https://scontent...",
  "coverPhotoUrl": "https://scontent...",
  "scrapedAt": "2026-09-14T18:41:10Z"
}
```

#### Field notes, so nothing surprises you

| Field | What to expect |
|---|---|
| `likes`, `talkingAbout`, `wereHere` | Exact numbers, as Facebook publishes them. `wereHere` only exists for places. |
| `followers` | Facebook only shows this rounded ("929K"), so it is rounded here too. Use `likes` when you need an exact count. |
| `email`, `phone`, `address` | Only when the Page shows them publicly. Local businesses usually do; big brands usually don't. On 18 Pages tested (restaurants, bakeries, brands, a university, a government agency), 7 had a public email and 4 a public phone. Empty means the Page doesn't publish it, not that it failed. |
| `phone` | Written the way Facebook shows it to the visitor's country, so the format can vary between runs. |
| `ratingRecommendPct`, `ratingCount` | Only for Pages that have reviews turned on. |
| `openStatus` | Status at the moment of the scrape ("Open now", "Closed now"). |
| `about`, `latitude`, `longitude` | Only on older-style Pages, which show a description and coordinates instead of an Intro box. |
| `profilePictureUrl`, `coverPhotoUrl` | Facebook's CDN links expire after a few days. Download the images if you need to keep them. |
| `error` | Present only on rows that failed. Those rows were not charged. |

#### Not included

- Posts, comments, reactions and review texts.
- Personal details from personal profiles. For public figures, work, education, city, hometown and relationship are deliberately dropped: this Actor collects business information, not information about people's private lives.

### Pricing

Pay per event: **$10 per 1,000 Pages** ($0.01 per Page). You are only charged for Pages that come back with data. The three example Pages in the input cost $0.03.

Not charged: not-found or private Pages, login walls, network failures and inputs that aren't Page addresses. Each one comes back as a row with an `error` field so you can match it to your list.

**Charge limit.** If you set a maximum total charge for the run, the Actor stops fetching when the limit is reached. It won't hand over Pages it can't bill, and the run's status tells you how many Pages were left for the next run.

### FAQ

**Do I need a Facebook account or cookies?** No. It reads the public version of each Page that Facebook shows to logged-out visitors.

**Why did a Page come back as "not found or not public"?** Facebook had no public Page at that address. The username may be misspelled, or the Page may be deleted, age- or country-restricted, or a personal profile that isn't public. Open the link in a private browser window to check. You weren't charged.

**How fast is it?** About 20 Pages in 30 seconds with the default settings. Raise "Pages fetched in parallel" for large lists.

**Can I schedule it?** Yes. Save your list as a Task and add an Apify Schedule to track followers, likes and ratings over time.

**Is this legal?** It collects information that businesses publish openly on their Facebook Pages, the same data anyone sees without logging in. You are responsible for how you use it. If you contact people with it, follow the laws that apply to you (for example GDPR in the EU and CAN-SPAM in the US).

### Support

Found a Page that should work but doesn't? Open an Issue on this Actor's page with the link and I'll look at it.

# Actor input Schema

## `startUrls` (type: `array`):

One Facebook Page per line. A full URL (https://www.facebook.com/katzsdeli), a username (katzsdeli) or a numeric id all work, and links to a Page's About, Reviews or Photos tab are reduced to the Page itself. Each Page is one row and one charge; addresses that are not public Pages come back as error rows and are never charged.

## `maxConcurrency` (type: `integer`):

How many Pages are requested at the same time. Each request leaves from a different proxy IP. Higher is faster; lower is gentler if you see login-wall error rows.

## `proxyConfiguration` (type: `object`):

Apify's datacenter proxy is enough: Facebook serves public Pages to it without a login. Residential proxy works too but costs more per Page and is not needed.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.facebook.com/katzsdeli",
    "https://www.facebook.com/tartinebakerysf",
    "https://www.facebook.com/RussAndDaughters"
  ],
  "maxConcurrency": 4,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

Dataset with all rows this run produced

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.facebook.com/katzsdeli",
        "https://www.facebook.com/tartinebakerysf",
        "https://www.facebook.com/RussAndDaughters"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("zhorex/facebook-page-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [
        "https://www.facebook.com/katzsdeli",
        "https://www.facebook.com/tartinebakerysf",
        "https://www.facebook.com/RussAndDaughters",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("zhorex/facebook-page-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    "https://www.facebook.com/katzsdeli",
    "https://www.facebook.com/tartinebakerysf",
    "https://www.facebook.com/RussAndDaughters"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call zhorex/facebook-page-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zhorex/facebook-page-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qAxWlHdKviJPCnAyb/builds/2O5G1vk7zxZobJwGJ/openapi.json
