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

Facebook Reels Scraper — Extract Facebook Reels data including captions, views, reactions, comments, shares, timestamps, creator details, hashtags, media URLs, and Reel links. Useful for content research, competitor analysis, engagement tracking, and social media monitoring.

- **URL**: https://apify.com/socialdataapi/facebook-reels-scraper.md
- **Developed by:** [Social Data API](https://apify.com/socialdataapi) (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.

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 — Captions, Play Counts and Owner Details

Facebook Reels Scraper collects the public reels from any Facebook page or profile: captions, publish time, play counts, video and owner details, reel and post links, and audio data. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a social-video analytics pipeline. **No Facebook account or login needed**: add page links or handles and watch rows land while the run is still going. Start with one page, add every page you track to follow Facebook reels data over time.

***

### What data can I extract with Facebook Reels Scraper?

Using this Facebook Reels API, you will be able to extract the following Facebook reels data:

| | | | |
|---|---|---|---|
| 🔗 Reel link | 💬 Caption | 📅 Publish time (UTC) | ▶️ Play count (number) |
| 🔢 Play count (as shown, e.g. "5.4M") | 🎬 Video details (length, size, thumbnail) | 👤 Owner name, profile link & verified flag | 🏷️ Owner type (page or profile) |
| 🔗 Post link | 🔗 Reel permalink | 🎵 Track title & album art (if available) | 🎵 Original-audio flag |
| 🔁 Reshare info | 🎛️ Remix info | 🆔 Facebook's own tracking ids | 🎯 Your matching input entry |

This facebook reels data extractor only ever returns what a logged-out visitor can already see on the page, so you can extract Facebook reels data without needing a Facebook account.

***

### How to use Facebook Reels Scraper

Anyone who needs a page's or profile's reels in a clean, repeatable shape — a social media manager, a competitor researcher, or an AI agent — gets every public reel back as structured rows from a single run.

**Copy to your AI assistant:**

```text
This Apify Actor returns the public reels of a Facebook page or profile as structured JSON: caption, publish time, play count, video details, owner name and link, audio details, and Facebook's own tracking ids. Use it whenever someone needs a Facebook page reels scraper without cookies, a login, or a browser - monitoring a brand's reel performance, comparing competitor posting activity, or pulling grounded context for an AI agent. Inputs: startUrls (one Facebook page or profile link or handle per line), resultsLimit (integer, 1-10000, default 10, max reels per profile), onlyPostsNewerThan (optional date or relative value like "30 days", skips older reels), proxyConfiguration (Apify Proxy settings). Facebook does not show likes, comments or shares on reels to logged-out visitors, so those are never part of the output, and a profile with no public Reels tab returns zero rows with a reason in the log.
```

#### Facebook Reels Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at Apify's MCP server and it can read Facebook reels on its own: captions, play counts, video, owner and audio details for any page or profile you give it. No glue code, no scraping logic in your prompts. Once connected, your agent can search for it, add it to its toolbox and call it mid-conversation, passing a page link and a result cap the same way a person would fill in the input form.

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open it in the Apify Store.
3. Paste the Facebook page or profile link, or just the handle.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale Facebook Reels Scraper to bulk

Add every Facebook page or profile you want to follow as its own line in the profile list; up to four profiles are scraped at the same time, and the per-profile result cap applies to each one separately, so five profiles capped at 100 reels each can return up to 500 reels in one run. This makes it a practical bulk Facebook Reels Scraper for a whole watch-list of pages at once. For a running record, schedule the same run to repeat daily or weekly and compare play counts over time, or call the Apify API from a loop to feed in a longer list of pages than fits comfortably in the input form.

***

### ✨ Features

Facebook Reels Scraper fetches clean, structured reels from Facebook. It's ideal for brand and creator monitoring, competitor research, content research, and building a dataset to extract Facebook reels data for analysis or an AI pipeline. It extracts, per reel:

- **Caption** – the reel's own text, when it has one
- **Publish time** – in UTC, so runs stay comparable across time zones
- **Play count** – both as a number and in Facebook's own rounded form (e.g. "5.4M"), so it also works as a facebook reels play count scraper on its own
- **Video details** – length, size, thumbnail and playable duration
- **Owner details** – name, profile link, verified flag and owner type
- **Audio details** – track title, album art and an original-audio flag
- **Tracking ids** – Facebook's own ids for the reel, owner and page

⚡ Up to four pages or profiles run at the same time, and reels land in the dataset page by page while the run is still going, so you see results before the run finishes.

***

### Use cases 💡

- **Brand monitor** — track every new reel a page posts and its play count over time.
- **Competitor researcher** — compare posting frequency and captions across rival pages.
- **Content researcher** — pull caption, audio and length data behind the most-played reels.
- **Growth marketer** — filter reels by publish date to measure a recent campaign's reach.
- **AI agent builder** — feed captions and play counts into a RAG pipeline as grounded context.

Building an AI agent? [Connect this actor over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

- **Reels saved as they're found.** A recorded run on a public page returned 15 reels across 2 pages in 3.98 seconds, with the first 10 reels already in the dataset about 2.9 seconds in.
- **One row, the whole reel.** A recorded reel came back with a play count of 110,000, a video just under 6 minutes long, the owner's name, profile link and verified flag, and Facebook's own tracking ids — all in one row.
- **25 fields, one row per reel.** Every reel comes back with the same 25 fields — caption, play count, video, owner, audio and tracking details — plus an optional date filter and a per-profile result cap, so you only ever get what you asked for.

***

### ⬇️ Input

It accepts a list of Facebook page or profile links or handles; the profile list is the only required input.

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `startUrls` | Yes | Array | One page or profile link or handle per line. Several profiles run at the same time and all reels go into one dataset. | `["https://www.facebook.com/mrbeast"]` |
| `resultsLimit` | No | Integer | Max reels per profile, 1–10000 (default 10). A profile with fewer public reels gives all it has. | `100` |
| `onlyPostsNewerThan` | No | String | Absolute date (e.g. `2026-01-01`) or relative value (e.g. `7 days`, `3 months`); empty = no filter. | `"30 days"` |
| `proxyConfiguration` | No | Object | Apify Proxy settings; on = proxy from the first request, off = proxy only after a block. | `{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}` |

#### Example input

```json
{
  "startUrls": [
    "https://www.facebook.com/mrbeast",
    "https://www.facebook.com/profile.php?id=100044548384499"
  ],
  "resultsLimit": 100,
  "onlyPostsNewerThan": "30 days",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

***

### ⬆️ Output

Every reel is one typed, normalized JSON item with the same schema on every run, no matter which page or profile it came from. Export your results as JSON, CSV or Excel straight from the run.

#### Example output

A real row from a recorded run (the large `playback_video` and `tracking` objects shortened):

```json
{
  "facebookUrl": "https://www.facebook.com/mrbeast",
  "inputUrl": "https://www.facebook.com/reel/1164856995864911",
  "topLevelUrl": "https://facebook.com/100044548384499/posts/1669509924543938/",
  "topLevelReelUrl": "https://www.facebook.com/reel/1164856995864911/",
  "text": "The Most Selfish Player In The Game",
  "time": "2026-10-07T16:01:14.000Z",
  "playCountRounded": 110000,
  "attachments": [{ "media": { "__typename": "Video", "id": "1164856995864911", "playable_duration_in_ms": 340309, "owner": { "__typename": "User", "id": "100044548384499" }, "__isNode": "Video" } }],
  "tracking": { "top_level_post_id": "1164856995864911", "content_owner_id_new": "100044548384499", "video_id": "1164856995864911", "…": "…" },
  "self_view_boost": null,
  "video": { "id": "1164856995864911", "owner": { "__typename": "User", "id": "100044548384499" }, "first_frame_thumbnail": "https://scontent…", "__typename": "Video", "playable_duration_in_ms": 340309, "embeddable": true, "audio_availability": "AVAILABLE" },
  "if_should_change_url_for_reels": { "shareable_url": "https://www.facebook.com/reel/1164856995864911" },
  "shareable_url": "https://www.facebook.com/reel/1164856995864911",
  "playback_video": { "height": 1350, "width": 1080, "length_in_second": 340.309, "id": "1164856995864911", "…": "…" },
  "video_owner": { "__typename": "User", "id": "100044548384499", "name": "MrBeast", "is_verified": true, "url": "https://www.facebook.com/mrbeast", "…": "…" },
  "is_passive_content": null,
  "fb_shorts_reshare_context": { "is_reshare": false, "reshare_creator": { "__typename": "User", "id": "100044548384499", "name": "MrBeast" } },
  "remix_info": { "is_remixable": false, "status": "DISABLED" },
  "video_owner_type": "FACEBOOK_USER",
  "soundtrack_info": null,
  "track_title": null,
  "music_album_art_uri": null,
  "is_original_audio_on_facebook": null,
  "play_count_reduced": "110K",
  "startUrl": "https://www.facebook.com/mrbeast"
}
```

***

### How does it work?

Facebook Reels Scraper works without a Facebook account, password or login. It sends plain HTTP requests — the same public page a logged-out visitor's browser would load — and reads the Reels tab of every page or profile you give it; there is no browser rendering pages behind the scenes. Every request runs on its own connection, and the first time Facebook blocks one, the rest of that run switches to Apify's residential proxy network and keeps retrying with fresh connections instead of giving up on a page. Only reels that are already public are ever returned — nothing a logged-out visitor could not already see for themselves. The output fields keep the same shape on every run, even when Facebook changes how its own pages look, so your downstream code never has to adapt to a redesign.

***

### How do you integrate Facebook Reels Scraper into your stack?

It works with what you already use: a REST API from any language, MCP for AI agents, and no-code tools for everyone else.

#### MCP integration for AI agents

Register it as a tool your agent can call directly, right inside Claude Code, Cursor or Windsurf:

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

Once registered, your agent finds it through the MCP server's own search and call-actor tools — no hardcoded actor id or glue code in your prompts. The same registration works whether the agent is built with the Claude Agent SDK, a custom LangChain agent, or any other MCP-aware client, so you write the integration once and reuse it everywhere.

#### No-code tools (n8n, Make, LangChain)

In n8n, add the Apify node, choose its "Run Actor" action, and pick it from your account to pass your profile list and read the results back in the same workflow. In Make, use the Apify app's "Run an Actor" module followed by "Get Dataset Items" to land the same rows in your scenario. In LangChain, install `langchain-apify` and wrap this actor with `ApifyActorsTool`, using its id from your Apify account, to call it as a tool from an agent.

***

### Is it legal to scrape Facebook reels data?

Scraping publicly available Facebook data is generally lawful, although Meta's Terms of Service restrict automated access to its site. This actor returns only publicly available data — what any visitor sees without logging in, nothing from behind a login wall. Owner names, profile links and pictures can count as personal data under GDPR and CCPA, so scraping public data is generally permissible, but storing and using it must still comply with local data-protection law. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Facebook Reels Scraper return?

Caption, publish time, play count, video details and owner details are the top fields — see [the data fields section](#what-data-can-i-extract-with-facebook-reels-scraper) for the full list.

#### Does Facebook Reels Scraper require a Facebook account or login?

No. This facebook reels scraper no login setup needs no login, cookies or Facebook account — only public reel data is extracted.

#### How fast does Facebook Reels Scraper run?

A recorded run on a public page returned 15 reels across 2 pages in 3.98 seconds, with the first 10 reels already saved about 2.9 seconds in. It reads live data on every run, never a cache.

#### What happens if a profile is private or doesn't exist?

A profile that doesn't exist on Facebook, or isn't public, is reported in the log and the run's status message; a profile that exists but has no public Reels tab (common for personal profiles) returns zero rows, also reported, while the rest of the run carries on.

#### Can I scrape multiple Facebook profiles at once?

Yes. List every page or profile on its own line in the profile list; up to four are scraped at the same time and all their reels land in one dataset.

#### Does Facebook Reels Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — it is available as an MCP tool, making it a ready facebook reels scraper for AI agents. Run the MCP command above to register it in Claude Code, Cursor or Windsurf. Any agent that can call an HTTP endpoint can use the REST API directly.

#### Does Facebook Reels Scraper return data in a format LLMs can use directly?

Yes. Every response is typed, normalized JSON with consistent field names. No HTML parsing, no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool — no transformation step required.

#### What happens when Facebook changes its layout or updates its anti-bot system?

The actor is actively maintained. When Facebook changes its layout or its anti-bot checks, the actor is updated so your calls keep returning the same JSON schema with no changes on your end.

#### Can I use Facebook Reels Scraper without managing proxies or browser infrastructure?

Yes. Proxy handling runs on the actor's side — you send one request and get structured JSON back, with no proxy accounts, no headless browser setup, and no maintenance on your end.

#### Which Facebook reels fields work best for AI training data and RAG indexing?

For RAG indexing: the caption and the owner's name and profile link give the richest text context. For training data: play count, video length and the original-audio flag are the most consistent numeric and boolean fields across reels. All fields are typed primitives — strings, integers, booleans — no normalization required.

***

### Your feedback

Found a bug or missing a field? Let us know so we can keep it accurate as Facebook changes. The team reads every report and ships fixes to keep the output reliable.

# Actor input Schema

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

One per line: a page or profile link (https://www.facebook.com/PageName, a /people/... link, profile.php?id=...), a reels tab link, or a bare handle. Several profiles are scraped at the same time and all reels go into one dataset. A profile listed twice is scraped once, entries that are not Facebook profiles are skipped and named in the log, and a profile that does not exist or has no public Reels tab is reported in the log and the status message.

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

Maximum number of reels to collect per profile (1-10000), in the order the profile's Reels tab shows them. A profile with fewer public reels gives all it has. Free plan users get up to 20 reels per profile and 200 items per month; paid plans have no limit.

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

Absolute date (e.g. 2026-01-01) or relative value (e.g. 7 days, 2 weeks, 3 months). Reels published before it are skipped and the profile stops once a whole page is older. Leave empty for no date filter.

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

With Apify Proxy on, every request goes through it (the residential group when no group is chosen; US unless you pick a country). With it off, requests start on a direct connection and switch to the residential proxy for the rest of the run as soon as Facebook blocks one. If the proxy refuses the connection, the run continues directly.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.facebook.com/LeonardoDiCaprio/"
  ],
  "resultsLimit": 10,
  "onlyPostsNewerThan": "",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

All scraped reels, one row per reel. Rows appear page by page while the run goes on.

# 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/LeonardoDiCaprio/"
    ],
    "resultsLimit": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialdataapi/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/LeonardoDiCaprio/"],
    "resultsLimit": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("socialdataapi/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/LeonardoDiCaprio/"
  ],
  "resultsLimit": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call socialdataapi/facebook-reels-scraper --silent --output-dataset

```

## MCP server setup

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