# Facebook Posts Scraper - Pages, Profiles, Reels & Views (`tictechid/vanzi-facebook-posts-scraper`) Actor

Scrape public posts and reels from Facebook pages and profiles, no login. Get text, URLs, timestamps, likes, comments, shares, reaction breakdown, photo and video media, view counts for videos and reels, and captions when available. Filter by date. Export JSON, CSV or Excel.

- **URL**: https://apify.com/tictechid/vanzi-facebook-posts-scraper.md
- **Developed by:** [TicTech](https://apify.com/tictechid) (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 $1.80 / 1,000 posts

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 public posts and reels from any **Facebook page or public profile** — text, timestamps, reaction breakdowns, comment and share counts, photos, video thumbnails and optional video caption text — as clean JSON, CSV or Excel. **No Facebook account, no cookies, no login.**

### What does Facebook Posts Scraper do?

Give it one or more Facebook page or profile URLs and it returns their latest public posts, newest first:

- 📝 **Post text** and permalink (`url`, `postId`, `topLevelUrl`)
- 🕒 **Publish time** as ISO date and Unix timestamp
- ❤️ **Engagement**: total reactions, comments, shares, plus per-reaction counts (Like, Love, Care, Haha, Wow, Sad, Angry)
- 🖼️ **Media**: photos (image URL, width/height, Facebook's auto-generated image description), video and reel thumbnails, video duration
- 🎬 **Reels and videos** flagged with `isVideo` / `isReel`, with **view counts** (`viewsCount`) for videos and reels
- 💬 **Video caption text** (optional) when Facebook provides a captions track
- 🔁 **Shared posts** flagged with `isShared` plus the original post link
- 👤 **Author**: page/profile id, name, profile URL and profile picture

### Why use it?

- **No login required** — nothing to get banned, no cookies to rotate.
- **Date filters that save money** — `onlyPostsNewerThan` stops paging as soon as the cutoff is reached, so you only pay for what you need.
- **Pages and personal profiles** — works with `facebook.com/<name>`, `profile.php?id=…` and `/people/…` URLs.
- **Zero setup** — proxies are managed automatically; there is nothing to configure.
- **Robust** — automatic retries with fresh proxy sessions; an unavailable URL never fails the whole run and partial results are always kept.
- **Clean, flat output** ready for spreadsheets, BI tools, LLM pipelines and social listening dashboards.

### Use cases

- Social media monitoring and competitor benchmarking
- Brand and campaign performance tracking
- Content research and trend analysis
- Building datasets for AI / NLP (post text + video captions)

### How to use it

1. Click **Try for free**.
2. Add Facebook page or profile URLs to **Facebook page or profile URLs**.
3. Optionally set **Max posts per URL** and a date window (`2026-09-01` or relative like `7 days`).
4. Click **Start** and download the results as JSON, CSV, Excel or HTML.

#### Input example

```json
{
  "startUrls": [{ "url": "https://www.facebook.com/humansofnewyork/" }],
  "resultsLimit": 20,
  "onlyPostsNewerThan": "30 days",
  "captionText": false
}
```

#### Output example

```json
{
  "facebookUrl": "https://www.facebook.com/humansofnewyork/",
  "postId": "1674632237561092",
  "pageName": "Humans of New York",
  "url": "https://www.facebook.com/humansofnewyork/posts/pfbid0jDoHLbj...",
  "time": "2026-10-13T15:34:09.000Z",
  "timestamp": 1791905649,
  "user": { "id": "100050429952420", "name": "Humans of New York", "profileUrl": "https://www.facebook.com/humansofnewyork", "profilePic": "https://scontent..." },
  "text": "Last year I got an email that Little Humans was going out of print...",
  "likes": 5359,
  "comments": 125,
  "shares": 94,
  "topReactionsCount": 6,
  "reactionLikeCount": 3629,
  "reactionLoveCount": 1661,
  "isVideo": false,
  "isReel": false,
  "media": [{ "__typename": "Photo", "id": "1674631467561169", "thumbnail": "https://scontent...", "photo_image": { "uri": "https://scontent...", "height": 1365, "width": 2048 }, "ocrText": "May be an image of ..." }],
  "isShared": false,
  "feedbackId": "ZmVlZGJhY2s6MTY3NDYzMjIzNzU2MTA5Mg==",
  "facebookId": "100050429952420",
  "inputUrl": "https://www.facebook.com/humansofnewyork/"
}
```

Fields Facebook does not expose to logged-out visitors are returned as `null` — values are never guessed.

### Integrations and API

Run it from your own stack:

- **API**: start runs and fetch results with the [Apify API](https://docs.apify.com/api/v2) or the official JavaScript / Python clients.
- **Schedules**: run daily or hourly with `onlyPostsNewerThan: "1 day"` to collect only fresh posts.
- **Integrations**: send results to Google Sheets, Slack, Make, Zapier, n8n, Airbyte, webhooks or any S3-compatible storage.
- **AI agents**: use the Actor as a tool via the Apify MCP server.

### Limitations

- Only **public** content visible to logged-out visitors. Private profiles, groups, age- or region-restricted pages are not supported.
- **Direct video file URLs** (`videoUrl`) are not exposed in public timelines and are `null`; video/reel thumbnails, duration and permalinks are returned.
- **Video caption text** is only available for videos where Facebook publishes a captions track (about half in our tests); otherwise `captionText` is `null`. Captions may be in an auto-translated language.
- `textReferences`, `link` (external link), `collaborators`, `paidPartnership` and `pageAdLibrary` are returned when Facebook includes them, and are commonly `null`/empty for logged-out access.
- View counts are returned for videos and reels; Facebook does not show view counts for photo/text posts, so `viewsCount` is `null` there.
- Comment text and reactor lists are not included — counts only.
- Some pages show fewer posts to logged-out visitors than to logged-in users.

### Usage Limits

| Plan | Max items per run |
| --- | --- |
| Free tier | free tier max items per run ≤ 100 |
| Paid plans | No Actor-side cap — limited only by `resultsLimit` and your budget |

When the free limit is reached the run finishes successfully and keeps all collected results. Need more? Upgrade at <https://apify.com/pricing?fpr=maxknj>.

### FAQ

**Do I need a Facebook account?** No. The Actor only reads publicly visible content.

**Is scraping Facebook legal?** Scraping publicly available data is generally permitted, but personal data is protected by regulations such as GDPR. Only collect data you have a legitimate reason to process and consult your lawyer if unsure.

For more details, contact the maintainer or email us at contact@tictech.id

# Actor input Schema

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

Public Facebook pages or profiles, e.g. https://www.facebook.com/humansofnewyork/ or https://www.facebook.com/profile.php?id=...

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

Maximum number of posts to return per page/profile.

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

YYYY-MM-DD or relative like '7 days'. Pagination stops once this date is passed.

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

YYYY-MM-DD or relative like '7 days'.

## `captionText` (type: `boolean`):

Try to download auto-generated/uploaded caption text for videos and reels when Facebook exposes a captions file publicly.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.facebook.com/humansofnewyork/"
    }
  ],
  "resultsLimit": 20,
  "onlyPostsNewerThan": "30 days",
  "captionText": false
}
```

# Actor output Schema

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

No description

## `reactions` (type: `string`):

No description

## `summary` (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/humansofnewyork/"
        }
    ],
    "resultsLimit": 20,
    "onlyPostsNewerThan": "30 days"
};

// Run the Actor and wait for it to finish
const run = await client.actor("tictechid/vanzi-facebook-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": [{ "url": "https://www.facebook.com/humansofnewyork/" }],
    "resultsLimit": 20,
    "onlyPostsNewerThan": "30 days",
}

# Run the Actor and wait for it to finish
run = client.actor("tictechid/vanzi-facebook-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": [
    {
      "url": "https://www.facebook.com/humansofnewyork/"
    }
  ],
  "resultsLimit": 20,
  "onlyPostsNewerThan": "30 days"
}' |
apify call tictechid/vanzi-facebook-posts-scraper --silent --output-dataset

```

## MCP server setup

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