Facebook Reels Scraper

Export public Facebook Reels from profiles, Reels tabs, and direct URLs with reel IDs, captions, play counts, owner data, thumbnails, video URLs, and audio metadata.

Data fields

FieldTypeDescription
inputUrlstringValue exported as inputUrl.
normalizedUrlstring | nullValue exported as normalizedUrl.
sourceTypestringValue exported as sourceType.
statusstringValue exported as status.
reelIdstring | nullValue exported as reelId.
reelUrlstring | nullValue exported as reelUrl.
postUrlstring | nullValue exported as postUrl.
textstring | nullValue exported as text.

Input preview

startUrlsFacebook URLs *
usernamesFacebook usernames
maxItemsMaximum reels
maxReelsPerProfileMaximum reels per profile
includePageProfileMetadataInclude page/profile metadata
proxyConfigurationProxy configuration

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

Ready-to-run examples

Open a saved Apify example, adjust the input, and run the actor in your own Apify account.

View all examples

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Extract public Facebook Reels from page/profile Reels tabs, usernames, and direct reel URLs. The Actor returns structured rows with reel URLs, IDs, visible play counts, owner/page metadata, and diagnostics for inputs that Facebook does not expose publicly.

Use it for social media research, creator monitoring, competitor content tracking, and repeatable exports to CSV, JSON, Excel, API, or automation workflows.

At a glance

  • Primary job: Collect public Facebook Reels URLs and visible metrics from one or more public pages/profiles.
  • Input: Public Facebook page URLs, /reels/ URLs, direct /reel/<id> URLs, or usernames.
  • Output: One dataset row per reel, plus explicit diagnostic rows for invalid, blocked, private, or empty inputs.
  • Best for: Brand monitoring, competitor short-form research, influencer discovery, content planning, and reporting.

Common workflows

  • Monitor a brand page: Schedule a run for a public Facebook page Reels tab and export newly seen reel URLs and play counts.
  • Analyze competitors: Add several public page/profile Reels URLs, cap results per profile, and compare visible play counts in a spreadsheet.
  • Check direct reels: Submit direct facebook.com/reel/<id> URLs to normalize IDs and keep a consistent dataset shape.
  • Automate reporting: Trigger runs through the Apify API, webhooks, or MCP and send dataset rows to BI tools or a database.

What data can you extract?

Field Description
inputUrl Original URL or username submitted by the user.
normalizedUrl Canonical Facebook URL processed by the Actor.
sourceType profile_reels, direct_reel, username, or unknown.
status ok, invalid_url, no_reels_found, blocked_or_empty, private_or_unavailable, unsupported_or_changed, or failed.
reelId Facebook reel ID when available.
reelUrl Canonical public reel URL.
postUrl Public post/reel URL for the same item.
text Public reel caption/text when exposed in the rendered page.
timestamp Public timestamp when exposed.
ownerName Visible owner/page name.
ownerUrl Owner/page URL used for extraction.
playCount Visible reel play count, normalized to a number.
likeCount Like count when available publicly.
commentCount Comment count when available publicly.
shareCount Share count when available publicly.
durationSeconds Duration when available publicly.
thumbnailUrl Thumbnail URL when exposed publicly.
videoUrl Best-effort public video URL when exposed; not guaranteed archival media.
pageName Visible page/profile name.
pageUrl Page/profile URL.
pageId Page ID when exposed publicly.
followerCount Visible follower count, normalized to a number.
likesCount Visible page like count, normalized to a number.
category Page category when visible.
missingFields Optional fields not exposed for this row.
error Diagnostic message for non-ok rows.

Example input

{
  "startUrls": [
    { "url": "https://www.facebook.com/9GAGCute/reels/" },
    { "url": "https://www.facebook.com/reel/27749977914588421/" }
  ],
  "usernames": ["Cristiano"],
  "maxItems": 20,
  "maxReelsPerProfile": 10,
  "includePageProfileMetadata": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}

Example output

{
  "inputUrl": "https://www.facebook.com/9GAGCute/reels/",
  "normalizedUrl": "https://www.facebook.com/9GAGCute/reels/",
  "sourceType": "profile_reels",
  "status": "ok",
  "reelId": "27749977914588421",
  "reelUrl": "https://www.facebook.com/reel/27749977914588421/",
  "postUrl": "https://www.facebook.com/reel/27749977914588421/",
  "text": null,
  "timestamp": null,
  "ownerName": "9GAG Cute",
  "ownerUrl": "https://www.facebook.com/9GAGCute/reels/",
  "playCount": 58000,
  "likeCount": null,
  "commentCount": null,
  "shareCount": null,
  "durationSeconds": null,
  "thumbnailUrl": null,
  "videoUrl": null,
  "pageName": "9GAG Cute",
  "pageUrl": "https://www.facebook.com/9GAGCute/reels/",
  "pageId": null,
  "followerCount": 3700000,
  "likesCount": null,
  "category": null,
  "missingFields": [],
  "error": null
}

Tips for best results

  • Use public pages only: This Actor does not accept cookies or scrape private/logged-in data.
  • Start small: Test with maxItems: 3 to confirm a page exposes public Reels in your run environment.
  • Prefer Reels tabs: URLs ending in /reels/ are the most direct input for profile/page scraping.
  • Expect optional fields: Facebook does not expose every metric on every surface; unavailable fields stay null and appear in missingFields when relevant.
  • Use proxies in cloud: Facebook can vary responses by IP. Residential Apify Proxy is recommended for production runs.

API usage

Node.js:

import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor("fetch_cat/facebook-reels-scraper").call({
  startUrls: [{ url: "https://www.facebook.com/9GAGCute/reels/" }],
  maxItems: 3,
  maxReelsPerProfile: 3
});
console.log(run.defaultDatasetId);

Python:

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("fetch_cat/facebook-reels-scraper").call(run_input={
    "startUrls": [{ "url": "https://www.facebook.com/9GAGCute/reels/" }],
    "maxItems": 3,
    "maxReelsPerProfile": 3,
})
print(run["defaultDatasetId"])

cURL:

curl -X POST "https://api.apify.com/v2/acts/fetch_cat~facebook-reels-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"startUrls":[{"url":"https://www.facebook.com/9GAGCute/reels/"}],"maxItems":3,"maxReelsPerProfile":3}'

MCP and AI agents

Use this Actor from MCP-compatible tools through the official Apify MCP Server.

claude mcp add --transport http apify "https://mcp.apify.com?tools=fetch_cat/facebook-reels-scraper"
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=fetch_cat/facebook-reels-scraper"
    }
  }
}

Example prompt: "Run Facebook Reels Scraper for this public Facebook page URL with maxItems 5 and summarize the reel URLs and visible play counts."

Limits and caveats

  • Public data only: No account login, cookies, private profiles, private groups, or access-token scraping.
  • Facebook changes often: Public visibility can change, so a URL that works today may expose fewer fields later.
  • Metrics are best effort: Play counts are usually visible on Reels tabs; likes, comments, shares, video URLs, and timestamps may be absent.
  • No video archiving guarantee: videoUrl is populated only if Facebook exposes a stable public URL in the same page context.
  • Diagnostics are explicit: Invalid or blocked inputs produce status rows instead of silently returning an empty dataset.
  • Responsible use: Process only public data you are allowed to access, and do not use the Actor to bypass access controls or collect private personal data.

Support

Open an issue from the Actor page if a run fails or output looks wrong. Include the run ID or run URL, input JSON, expected output, actual output, and a reproducible public URL.

Common questions

Questions and answers reused from the canonical actor README.

Does this Actor require Facebook login?

No. It is public-only and intentionally does not accept cookies, sessions, passwords, or access tokens.

Why are some fields empty?

Facebook does not expose every field on every public page or reel. The Actor leaves unavailable fields as null instead of guessing.

Will blocked or invalid inputs be charged as reel results?

No. The Actor only charges the item event for successful status: "ok" reel rows.

Can I export results?

Yes. Apify datasets support JSON, CSV, Excel, XML, RSS, and API access.