# Facebook Post Scraper (`futurizerush/facebook-post-scraper`) Actor

Collect posts from public Facebook Pages — captions, reactions, comments, shares, image/video URLs, and Page details. Paste a Page URL and run. (Beta)

- **URL**: https://apify.com/futurizerush/facebook-post-scraper.md
- **Developed by:** [Rush](https://apify.com/futurizerush) (community)
- **Categories:** AI, Agents, Social media
- **Stats:** 14 total users, 3 monthly users, 91.9% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 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/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 Post Scraper

Collect posts from public Facebook Pages with engagement metrics, media URLs, and author details. Just paste a Page URL and run.

Built for marketers, researchers, and lead-gen teams who need clean Facebook content data ready to drop into spreadsheets, dashboards, or downstream pipelines.

***

### What you get

For every post collected, you receive a flat record with:

| Group | Fields |
|---|---|
| **Identifiers** | post\_id, post\_url, post\_type |
| **Page** | page\_id, page\_username, page\_name, page\_url, page\_avatar\_url, page\_is\_verified, page\_category |
| **Content** | text, hashtags, mentioned\_users |
| **Timing** | creation\_timestamp\_utc, creation\_iso, creation\_human |
| **Engagement** | reaction\_count, like\_count, love\_count, haha\_count, wow\_count, sad\_count, angry\_count, care\_count, comment\_count, share\_count, view\_count |
| **Media** | image\_urls, video\_url, video\_thumbnail\_url, video\_duration\_seconds |
| **Live indicator** | is\_live\_video |
| **Provenance** | extracted\_at\_utc, source\_url |
| **Status** (filled when an input couldn't be collected) | error |

Successful records have `error: null`. When a Page can't be loaded — or when an input URL is rejected up front — the dataset also includes one row for that input with the `error` field filled in. On these rows, post-content fields stay empty, `extracted_at_utc` is always populated, and `source_url` carries the input you submitted. `page_username` and `page_url` are populated when the input was a recognisable Page URL. To get successful posts only, filter where `error` is null.

A note on the three timing fields: `creation_timestamp_utc` is a number for sorting and date math, `creation_iso` is a standard date string most data tools expect, and `creation_human` is a friendly format like `April 24, 2026 at 21:25 UTC` for reports. Pick whichever your tool prefers — they all describe the same moment.

***

### Inputs

| Field | Type | Description |
|---|---|---|
| `startUrls` | array of URLs | Public Facebook Page URLs (e.g. `https://www.facebook.com/nasa`). Up to 20 per run. |
| `resultsLimit` | integer | Maximum posts per Page (10–100, default 20). |
| `onlyPostsNewerThan` | date | Skip posts older than this date (`2026-01-01` or `7 days`). |
| `onlyPostsOlderThan` | date | Skip posts newer than this date (`2026-04-01` or `30 days`). |

Personal profiles, groups, and events are not supported — those need different actors.

***

### Use cases

- **Brand monitoring**: track engagement on competitor Pages over time.
- **Content research**: discover what's working for top creators in a niche.
- **Lead generation & influencer vetting**: vet candidate Pages individually — check category, verification badge, post style, and recent engagement signals.
- **Trend analysis**: collect post data across multiple Pages for sentiment or topic modelling.

***

### How it works

1. Paste one or more public Page URLs.
2. Choose how many posts to collect per Page (10–100).
3. Optionally narrow by date range.
4. Run — output arrives as a flat dataset, ready to drop into a spreadsheet, BI tool, or downstream pipeline.

No login required, no account at risk, no credentials kept.

***

### Good to know

- **Public Pages only.** Personal profiles, private groups, and events need different actors.
- **Recent posts only.** Public Pages expose a recent window of posts. Very old archives are out of scope for this actor.
- **Larger jobs work best in smaller runs.** If you have many Pages to collect, splitting them across several smaller runs (5–10 Pages each) usually works better than one large run.
- **Some fields may be null.** When a post or Page doesn't publish a field publicly, you'll see `null` for that field rather than a guess.
- **Field names and types stay consistent across runs.** Facebook itself can change what's available publicly, in which case some fields may become null until the actor is updated.

***

### FAQ

**Q. Why do I sometimes get fewer posts than I asked for?**
A. The Page may have fewer posts available publicly than your limit, or your date filter excluded some. Both are normal and not errors.

**Q. Can you scrape private Pages or groups?**
A. No. This actor only handles public Pages.

**Q. The top post on a Page seems to be the same one for several days. Is the actor cached?**
A. No — that's most likely the Page's pinned post. Pinned posts stay at the top of a Page until the owner unpins them.

**Q. My run finished with one or more failed Pages. What does that mean?**
A. One or more of your inputs couldn't be processed. Each failed input appears in the dataset as a row with the `error` field filled in. The `source_url` field carries what you submitted, so you can always trace the row back to the input. Common causes: the Page wasn't loadable (temporary issue or restricted Page), or the URL pointed to a group, event, or personal profile by mistake.

**Q. What if I hit issues on a big run?**
A. If a run hits a temporary limit, the remaining Pages are recorded with a status row so you can re-submit them later in a smaller batch.

**Q. Can I get reaction breakdowns (Like vs Love vs Haha)?**
A. Yes — when the breakdown is available for a post, the per-reaction fields are populated alongside the total reaction count.

***

### Disclaimer

This actor extracts publicly accessible information that Facebook makes available to non-logged-in visitors. It does not log in, does not bypass any access control, and does not collect non-public data.

You are responsible for using the output in compliance with Facebook's Terms of Service, GDPR / CCPA / your local privacy law, and any platform-specific data-use restrictions. Results depend on what Facebook makes publicly available and may vary over time.

**For learning and research.** This actor is provided for educational and research purposes — please use it ethically and consider the privacy of the people whose Pages and posts appear in the results.

**Beta.** The actor is currently in beta. There may be missing fields, edge-case bugs, or behaviour you don't expect.

**Test before going large.** We recommend running a small batch first (one or two Pages) to confirm the output matches what you need before launching a big run.

**Feedback welcome.** If something doesn't behave as you'd expect, please open an issue on the actor's page so we can take a look.

***

### More tools you might like

If this actor fits your workflow, take a look at our [other Apify scrapers](https://apify.com/futurizerush?fpr=rush) for Threads, TikTok, Instagram, and other platforms.

***

<sub>Keywords: Facebook scraper, Facebook posts, public page scraper, social media data, brand monitoring, lead generation, content analytics, no login scraper, Apify, OpenClaw, Claude Code, Gemini, Antigravity, Codex, ChatGPT</sub>

# Actor input Schema

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

Paste one or more public Facebook Page URLs — for example https://www.facebook.com/nasa. Personal profiles, groups, and events aren't supported.

## `resultsLimit` (type: `integer`):

How many posts to collect from each Page (10–100). The default of 20 covers most Pages. Public Pages expose only a recent window of posts, so the actual count per Page can vary.

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

Skip posts older than this date. Accepts a calendar date (e.g. 2026-01-01), a precise timestamp, or a relative value like '7 days' or '2 weeks'.

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

Skip posts newer than this date. Accepts a calendar date (e.g. 2026-12-31), a precise timestamp, or a relative value like '7 days' or '2 weeks'.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.facebook.com/nasa",
    "https://www.facebook.com/Microsoft"
  ],
  "resultsLimit": 20
}
```

# Actor output Schema

## `overview` (type: `string`):

Quick summary of collected posts

## `engagement` (type: `string`):

Reactions, comments, shares, and views per post

## `media` (type: `string`):

Image and video URLs

## `authors` (type: `string`):

Page details for each collected row

# 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/nasa",
        "https://www.facebook.com/Microsoft"
    ],
    "resultsLimit": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("futurizerush/facebook-post-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/nasa",
        "https://www.facebook.com/Microsoft",
    ],
    "resultsLimit": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("futurizerush/facebook-post-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 '{
  "startUrls": [
    "https://www.facebook.com/nasa",
    "https://www.facebook.com/Microsoft"
  ],
  "resultsLimit": 20
}' |
apify call futurizerush/facebook-post-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/IO79Mn5LW57XuopBI/builds/mTtwdfqOWm5ekkUnU/openapi.json
