# Facebook Pages Scraper - Emails, Phones & Followers (`eiv/facebook-pages-scraper`) Actor

Scrape Facebook Pages by link, username or ID: email, phone, website, address with map coordinates, exact followers, category, rating, opening status, price range and social links. No login or cookies. Add-ons: creation date, whether the Page runs ads, About text.

- **URL**: https://apify.com/eiv/facebook-pages-scraper.md
- **Developed by:** [Eimantas V](https://apify.com/eiv) (community)
- **Features:** Limited permissions
- **Stats:** 1 total users, 1 monthly users, 84.2% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.75 / 1,000 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Facebook Pages Scraper** extracts business contact details and Page data from public **Facebook Pages**: email, phone, website, full address with map coordinates, exact follower counts, category, rating, opening status, price range, services and the Page's Instagram, TikTok, YouTube, X and LinkedIn accounts. Paste Page links, usernames or Page IDs and get one clean row per Page. No login, no cookies, no browser, from **$3.75 per 1,000 Pages**.

```
name           The Copper Kettle Restaurant          followers   3311 (exact)
category       Pizza place                           rating      94% recommend (201 reviews)
email          copperkettle.events@gmail.com         price       $$
phone          +1 306-525-3545                       hours       Closed now
website        http://www.thecopperkettle.online/    instagram   https://www.instagram.com/copperkettleyqr
address        1953 Scarth Street, Regina, SK, Canada, S4P 2H1   (50.4477795, -104.610269968)
add-ons        created 2014-10-29 · currently running ads · full About text
```

**Benchmark on Apify: 80 brand Pages in 32 seconds, a list of 12 restaurants and creators in 18 seconds, about one request per Page.**

### What does Facebook Pages Scraper do?

It reads the public information Facebook shows on a Page's About section to anyone who is not logged in, and turns it into a spreadsheet-ready row: who the business is, how to contact it, where it is, how popular it is and where else it is active. It is built for lead generation, local-business research, influencer and brand lists, and CRM enrichment.

- **Every Page link works.** facebook.com/name, profile.php?id= links, /p/ links, share links, @usernames and numeric Page IDs. Two spellings of the same Page are returned and charged once.
- **Lead-ready contacts.** Every email, phone and website the Page lists, the street address with postal code and map coordinates, and linked social accounts in their own columns.
- **Exact numbers.** Followers to the last digit (not "3.3K"), "talking about this", check-ins, following, and the rating as % recommend plus the review count.
- **Optional add-ons, charged only when they return data.** Page transparency: the date the Page was created, whether it is running ads right now, and its confirmed owner. About text: the Page's full description.
- **Only pay for results.** Pages that are missing, hidden from logged-out visitors or blocked return an error row and are never charged.
- **Built for automation.** Run it on a schedule, call it from the API, or connect it to Make, Zapier, n8n, Google Sheets or an AI agent through Apify's MCP server.

### Why it is fast and cheap

There is no browser. The Actor requests the same server-rendered About page Facebook sends any logged-out visitor and stops downloading as soon as the Page's fields have arrived: about 100 KB per Page instead of the 10-20 MB the full page weighs. It starts on free addresses and switches to residential IPs only when Facebook asks for that, so you pay for Pages, not for proxies.

### What data can you extract from Facebook Pages?

| Field | Example | What it is |
|---|---|---|
| `name` | The Copper Kettle Restaurant | The Page's name |
| `category`, `categories` | Pizza place | The Page's categories |
| `email`, `emails` | copperkettle.events@gmail.com | Every email address the Page lists |
| `phone`, `phones` | +1 306-525-3545 | Every phone number the Page lists |
| `website`, `websites` | http://www.thecopperkettle.online/ | Real website addresses (not Facebook's redirect links) |
| `address` | 1953 Scarth Street, Regina, SK, Canada, S4P 2H1 | Street address, usually with the postal code |
| `latitude`, `longitude` | 50.4477795, -104.610269968 | Map pin of the address |
| `followers` | 3311 | Exact follower count |
| `talkingAbout`, `checkins`, `following` | 56, 1166, 433 | "Talking about this", "were here", and Pages followed |
| `rating`, `ratingCount` | 94, 201 | % of reviewers who recommend it, and how many reviews |
| `priceRange`, `services` | $$, \["Outdoor seating"] | Price range and services (dine-in, delivery...) |
| `hoursStatus`, `openNow` | Closed now, false | Opening status when the Page was read |
| `instagramUrl`, `tiktokUrl`, `youtubeUrl`, `xUrl`, `linkedinUrl` | https://www.instagram.com/copperkettleyqr | Linked accounts; `socialLinks` lists all of them with handles |
| `verified`, `intro` | false, "Longstanding local restaurant..." | Verified badge and the short intro |
| `pageId`, `profileId`, `username`, `pageUrl` | 851606664870954 | Ids and the canonical link |
| `profilePictureUrl`, `coverPhotoUrl` | https://scontent... | Profile and cover photos |
| `adLibraryUrl` | https://www.facebook.com/ads/library/?...view_all_page_id=851606664870954 | The Page's ads in Meta's Ad Library |
| `createdAt`, `runningAds`, `adStatus`, `confirmedOwner` | 2014-10-29, true | **Page transparency add-on** |
| `about` | A downtown landmark housed in a heritage building... | **About text add-on**: the full description |
| `otherFields` | business_service_area: Portland | Any other About field the Page shows |

### How to scrape Facebook Pages

1. Click **Try for free** and paste Page links, usernames or Page IDs into **Facebook Pages**, one per line.
2. Turn on **Page transparency** and **About text** if you need them, and set **Max Pages** (your cost cap).
3. Click **Start**. A list of 100 Pages usually takes under a minute.
4. Open the **Output** tab (views: Overview, Contacts, Audience & business, Ads & About), or download the results as JSON, CSV, Excel or HTML.

### How much does it cost to scrape Facebook Pages?

You pay per Page returned, and the price drops on higher Apify plans. Add-ons are charged per Page only when they returned data.

| Apify plan | Per 1,000 Pages | Page transparency add-on | About text add-on |
|---|---|---|---|
| Free | $5.50 | $5.00 | $6.50 |
| Starter | $4.50 | $4.00 | $5.50 |
| Scale | $4.00 | $3.50 | $4.75 |
| Business | $3.75 | $3.25 | $4.50 |

- 1,000 restaurant Pages with contacts on Starter: **$4.50**. With Page transparency (creation date, running ads): **$8.50**.
- 10,000 Pages on Business: **$37.50**.
- A run also costs **$0.00005** per GB of memory to start. A Page that fails, or names a Page already returned, costs nothing more.
- The Free plan's $5 monthly credit covers about **900 Pages**.

### Input

```json
{
    "targets": [
        "https://www.facebook.com/oysterbarny",
        "nasaearth",
        "https://www.facebook.com/profile.php?id=100067499490396"
    ],
    "includeTransparency": true,
    "includeAbout": false,
    "maxItems": 1000
}
```

| Field | Default | Notes |
|---|---|---|
| Facebook Pages | 2 example Pages | Page links, usernames or numeric Page IDs, one per line. Public profiles of people work too |
| Start URLs | none | The same, as a URL list from another Actor |
| Page transparency | off | Creation date, running ads, confirmed owner: one more request per Page |
| About text | off | The full About description: one more request per Page |
| Max Pages | 1,000 | Total across the run: your cost cap |
| Concurrency, timeout, retries | 8, 20 s, 1 | Tuned defaults; the Actor picks its own addresses, so there are no proxy settings |

### Output

Each Page is one row in the dataset. The **Overview** view shows the key columns; every export includes all fields.

```json
{
    "recordType": "page",
    "input": "https://www.facebook.com/copperkettleyqr",
    "name": "The Copper Kettle Restaurant",
    "pageUrl": "https://www.facebook.com/copperkettleyqr",
    "username": "copperkettleyqr",
    "pageId": "851606664870954",
    "profileId": "100064027242849",
    "profileType": "PAGE",
    "category": "Pizza place",
    "categories": ["Pizza place"],
    "intro": "Longstanding local restaurant. Mediterranean specialties, signature gourmet pizzas (Best of YQR for",
    "followers": 3311,
    "following": 433,
    "talkingAbout": 56,
    "checkins": 1166,
    "verified": false,
    "email": "copperkettle.events@gmail.com",
    "emails": ["copperkettle.events@gmail.com"],
    "phone": "+1 306-525-3545",
    "phones": ["+1 306-525-3545"],
    "website": "http://www.thecopperkettle.online/",
    "websites": ["http://www.thecopperkettle.online/"],
    "address": "1953 Scarth Street, Regina, SK, Canada, S4P 2H1",
    "latitude": 50.4477795,
    "longitude": -104.610269968,
    "rating": 94,
    "ratingCount": 201,
    "ratingText": "94% recommend (201 reviews)",
    "priceRange": "$$",
    "services": ["Outdoor seating"],
    "hoursStatus": "Closed now",
    "openNow": false,
    "instagramUrl": "https://www.instagram.com/copperkettleyqr",
    "tiktokUrl": null,
    "xUrl": null,
    "youtubeUrl": null,
    "linkedinUrl": null,
    "socialLinks": [{ "network": "instagram", "url": "https://www.instagram.com/copperkettleyqr", "handle": "copperkettleyqr" }],
    "profilePictureUrl": "https://scontent.fplq1-2.fna.fbcdn.net/v/t39.30808-1/...",
    "coverPhotoUrl": "https://scontent.fplq1-2.fna.fbcdn.net/v/t39.30808-6/...",
    "adLibraryUrl": "https://www.facebook.com/ads/library/?active_status=all&ad_type=all&country=ALL&view_all_page_id=851606664870954",
    "transparencyIncluded": true,
    "createdAt": "2014-10-29",
    "adStatus": "This Page is currently running ads.",
    "runningAds": true,
    "confirmedOwner": null,
    "aboutIncluded": true,
    "about": "A downtown landmark housed in a heritage building designed circa 1920s with floor to ceiling windows capturing beautiful views of Victoria Park. Family owned by the Gardikiotis' for 57 years...",
    "otherFields": [],
    "scrapedAt": "2026-10-20T07:22:40.021Z"
}
```

A Page that cannot be read becomes a row with `"recordType": "error"` and an `errorCode` instead of failing the whole run:

| `errorCode` | Meaning |
|---|---|
| `NOT_AVAILABLE` | Facebook shows the Page only to signed-in users, or it does not exist. Pages limited by age or country (alcohol brands, for example) are hidden from logged-out visitors |
| `NOT_FOUND` | No Page at that link or id |
| `NOT_A_PAGE` | A share link that opens a post, video or group |
| `DUPLICATE` | Another input in the same run named the same Page; it was returned once |
| `RATE_LIMITED` | Facebook refused every address the run tried for this Page; run it again later |
| `PARSE_FAILED` | Facebook returned a page the Actor could not read; please report it |

Error rows are never charged.

### Tips and limits

- **Paste links or usernames, not names.** Facebook's search needs a login, so "Joe's Pizza Austin" cannot be looked up. To find the Pages of a list of businesses, run [Google Maps Scraper](https://apify.com/eiv/google-maps-scraper) or [Website Tech Stack & Lead Enrichment Scraper](https://apify.com/eiv/website-intelligence-scraper) first: they return the Facebook links businesses publish.
- **What logged-out Facebook does not show:** likes counts, the full weekly opening hours (only "Open now" / "Closed now"), reviews, posts and photo lists. For a Page's posts, use [Facebook Page Monitor](https://apify.com/eiv/facebook-page-monitor).
- **Long intros are shortened by Facebook** to about 80 characters with "..."; turn on **About text** for the full description.
- **Follower counts are exact** for almost every Page. A few celebrity Pages publish only a rounded figure (84M), which is returned as 84000000.
- **Photo links expire** after a few weeks (Facebook signs them). Download the images if you keep them.
- **Hit your spending limit?** The run stops cleanly at your maximum cost per run and keeps everything it collected. Raise the limit in the run options to get more.

### FAQ

#### Is it legal to scrape Facebook Pages?

This Actor collects only data that Facebook shows publicly to logged-out visitors, mostly business contact details that Pages publish to be contacted. Results can still contain personal data (a public figure's profile, an employee's work email), which laws such as the GDPR protect. Scrape personal data only for a legitimate purpose, and ask a lawyer if you are unsure. Facebook is a trademark of Meta Platforms; this Actor is not affiliated with or endorsed by Meta.

#### Do I need a Facebook account, cookies or an API key?

No. Nothing is logged in, so no account can be banned, and there are no cookies to renew.

#### Can I use it through the API or with Make, Zapier and n8n?

Yes. Every run can be started through the [Apify API](https://docs.apify.com/api/v2) and returns the dataset as JSON, CSV or Excel. Schedules, webhooks and integrations for Make, Zapier, n8n and Google Sheets are on the **Integrations** tab.

#### Can AI agents use it?

Yes. Agents connected to [Apify's MCP server](https://mcp.apify.com) can find and run this Actor as a tool, with the same per-Page pricing.

#### Why did I get fewer results than I asked for?

Some Pages are hidden from logged-out visitors or do not exist (their error rows say which), the run reached your maximum cost per run, or it reached its timeout. The log says which, and nothing collected before that is lost.

### Related scrapers

- [Facebook Page Monitor](https://apify.com/eiv/facebook-page-monitor): the posts these Pages publish, with only new posts on scheduled runs.
- [Meta Ads Library Scraper](https://apify.com/eiv/meta-ads-library-scraper): the ads behind `runningAds`, with copy, dates and reach.
- [Google Maps Scraper](https://apify.com/eiv/google-maps-scraper): find local businesses by keyword and city, with their websites.
- [Instagram Profile Scraper](https://apify.com/eiv/instagram-profile-scraper): followers and posts of the Instagram accounts these Pages link.

### Support

Missing a field, or found a Page that does not work? Open an issue on the **Issues** tab with the input you used, and it will be looked at quickly.

# Actor input Schema

## `targets` (type: `array`):

One Page per line: a link (https://www.facebook.com/nasaearth, profile.php?id=..., /p/... and share links), a username (nasaearth) or a numeric Page ID. Public profiles of people work too. Groups, posts, events and plain names with spaces are not Pages and are skipped with a warning.

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

The same Pages in the URL-list shape other Actors output, so a previous Actor's results (a list of Facebook links found on websites, for example) can be fed straight in. Use this or the field above.

## `includeTransparency` (type: `boolean`):

Add-on: also read each Page's transparency section: the date it was created, whether it is currently running ads, and its confirmed owner. One more request per Page, charged as its own event and only for Pages where it was read.

## `includeAbout` (type: `boolean`):

Add-on: also read each Page's full About description (the long text, not the short intro). One more request per Page, charged as its own event and only for Pages that have an About text.

## `maxItems` (type: `integer`):

Stop after this many Pages in total. You pay per Page, so this is also your cost cap for the run.

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

How many Pages are read at the same time.

## `requestTimeoutSecs` (type: `integer`):

How long to wait for one response before trying another address.

## `maxRetries` (type: `integer`):

Extra tries on the same address after a dropped connection. Refused addresses are always replaced by new ones, whatever this says.

## Actor input object example

```json
{
  "targets": [
    "https://www.facebook.com/oysterbarny",
    "https://www.facebook.com/nasaearth"
  ],
  "includeTransparency": false,
  "includeAbout": false,
  "maxItems": 1000,
  "maxConcurrency": 8,
  "requestTimeoutSecs": 20,
  "maxRetries": 1
}
```

# Actor output Schema

## `results` (type: `string`):

One row per Page (recordType "page"), plus one uncharged row per input that could not be read (recordType "error").

## `contacts` (type: `string`):

The same rows with every email, phone, website, map coordinates and social account.

## `summary` (type: `string`):

Totals for the run: inputs, Pages, add-ons, failures, why the run stopped, requests and which addresses answered.

# 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 = {
    "targets": [
        "https://www.facebook.com/oysterbarny",
        "https://www.facebook.com/nasaearth"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("eiv/facebook-pages-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 = { "targets": [
        "https://www.facebook.com/oysterbarny",
        "https://www.facebook.com/nasaearth",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("eiv/facebook-pages-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 '{
  "targets": [
    "https://www.facebook.com/oysterbarny",
    "https://www.facebook.com/nasaearth"
  ]
}' |
apify call eiv/facebook-pages-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,eiv/facebook-pages-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/12WRhAxdMKC65sSRt/builds/nFYenVTFAejvctlCm/openapi.json
