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

Scrape any public Facebook page with no login: phone, email, website, followers, rating, opening hours, address with map coordinates and page transparency — plus the page's posts and comments.

- **URL**: https://apify.com/calm\_builder/facebook-pages-scraper.md
- **Developed by:** [Coder](https://apify.com/calm_builder) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.20 / 1,000 pages

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

Collect public information about any Facebook page, with no login and no cookies:

- **Contact details:** phone, email, website, social links (Instagram, X, TikTok…), address with map coordinates, service area
- **Business info:** categories, rating ("90% recommend, 2,646 reviews"), price range, opening hours per day, open now
- **Audience:** followers and following counts, verified badge
- **About:** the page's full description
- **Page transparency:** creation date, whether it is running ads, whether it ran political ads, the countries its admins are in, name-change history, confirmed owner
- **Pictures:** profile picture and cover photo

You can also collect the page's **latest posts** and their **comments** in the same run. Each goes into its own table.

### How to use it

1. Paste one or more full page links, for example `https://www.facebook.com/nike` or `https://www.facebook.com/profile.php?id=100094526416339`.
2. Optionally turn on **Also collect posts** and/or **Also collect comments**.
3. Click **Start**. Results appear in the **Pages**, **Posts** and **Comments** tabs as they are found, and can be exported to JSON, CSV or Excel.

### Output

#### Pages

| Field | Example |
|---|---|
| name | Boisdale Restaurants |
| url | https://www.facebook.com/BoisdaleRestaurants |
| category / categories | Restaurant / Restaurant, Live music venue, Bar |
| followers | 35000 |
| phone, email, website | +44 20 7730 6922, social@boisdale.co.uk, https://www.boisdale.co.uk/ |
| socialLinks | \[{network: instagram, handle: boisdale\_restaurants, url: …}] |
| address, latitude, longitude | cr. 5 # 30A…, 4.61663, -74.0662 |
| rating, recommendPercent, reviewCount | 90% recommend (2,646 reviews), 90, 2646 |
| hours, openStatus | \[{day: Monday, hours: 17:00 - 01:00}, …], Closed now |
| about | The page's full About text |
| createdAt, adsRunning, ranPoliticalAds | 2011-04-09T17:33:35Z, true, true |
| adminCountries | \[{country: United Kingdom, count: 11}] |
| verified, pageId, profileId | true, 203878729633687, 100064602192940 |

#### Posts

Text, publish date, post type (photo, video, reel, link, event, text), reactions in total and by type (like, love, care, haha, wow, sad, angry), comment and share counts, video views and plays, photos in full size with alt text, video links, hashtags and link previews.

#### Comments

Text, date, author name and profile link, reactions by type, reply count, and - if you turn on replies - the replies, each linked to its parent comment.

### Options

| Option | What it does |
|---|---|
| Posts per page | How many of the newest posts to collect from each page |
| Only posts newer / older than | A date (`2026-09-01`) or a period (`7 days`, `2 weeks`) |
| Collect every photo of multi-photo posts | Facebook lists the first 5 photos of an album post; this collects all of them |
| Comments per post, Comment order | Most relevant, newest first, or all |
| Include replies | Also collect replies to comments |

**Scheduled runs:** to collect only fresh posts on a daily schedule, set *Only posts newer than* to `1 day`.

If you are coming from another Facebook scraper, the common input names (`startUrls`, `resultsLimit`, `onlyPostsNewerThan`, `onlyPostsOlderThan`, `includeNestedComments`) work here too.

### Good to know

- Only public pages are supported. Pages that are removed, age-restricted or visible only when logged in are listed in the run log as not found and are not charged.
- **Replies:** for long reply threads, Facebook itself shows only some of the replies it counts - the same happens in a browser, even when logged in. The Actor collects every reply Facebook makes available.
- Mentions of a page by others (the Mentions tab) are only visible to logged-in users and are not collected.

### Pricing

You pay per result: one charge per page, per post, per comment, and per extra gallery photo when that option is on. The free plan lets you try every option on up to 3 pages.

# Actor input Schema

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

Full links to public Facebook pages, for example https://www.facebook.com/nike or https://www.facebook.com/profile.php?id=100094526416339. You can also upload a file of links.

## `includePosts` (type: `boolean`):

Newest first: text, date, reactions by type, comments and shares counts, photos, videos with views, links.

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

Maximum number of posts collected from each page.

## `onlyPostsNewerThan` (type: `string`):

Pick a date, or a period back from now (for example 7 days). Leave empty for no limit. Facebook is asked for this range directly, so older posts are never downloaded.

## `onlyPostsOlderThan` (type: `string`):

Pick a date, or a period back from now. Combine with 'newer than' for a date range. Leave empty for no limit.

## `scrapeAllPhotos` (type: `boolean`):

Facebook lists the first 5 photos of an album post. Turn this on to collect all of them (charged per extra photo).

## `includeComments` (type: `boolean`):

Turns on posts as well.

## `commentsPerPost` (type: `integer`):

Maximum number of comments (replies included) collected from each post.

## `commentsSortBy` (type: `string`):

Which comments come first.

## `includeReplies` (type: `boolean`):

Also collect replies to comments. Facebook shows only some replies of long threads, even to logged-in users.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.facebook.com/nike"
    }
  ],
  "includePosts": false,
  "maxPosts": 10,
  "scrapeAllPhotos": false,
  "includeComments": false,
  "commentsPerPost": 10,
  "commentsSortBy": "relevant",
  "includeReplies": false
}
```

# Actor output Schema

## `pages` (type: `string`):

No description

## `posts` (type: `string`):

No description

## `comments` (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 = {
    "startUrls": [
        {
            "url": "https://www.facebook.com/nike"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("calm_builder/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 = { "startUrls": [{ "url": "https://www.facebook.com/nike" }] }

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

```

## MCP server setup

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