# Facebook Pages Scraper (`piotrv1001/facebook-pages-scraper`) Actor

The Facebook Pages Scraper extracts public page profiles without a login — name, category, followers, likes, verified badge, contact details, rating and recent posts with reactions, comments, shares and media URLs — ideal for lead generation, competitor monitoring and social listening.

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

## Pricing

from $5.00 / 1,000 page profiles

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

Extract public Facebook pages — business pages, brands, media outlets and public figures — as clean, structured JSON, **without a login, cookies or API key**. The **Facebook Pages Scraper** turns page URLs, usernames or ids into a full page profile (followers, likes, category, bio, contact details, rating) plus the page's most recent posts with reactions, comments, shares and media links — ready for lead generation, competitor monitoring, influencer research and social listening.

### ✨ Features

- 🏢 **Page profile**: Name, page id, username, category, verified badge, followers, following, likes, "talking about this", "were here", bio, profile picture and cover photo.
- 📇 **Contact & about details**: Address, phone, email, websites, social handles (Instagram etc.), opening-hours status, price range, services offered, confirmed page owner.
- ⭐ **Rating**: Recommendation percentage and review count for business pages.
- 📝 **Recent posts**: Text, permalink, timestamp, reaction total and breakdown (Like, Love, Care…), comment count, share count, media type and direct photo / video URLs — newest first, as many as you ask for.
- 🔢 **Flexible input**: Page URLs, plain usernames or numeric page ids, including `profile.php?id=…` links.
- 💸 **Pay per result**: You pay per page profile and per post — nothing else.

### 🛠️ How It Works

1. **Enter pages** – Paste page URLs (`https://www.facebook.com/NASA`), usernames (`katzsdeli`) or numeric ids (`100044561550831`) into `pageUrls`.
2. **Choose what to collect** – `maxPosts` sets how many recent posts to fetch per page (0 = profile only); `includeAbout` adds the contact / about details; `maxItems` caps the total number of rows.
3. **Run the scraper** – Results stream into the dataset as JSON, CSV or Excel. One `page` row per input, followed by its `post` rows.

### 💰 Pricing

| Event          | Price  | What you get                                                |
| -------------- | ------ | ----------------------------------------------------------- |
| `page-profile` | $0.005 | One page row with profile stats, contact details and rating |
| `post`         | $0.004 | One post row with text, engagement counts and media URLs    |

Example: 20 pages with 10 posts each = 20 × $0.005 + 200 × $0.004 = **$0.90**.

### ⚠️ Good to know

- Works for **pages and public figures** (the ones with a "Follow" button). Personal profiles and content that Facebook only shows to logged-in users are not available — such inputs are skipped with a warning.
- Facebook offers no page search without an account, so this scraper works from **URLs / usernames / ids**. Find pages on Google (`site:facebook.com "pizza" "New York"`) or from your own lists and paste them in.
- Post counts (`reactions`, `comments`, `shares`) are the numbers Facebook shows on the page at scrape time; `videoViews` is only present when Facebook exposes it.
- Contact fields are whatever the page owner published — many brand pages list only a website.

### 📊 Sample Output Data

```json
[
    {
        "type": "page",
        "pageId": "89033874836",
        "profileId": "100064806517961",
        "username": "katzsdeli",
        "url": "https://www.facebook.com/katzsdeli",
        "name": "Katz's Delicatessen",
        "category": "Deli",
        "isVerified": false,
        "followers": 927000,
        "following": 0,
        "likes": 927557,
        "talkingAbout": 81484,
        "wereHere": 529032,
        "description": "Katz's Delicatessen, New York. 927,557 likes · 81,484 talking about this · 529,032 were here. New York City's most iconic deli.",
        "bio": "New York City's most iconic deli.",
        "profilePictureUrl": "https://scontent-waw2-2.xx.fbcdn.net/v/t39.30808-1/347587684_597250122171933_7563996541647031112_n.jpg",
        "coverPhotoUrl": "https://scontent-waw2-1.xx.fbcdn.net/v/t39.30808-6/347638085_5639895616114156_695043930763579880_n.png",
        "email": "cs@katzsdelicatessen.com",
        "phone": "+1 212-254-2246",
        "address": "205 E Houston St, New York, NY, United States, 10002",
        "websites": ["http://katzsdelicatessen.com/"],
        "socialLinks": [{ "platform": "Instagram", "handle": "katzsdeli", "url": null }],
        "categories": ["Deli"],
        "priceRange": "$$",
        "services": ["Dine-in", "Outdoor seating", "In-store pickup"],
        "hoursStatus": "Closed now",
        "recommendPercent": 98,
        "reviewCount": 52530,
        "confirmedOwner": "KATZ DELICATESSEN OF HOUSTON STREET INC",
        "about": { "ratings": "98% recommend (52,530 reviews)" },
        "source": "https://www.facebook.com/katzsdeli",
        "scrapedAt": "2026-09-11T10:25:26.854Z"
    },
    {
        "type": "post",
        "postId": "1561700386000164",
        "url": "https://www.facebook.com/reel/4031022630540848/",
        "pageId": "89033874836",
        "pageName": "Katz's Delicatessen",
        "author": {
            "name": "Katz's Delicatessen",
            "id": "100064806517961",
            "url": "https://www.facebook.com/katzsdeli"
        },
        "text": "Who is ready for the high holidays? Do you need any help from us to make them even sweeter? If so than order with us here…",
        "createdAt": "2026-09-10T14:15:55.000Z",
        "reactions": 78,
        "topReactions": [
            { "name": "Like", "count": 67 },
            { "name": "Love", "count": 8 },
            { "name": "Care", "count": 2 },
            { "name": "Angry", "count": 1 }
        ],
        "comments": 2,
        "shares": 5,
        "videoViews": null,
        "mediaType": "Video",
        "media": [
            {
                "type": "Video",
                "id": "4031022630540848",
                "url": "https://www.facebook.com/reel/4031022630540848/",
                "imageUrl": "https://scontent.fvte3-1.fna.fbcdn.net/v/t51.82787-10/802458069_18622380562053609_8647403403330338022_n.jpg",
                "videoUrl": "https://video.fvte5-1.fna.fbcdn.net/o1/v/t2/f2/m367/AQMwQW9mMKkzgcwv7k3ShMUrZsIeJxdnPJjA0h5Dokrhgme77X1B1WqiXbBlaiqYiwlk.mp4",
                "captionsUrl": null,
                "durationMs": 20015
            }
        ],
        "isSponsored": false,
        "source": "https://www.facebook.com/katzsdeli",
        "scrapedAt": "2026-09-11T10:25:33.092Z"
    }
]
```

Turn any list of Facebook pages into contacts, audience numbers and fresh posts with the **Facebook Pages Scraper** today! 🚀

# Actor input Schema

## `pageUrls` (type: `array`):

Page URLs, usernames or numeric page ids — e.g. `https://www.facebook.com/NASA`, `katzsdeli` or `100044561550831`. Public pages and public figures only; personal profiles are not available without a login.

## `maxPosts` (type: `integer`):

Recent posts to collect from each page's timeline (newest first). Set 0 for page details only.

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

Also read the page's About tab: address, phone, email, websites, social handles, hours, price range, services and rating.

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

Maximum number of rows (pages and posts) to save in total.

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

Proxy settings. Residential proxies are required for the post feed; the default works.

## Actor input object example

```json
{
  "pageUrls": [
    "https://www.facebook.com/NASA",
    "https://www.facebook.com/katzsdeli"
  ],
  "maxPosts": 10,
  "includeAbout": true,
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

# 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 = {
    "pageUrls": [
        "https://www.facebook.com/NASA",
        "https://www.facebook.com/katzsdeli"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/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 = {
    "pageUrls": [
        "https://www.facebook.com/NASA",
        "https://www.facebook.com/katzsdeli",
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/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 '{
  "pageUrls": [
    "https://www.facebook.com/NASA",
    "https://www.facebook.com/katzsdeli"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call piotrv1001/facebook-pages-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/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/ae9gDKVcTPedtlxGG/builds/04CjtxKvSRuSw98L0/openapi.json
