# Facebook Page Posts Scraper (`logical_scrapers/facebook-page-posts-scraper`) Actor

Extract posts from public Facebook pages and profiles without logging in: text, publish time, reactions, comment and share counts, photos and videos, plus the page's followers, category and website on every post.

- **URL**: https://apify.com/logical\_scrapers/facebook-page-posts-scraper.md
- **Developed by:** [Goldmine](https://apify.com/logical_scrapers) (community)
- **Categories:** Social media, Marketing, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.69 / 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.
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 Posts Scraper — Extract Posts from Public Facebook Pages

![Facebook Posts Scraper](https://i.ibb.co/Fqbr6ZgJ/Screenshot-2026-09-20-at-5-03-54-PM.png)

This **Facebook posts scraper** turns any public page or profile on **[Facebook](https://www.facebook.com/)** into structured data. Give it page URLs or usernames and it returns the **Facebook page posts** with text, publish time, reactions broken down by type, comment and share counts, photos and videos, and the page's follower count, category and website on every item. Teams use it to track competitors, measure what a brand's audience reacts to, and build content and research datasets without reading feeds by hand.

Paste as many pages as you like, choose how many posts you want from each and how far back to go, and get one dataset item per post, ready to export to JSON, CSV or Excel. No Facebook account, cookies or API key are needed.

***

### 🚀 Key Features

- 🔗 **Pages, profiles, usernames** — a `facebook.com/nike` link, a bare `nike`, or a `profile.php?id=…` link, with no limit on how many per run
- 🧾 **Full post record** — text, publish time, reactions with a per-type breakdown, comment and share counts, author
- 📸 **Photos and videos** — thumbnail, dimensions, description and download URLs for each attachment
- 🏷️ **Page facts on every post** — followers, category, website and page id, so exports need no second lookup
- 📅 **Stop at a date** — `untilDate` keeps only posts newer than a day you choose, for daily incremental runs
- 🔢 **Per-page limit** — `maxItems` caps posts for each page separately, so one busy page cannot crowd out the rest
- 🛡️ **No login required** — reads only what Facebook shows to logged-out visitors; Apify residential proxies by default
- 📤 **Multiple export formats** — JSON, CSV, Excel, XML via the Apify dataset
- 🔁 **Schedulable runs** — run daily with `untilDate` to keep a page's history growing

***

### 👥 Who Is This Actor For?

- 📣 **Social media and brand managers** — tracking competitor pages and what their audience reacts to
- 📈 **Marketing analysts** — measuring post frequency, formats and engagement across a set of pages
- 📰 **Journalists and researchers** — collecting what public figures, outlets and institutions publish
- 🧰 **Developers** — feeding page posts into dashboards, alerts or a CRM
- 🤖 **AI builders** — grounding an agent in a brand's recent Facebook posts and their engagement

### 💡 Common Use Cases

- Scrape Facebook pages of five competitors every morning and chart reactions per post
- Track a public figure's posts and export them with comment and share counts to a spreadsheet
- Collect a news outlet's Facebook posts for a media study, with the date range you choose
- Watch your own brand page and get alerted when a post's engagement jumps
- Build a dataset of video and photo posts with download URLs for a content audit

***

### 🔗 Supported URL Types

| URL Type | Example |
| -------- | ------- |
| **Page by username** | `https://www.facebook.com/nike` |
| **Bare username** | `nike` or `@nike` |
| **Page tab link** | `https://www.facebook.com/nike/posts` |
| **Profile by numeric id** | `https://www.facebook.com/profile.php?id=100044541544829` |
| **People link** | `https://www.facebook.com/people/Mark-Zuckerberg/4/` |
| **`web.facebook.com` or `m.facebook.com` links** | `https://web.facebook.com/humansofnewyork` |

Group, Marketplace, event and single-post links are not page URLs; use the [Facebook Group Scraper](https://apify.com/logical_scrapers/facebook-group-posts-scraper) for groups.

***

### 📥 Input

| Field | Type | Description | Default |
| ----- | ---- | ----------- | ------- |
| `startUrls` | Array | Facebook pages or public profiles to scrape. Paste a page URL such as `https://www.facebook.com/nike`, a username such as `nike`, or a `profile.php?id=…` link. One entry per page, and as many pages as you like. | Required |
| `maxItems` | Integer | Maximum number of posts to scrape from each page (start URL). | `10` |
| `untilDate` | String | Stop scraping a page when its posts get older than this date (format: YYYY-MM-DD). Leave empty to scrape until `maxItems` is reached. | none |
| `proxyConfiguration` | Object | Proxy configuration. Defaults to Apify residential proxies, which Facebook requires for posts; datacenter IP addresses are refused. | `{ "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }` |

#### Example Input

```json
{
  "startUrls": ["https://www.facebook.com/nike", "humansofnewyork"],
  "maxItems": 10,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

***

### 📤 Output

One dataset item per post:

| Field | Type | Description |
| ----- | ---- | ----------- |
| `post_id` | String | Facebook's identifier for the post |
| `creation_time` | String | Publish time as an ISO 8601 timestamp (UTC) |
| `message` | String | The post text |
| `post_url` | String | Link to the post, or to the reel or video it embeds |
| `reactions` | Object | `total` and a `breakdown` by reaction type (`like`, `love`, `haha`, …) |
| `comments_count` | Number | Number of comments on the post |
| `shares_count` | Number | Number of shares |
| `author` | Object | `id`, `name`, `url` and `profile_picture_url` of the page or profile that posted |
| `attachments` | Array | Photos and videos on the post: `type`, `id`, `url`, `thumbnail`, `width`, `height`, `description` and `download_urls` |
| `facebook_page_url` | String | The page URL or username you passed in |
| `facebook_page_name` | String | The page's display name |
| `facebook_page_id` | String | Facebook's id for the page |
| `facebook_page_category` | String | The page's category, such as "Sportswear Store" |
| `facebook_page_followers` | Number | The page's follower count at the time of the run |
| `facebook_page_website` | String | The website in the page's intro, when it has one |

#### Example Output

A real item from a run on the example input (2026-09-19), with image URL query strings removed:

```json
{
  "post_id": "1423154279375557",
  "creation_time": "2025-12-17T18:36:56.000Z",
  "message": "A few more days to order Dear New York before Christmas. At nearly 500-full color pages, Dear New York is the most beautiful and expansive collection of stories to ever come out of Humans of New York-- including hundreds that have never before been published. Currently discounted 55% on Amazon.\n\nOrder Here: https://bit.ly/dearnewyorkbook\n\nThank you to the NY Times for so kindly including Dear New York on it's list of Gift-Worthy Holiday Art Books.",
  "post_url": "https://www.facebook.com/humansofnewyork/posts/pfbid02Xgm8abwex4u4n8163pmFMzQE6FWPhR2XjTqrFajoAvtwLC1FBCH5sxv5YfusZMndl",
  "reactions": {
    "total": 576,
    "breakdown": {
      "like": 462,
      "love": 108,
      "care": 5,
      "haha": 1
    }
  },
  "comments_count": 168,
  "shares_count": 43,
  "author": {
    "id": "100050429952420",
    "name": "Humans of New York",
    "url": "https://www.facebook.com/humansofnewyork",
    "profile_picture_url": "https://scontent.fhan17-1.fna.fbcdn.net/v/t39.30808-1/334611134_1536915246801761_214912837020673325_n.jpg"
  },
  "attachments": [
    {
      "type": "photo",
      "id": "1423151982709120",
      "url": "https://www.facebook.com/photo/?fbid=1423151982709120&set=a.755664696124522",
      "thumbnail": "https://scontent.fhan17-1.fna.fbcdn.net/v/t39.30808-6/599140361_1423151986042453_6897813574530477673_n.jpg",
      "width": 1080,
      "height": 1345,
      "description": "No photo description available.",
      "download_urls": [
        {
          "url": "https://scontent.fhan17-1.fna.fbcdn.net/v/t39.30808-6/599140361_1423151986042453_6897813574530477673_n.jpg",
          "type": "photo_image",
          "quality": "high",
          "width": 1080,
          "height": 1345
        }
      ]
    }
  ],
  "facebook_page_url": "humansofnewyork",
  "facebook_page_name": "Humans of New York",
  "facebook_page_id": "102099916530784",
  "facebook_page_category": "Arts & Humanities Website",
  "facebook_page_followers": 17079028,
  "facebook_page_website": "http://www.humansofnewyork.com/"
}
```

You can export the dataset as **JSON, CSV, Excel, XML, RSS, or HTML** from the Apify Console or via the [Apify API](https://docs.apify.com/api/v2).

***

### 💰 Pricing

This Actor is **pay per event**. Each post saved counts as one result at **$0.005 per result**, so **1,000 posts cost $5** plus Apify platform usage, including residential proxy traffic when you keep the default proxy. A free Apify account is enough to try it.

***

### ❓ FAQ

#### What is the Facebook Posts Scraper?

It is an Apify Actor that reads public Facebook pages and profiles and returns their posts as structured data. Paste page links or usernames, set a limit per page, and run it from the Console, the API, or on a schedule.

#### Do I need an account, cookies or an API key?

No. The Actor reads only what Facebook shows to visitors who are not logged in.

#### Which pages work?

Public pages and public profiles: brands, media outlets, public figures, businesses, organisations. A profile that hides its posts from logged-out visitors returns none, and the run says so.

#### Do I need a proxy?

Yes, keep the residential default. Facebook refuses to serve posts to datacenter IP addresses, so runs on datacenter proxies fail before the first post.

#### How many posts can I get per page?

`maxItems` caps posts per page, and the Actor keeps collecting until it reaches your limit, your `untilDate`, or the end of the timeline. In a run on 2026-09-19 it collected 60 posts from each of three pages, 180 in total, in under two minutes. Long timelines are carried through to the end for you — there is nothing to resume or stitch together.

#### Does it include reels and videos?

Yes. A post that carries a reel or video comes back with a `video` attachment, the video's thumbnail and its link, and `post_url` points at the reel or video page.

#### Why are some counts rounded?

Facebook shows exact reaction, comment and share counts on posts, and those are what the Actor returns. The follower count is exact when Facebook publishes it in the page's metadata and rounded to the nearest thousand or million otherwise.

#### Can I schedule it or integrate it with my app?

Yes. Every Apify Actor exposes a REST API, webhooks, and integrations with Zapier, Make, Google Sheets and Slack, and can be called from an AI agent via the Apify MCP server.

#### Is it legal to scrape Facebook pages?

This Actor accesses only publicly available pages. You are responsible for making sure your use complies with Facebook's terms of service and the laws in your jurisdiction, including any rules that apply to personal data.

#### What if Facebook changes and the Actor breaks?

Open an issue on the Actor's **Issues** tab with a page URL that fails, so the problem can be reproduced.

***

### 🧩 Part of the Facebook Scraper Suite

Goldmine's Actors for public Facebook data. Also try:

- [Facebook Group Scraper](https://apify.com/logical_scrapers/facebook-group-posts-scraper) — posts, authors, reactions and photos from public Facebook groups
- [Facebook Page Details Scraper](https://apify.com/logical_scrapers/facebook-page-details-scraper) — followers, category, contact details and about text for a page, one row per page
- [Facebook Comments Scraper](https://apify.com/logical_scrapers/facebook-comments-scraper) — comments and replies on public posts, videos, reels and photos
- [Facebook Ads Library Scraper](https://apify.com/logical_scrapers/facebook-ads-library-scraper) — ad copy, creatives, CTAs and run dates from the public Facebook Ad Library

See every Goldmine Actor at [apify.com/logical\_scrapers](https://apify.com/logical_scrapers).

***

### 📷 Image Credit

Image credit: [facebook.com](https://www.facebook.com/)

***

### 📬 Contact & Support

- **Issues & feature requests**: use the Issues tab on this Actor's page. Include a page URL that fails so it can be reproduced.
- **Email**: `coredev.dan@gmail.com`
- **If this Actor saved you time, please leave a ⭐ rating on the Apify Store.** It helps us keep it maintained.

This Actor is an independent tool for collecting publicly available data. It is not affiliated with, endorsed by, or connected with Meta Platforms, Inc.

# Actor input Schema

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

Facebook pages or public profiles to scrape. Paste a page URL such as https://www.facebook.com/nike, a username such as nike, or a profile.php?id=… link. One entry per page, and as many pages as you like.

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

Maximum number of posts to scrape from each page (start URL).

## `untilDate` (type: `string`):

Stop scraping a page when its posts get older than this date (format: YYYY-MM-DD). Leave empty to scrape until maxItems is reached.

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

Proxy configuration. Defaults to Apify residential proxies, which Facebook requires for posts; datacenter IP addresses are refused.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.facebook.com/nike",
    "humansofnewyork"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (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": [
        "https://www.facebook.com/nike",
        "humansofnewyork"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logical_scrapers/facebook-page-posts-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/UkBgu6IgYUIvSbeNz/builds/cKmaVMwzaG0jKzkv7/openapi.json
