# Facebook Post and Reel Scraper (`insights_data/facebook-post-and-reel-scraper`) Actor

Scrape Facebook posts, reels and videos from links, pages, profiles and groups. Get views, reactions, comments, shares, caption, date, video links, transcript and author as clean JSON. Date filters, live results, no account or cookies needed.

- **URL**: https://apify.com/insights_data/facebook-post-and-reel-scraper.md
- **Developed by:** [Insights Data](https://apify.com/insights_data) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

### 🎬 What is Facebook Post and Reel Scraper?

**Facebook Post and Reel Scraper** helps social media managers, marketers and agencies with Facebook competitor analysis: see how the reels and posts of any public page perform, without copying numbers by hand. Paste reel, video or post links, or the links of pages, profiles and public groups, and this Facebook reels scraper saves one row per post with views, reactions, comments, shares, caption, date, video links and author details, plus the transcript when Facebook has one.

You don't need a Facebook account or cookies, and you can try it on the Apify Free plan with the $5 monthly credit.

- 🏁 **Competitor tracking:** compare the latest reels and posts of competitor pages by views, reactions, comments, shares and engagement rate.
- 📣 **Facebook brand monitoring:** collect new posts from your own pages and the pages you choose to watch, on a schedule.
- 🤝 **Influencer vetting:** check a creator's reel views, engagement, followers and verification before a Facebook influencer marketing campaign.
- 💭 **Comment analysis:** export comments and replies, then run Facebook comment sentiment analysis in your own tool.
- 🧪 **Content ideas:** use captions, hashtags and transcripts for Facebook content research.
- 📺 **Facebook reels analytics:** see views, plays and duration of reels and videos side by side.

#### What can Facebook Post and Reel Scraper do?

- 🔗 Read post, reel, video, share and fb.watch links, one row per post
- 📰 Read the latest posts of public pages, profiles and public groups, with an optional date filter
- 📈 Return views, plays, reactions (total and by type), comments, shares, engagement and engagement rates
- 🗣️ Return video duration and HD and SD video links, plus the transcript when Facebook has one
- 💬 Collect comments and replies in the order you pick
- 👤 Add author handle, name, followers, category and verification
- ⚡ Save each post the moment it is read, so the table fills while the run is going
- 🔌 Run it on a schedule, through the API, or with integrations such as Google Drive, Make and Zapier

***

### 📊 Facebook reels scraper data fields

Here is the Facebook reels data you get for each post. Field names are the same as in the export.

| Field | Field | Field |
|---|---|---|
| 🔗 Post link `url`, input link `originalUrl`, `shortcode`, `postId` | 👤 Author `author`, `authorName`, `authorId`, `authorUrl` | 👁️ Views `views`, plays `plays` |
| ❤️ Reactions `likes`, `reactionsBreakdown`, `topReactionsCount` | 💬 Comment count `comments`, collected comments `topComments` | 🔁 Shares `shares` |
| 📝 Caption `caption`, `mentions`, `links` | 📅 Date posted `datePosted`, `timestamp` | 🏷️ Hashtags `hashtags` |
| ⏱️ Duration `durationSec` | 🎞️ Video links `videoUrlHd`, `videoUrlSd`, cover `thumbnailUrl` | 🗣️ Transcript `transcript` |
| 📈 Engagement `engagement`, `engagementRate`, `engagementRateByViews` | ⭐ Author followers `authorFollowers`, `authorCategory`, `authorVerified` | 🖼️ Photos and videos `media`, `albumTruncated` |
| 🧾 Post type `type` (reel, video, photo, album, link, text) | 🤑 Paid partnership flag `paidPartnership` | 🔄 Shared post `sharedPost`, `collaborators` |

What some fields mean:

- **`views`** is the view count Facebook shows for a video or reel. **`plays`** is Facebook's play count, when it shows one. They are two different counters, so they don't have to match.
- **`likes`** holds all reaction types together. `reactionsBreakdown` gives the count per reaction type, and `topReactionsCount` is the sum of the main reaction types.
- **`engagement`** = reactions + comments + shares.
- **`engagementRate`** is the Facebook engagement rate by followers: engagement divided by the author's followers, in percent. It is only filled when the follower count is known.
- **`engagementRateByViews`** = engagement divided by views, in percent.
- **`topComments`** holds the comments collected for the post. With **Comments per post** at 0, it can still hold the few comments Facebook shows with the post.
- **`datePosted`** is the publish time in ISO format. `scrapedAt` is the time the post was read.

> **Note:** A value Facebook does not show stays `null`. `shares` is empty on posts with no visible share count. `transcript` is empty when Facebook has no transcript for the video. For posts read from a **group** link, the follower, category and verification fields and the engagement rate are based on the group's own details, not on the person who posted.

#### Separate tables

Each run fills the main table and six extra tables. You find all of them in the run's **Output** tab.

| Table | What is in it |
|---|---|
| 📰 All posts | Every post with its main fields |
| 📈 Engagement | Views, plays, reactions, comments, shares and engagement rates per post |
| 🎞️ Video details | Duration, cover, HD and SD links and transcript per video or reel |
| 👤 Authors | Name, handle, page link, followers, category and verification per post |
| 💬 Comments | One row per comment and reply, with text, time, author, reactions and reply count |
| 🖼️ Media | One row per photo or video of a post, including album photos |
| ⚠️ Errors | Links that could not be read, with a short reason |

Use the Authors table for Facebook creator analytics: it shows who posted, their follower count, category and verification in one list.

#### What data can't Facebook Post and Reel Scraper extract?

- Private groups, private profiles and posts that need a login
- Facebook search results (search links are not supported)
- The video files themselves. You get HD and SD video links, not downloaded files
- Marketplace listings, ads, page reviews and group member lists

***

### 🚀 How to scrape Facebook reels and posts

You don't need any experience with data collection to start.

1. [Create a free Apify account](https://console.apify.com/sign-up) with your email.
2. Open [Facebook Post and Reel Scraper](https://apify.com/insights_data/facebook-post-and-reel-scraper).
3. In **Facebook links**, replace the two example links with your own reel, video or post links, or page, profile and public group links.
4. Click **Start**. Posts appear in the **Output** tab as they are saved.
5. Download the results from the **Output** tab (see the Output section below).

> 💡 **The example links:** the form comes filled with a MrBeast reel and the MrBeast page. If you click **Start** without changing them, you get that reel plus up to 10 of the page's latest posts, and each saved post is charged.

#### How to scrape Facebook posts from pages, profiles and groups

Paste the page, profile or public group link and set **Max posts per run**. The run reads the newest posts of each link until that number or your date filter is reached. Read "Max posts per run with several pages" in the Input section before you add many pages to one run.

#### Common jobs and what to do

| Job | What to paste and read |
|---|---|
| 👁️ Facebook reel view counter for a list of reels | Paste the reel links, read `views` and `plays`. The numbers are from the moment of the run |
| 📅 Facebook reel upload date checker | Paste the reel links, read `datePosted` |
| 🏷️ Collect Facebook reels hashtags of a creator | Paste the page link, read `hashtags` in the All posts table |
| 💬 Export Facebook comments to Excel | Set **Comments per post**, then export the Comments table as Excel |
| 📗 Export Facebook comments to Google Sheets | Export the Comments table as CSV, then in Google Sheets use **File → Import** |

***

### 💲 Facebook reels scraper pricing and cost

Facebook Post and Reel Scraper uses **pay-per-event** pricing. Your bill has three parts:

1. **Results:** a fee for each post or reel saved in the main table. The price depends on your Apify plan (table below).
2. **Start fee:** a tiny fee each time a run starts, $0.00005 at the default memory (1 GB).
3. **Platform usage:** the resources the run uses on your Apify account, such as compute, data transfer and storage, and Apify Proxy traffic if the run switches to it. It is billed at your plan's rates and shown on the run page.

| Apify plan | Price per result | Price per 1,000 results |
|---|---|---|
| 🆓 Free | $0.005 | $5.00 |
| 🌱 Starter | $0.0045 | $4.50 |
| 📦 Scale | $0.004 | $4.00 |
| 🏢 Business and higher | $0.0035 | $3.50 |

The plan discount applies to the result price only. The start fee is the same on every plan, and platform usage is billed at your Apify plan's own rates.

Result charges are easy to work out. For example, 100 posts on the Starter plan = 100 x $0.0045 = **$0.45**, plus the start fee and platform usage.

- Comments, replies and the rows of the extra tables are not charged as results. Collecting many comments, or keeping **Video details and transcript** on, means more pages are loaded, so platform usage goes up.
- Rows for links that could not be read are saved, but not charged.
- Platform usage depends on your links and settings, so there is no fixed figure. Do a small test run with a few links, then open the run page and read the full cost there.
- To cap your spend, set a **maximum charge limit** in the run options when you start a run. When the limit is reached, the run stops and keeps everything saved so far.

See the [pricing tab](https://apify.com/insights_data/facebook-post-and-reel-scraper/pricing) for the current prices.

#### Is scraping Facebook reels free?

You can start for free. The Apify Free plan gives you $5 in monthly credit, which pays the result charges and the platform usage of your runs. Free-plan runs work the same as paid runs, with the same settings and the same data.

***

### ⬇️ Input

The only required input is **Facebook links**. Everything else is optional and has a default. You can fill the form in Apify Console or send the input as JSON through the API.

#### Settings most people change

| Setting | What it does | Default |
|---|---|---|
| 🔗 **Facebook links** (`urls`) | Post, reel, video, share and fb.watch links return that post. Page, profile and public group links return their latest posts. | two example links |
| 🔢 **Max posts per run** (`max_items`) | Maximum posts taken from all page, profile and group links together. `0` = no limit from this setting. Direct post and reel links don't count toward it. | 10 |
| 📅 **Only posts newer than** (`newer_than`) | A date in `YYYY-MM-DD` format, for example `2025-01-01`. Only filters posts read from pages, profiles and groups. A direct post link comes back whatever its date. Empty = no limit. | empty |
| 💬 **Comments per post** (`comments_per_post`) | Top-level comments collected per post. `0` = none, `-1` = every comment Facebook serves. | 0 |
| 🗨️ **Replies per comment** (`replies_per_comment`) | Replies per comment. `0` = none, `-1` = every reply. Needs **Comments per post** above 0. | 0 |
| 🔃 **Comment order** (`comments_sort`) | `all` (Facebook's "All comments" order), `most_relevant` or `newest`. If a post doesn't offer the chosen order, Facebook's default order is used. | `all` |
| 🗣️ **Video details and transcript** (`include_video_details`) | Opens each video or reel page for refreshed view and play counts and the transcript. See "Views, plays and the Video details setting" below. | on |
| ⭐ **Author followers and category** (`include_author_info`) | Adds follower count, category and verification for the author of each direct link. Posts from a page link already carry that page's details. | on |
| 🌐 **Proxy** (`proxyConfiguration`) | Optional. No proxy is used by default. If Facebook rejects requests, the run switches to Apify Proxy on its own. | off |

Here is a small example: one reel plus the latest 10 posts of a page.

```json
{
  "urls": [
    "https://www.facebook.com/reel/2303532030446040/",
    "https://www.facebook.com/mrbeast/"
  ],
  "max_items": 10,
  "proxyConfiguration": { "useApifyProxy": false }
}
```

See the [input tab](https://apify.com/insights_data/facebook-post-and-reel-scraper/input-schema) for every field.

#### Facebook links

- ✅ Good: `https://www.facebook.com/reel/2303532030446040/`, an fb.watch link, `https://www.facebook.com/mrbeast/`, a public group link
- ❌ Bad: a Facebook search link, a private group, a link from another website

#### Max posts per run with several pages

**Max posts per run** is one shared total for all page, profile and group links in the run. It is also the most any single link can give. The links are read at the same time, and once the total is reached the run stops taking new posts. So the split between pages is not even: a page that posts a lot can use most of the total, and another page may get few or none.

To get the same number from every page, save **one task per page**, each with **Max posts per run** set to the number you want (for example 10).

> ⚠️ `0` on a large page means many posts and a higher cost. For a first test, keep the default 10.

#### Views, plays and the Video details setting

- **On (default):** the Actor opens each video's or reel's own page and takes the latest view and play counts and the transcript from there. If that page can't be read, the counts for that post can be empty.
- **Off:** views and plays come from what the post itself shows, and there is no transcript. Duration and HD/SD video links come back either way.

#### Comments and replies

Set **Comments per post** above 0 to collect comments. Comments are only fetched for posts that have comments. Replies need comments: if **Comments per post** is 0, replies are skipped.

***

### ⬆️ Output

Each post is saved as soon as it is read. Open the run in Apify Console and go to the **Output** tab. There you see the All posts table, the six extra tables (Engagement, Video details, Authors, Comments, Media, Errors) and a **Run summary** with the counts for the run.

**To download a table:** in the run's **Output** tab, open the table you need (for example Comments) and export it as JSON, CSV, Excel, XML or HTML. Each table is exported on its own.

#### JSON example

Results for the input example above (one item, shortened):

```json
{
  "url": "https://www.facebook.com/reel/2303532030446040/",
  "originalUrl": "https://www.facebook.com/reel/2303532030446040/",
  "shortcode": "2303532030446040",
  "status": "ok",
  "platform": "facebook",
  "author": "mrbeast",
  "authorName": "MrBeast",
  "authorId": "100044548384499",
  "views": 9972745,
  "likes": 61504,
  "comments": 3402,
  "shares": null,
  "caption": "Climb With $384,000, Win It",
  "datePosted": "2026-10-09T16:00:53.000Z",
  "type": "reel",
  "durationSec": 469.67,
  "engagement": 64906,
  "authorFollowers": 50000000
}
```

#### Row status and what is billed

- `status` is `ok` for every saved post. Each of these rows is one billed result.
- A link that could not be read (for example a private group, a page that was not found, or a link that is not a Facebook link) gets a row with `status` starting with `error:`. The same link is listed in the Errors table with a short reason. These rows are **not charged**.
- If the same post shows up from two links in one run, it is saved once.

***

### 💡 Tips, limits and scheduled runs

#### How many results can you scrape?

There is no per-run cap from the Actor on any plan. The real number depends on how many public posts a page, profile or group has, your **Max posts per run** and date settings, and your maximum charge limit. The Actor has safety stops for very long feeds, so a feed may stop before its oldest post. With a date filter, a feed stops once it reaches posts older than your date. A quick test run shows what to expect for your pages.

#### How to keep costs down

- 🔢 Keep **Max posts per run** small and use **Only posts newer than** to skip old posts.
- 💬 Leave comments at 0 unless you need them.
- 🗣️ Turn off **Video details and transcript** when the post's own counts are enough and you don't need transcripts.

#### Run it on a schedule

The Actor doesn't compare runs for you. Each run is a fresh snapshot. Here is a simple weekly setup that keeps every snapshot in one place:

1. Fill the input with **one** page link (for example a competitor page) and set **Max posts per run** to 10.
2. Click **Save as a new task** at the top right of the Actor page. Repeat with the other pages, one task per page.
3. Open **Schedules** in Apify Console, create a weekly schedule and add your tasks.
4. On each task, open **Integrations → Upload results to GDrive**, click **Connect with Google**, pick a file name and the CSV format, then save and enable it. After every successful run, the main table (All posts) is uploaded to Google Drive as a file. The extra tables are not part of this upload; export them separately from the run's Output tab.
5. To see growth, open the CSV files in Google Sheets, paste them below each other, and use a filter or pivot table on `postId`. Each row's `scrapedAt` tells you which run it came from, so you can see how `views`, `likes`, `comments` and `shares` change week by week.

#### Known issues

- ⚠️ The number of comments collected can be lower than the count Facebook shows, because Facebook serves fewer comments to logged-out visitors.
- ⚠️ With **Video details and transcript** on, view and play counts can be empty for a post whose video page could not be read.
- ⚠️ `albumTruncated` is `true` when not every photo of an album could be read.
- ⚠️ If a run ends with no posts at all, check that the links are public and open without a login, then try again later.

***

### 🔌 Facebook reels scraper API and integrations

#### Can I use it as a Facebook reels API?

Yes. With the [Apify API](https://docs.apify.com/api/v2) you can start runs, schedule them and read the results from your own code. Each table has its own API link in the **Output** tab, so you can also use it as a Facebook post data API for your app or dashboard. Use the `apify-client` [package for Node.js](https://apify.com/insights_data/facebook-post-and-reel-scraper/api/javascript) or the [package for Python](https://apify.com/insights_data/facebook-post-and-reel-scraper/api/python). The [API tab](https://apify.com/insights_data/facebook-post-and-reel-scraper/api) has code you can copy.

#### Facebook scraper Python example

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("insights_data/facebook-post-and-reel-scraper").call(run_input={
    "urls": [
        "https://www.facebook.com/reel/2303532030446040/",
        "https://www.facebook.com/mrbeast/"
    ],
    "max_items": 10
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["url"], item["views"], item["likes"])
```

#### Can I integrate it with other apps?

Yes, through [Apify integrations](https://apify.com/integrations) and [webhooks](https://docs.apify.com/integrations/webhooks). Two workflows that fit this Actor:

- 📁 **Weekly CSV files in Google Drive (no code):** open your saved task → **Integrations** → **Upload results to GDrive** → **Connect with Google** → choose a file name and CSV → **Save** and enable. Every successful run then uploads the main table (All posts) to your Drive. Export extra tables such as Comments separately from the Output tab. This is the tracking setup from "Run it on a schedule" above.
- 🔔 **Social media monitoring alerts in Slack:** this needs a Make or Zapier account. Add a webhook for "run succeeded" on your task that starts a Make or Zapier scenario. The scenario reads the run's results with the Apify app and posts the reels with the most views to a Slack channel.

#### Can I use it with AI agents (MCP)?

Yes. Connect the Actor to Claude and other AI assistants through the Apify MCP server. Open the [MCP tab](https://apify.com/insights_data/facebook-post-and-reel-scraper/api/mcp) for setup steps.

***

### 🧩 Other Facebook, Meta and social scrapers

These tools from the same developer cover the rest of your social media data:

- 📘 [Facebook Post Scraper](https://apify.com/insights_data/facebook-post-scraper): public Facebook posts from pages, profiles, groups and post links, with text, date, author, reactions by type, comments with replies, shares, photos, videos, views and transcripts.
- 📸 [Instagram Profile Scraper](https://apify.com/insights_data/instagram-profile-scraper): public Instagram profiles with bio, followers, engagement rate and latest posts.
- 🧵 [Search Threads By Keywords](https://apify.com/insights_data/search-threads-by-keywords): Threads posts by keyword, hashtag, phrase or username, with likes, replies and author details.
- 🎵 [TikTok Profile Scraper](https://apify.com/insights_data/tiktok-profile-scraper): TikTok profile videos with views, likes, comments, shares, hashtags and optional transcripts.
- 🗯️ [TikTok Comments & Replies Scraper](https://apify.com/insights_data/tiktok-comments-replies-scraper): TikTok comments and replies with likes, dates and commenter details.

***

### ❓ FAQ

#### Which Facebook scraper should I pick: this one or Facebook Post Scraper?

Both read public posts from pages, profiles, groups and post links, without an account. Pick **Facebook Post and Reel Scraper** when your list is mostly reels and videos (including share and fb.watch links), when you need HD and SD video links, or when you want separate tables for engagement, video details, authors, comments and media. Pick [Facebook Post Scraper](https://apify.com/insights_data/facebook-post-scraper) when you mainly work with post text, reactions by type and comment threads. Prices can differ, so check the pricing tab of each Actor before you decide.

#### Is it legal to scrape Facebook?

Facebook data extraction of public content is generally legal, but you are responsible for how you use the data. Respect personal data rules such as the GDPR, collect personal data only when you have a legitimate reason, and keep [Facebook's Terms of Service](https://www.facebook.com/terms.php) in mind. This is not legal advice. Ask a lawyer about your specific case.

#### How does Facebook Post and Reel Scraper work?

It works like a visitor opening the public Facebook pages you list, only faster. It checks whether each link is a single post or a page, profile or group. It reads single posts directly and reads the latest posts of feeds until your limit or date filter stops it. Then it adds video details, comments and author details as you set them, and saves each post right away.

#### Can I scrape single reel links?

Yes. You can use it as a Facebook reel scraper for one reel or a long list of reels. Each reel becomes one row, and direct links don't count toward **Max posts per run**.

#### Do fb.watch and share links work?

Yes. Normal videos, fb.watch and share links work the same way as reel links, so it is a Facebook video scraper too. Each one returns the post with its views, duration and video links.

#### Is this a Facebook reels video scraper or a downloader?

It is a Facebook reels video scraper, not a downloader. It returns data plus the HD and SD video links (`videoUrlHd`, `videoUrlSd`). It doesn't save video files.

#### How do I extract Facebook video link addresses in HD and SD?

Paste the reel or video links and start the run. Every video and reel row has `videoUrlHd` and `videoUrlSd`, with or without the **Video details and transcript** setting. The Video details table shows them next to duration and transcript.

#### Can I get video data without transcripts?

Yes. Turn off **Video details and transcript** and use it as a plain Facebook video data extractor. You still get duration, video links, the cover image, and the views and plays that the post itself shows.

#### Can I extract Facebook video transcript text?

Yes, when Facebook has a transcript for the video. Keep **Video details and transcript** on and the text lands in `transcript`. If you were looking for a Facebook reels transcript extractor that turns speech into text, note that this Actor doesn't transcribe audio itself. Videos without a Facebook transcript get an empty field.

#### Can I turn a Facebook reel to transcript text for many reels at once?

Yes. Paste many reel links in one run. Each reel row gets its transcript when Facebook has one. Reels without one stay empty, because the Actor reads Facebook's own transcript and is not a speech-to-text Facebook video transcript extractor.

#### How to check Facebook reels analytics for any public reel?

Paste the reel links and read `views`, `plays`, `likes`, `comments`, `shares` and `engagementRate`. These are the public numbers at the time of the run. To follow them over time, use the weekly setup in "Run it on a schedule".

#### Can I get Facebook page analytics for a competitor's page?

You get the public numbers of each post: views, plays, reactions, comments, shares and engagement rates, plus the page's follower count. You don't get private page insights such as reach or audience data.

#### How do I get the same number of posts from several pages?

If you use it as a Facebook page posts scraper for many pages, keep in mind that **Max posts per run** is shared by all pages in a run, so the split can be uneven. For the same number of posts per page, use one task per page, as explained in "Max posts per run with several pages".

#### Are photo and text posts saved too?

Yes. Photo, album, link and text posts are saved with caption, reactions, comments, shares, hashtags, mentions and media, so it also works as a Facebook post data extractor for posts without video. `type` tells you the kind of post.

#### Can I use it as a Facebook comments scraper?

Yes, for the posts you give it. Set **Comments per post** (and **Replies per comment** if you want replies). Each comment and reply becomes a row in the Comments table. For TikTok comments, use [TikTok Comments & Replies Scraper](https://apify.com/insights_data/tiktok-comments-replies-scraper).

#### Does it work as a Facebook group post scraper?

Yes, for **public** groups. Paste the group link and it reads the latest posts of that group. Private groups can't be read and show up in the Errors table. For group posts, the follower-based fields describe the group.

#### Can I use it for Facebook social listening?

Only for the pages, profiles, groups and posts you give it. Facebook search links are not supported, so it can't find posts by keyword across Facebook. To find posts by keyword on Threads, use [Search Threads By Keywords](https://apify.com/insights_data/search-threads-by-keywords).

#### Do I need my own Facebook scraper API key?

No. You don't need a Facebook API key, account or cookies. To call the Actor from your own code, you only need your Apify API token.

#### Why am I getting fewer results than expected?

- **Max posts per run** is shared by all page, profile and group links (default 10).
- **Only posts newer than** skips older posts from feeds.
- Check that the links are public and open without a login.
- Look at the Errors table for links that could not be read.
- Comments: Facebook serves fewer comments to logged-out visitors than its count shows.

***

### 📧 Support and feedback

Found a bug or have a feature request? Please create an issue on the [Issues tab](https://apify.com/insights_data/facebook-post-and-reel-scraper/issues/open).

Need a **custom solution**, more fields or a different Facebook data set? Contact us at hello.insights.data@gmail.com.

Built and maintained by [insights_data](https://apify.com/insights_data).

# Actor input Schema

## `urls` (type: `array`):

One or many links. Post, reel, video, share and fb.watch links return that post. Page, profile and public group links return their latest posts. Bulk input is supported.

## `max_items` (type: `integer`):

Maximum posts collected from page, profile and group links in total. 0 = all. Direct post and reel links are always returned.

## `newer_than` (type: `string`):

Date like 2025-01-01, or a relative age like 7d, 2w, 3mo, 1y. Leave empty for no limit.

## `comments_per_post` (type: `integer`):

Top-level comments collected per post. 0 = none, -1 = every comment Facebook serves.

## `replies_per_comment` (type: `integer`):

Replies collected per comment. 0 = none, -1 = every reply. Needs comments per post above 0.

## `comments_sort` (type: `string`):

Order in which comments are collected.

## `include_video_details` (type: `boolean`):

Adds refreshed view and play counts, duration, HD and SD links and the transcript for every video and reel.

## `include_author_info` (type: `boolean`):

Adds follower count, category and verification of each author.

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

No proxy is used by default. If Facebook rejects requests, the run switches to a stronger proxy on its own.

## Actor input object example

```json
{
  "urls": [
    "https://www.facebook.com/reel/2303532030446040/",
    "https://www.facebook.com/mrbeast/"
  ],
  "max_items": 10,
  "comments_per_post": 0,
  "replies_per_comment": 0,
  "comments_sort": "all",
  "include_video_details": true,
  "include_author_info": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (type: `string`):

Every post or reel with its numbers, caption, author and video links.

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

Views, reactions, comments, shares and engagement rates per post.

## `video_details` (type: `string`):

Duration, HD / SD links and transcript per video.

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

Author name, followers, category and verification per post.

## `comments` (type: `string`):

One row per comment and reply.

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

One row per photo or video of a post.

## `errors` (type: `string`):

Links that could not be read.

## `summary` (type: `string`):

Counts for this run.

# 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 = {
    "urls": [
        "https://www.facebook.com/reel/2303532030446040/",
        "https://www.facebook.com/mrbeast/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("insights_data/facebook-post-and-reel-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 = {
    "urls": [
        "https://www.facebook.com/reel/2303532030446040/",
        "https://www.facebook.com/mrbeast/",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("insights_data/facebook-post-and-reel-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 '{
  "urls": [
    "https://www.facebook.com/reel/2303532030446040/",
    "https://www.facebook.com/mrbeast/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call insights_data/facebook-post-and-reel-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,insights_data/facebook-post-and-reel-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/nhIzKZqVR94FksU3H/builds/XoTdj9ON7T4SHDqUl/openapi.json
