# Facebook Reels Scraper (`logical_scrapers/facebook-reels-scraper`) Actor

Extract the reels of public Facebook Pages and profiles without logging in: caption, hashtags, publish time, play count, reactions, comments, shares, duration, video and thumbnail URLs, subtitle tracks and the Page's details on every reel.

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

## Pricing

from $2.50 / 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 Reels Scraper — Extract Reels from Public Facebook Pages

![Facebook Reels Scraper by Goldmine](https://www.logicalscrapers.com/banners/facebook-reels-scraper.jpg?v=b300a9eb66)

This **Facebook reels scraper** turns the reels tab of any public page or profile on **[Facebook](https://www.facebook.com/)** into structured data. Give it page URLs or usernames and it returns the page's **Facebook reels**, newest first, each with its caption and hashtags, publish time, play count, reactions, comments and shares, duration, video and thumbnail URLs, subtitle files, and the page's name and follower count. Teams use it to track what a brand or a competitor publishes as short video, compare how reels perform, and build datasets of short-form video for research.

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

***

### 🚀 Key Features

- 🔎 **Page URLs or usernames** — `natgeo`, `https://www.facebook.com/natgeo`, its `/reels` tab, or a `profile.php?id=…` link
- 🎞️ **Reel data** — caption, hashtags, publish time, duration, width and height, video URLs in HD and SD, thumbnail
- 📈 **Engagement on every reel** — play count, reactions, comments and shares
- 💬 **Subtitle files** — the subtitle tracks Facebook offers for a reel, with their language, when it has any
- 🏷️ **Page details on every reel** — page name, username, id, URL, verified badge, follower count and profile picture
- 📑 **Newest first, per page** — `maxItems` limits reels **per page**, and `untilDate` stops at reels older than a date
- 🛡️ **No login and no proxy** — reads only what Facebook shows logged-out visitors; a proxy is optional
- 📤 **Multiple export formats** — JSON, CSV, Excel, XML via the Apify dataset
- 🔁 **Schedulable runs** — run it daily with `untilDate` to collect each new reel as it is posted

***

### 👥 Who Is This Actor For?

- 📣 **Social media and marketing teams** — seeing which of a brand's reels get the most plays, reactions and shares
- 🕵️ **Competitive analysts** — tracking what competitors publish as short video and how often
- 🎥 **Creators and agencies** — finding the formats, lengths and hashtags that perform on a page
- 🧠 **Researchers** — building datasets of short-form video captions, subtitles and engagement
- 🤖 **AI builders** — feeding reel captions, subtitle files and engagement into an agent or analysis pipeline

### 💡 Common Use Cases

- Scrape Facebook reels from a brand page with their play counts
- Export a competitor's last 100 Facebook reels to a spreadsheet
- Track reactions, comments and shares on a page's new reels every day
- Download the video and subtitle file of each reel a page published this month
- Compare reel length and hashtags against engagement across several pages

***

### 🔗 Supported URL Types

| URL Type | Example |
| -------- | ------- |
| **Page URL** | `https://www.facebook.com/natgeo` |
| **Reels tab** | `https://www.facebook.com/natgeo/reels/` |
| **Username** | `natgeo` |
| **Profile by id** | `https://www.facebook.com/profile.php?id=100044623170418` |

***

### 📥 Input

| Field | Type | Description | Default |
| ----- | ---- | ----------- | ------- |
| `startUrls` | Array | Facebook Pages or public profiles whose reels to scrape: a page URL, its reels tab, a username, or a `profile.php?id=…` link. One entry per page. | Required |
| `maxItems` | Integer | Maximum number of reels to extract **per page** (start URL), newest first. | `10` |
| `untilDate` | String | Stop scraping a page when its reels get older than this date (`YYYY-MM-DD`). Leave empty to scrape until `maxItems` is reached. | — |
| `proxyConfiguration` | Object | Proxy settings. Facebook serves reels without a proxy, so none is used by default. | `{ "useApifyProxy": false }` |

#### Example Input

```json
{
  "startUrls": ["https://www.facebook.com/natgeo", "bbcnews"],
  "maxItems": 10
}
```

***

### 📤 Output

Each dataset item is one reel:

| Field | Type | Description |
| ----- | ---- | ----------- |
| `reelId` | String | The reel's video id |
| `postId` | String | The id of the post that carries the reel |
| `url` | String | Link to the reel |
| `caption` | String | The reel's caption, or `null` when it has none |
| `hashtags` | Array | Hashtags in the caption, without `#` |
| `publishedAt` | String | Publish time (ISO 8601, UTC) |
| `durationSeconds` | Number | Length of the video in seconds |
| `width`, `height` | Number | Video dimensions in pixels |
| `playCount` | Number | Plays, from the rounded figure Facebook shows (for example 165K = 165000) |
| `playCountText` | String | Plays exactly as Facebook shows them, e.g. `165K` |
| `reactionCount` | Number | Reactions (likes and other reactions) |
| `commentCount` | Number | Comments |
| `shareCount` | Number | Shares, from the figure Facebook shows (rounded above 1,000) |
| `shareCountText` | String | Shares exactly as Facebook shows them, e.g. `22K` |
| `thumbnailUrl` | String | Thumbnail image URL |
| `videoUrl` | String | Video file URL, HD when available |
| `videoSdUrl` | String | Video file URL in SD |
| `subtitles` | Array | Subtitle files (`.srt`) Facebook offers for the reel: `locale`, `language` and `url`. Often empty; when present these are usually automatic translations |
| `audioTitle` | String | Title of the reel's soundtrack, or `null` for original audio |
| `isOriginalAudio` | Boolean | Whether the reel uses its own audio |
| `isReshare` | Boolean | Whether the reel is a reshare of another creator's reel |
| `pageName` | String | Name of the page that posted the reel |
| `pageUsername` | String | The page's username |
| `pageId` | String | The page's id |
| `pageUserId` | String | The page's profile id |
| `pageUrl` | String | Link to the page |
| `pageIsVerified` | Boolean | Whether the page has a verified badge |
| `pageFollowers` | Number | The page's follower count |
| `pageProfilePictureUrl` | String | The page's profile picture URL |
| `inputUrl` | String | The start URL or username this reel was found from |

Video, thumbnail and subtitle URLs are signed by Facebook and stop working after a few days, so download the files you need soon after the run.

#### Example Output

A real item from a run on `natgeo`, with URL query strings removed and the subtitle list shortened to two of its nine tracks:

```json
{
  "reelId": "1662551775227163",
  "postId": "1674857580678332",
  "url": "https://www.facebook.com/reel/1662551775227163",
  "caption": "Take a few seconds to relax in the prairie grass 🌼\n\n#IncredibleAnimalJourneys is now streaming on Disney+",
  "hashtags": ["IncredibleAnimalJourneys"],
  "publishedAt": "2026-09-28T17:00:08.000Z",
  "durationSeconds": 24,
  "width": 1080,
  "height": 1920,
  "playCount": 165000,
  "playCountText": "165K",
  "reactionCount": 2510,
  "commentCount": 39,
  "shareCount": 111,
  "shareCountText": "111",
  "thumbnailUrl": "https://scontent-iad3-1.xx.fbcdn.net/v/t15.5256-10/829104156_1662551858560488_3645371836404407794_n.jpg",
  "videoUrl": "https://video-iad3-2.xx.fbcdn.net/o1/v/t2/f2/m366/AQMs1TsItA4niASZ3ahexC11NBEnc98E4DtTdeg--ZRxlHB-bCfSRtik8SF7Iq14mNdGJG_9r_NrHCS0ub_mPX1QaUpJcFJ_y0b-sqn02LiIug.mp4",
  "videoSdUrl": "https://video-iad6-1.xx.fbcdn.net/o1/v/t2/f2/m412/AQNjoTrsbtQs8666ZLw1DHYgbh-qk0a6EffzcldiWyisMGt0Gf99C6r7twxE0OYCS81pF3wt-acXBoK5ky5KnxkgW2J75tASqiar4NTr7g.mp4",
  "subtitles": [
    {
      "locale": "es_LA",
      "language": "Español",
      "url": "https://scontent-iad6-1.xx.fbcdn.net/v/t39.2093-6/825336741_1662614361887571_6377958791615756413_n.srt"
    },
    {
      "locale": "id_ID",
      "language": "Bahasa Indonesia",
      "url": "https://scontent-iad3-1.xx.fbcdn.net/v/t39.2093-6/828468718_1662614345220906_3793431844330220596_n.srt"
    }
  ],
  "audioTitle": null,
  "isOriginalAudio": true,
  "isReshare": false,
  "pageName": "National Geographic",
  "pageUsername": "natgeo",
  "pageId": "23497828950",
  "pageUserId": "100044623170418",
  "pageUrl": "https://www.facebook.com/natgeo",
  "pageIsVerified": true,
  "pageFollowers": 51312813,
  "pageProfilePictureUrl": "https://scontent-iad6-1.xx.fbcdn.net/v/t39.30808-1/475979419_1182307929933302_8257114326919725462_n.jpg",
  "inputUrl": "natgeo"
}
```

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** (you pay per result): each reel saved costs **$0.0035 on the free plan, so 1,000 reels cost $3.50**, falling to $0.0025 per reel ($2.50 per 1,000) on Gold and higher Apify plans. Each run also has a $0.00005 start fee per GB of memory. It runs without a proxy by default, so there is no proxy traffic to pay for. A free Apify account is enough to try it.

***

### ❓ FAQ

#### What is the Facebook Reels Scraper?

It is a Facebook reels scraper that takes public page URLs or usernames and returns each page's reels as structured data, with engagement counts and the page's details on every reel. You can run it from the Apify 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.

#### Do I need a proxy?

No. Facebook serves reels without one, so the default runs with no proxy. If a page comes back blocked, switch the proxy setting to Apify datacenter or residential proxies.

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

Up to `maxItems` per page, newest first, until the page has no older reels. A single run on National Geographic's page returned 200 reels going back six months.

#### Does it handle pagination automatically?

Yes. It keeps loading older reels until it reaches `maxItems`, the `untilDate`, or the end of the page's reels.

#### Why is `playCount` a round number?

Facebook shows plays and shares to logged-out visitors rounded, for example `165K`. The Actor returns that figure as a number in `playCount`, and exactly as shown in `playCountText`. Reactions and comments are exact.

#### Why did a page return no reels?

Pages that have never posted a reel have no reels tab, and the run status names how many such pages it found. Pages that are private, age-restricted or removed cannot be read logged-out.

#### Can I scrape a single reel, or a page's posts and comments?

This Actor reads a page's reels tab. For a page's feed posts and for the comments on a reel, use the other Actors in the Facebook Scraper Suite listed below.

#### 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?

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.

#### 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 Posts Scraper](https://apify.com/logical_scrapers/facebook-page-posts-scraper) — posts, reactions, comments and shares from public Facebook pages
- [Facebook Comments Scraper](https://apify.com/logical_scrapers/facebook-comments-scraper) — comments and replies on public posts, videos, reels and photos
- [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 Group Scraper](https://apify.com/logical_scrapers/facebook-group-posts-scraper) — posts, authors, reactions and photos from public Facebook groups
- [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).

***

### 📬 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.

# Actor input Schema

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

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

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

Maximum number of reels to scrape from each page (start URL), newest first.

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

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

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

Proxy configuration. Facebook serves reels without a proxy, so none is used by default. Switch to Apify datacenter or residential proxies if pages come back blocked.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.facebook.com/natgeo",
    "bbcnews"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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/natgeo",
        "bbcnews"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logical_scrapers/facebook-reels-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/natgeo",
        "bbcnews",
    ],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("logical_scrapers/facebook-reels-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/natgeo",
    "bbcnews"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call logical_scrapers/facebook-reels-scraper --silent --output-dataset

```

## MCP server setup

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