# Facebook Page Scraper (`bornoo/facebook-page-scraper`) Actor

"Scrape public Facebook Pages with this Python-based Apify Actor. It uses Playwright to render JavaScript content and BeautifulSoup to parse posts, extracting page names and post counts. Simply input Facebook Page URLs, set a max posts limit, and export results as JSON, CSV, or Excel.

- **URL**: https://apify.com/bornoo/facebook-page-scraper.md
- **Developed by:** [Biddut Hossain](https://apify.com/bornoo) (community)
- **Categories:** AI, Agents, Automation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 1,000 results

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/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 Page Scraper

Scrape public Facebook Pages with this Python-based Apify Actor. It uses Playwright to render JavaScript content and BeautifulSoup to parse posts, extracting page names and post counts. Simply input Facebook Page URLs, set a max posts limit, and export results as JSON, CSV, or Excel.

### What does Facebook Page Scraper do?

This Actor visits one or more public Facebook Page URLs, renders the page using a headless browser (to handle Facebook's JavaScript-heavy layout), and extracts basic information such as:

- Page name / title
- Number of posts found on the page
- Source URL

Results are saved to the Actor's dataset, which you can export in JSON, CSV, Excel, or other formats.

### Input

| Field | Type | Description | Required |
|---|---|---|---|
| `startUrls` | Array | List of public Facebook Page URLs to scrape | Yes |
| `maxPosts` | Integer | Maximum number of posts to extract per page (default: 20) | No |

#### Example input

```json
{
  "startUrls": [
    { "url": "https://www.facebook.com/exampleplace" }
  ],
  "maxPosts": 20
}
```

### Output

Each scraped page produces a dataset item like:

```json
{
  "url": "https://www.facebook.com/exampleplace",
  "pageName": "Example Place",
  "postsFound": 12
}
```

You can view results in the **Dataset** tab of your Actor run, or export them via the Apify API.

### How it works

1. Reads the list of Page URLs from input.
2. Launches a headless Chromium browser via Playwright.
3. Loads each page and waits for network activity to settle.
4. Parses the rendered HTML with BeautifulSoup.
5. Extracts page name and post elements.
6. Pushes structured data to the dataset.

### Limitations & important notes

- **Facebook actively limits automated access.** Most content — including comments, reactions, and full post text — requires a logged-in session and is not accessible to anonymous scrapers.
- **The DOM structure changes frequently.** Facebook regularly updates its markup, which can break the CSS selectors used here. This Actor is a starting template, not a production-ready scraper.
- **Terms of Service.** Scraping Facebook may violate its Terms of Service depending on what data is collected and how it's used. Review Facebook's policies and applicable law (e.g. GDPR, CCPA) before running this at scale.
- **Rate limiting / blocking.** Running this against many pages in a short time may trigger CAPTCHAs or temporary IP blocks.

### Use cases

- Monitoring your own public Facebook Page's basic stats
- Educational/demo purposes for learning Playwright + Apify SDK
- A starting point for a more robust, authenticated scraping solution

### Pricing

This Actor uses the **Pay per usage** pricing model on Apify (or **Pay per result** if configured by the publisher on the Store listing). You only pay for the Apify platform usage (compute units, storage) your runs consume — there is no separate license fee to run this template.

If you publish this Actor on Apify Store, you can choose from:

- **Free** — users pay only standard Apify platform usage
- **Pay per result** — charge a fixed amount per dataset item returned
- **Pay per event** — charge for specific custom events during a run (e.g. per page scraped)
- **Rental** — a flat monthly fee to use the Actor

You can set or change the pricing model under the **Publication** tab of your Actor in the Apify Console.

### Getting help

If you run into issues:

- Check the **Log** tab of your Actor run for errors
- Confirm the input URLs are public Facebook Pages (not profiles or private groups)
- Consider that Facebook may require login for the data you're trying to reach

### Disclaimer

This Actor is provided for educational and personal-use purposes. The maintainer is not responsible for misuse or any violation of Facebook's Terms of Service.

# Actor input Schema

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

List of public Facebook Page URLs to scrape

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

Maximum number of posts to extract per page

## Actor input object example

```json
{
  "maxPosts": 20
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("bornoo/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("bornoo/facebook-page-scraper").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 '{}' |
apify call bornoo/facebook-page-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/vfUWZU304pbCzbEOm/builds/V9N88rvyQpvCqme8q/openapi.json
