# Facebook Page Contact Info Scraper (`data_minds/facebook-page-contact-info-scraper`) Actor

Scrape emails, phone numbers, websites, address, social links and follower counts from public Facebook pages with no login or cookies. Also finds emails on the page website. Bulk input, auto proxy fallback. Export JSON, CSV or Excel for lead generation.

- **URL**: https://apify.com/data_minds/facebook-page-contact-info-scraper.md
- **Developed by:** [Data Minds](https://apify.com/data_minds) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

### What is Facebook Page Contact Info Scraper?

**Facebook Page Contact Info Scraper** turns a list of public Facebook page links or usernames into a clean contact list: emails, phone numbers, websites, address, social links and follower counts. Paste your pages, start the run and download JSON, CSV or Excel. On the Free plan a result costs $0.005 (about $5 per 1,000 pages), and Gold drops to $0.0035.

Use it for:

- **Facebook lead generation:** turn lists of business pages into contacts with email and phone.
- **Business contact lists:** collect website, address and category for many pages in one run.
- **Local business outreach:** keep only pages that show an email or a phone number.
- **CRM enrichment:** add follower counts, social links and page IDs to records you already hold.
- **Competitor and partner research:** compare categories, followers, ratings and whether pages run ads.

Run it from the Apify Console, or through the API, schedules and integrations that every Apify Actor supports. Export formats include JSON, CSV, Excel, XML and HTML.

#### What can Facebook Page Contact Info Scraper do?

- 📇 Read many pages in one run from links, usernames or numeric page IDs.
- 📧 Return the first email plus every email found, with its source.
- 📞 Return the first phone number plus every number found, with its source.
- 🌍 Optionally look on the page's own website for contacts that Facebook does not show.
- 🛡 Optionally add page transparency: page ID, creation date, ads status and business owner.
- 🎯 Keep only pages that have an email, a phone number, or either.
- 🗂 Save results to separate tables for contacts, social links, transparency and errors.

***

### What data can Facebook Page Contact Info Scraper extract?

| Data | Fields |
|---|---|
| 🔗 Page | `url`, `input`, `name`, `username`, `page_id`, `profile_id`, `verified`, `profile_picture` |
| 🏷 Category and intro | `category`, `categories`, `bio`, `price_range` |
| 👥 Audience | `followers`, `following`, `talking_about`, `check_ins` |
| ⭐ Reputation | `rating_percent_recommend`, `review_count` |
| 📧 Email | `email`, `emails`, `email_source` |
| 📞 Phone | `phone`, `phones`, `phone_source` |
| 🌍 Website and address | `website`, `websites`, `address` |
| 🔗 Social links | `social_links` (one entry per network) |
| 🛡 Transparency | `creation_date`, `ads_running`, `business_owner` |
| 🧾 Run info | `scraped_at`, `status`, `error` |

> **Note:** Fields are `null` when a page does not show them. `page_id`, `creation_date`, `ads_running` and `business_owner` need **Page transparency** switched on. `status` is `ok`, `partial`, `error`, `invalid_input` or `not_found`; `error` explains what was missing.

#### What data can't it extract?

It reads public page details only. It does not collect posts, comments, reviews or private profiles, and it cannot return an email or phone number that a page does not publish.

***

### How to scrape Facebook page contacts

1. [Create a free Apify account](https://console.apify.com/sign-up) or log in.
2. Open the [Actor page on Apify](https://apify.com/data_minds/facebook-page-contact-info-scraper) on Apify.
3. Add your pages to **Facebook pages** (`urls`): links, usernames or numeric page IDs, one per line.
4. Choose whether to include **Page transparency** and **Contacts from the page's website**.
5. Set **Keep only pages with** if you want only pages that show an email or a phone number.
6. Click **Start** and watch pages appear in the dataset as they are read.
7. Download the results as JSON, CSV or Excel, or open the contacts table.

***

### How much does it cost to scrape Facebook page contacts?

This Actor uses pay-per-event pricing: you pay per saved page, and platform usage is billed in addition.

| Plan | Per result | Per 1,000 results |
|---|---|---|
| Free | $0.005 | $5.00 |
| Bronze | $0.0045 | $4.50 |
| Silver | $0.004 | $4.00 |
| Gold | $0.0035 | $3.50 |

Each run also has a start event of $0.00005 per GB of memory, minimum one. The default memory is 1024 MB, so one start event costs $0.00005.

Worked example on the Gold plan: 500 saved pages cost 500 x $0.0035 = $1.75, plus the $0.00005 start event and platform usage. Pages that cannot be read, and pages removed by your contact filter, are not charged as results.

#### Is scraping Facebook free?

You can try it without paying. The $5 monthly credit on the Free plan covers about 1,000 results at $0.005, before platform usage. See the [pricing tab](https://apify.com/data_minds/facebook-page-contact-info-scraper/pricing) for current prices.

***

### Input

Only **Facebook pages** (`urls`) is required. Example input:

```json
{
  "urls": [
    "https://www.facebook.com/tesla",
    "shakeshack"
  ]
}
```

The full form is on the [input schema page](https://apify.com/data_minds/facebook-page-contact-info-scraper/input-schema).

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `urls` | array | Yes | none | Facebook page links, usernames or numeric page IDs. |
| `includeTransparency` | boolean | No | `true` | Also read page ID, creation date, ads status and business owner (one extra request per page). |
| `findWebsiteContacts` | boolean | No | `true` | Also look on the page's website for emails, phone numbers and social links. |
| `onlyWithContact` | string | No | `all` | `all`, `email`, `phone` or `email_or_phone`. |
| `language` | string | No | `en-US` | Language of category, price and address text. Counts and dates come from the English page. |
| `proxyConfiguration` | object | No | `{"useApifyProxy": false}` | Optional proxy settings. The default works for most runs. |

#### Page inputs

- ✅ Good: `https://www.facebook.com/tesla`, `tesla` or a numeric page ID.
- ❌ Bad: a personal profile, a group link or a post link.

> **Warning:** With `onlyWithContact` set to `email`, pages without an email are dropped from the dataset and are not charged.

#### Language

- ✅ Good: `en-US` for the most accurate counts and dates.
- ❌ Bad: another language when you need numeric fields to be consistent; only category, price and address text change.

***

### Output

Each page is saved to the default dataset as soon as it is read. The same data is also split into tables: `contacts`, `social_links`, `transparency` and `errors` (pages that could not be read). A `RUN_SUMMARY` record holds the run counts. Export as JSON, CSV, Excel, XML or HTML.

#### JSON example

```json
{
  "url": "https://www.facebook.com/example",
  "input": "example",
  "name": "Example Coffee",
  "username": "example",
  "page_id": "100000000000000",
  "profile_id": "100000000000000",
  "verified": false,
  "category": "Coffee shop",
  "categories": ["Coffee shop"],
  "bio": "Fresh coffee every day.",
  "followers": 12345,
  "following": 10,
  "talking_about": 120,
  "check_ins": 800,
  "rating_percent_recommend": 96,
  "review_count": 210,
  "price_range": "$$",
  "email": "hello@example.com",
  "emails": ["hello@example.com"],
  "email_source": "facebook",
  "phone": "+1 555 0100",
  "phones": ["+1 555 0100"],
  "website": "https://example.com",
  "websites": ["https://example.com"],
  "address": "1 Example Street, Example City",
  "phone_source": "facebook",
  "social_links": {"instagram": "https://example.com/instagram"},
  "profile_picture": "https://example.com/picture.jpg",
  "creation_date": "2015-04-01",
  "ads_running": false,
  "business_owner": "Example Coffee Ltd",
  "scraped_at": "2026-01-01T12:00:00Z",
  "status": "ok",
  "error": null
}
```

The `RUN_SUMMARY` record contains `pagesSaved`, `pagesCharged`, `pagesFailed`, `pagesFilteredOut`, `emailsFound`, `phonesFound` and `requests`.

#### Notes and limitations

- A row with `status` `partial` was saved with some details missing; `error` says which.
- Pages that are private, removed or restricted come back as `not_found` in the errors table.
- Duplicate pages in your list are read once.

***

### Tips and advanced usage

- Switch off **Page transparency** for a faster, lighter run when you only need contacts.
- Keep **Contacts from the page's website** on to find emails and phone numbers that the page itself does not list.
- Use `email_or_phone` to build outreach lists without empty rows.
- Results depend on what each page publishes, so the share of pages with an email varies by industry.
- Need a Facebook email extractor or a Facebook email finder? Set **Keep only pages with** to an email and you receive only the pages where email addresses were found.
- As a Facebook lead scraper, it works best with a bulk page list: one run can read many pages and return business contact details for each.
- For a Facebook business page scraper that feeds a spreadsheet, use the contacts table: it is a ready Facebook page contact export with Facebook page contact information per row.
- Social media links are saved per network, and the verified badge shows in the `verified` field, so you can sort real brands from lookalike pages.
- No login required: you do not need a Facebook account or any key, only your Apify account and a list of public pages.
- Billing is pay per result, so a small test run costs only a few cents. Set up scheduled runs in Apify to refresh a contact list every week.
- Teams that compare a Facebook business contact scraper with a Facebook page contact extractor usually care most about fields, so check the output table above first.

***

### Integrations and API

#### Can I use Facebook Page Contact Info Scraper as an API?

Yes. Use the [Apify API](https://docs.apify.com/api/v2) or the apify-client packages for Node.js and Python. Details are on the [API tab](https://apify.com/data_minds/facebook-page-contact-info-scraper/api).

#### How to scrape Facebook pages with Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("data_minds/facebook-page-contact-info-scraper").call(run_input={
    "urls": ["https://www.facebook.com/tesla", "shakeshack"]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["name"], item["email"], item["phone"])
```

#### Can I integrate Facebook Page Contact Info Scraper with other apps?

Yes. Connect it to Make, Zapier, Google Sheets or Slack, trigger [webhooks](https://docs.apify.com/integrations/webhooks) when a run finishes, and schedule runs in the Apify Console.

#### Can I use Facebook Page Contact Info Scraper with AI agents (MCP)?

Yes. Use the [MCP tab](https://apify.com/data_minds/facebook-page-contact-info-scraper/api/mcp) to call the Actor from MCP compatible AI agents.

***

### Other Facebook scrapers

| Actor | What it does |
|---|---|
| 📅 [Facebook Event Scraper](https://apify.com/data_minds/facebook-event-scraper) | Scrape public Facebook events in bulk: dates, places, attendance, tickets and organizers. |
| 📄 [Facebook Pages Scraper](https://apify.com/data_minds/facebook-pages-scraper) | Scrape public Facebook Page data in bulk: name, category, likes, followers, rating, email, phone and more. |
| ⭐ [Facebook Review Scraper](https://apify.com/data_minds/facebook-review-scraper) | Scrape reviews from public Facebook pages: reviewer, recommend or not, text, photos and owner replies. |
| 🎥 [YouTube Channel Email Scraper](https://apify.com/data_minds/youtube-channel-email-scraper) | Find contact emails, social links, channel stats and recent activity for any YouTube channel. |

***

### FAQ

#### Is it legal to scrape Facebook page contacts?

This Actor reads details that public pages show to everyone. Whether your use is lawful depends on your country and how you use the data, including privacy and anti-spam rules. Read [this guide on web scraping legality](https://blog.apify.com/is-web-scraping-legal/). This is not legal advice.

#### How does this Actor work?

You give it page links, usernames or IDs. For each page it collects the public contact details, social links and counts, optionally adds transparency details and website contacts, then saves the row to your dataset and contact tables while the run continues.

#### Why scrape Facebook page contacts?

Teams use page contacts for lead generation, local outreach, CRM enrichment and partner research. Instead of opening hundreds of pages by hand, you get one table with email, phone, website, address and follower counts that you can export to Excel or CSV.

#### Why did I get fewer results than expected?

Pages only return what they publish. Private, removed or restricted pages end up in the errors table, duplicates are read once, and the **Keep only pages with** filter drops pages without the requested detail. Check `status` and `error` on each row.

#### How do I find the email address of a Facebook business page?

Add the page link to the Actor and run it. If the page lists an email, it appears in `email` and `emails`. With **Contacts from the page's website** on, the Actor also checks the website listed on the page for emails.

#### Can I get phone numbers from Facebook pages in bulk?

Yes. Paste many page links or usernames and set **Keep only pages with** to a phone number. Each saved row shows `phone` and `phones`, and a `phone_source` that tells you whether the number came from the page or its website.

#### It is not working. What should I do?

Check that every input is a public page, not a profile or group. If the problem remains, open a report on the [Issues tab](https://apify.com/data_minds/facebook-page-contact-info-scraper/issues/open) with your run link and the input you used, and the team will take a look.

***

### Support and feedback

Report bugs or ask questions on the [Issues tab](https://apify.com/data_minds/facebook-page-contact-info-scraper/issues/open). For custom solutions, contact hello.dataminds@gmail.com. Built and maintained by the [data_minds](https://apify.com/data_minds) team on Apify.

This Actor is an independent tool and is not affiliated with or endorsed by Facebook or Meta. You are responsible for using the data in line with the law and the site's terms. Facebook is available at [facebook.com](https://www.facebook.com/).

# Actor input Schema

## `urls` (type: `array`):

One or many Facebook page links, usernames or numeric page ids (for example https://www.facebook.com/humansofnewyork or humansofnewyork). Bulk input is supported.

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

Also read the page ID, creation date, whether ads are running and the business owner (one extra request per page).

## `findWebsiteContacts` (type: `boolean`):

When the page lists a website, also look on that website for emails, phone numbers and social links that Facebook does not show.

## `onlyWithContact` (type: `string`):

Return every page, or only pages where an email, a phone number, or either was found.

## `language` (type: `string`):

Language of the category, price and address text. Counts and dates always come from the English page, so en-US gives the most accurate results.

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

Optional. Leave the default for automatic connection handling, or choose your own proxy settings here.

## Actor input object example

```json
{
  "urls": [
    "https://www.facebook.com/tesla",
    "shakeshack"
  ],
  "includeTransparency": true,
  "findWebsiteContacts": true,
  "onlyWithContact": "all",
  "language": "en-US",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per Facebook page with every field.

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

Emails, phone numbers, websites and address per page.

## `socialLinks` (type: `string`):

One row per social profile found.

## `transparency` (type: `string`):

Page ID, creation date, ads status and business owner.

## `errors` (type: `string`):

Pages that could not be read.

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

Counts for this run.

# 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 = {
    "urls": [
        "https://www.facebook.com/tesla",
        "shakeshack"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_minds/facebook-page-contact-info-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 = {
    "urls": [
        "https://www.facebook.com/tesla",
        "shakeshack",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("data_minds/facebook-page-contact-info-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 '{
  "urls": [
    "https://www.facebook.com/tesla",
    "shakeshack"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call data_minds/facebook-page-contact-info-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,data_minds/facebook-page-contact-info-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/G0Y1dTOWbgH8Xuyid/builds/7Uz8z8dcuYnJD4hKw/openapi.json
