# Facebook Business Page Scraper (`scrapesmith/facebook-business-pages-scraper-api`) Actor

🔥$1.25/1000 results🔥 Scrape business emails, phone numbers, addresses, websites, categories, follower counts and ratings from any Facebook business Page. No login or cookies needed. Bulk-scrape thousands of Pages to JSON, CSV or Excel.

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

## Pricing

from $1.25 / 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/platform/actors/running/actors-in-store#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 Business Page Scraper — Contact Info, Emails & Phone Numbers

**Every business on Facebook publishes a contact card. This turns thousands of them into a spreadsheet.** Feed in Page URLs, handles or IDs and get back business emails, direct phone lines, street addresses, websites, categories, follower counts, ratings and opening status — ready for JSON, CSV or Excel.

No login. No cookies. No Facebook account. No API key. 🔑

***

### 💰 Pricing, Stated Plainly

You pay a **low per-result rate** plus **standard Apify platform usage** (proxy and compute), billed at your account's normal rates. Nothing is marked up.

Prefer one all-inclusive number with no separate platform line? Use the sister actor, **Facebook Pages Scraper**, which bundles everything into a single per-result price. Same data, same engine — pick whichever billing style suits your accounting.

***

### 🔍 Who Uses This

#### 📞 Sales teams building outbound lists

Facebook is where small and mid-size businesses actually publish a reachable phone number — not a contact form, not a `info@` catch-all. Pull a category and a city and you have a call list by lunchtime.

#### 🧭 Agencies scoping a local market

Run every competitor in a territory and see follower counts, star ratings, review volume and price bracket side by side. Re-run monthly and you have a trend nobody else is tracking.

#### 🗂️ Ops teams fixing stale CRM data

Businesses update Facebook long before they update their website. Match your existing accounts against it and refresh the phone numbers and addresses that have quietly gone bad.

#### 🧪 Data and AI teams

Stable field names, consistent types, no surprise nesting. Drops straight into an enrichment pipeline, a vector index or a lead-scoring model.

***

### ⚡ How It Behaves

| | |
|---|---|
| 🚫 **Dead Pages cost nothing** | Deleted Pages, typos and dead handles are detected before download and never reach your dataset or your bill. |
| 🧼 **No filler rows** | Every record is a real business. No blank objects, no `null` padding, no placeholder names. |
| 🏃 **Built for bulk** | Hundreds of Pages a minute. A 1,000-Page job lands in roughly five minutes. |
| ♻️ **Interruption-safe** | Stops and restarts resume from where they left off. The same Page is never billed twice. |
| 🧯 **Fails loud, fails early** | A bad input list is caught in seconds, not after it has burned through your credit. |

***

### 🏁 Running It

Paste Pages in whatever form you have them — full URLs, `@handles`, or bare names. Mix formats freely; duplicates are dropped.

```json
{
  "startUrls": [
    "https://www.facebook.com/JoesStoneCrab",
    "@nike",
    "seizieme"
  ]
}
```

Press **Start**. Results stream in as they are scraped, so you can begin downloading before the run finishes.

#### ⚙️ Settings

| Setting | Default | Purpose |
|---|---|---|
| **Facebook Page URLs** | — | The Pages to scrape. URLs, handles or IDs. |
| **Max results** | unlimited | Hard ceiling on how many Pages get billed. |
| **Concurrency** | 60 | Pages processed simultaneously. |
| **Proxy country** | `CA` | Residential exit country. |
| **Proxy** | Residential | Required. Facebook serves a login wall to datacenter IPs. |

***

### 📤 The Data

#### ☎️ Contact block

| Field | Meaning |
|---|---|
| `email` | Public business email |
| `phone` | Public contact number |
| `address` | Street, city, region, postcode |
| `website` | Primary website |
| `websites` | Every link the Page lists — menus, booking, shop |
| `socials` | Linked Instagram, X and other handles |

#### 🏷️ Profile

| Field | Meaning |
|---|---|
| `pageName` | Display name |
| `categories` | Business type — "Seafood Restaurant", "Law Firm" |
| `intro` | The Page's own description |
| `priceRange` | `$` through `$$$$` |
| `services` | Delivery, curbside pickup, online booking, seating |
| `openStatus` | Open now, Closed now, Permanently closed |

#### 📊 Reach and reputation

| Field | Meaning |
|---|---|
| `followers` · `likes` | Audience size |
| `talkingAbout` · `wereHere` | Engagement and check-ins |
| `rating` · `recommendPercent` · `reviewsCount` | Review signals |
| `isVerified` | Verified badge |

#### 🆔 Identity and media

| Field | Meaning |
|---|---|
| `pageUrl` · `slug` | Canonical URL and handle |
| `profileId` | Numeric ID, survives renames |
| `profilePicUrl` · `coverPhotoUrl` | Full-resolution images |

***

### 📋 Sample Record

```json
{
  "pageName": "Joe's Stone Crab",
  "slug": "JoesStoneCrab",
  "pageUrl": "https://www.facebook.com/JoesStoneCrab/",
  "profileId": "100064737608769",
  "categories": ["Seafood Restaurant"],
  "phone": "+1 305-673-0365",
  "email": "marketing@joesstonecrab.com",
  "address": "11 Washington Ave, Miami Beach, FL, United States, 33139",
  "website": "joesstonecrab.com",
  "likes": 44383,
  "rating": 4.7,
  "reviewsCount": 14571,
  "priceRange": "$$",
  "openStatus": "Closed now",
  "services": ["Dine-in", "Outdoor seating", "Online booking"]
}
```

***

### ❓ Questions

**Do I need to log in anywhere?**
No. Only public information is collected — what any visitor sees without an account.

**What exactly is "platform usage"?**
Apify's own charge for the proxy bandwidth and compute the run consumes, billed at your plan's standard rates. It appears as a separate line from the per-result price. If you would rather see one combined number, use the all-inclusive sister actor.

**Is scraping this legal?**
It collects public business information. Public-data scraping is broadly permitted; how you *use* personal data is governed by GDPR, CCPA and equivalents. Keep it to legitimate business contact and honour opt-outs.

**Some Pages came back without an email.**
Many businesses simply don't publish one. The scraper reports what exists rather than inventing it. On a typical business list expect roughly 7 in 10 to have an email and about half a phone number.

**What if my URL list has junk in it?**
Bad entries are detected and skipped unbilled. If most of the list turns out not to be real Pages, the run stops early and says so.

**Can it do posts, reviews or followers?**
No — this one covers Page profile and contact data. Use a dedicated actor for those.

**Why does it need a residential proxy?**
Facebook shows datacenter IPs a login wall instead of the Page. Residential is on by default; there is nothing to configure.

**Are age-restricted Pages included?**
Alcohol, gambling and similar categories aren't publicly viewable without an account, so they're reported unavailable rather than returned blank.

***

### 💡 Getting More Out Of It

- **Trial 10–20 Pages first.** Confirm the fields match your needs before scaling.
- **Cap spend with `Max results`** while experimenting.
- **Handles paste better than URLs.** `@nike` works identically and is easier to pull from a spreadsheet column.
- **Schedule a monthly run** to watch ratings and follower counts move.
- **Chain it.** Build the URL list with a Page Search actor, then enrich every hit here.

***

### 🆘 Support

Hit a Page that should work and doesn't? Open an issue on the Actor page with the URL.

# Actor input Schema

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

Full URLs (https://facebook.com/nike), handles (@nike) or bare names (nike). Duplicates are removed automatically.

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

Stop after this many pages. Leave empty for no limit.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.facebook.com/JoesStoneCrab",
    "seizieme"
  ]
}
```

# 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/JoesStoneCrab",
        "seizieme"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesmith/facebook-business-pages-scraper-api").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/JoesStoneCrab",
        "seizieme",
    ] }

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

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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/JoesStoneCrab",
    "seizieme"
  ]
}' |
apify call scrapesmith/facebook-business-pages-scraper-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scrapesmith/facebook-business-pages-scraper-api",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/4dhz7ueJuiIMT9mWi/builds/OmpWbuNSYKj0gk41Q/openapi.json
