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

Scrapes public Facebook Reels into flat rows with exact play, reaction, comment and share counts, caption, hashtags, creator profile, audio track and direct HD/SD video URLs.

- **URL**: https://apify.com/parseforge/facebook-reels-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Social media, Videos, Automation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.38 / 1,000 reel scrapeds

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?

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

![ParseForge Banner](https://github.com/ParseForge/apify-assets/blob/ad35ccc13ddd068b9d6cba33f323962e39aed5b2/banner.jpg?raw=true)

## 🎬 Facebook Reels Scraper

> 🚀 **Export Facebook Reels data in seconds.** Paste a reel link, get 41 fields back in under a second, including the exact play count (753,841) instead of the rounded "753K" every other tool reports.

Facebook Reels carry the numbers that matter for short form video strategy, but the platform only ever shows them rounded. This Actor reads the public reel page directly and returns each reel as one flat row: exact plays, reactions, comments and shares, the full caption with structured hashtags and mentions, the creator profile, the audio track, and direct HD and SD video URLs. No login, no API key, no Graph API app review.

Every run returns **41 fields per reel** with exact integer counters for plays, reactions, comments and shares. A single reel takes roughly 0.6 seconds to collect. Turn on related reel discovery and each link you supply expands into up to 5 more reels by the same creator, each one fetched individually so it carries the same exact counters as a reel you asked for by name.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Social media managers | Benchmark reel performance against competitors with real numbers, not rounded ones. |
| Short form video creators | Study which hooks, lengths and audio tracks earn plays in your niche. |
| Influencer marketing teams | Verify a creator's actual reach before signing a deal. |
| Media researchers and archivists | Preserve public reels with their captions, engagement and video files. |

### 📋 What the Facebook Reels Scraper does

> 💡 **Why it matters:** Facebook rounds every counter it shows you. "753K plays" could be 753,001 or 753,999. When you are comparing two creators, ranking your own back catalogue, or reporting a campaign result, that rounding hides exactly the differences you are trying to measure.

- 🔢 **Exact counters.** Plays, reactions, comments and shares come back as real integers (753841, 179438, 3483, 17843), not as display strings.
- 🔗 **Flexible input.** Accepts `facebook.com/reel/ID` links, `facebook.com/watch/?v=ID` links, and bare numeric reel IDs.
- 🧵 **Structured captions.** Hashtags, mentions and external links are parsed out of the caption into their own arrays, with the profile URL and ID resolved for every mention.
- 🎵 **Audio intelligence.** Track title, original audio flag, soundtrack ID and cover art for the sound behind each reel.
- 🎥 **Direct video access.** HD and SD progressive URLs plus the DASH manifest, ready to download or probe.
- 🔍 **Related reel discovery.** Optionally expand each link into more reels by the same creator.
- 📦 **One fixed schema.** Every reel lands with the same 41 columns, so your spreadsheet or database mapping never breaks.

### 🎬 Full Demo (🚧 Coming soon)

A short walkthrough video is in production and will land here.

### 📊 Output

Each reel becomes one flat row. These are the main fields:

| Field | Type | Description |
|---|---|---|
| 🖼 `imageUrl` | string | Reel thumbnail image. |
| 🆔 `reelId` | string | Facebook's numeric reel ID. |
| 🔗 `url` | string | Canonical reel link. |
| 📝 `caption` | string | Full caption text as the creator wrote it. |
| 👤 `authorName` | string | Creator display name. |
| 🏷 `authorUsername` | string | Handle, when the reel comes from a linked Instagram account. |
| 🌐 `authorProfileUrl` | string | Creator profile link. |
| 🪪 `authorId` | string | Creator numeric ID. |
| 🧭 `authorType` | string | `FACEBOOK_USER`, `SHADOW_IG_USER` or `FACEBOOK_PAGE`. |
| ✅ `authorIsVerified` | string | Yes or No. |
| 🖼 `authorProfilePicUrl` | string | Creator avatar. |
| 🕒 `publishedAt` | string | Exact publish time in ISO 8601. |
| ⏱ `publishedTimestamp` | integer | Publish time as a Unix epoch. |
| ▶️ `viewCount` | integer | **Exact** play count. |
| ❤️ `reactionCount` | integer | **Exact** total reactions. |
| 💬 `commentCount` | integer | **Exact** comment count. |
| 🔁 `shareCount` | integer | **Exact** share count. |
| ⏳ `durationSeconds` | number | Reel length in seconds. |
| 📐 `width` / `height` / `aspectRatio` | number | Video dimensions. |
| 🎥 `videoHdUrl` / `videoSdUrl` | string | Direct progressive video URLs. |
| 📡 `dashManifestUrl` | string | DASH manifest for adaptive playback. |
| 🎵 `audioTrackTitle` | string | Audio track behind the reel. |
| 🎼 `isOriginalAudio` | string | Yes when the creator's own audio. |
| 🖼 `audioArtUrl` | string | Audio cover art. |
| 🔀 `isRemixable` / `isReshare` | string | Yes or No. |
| 🔎 `isRelatedReel` | string | No for reels you asked for, Yes for discovered ones. |
| 📮 `postId` | string | Underlying post ID. |
| #️⃣ `hashtags` | array | Hashtags parsed from the caption. |
| 👥 `mentions` | array | Tagged profiles with name, URL and ID. |
| 🌍 `externalLinks` | array | External URLs found in the caption. |
| 🕒 `scrapedAt` | string | Collection timestamp. |
| ❌ `error` | string | Populated only on a failed reel. |

Three real records from a live run:

```json
{
  "imageUrl": "https://scontent-iad3-2.xx.fbcdn.net/v/t51.71878-10/497894651_24...",
  "reelId": "1000004045579882",
  "url": "https://www.facebook.com/reel/1000004045579882",
  "caption": "NEXT CONCERT: JUNE 6th  IN HAMBURG! 👉🏻 https://www.ticketlotse.com/event/?id=1535",
  "authorName": "Levi Schechtmann",
  "authorProfileUrl": "https://www.facebook.com/levi.schechtmann.1",
  "authorId": "100006199232258",
  "authorType": "FACEBOOK_USER",
  "authorIsVerified": "No",
  "publishedAt": "2025-05-16T13:16:02.000Z",
  "viewCount": 753841,
  "reactionCount": 179438,
  "commentCount": 3483,
  "shareCount": 17843,
  "durationSeconds": 127.066,
  "width": 1080,
  "height": 1920,
  "audioTrackTitle": "Levi Schechtmann · Original audio",
  "isOriginalAudio": "Yes",
  "isRelatedReel": "No",
  "hashtags": [],
  "externalLinks": ["https://www.ticketlotse.com/event/?id=1535"]
}
```

```json
{
  "reelId": "1000000668639013",
  "url": "https://www.facebook.com/reel/1000000668639013",
  "caption": "APLICAÇÃO DE LASTEX NO CROCHE #crochetinspiration #crochet #crochê #croche",
  "authorName": "croche_art_requinte",
  "authorProfileUrl": "https://www.facebook.com/simonelnascimemto",
  "authorType": "FACEBOOK_USER",
  "publishedAt": "2025-06-12T20:49:45.000Z",
  "viewCount": 6814,
  "reactionCount": 68,
  "commentCount": 3,
  "shareCount": 19,
  "durationSeconds": 30.899,
  "audioTrackTitle": "Brent Bourgeois · In The Garden",
  "isOriginalAudio": "Yes",
  "hashtags": ["crochetinspiration", "crochet", "crochê", "croche"]
}
```

```json
{
  "reelId": "1000003431344836",
  "url": "https://www.facebook.com/reel/1000003431344836",
  "authorName": "Valerie Lee",
  "authorUsername": "oatslady",
  "authorProfileUrl": "https://www.instagram.com/_u/oatslady",
  "authorType": "SHADOW_IG_USER",
  "publishedAt": "2024-07-04T12:22:35.000Z",
  "viewCount": 13637,
  "reactionCount": 2192,
  "commentCount": 0,
  "shareCount": 206,
  "durationSeconds": 11.366,
  "audioTrackTitle": "Adam Griffith · Bliss",
  "hashtags": ["ricekrispytreats", "chocolatepeanutbutter", "ricekrispies", "snacks", "easyrecipes"],
  "mentions": [
    { "name": "oatslady", "url": "https://www.instagram.com/_u/oatslady", "id": "17841400708581687" }
  ]
}
```

### ✨ Why choose this Actor

- **Exact numbers, not rounded ones.** Most Facebook Reels tools hand you the same "753K" the page shows. This Actor returns 753,841.
- **Fast and light.** It reads the public reel page over plain HTTP. No browser, no 4 GB of RAM, roughly 0.6 seconds per reel.
- **Honest about its limits.** The section below tells you exactly what this Actor cannot reach, before you spend anything.
- **Clean, stable schema.** 41 columns, identical on every row, with sentinels instead of nulls so CSV and Excel imports stay predictable.
- **No credentials.** No Facebook login, no Graph API app review, no page access token.

### 📈 How it compares to alternatives

| | This Actor | Typical Facebook Reels scrapers |
|---|---|---|
| Play count precision | Exact integer (753,841) | Rounded display string ("753K") |
| Share count precision | Exact integer (17,843) | Rounded ("17K") |
| Input | Reel URLs, watch URLs, bare reel IDs | Usually page or profile URLs |
| Whole page or profile catalogue | **No.** See the ceiling below | Yes, most competitors do this |
| Runtime per reel | About 0.6 seconds | Several seconds, browser based |
| Memory | 512 MB | Commonly 4 GB |
| Login required | No | No |

**The ceiling, stated plainly.** This Actor works from reel links, not from page or profile links. Facebook serves a page's Reels tab, its hashtag pages and its video search entirely through client side rendering, with no reel data in the page source, so a logged out HTTP client cannot enumerate a creator's full reel catalogue. What Facebook does publish on every reel page is up to 5 more reels by the same creator, and the `includeRelatedReels` option collects those. That expansion saturates quickly: in testing, following the suggestions from one creator surfaced about 6 to 7 distinct reels before Facebook stopped offering new ones. If you need every reel a page has ever posted, a browser based Actor is the right tool and this one is not.

### 🚀 How to use

1. **Create a free Apify account.** New accounts get $5 in free credit. [Sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. **Open the Actor** and go to the Input tab.
3. **Paste your reel links** into Facebook Reel URLs. A `facebook.com/reel/...` link, a `facebook.com/watch/?v=...` link or a bare numeric reel ID all work.
4. **Set Max Items** to the number of reels you want back.
5. **Optionally turn on related reel discovery** to expand each link into more reels by the same creator.
6. **Click Start** and watch the log.
7. **Download your data** from the Storage tab as CSV, JSON, Excel or XML, or pull it from the API.

### 💼 Business use cases

**📊 Competitive benchmarking.**

A social media manager at a beverage brand collects the top reels from four competitor accounts each month. Because the play and share counts come back exact, quarter over quarter movement of a few thousand plays is visible instead of being flattened into the same "1.2M" every month.

**🤝 Influencer vetting.**

An influencer marketing team receives a media kit claiming "over 500K average views per reel". They run the creator's last dozen reel links through the Actor and compare the claimed figure against the exact play counts before signing.

**🎯 Creative research.**

A short form video studio pulls reels from a niche, then correlates `durationSeconds`, `isOriginalAudio` and `audioTrackTitle` against `viewCount` to work out which lengths and sounds actually travel in that category.

**🗄️ Campaign archival.**

An agency closing out a campaign captures every reel it produced, with captions, hashtags, engagement counts and the direct video URLs, so the results are preserved after the client's page changes hands.

### 🔌 Automating Facebook Reels Scraper

- **Make:** trigger a run when a new reel link lands in a spreadsheet, then route the row into your reporting sheet.
- **Zapier:** connect the Actor to thousands of apps and start a run from any trigger.
- **Slack:** post a summary of each run into a team channel so performance updates arrive where the team already is.
- **Airbyte:** sync the dataset into your warehouse for long term trend analysis.
- **GitHub:** schedule runs from an Actions workflow and commit the results alongside your reporting code.
- **Google Drive:** drop each run's CSV into a shared folder for the wider team.

### 🌟 Beyond business use cases

- **Research:** media and communications researchers building corpora of short form video and its measured reach.
- **Personal:** creators auditing their own back catalogue to find which reels actually performed.
- **Non-profit:** advocacy organisations measuring how far a public awareness reel travelled.
- **Experimentation:** developers prototyping recommendation or virality models against real engagement numbers.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or any assistant to plan your run:

> I am using the ParseForge Facebook Reels Scraper on Apify. It takes Facebook reel URLs, watch URLs or bare reel IDs and returns 41 fields per reel, including exact play, reaction, comment and share counts, the caption with parsed hashtags and mentions, the creator profile, the audio track, and direct HD and SD video URLs. It cannot enumerate a whole page or profile catalogue, though it can expand each reel into up to 5 more reels by the same creator. Help me design an input for \[describe your goal].

### ❓ Frequently Asked Questions

**🔑 Do I need a Facebook login or API key?**
No. The Actor reads public reel pages. There is no login, no cookie and no Graph API token involved.

**▶️ Why do you say the play counts are exact?**
Facebook formats its counters server side according to the language you request. In English it rounds to "753K". This Actor requests a locale that never abbreviates, so the same reel returns 753,841. You can switch back to the rounded values with the Counter format option if you prefer them.

**📄 Can I scrape every reel from a Facebook page?**
No. Facebook renders a page's Reels tab entirely in the browser, so there is no reel data in the page source for a logged out client to read. Turn on related reel discovery to expand a reel into roughly 6 to 7 reels by the same creator, or use a browser based Actor if you need a full catalogue.

**🔗 What input formats are accepted?**
`https://www.facebook.com/reel/1000004045579882`, `https://www.facebook.com/watch/?v=1000004045579882`, and a bare `1000004045579882` all resolve to the same reel.

**💬 Does it return the comments themselves?**
No. Facebook does not include comment text in the public reel page, only the comment count. Use the [Facebook Comments Scraper](https://apify.com/parseforge/facebook-comments-scraper?fpr=vmoqkp) for comment bodies.

**🎥 Are the video URLs permanent?**
No. Facebook signs its CDN URLs and they expire after a few hours. Download the file during or shortly after the run if you need to keep it.

**📊 Why is viewCount sometimes "Not Disclosed"?**
Some reels do not publish a play count at all. When Facebook shows no figure, the Actor reports the sentinel rather than inventing one.

**🏷 Why is authorUsername often "Not Disclosed"?**
A handle only exists when the reel was cross posted from a linked Instagram account (`authorType` is `SHADOW_IG_USER`). Native Facebook profiles have no username in this payload, so `authorProfileUrl` is the identifier to use.

**🌍 Do I need a proxy?**
No. Facebook serves this data to ordinary datacenter traffic and the Actor runs without a proxy by default. Enable Apify Proxy if you are running at high volume.

**⚡ How fast is it?**
About 0.6 seconds per reel. A five reel run finishes in roughly six seconds including startup.

**🔢 What happens if a reel is deleted or private?**
The Actor writes a row containing only an `error` message explaining that the reel is unavailable. Error rows are never billed.

**📦 What export formats are available?**
CSV, JSON, Excel and XML from the Storage tab, or straight from the Apify API.

### 🔌 Integrate with any app

Every run's dataset is available through the Apify API, so you can pull results into any language or platform that speaks HTTP. Apify also ships official clients for JavaScript and Python, plus native integrations for Make, Zapier, Airbyte, Slack, GitHub and Google Drive.

### 🔗 Recommended Actors

- [Facebook Posts Scraper](https://apify.com/parseforge/facebook-posts-scraper?fpr=vmoqkp) - posts from public pages and profiles with reactions, shares and media.
- [Facebook Comments Scraper](https://apify.com/parseforge/facebook-comments-scraper?fpr=vmoqkp) - the comment bodies this Actor deliberately leaves out.
- [Facebook Pages Scraper](https://apify.com/parseforge/facebook-pages-scraper?fpr=vmoqkp) - page profile data, follower counts and verification status.
- [Instagram Reel Scraper](https://apify.com/parseforge/instagram-reel-scraper?fpr=vmoqkp) - the same job on the other half of Meta's short form video.
- [TikTok Profile Scraper](https://apify.com/parseforge/tiktok-profile-scraper?fpr=vmoqkp) - round out a cross platform short form video dataset.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** This is an independent tool, not affiliated with or endorsed by Facebook or Meta. It collects only publicly available data.

# Actor input Schema

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

Facebook Reel links to scrape. Accepts facebook.com/reel/ID, facebook.com/watch/?v=ID, share/r/ links, or a bare numeric reel ID.

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `includeRelatedReels` (type: `boolean`):

Every reel page also ships up to 5 more reels by the same creator. Turn this on to scrape them too, until Max Items is reached. Each one is fetched individually so it carries the same exact play count as a requested reel. Facebook stops offering new suggestions after roughly 6-7 reels per creator, so this expands a seed, it does not enumerate a full catalogue.

## `resultLanguage` (type: `string`):

Facebook formats its counters server-side by language. Exact returns precise play, reaction and share counts (753840). Abbreviated returns Facebook's rounded display values (753K). Exact is recommended and is what the sample output shows.

## `maxRequestRetries` (type: `integer`):

How many times to retry a reel that returns a non-200 response before recording it as an error row.

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

Facebook serves this data to plain datacenter egress, so the Actor runs without a proxy by default. Enable Apify Proxy if you are scraping at high volume or hitting rate limits.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.facebook.com/reel/1000004045579882"
    }
  ],
  "maxItems": 10,
  "includeRelatedReels": false,
  "resultLanguage": "it-IT",
  "maxRequestRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Key fields

## `fullData` (type: `string`):

Complete dataset with all 41 fields

# 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/reel/1000004045579882"
        }
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/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": [{ "url": "https://www.facebook.com/reel/1000004045579882" }],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/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": [
    {
      "url": "https://www.facebook.com/reel/1000004045579882"
    }
  ],
  "maxItems": 10
}' |
apify call parseforge/facebook-reels-scraper --silent --output-dataset

```

## MCP server setup

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