Facebook Videos Scraper By Creator Profile avatar

Facebook Videos Scraper By Creator Profile

Pricing

Pay per usage

Go to Apify Store
Facebook Videos Scraper By Creator Profile

Facebook Videos Scraper By Creator Profile

Facebook Videos Scraper extracts data from Facebook video posts, including titles, descriptions, view counts, reactions, comments, shares, and upload timestamps. Ideal for content analysis, trend monitoring, research, and automating structured Facebook video data collection

Pricing

Pay per usage

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

1

Bookmarked

21

Total users

4

Monthly active users

3 days ago

Last modified

Share

Facebook Reels Scraper — Creator Videos, DASH Formats and Reactions

Facebook Reels Scraper By Creator Profile takes a creator or Page URL — no reel links required — and returns every reel it can enumerate from that Page as structured JSON: videoId, title, ownerId, reelUrl, publishedAt, duration_string, reactionsCount, commentsCount, sharesCountRounded, and the video's DASH and progressive MP4 stream URLs. Every reel page it opens also already embeds 5 more reels from the same creator, which the Actor harvests at no extra request. It is built for social teams tracking a creator's reel output, agencies benchmarking client or competitor video activity, and researchers and AI pipelines that need typed Facebook video data without a login. Point it at one Page and start pulling structured rows within the same run.

What is Facebook Reels Scraper By Creator Profile?

It is an Apify Actor that turns a Facebook creator or Page URL into a catalog of that Page's public reels — video metadata, DASH/MP4 formats, and engagement counts, one JSON row per reel. It also accepts a single reel URL or a bare numeric video ID directly, for when you already know what you want. No Facebook account, login, or cookie is required or supported anywhere in the input schema — every request is anonymous.

  • Discovery by creator/Page URL, reels-tab URL, single reel URL, or bare video ID — mixed freely in one input list
  • Every reel page yields 5 same-creator sibling reels already embedded in the page, harvested without an extra request
  • Reaction, comment and share counts read against each video's own decoded story token, not a neighbouring one
  • DASH video/audio representations plus progressive SD/HD MP4 links, switchable by request user agent
  • Filters for minimum reactions, reels taken per Page, and a hard cap on total rows returned
  • Standard Apify dataset export — JSON, CSV or Excel, or read live through the Apify API

What data can I extract with Facebook Reels Scraper?

Every reel is one dataset row. Rows discovered as sibling reels without a full fetch carry a lighter subset of the same shape; the table below lists every key the Actor can write to a row.

FieldExample ValueUse Case
videoId"2429400350831482"Stable identifier, also used to de-duplicate across siblings and re-runs
id"2429400350831482"Same value as videoId, kept for yt-dlp-shaped tooling that expects id
display_id"2429400350831482"Same value again, yt-dlp compatibility field
webpage_url_basename"2429400350831482"Same value again, yt-dlp compatibility field
ownerId"20531316728"Creator/Page numeric ID, the Actor's own field name
uploader_id"20531316728"Same creator ID under the yt-dlp-compatible field name
uploader"National Geographic"Creator display name
reelUrl"https://www.facebook.com/reel/2429400350831482"Canonical reel link
webpage_url"https://www.facebook.com/20531316728/videos/2429400350831482/"Full video permalink under the creator's numeric ID
original_url"https://www.facebook.com/natgeo"The exact URL or ID you supplied that led to this row
webpage_url_domain"facebook.com"Fixed domain field, yt-dlp compatibility
extractor / extractor_key"facebook" / "Facebook"yt-dlp compatibility fields
sourceType"profile_catalog"How the row was found: input_url, profile_catalog, or sibling_reel
discoveredFrom"https://www.facebook.com/natgeo"The input URL or reel that produced this row
detailLevel"full"full, lightweight (unexpanded sibling), or id_only (catalog listing without detail fetch)
validity"ok"Machine-readable outcome — see the validity note below
status"Success"Human-readable outcome: Success, Empty, or Failed
chargedtrueWhether this row consumed a row_result billing event
title"One Sheet Coq Au Vin"Reel caption title, with Facebook's own view/reaction-count prefix stripped
fulltitle"One Sheet Coq Au Vin"Same as title, yt-dlp compatibility field
description"Weeknight dinner, one pan, no fuss."Full caption text where Facebook exposes it
thumbnail"https://scontent.xx.fbcdn.net/.../thumb.jpg"Preferred thumbnail image URL
thumbnails[{"url": "...", "id": "0"}]yt-dlp-shaped thumbnail list, one entry wrapping thumbnail
firstFrameThumbnail"https://scontent.xx.fbcdn.net/.../frame0.jpg"First-frame thumbnail, when Facebook returns one
duration34.5Video duration in seconds
duration_string"0:34"Human-readable h:mm:ss / m:ss duration
timestamp1753420800Unix publish time
publishedAt"2026-07-25T00:00:00+00:00"ISO 8601 publish time
ageDays1.0Days between scrape time and publish time
upload_date"20260725"YYYYMMDD publish date, yt-dlp compatibility field
release_yearnullAlways null — not extractable from this surface
epoch1753507200Unix time the row was extracted
reactionsCount72Reactions read against this exact video's story token
commentsCount14Comment count, same anchoring
sharesCountRounded"12"Facebook's own rounded share count string
storyId"S:_I20531316728:VK:2429400350831482"Decoded story token the engagement counts were anchored to
feedbackId"1234567890123456"Facebook's internal feedback/comment-thread ID for the video
engagementAnchor"story_token"story_token when reactions resolved against the anchor, unresolved when they did not
siblingReelIds["2431...", "2432...", "2433...", "2434...", "2435..."]Video IDs of the sibling reels found on this page
siblingReelCount5Count of sibling reels found on this page
captionLocales["en_US"]Available caption/subtitle locales, when Facebook lists any
automatic_captions / subtitles / requested_subtitles{} / {} / nullAlways empty — no caption tracks are extractable from this surface
formats[ { "format_id": "0", "ext": "m4a", ... }, ... ]Every DASH audio/video representation plus progressive SD/HD links — see the Output sample below
requested_formats[ {video format}, {audio format} ]The one video + one audio format the Actor picked as best, present only when DASH was resolved
format"249 - 720x1280 (DASH video)+251 - audio only (DASH audio)"Combined format label, present only when requested_formats is present
format_id"249+251"Combined format ID, same condition
ext"mp4"Container extension, same condition
protocol"https+https"Delivery protocol, same condition
languagenullAlways null, same condition
format_note"DASH video+DASH audio"Same condition
filesize_approx142857Estimated combined byte size from bitrate × duration, same condition
tbr / vbr / abr1024.0 / 896.0 / 128.0Combined, video and audio bitrate in kbps, same condition
width / height720 / 1280Best video representation's pixel dimensions, same condition
resolution"720x1280"WxH string, same condition
fps30.0Frame rate read from the DASH manifest, same condition
dynamic_range"SDR"Same condition
vcodec / acodec"avc1.64001f" / "mp4a.40.2"Codec strings, same condition
asr44100Audio sample rate, same condition
audio_channels2Same condition
aspect_ratio0.56Width/height ratio, same condition
stretched_rationullAlways null, same condition
_has_drmnullAlways null — not evaluated
playlist / playlist_indexnull / nullAlways null — a single reel is never treated as a playlist
pageBytes1867432Raw HTML response size in bytes, on rows that fetched a full page
scrapedAt"2026-07-26T09:00:00+00:00"ISO 8601 timestamp the row was pushed
error"ClientError: 403"Present only on status: "Failed" rows
url"https://www.facebook.com/badpage"Present only on Failed/unrecognised-input rows, in place of webpage_url

Fields are omitted, not nulled, when they don't apply. The 22 flattened format-summary fields (requested_formats through aspect_ratio above) exist on a row only when the Actor resolved a usable video+audio pair — on a row with no media, those keys are absent from the JSON entirely, not present as null. The same is true of detailLevel: two row shapes — a Page fetch that failed outright, and a Page that returned zero reels — omit the detailLevel key rather than writing it as null. And url only ever appears on Failed or unrecognised-input rows; every successful row carries the location under webpage_url / original_url / reelUrl instead, with no url key at all.

Engagement and sibling-reel fields

reactionsCount, commentsCount and sharesCountRounded are the decision-driving numbers — Facebook renders these blocks 6 times per reel page (once for the requested reel, once for each of its 5 siblings) in server-randomised order, so the Actor binds each block to the nearest preceding decoded storyId token rather than reading the first match. engagementAnchor tells you whether that anchor resolved (story_token) or not (unresolved). siblingReelIds and siblingReelCount carry the same-creator reels harvested from that page for free — filter or expand on these to build a fuller picture of a creator's catalog without additional requests.

Discovery, status and quality fields

sourceType, discoveredFrom and detailLevel tell you how a row was found and how much of it was actually fetched — useful when mixing input_url, profile_catalog and sibling_reel rows in one dataset. validity and status are the machine- and human-readable outcome codes (ok, unavailable_or_not_a_reel, no_media_returned, fetch_failed, no_reels_on_page, unrecognised_input, no_engagement_anchor, among others), and charged tells you whether the row consumed a billing event — filter on charged: true (equivalently validity: "ok" for full-detail rows) to keep only billed rows.

How does Facebook Reels Scraper differ from the official Facebook API?

Facebook's Graph API has no endpoint that lists a Page's reels for anonymous or app-level callers, and nothing resembling the sibling-reel graph this Actor reads off a single reel page — so there is no official API comparison to make here. The realistic alternative is building the extraction yourself.

Why not build this yourself?

A DIY version has to solve three problems this Actor already solves. First, Facebook renders the same engagement counters (unified_reactors, total_comment_count, share_count_reduced) up to 6 times per reel page — once per sibling — in randomised order, so a naive first-match read silently returns the wrong video's numbers; the fix is decoding each UzpfS... story token and binding every counter block to its nearest preceding token. Second, discovering a Page's reels means enumerating the /<page>/reels/ surface and reconciling two independent ID sources that don't always agree. Third, video delivery means parsing a DASH XML manifest for adaptive representations and falling back to Facebook's progressive browser_native_sd_url / browser_native_hd_url fields when DASH isn't present — plus handling the Chrome-vs-crawler user-agent difference that changes which of those exist at all. None of this is exposed through any public Facebook API; it all has to be read out of the page payload directly.

Build it yourself if you need to control every byte of the request pipeline and already have proxy and anti-bot infrastructure in place. Use Facebook Reels Scraper if you want a creator's reel catalog as typed rows without maintaining that pipeline.

How to use data extracted from Facebook Reels Scraper

📱 Social and content teams

Point startUrls at a creator or Page, set maxReelsPerProfile to the depth you need, and pull title, publishedAt, duration_string, reactionsCount, commentsCount and sharesCountRounded straight into a content calendar or performance sheet — sorted by ageDays for recency or reactionsCount for what's actually landing with the audience.

🏢 Agencies benchmarking creators

Running the same Page list on a schedule and diffing reactionsCount / commentsCount / sharesCountRounded per videoId across runs turns this into a repeatable competitor or client benchmark, without re-collecting reel URLs by hand each time — discoveredFrom keeps every row traceable back to the Page that produced it.

🔬 Market and network research

siblingReelIds and siblingReelCount expose which reels Facebook itself groups with a given video, on the same creator — useful for mapping a creator's most-connected content or spot-checking catalog completeness, since expandSiblingReels surfaces this network at no extra request cost.

🤖 AI agents and automated pipelines

Because every row is typed JSON keyed the same way on every run, a pipeline can index title, description and reactionsCount into a vector store or feed an agent tool that answers "what is this creator's best-performing reel this month" against live rows rather than a stale export.

⬇️ Input

Required per schema: none.

ParameterRequiredTypeDescriptionExample Value
startUrlsNoarrayCreator/Page URL, reels-tab URL, single reel URL, or bare video ID — mix freely. Page URLs are enumerated via the public reels surface; reel URLs are scraped directly.["https://www.facebook.com/natgeo", "https://www.facebook.com/reel/2429400350831482"]
urlsNoarrayLegacy/back-compat input list. Scraped in addition to startUrls, accepting the same URL shapes. Leave empty if you're using startUrls.[]
maxReelsPerProfileNointegerCap on reel IDs taken from each creator/Page URL. Default 10, minimum 0, maximum 500. 0 means no cap.10
fetchProfileReelDetailsNobooleanOn (default): each discovered reel is fetched for formats, duration, thumbnail and engagement (1 request per reel). Off: rows carry only the reel ID and URL, with no extra requests.true
expandSiblingReelsNobooleanOn (default): harvests the 5 same-creator sibling reels every reel page already embeds, at no extra request.true
fetchFullSiblingRowsNobooleanOff (default): sibling rows carry ID, creator ID, URL and engagement counts only, free. On: each sibling is fetched too for formats/duration/thumbnail — 1 extra request per sibling.false
maxItemsNointegerHard stop across the whole run — input reels, discovered reels and siblings combined, counted after video-ID de-duplication. Default 0 (unlimited), minimum 0, maximum 100000.0
minReactionsNointegerDrops rows below this reaction total. Rows whose reaction count could not be resolved are dropped whenever this is above 0. Default 0, minimum 0, maximum 100000000.0
requestUserAgentNostring"chrome" (default) returns DASH representations plus progressive MP4; "facebookexternalhit" returns progressive MP4 only, no DASH manifest."chrome"
concurrencyNointegerHow many Facebook pages are fetched in parallel. Default 5, minimum 1, maximum 10.5
proxyConfigurationNoobjectApify Proxy (residential or datacenter) or your own proxy URLs. Left disabled by default for a direct connection; the Actor retries on a residential IP if a request looks blocked.{"useApifyProxy": false}

Example input

{
"startUrls": [
"https://www.facebook.com/natgeo",
"https://www.facebook.com/reel/2429400350831482"
],
"maxReelsPerProfile": 10,
"fetchProfileReelDetails": true,
"expandSiblingReels": true,
"fetchFullSiblingRows": false,
"maxItems": 100,
"minReactions": 0,
"requestUserAgent": "chrome",
"concurrency": 5,
"proxyConfiguration": { "useApifyProxy": false }
}

⚠️ Common pitfall: urls is not a replacement for startUrls — it is an additive legacy list. Putting the same Page in both fields doesn't duplicate work (targets are de-duplicated by exact string match before the run starts), but leaving old integration input in urls while also filling startUrls is fine and expected; you don't need to migrate it.

⬆️ Output

Typed, normalized JSON, one row per reel (or per lightweight sibling), with a consistent field set for a given detailLevel. Export as JSON, CSV or Excel from the Apify Console, or read the dataset through the Apify API.

Example output — full-detail reel row

{
"videoId": "2429400350831482",
"id": "2429400350831482",
"display_id": "2429400350831482",
"webpage_url_basename": "2429400350831482",
"ownerId": "20531316728",
"uploader_id": "20531316728",
"uploader": "National Geographic",
"reelUrl": "https://www.facebook.com/reel/2429400350831482",
"webpage_url": "https://www.facebook.com/20531316728/videos/2429400350831482/",
"original_url": "https://www.facebook.com/natgeo",
"webpage_url_domain": "facebook.com",
"extractor": "facebook",
"extractor_key": "Facebook",
"sourceType": "profile_catalog",
"discoveredFrom": "https://www.facebook.com/natgeo",
"detailLevel": "full",
"validity": "ok",
"status": "Success",
"charged": true,
"title": "One Sheet Coq Au Vin",
"fulltitle": "One Sheet Coq Au Vin",
"description": "Weeknight dinner, one pan, no fuss.",
"thumbnail": "https://scontent.xx.fbcdn.net/v/one-sheet-coq-au-vin/thumb.jpg",
"thumbnails": [{ "url": "https://scontent.xx.fbcdn.net/v/one-sheet-coq-au-vin/thumb.jpg", "id": "0" }],
"firstFrameThumbnail": "https://scontent.xx.fbcdn.net/v/one-sheet-coq-au-vin/frame0.jpg",
"duration": 34.5,
"duration_string": "0:34",
"timestamp": 1753420800,
"publishedAt": "2026-07-25T00:00:00+00:00",
"ageDays": 1.0,
"upload_date": "20260725",
"release_year": null,
"epoch": 1753507200,
"reactionsCount": 72,
"commentsCount": 14,
"sharesCountRounded": "12",
"storyId": "S:_I20531316728:VK:2429400350831482",
"feedbackId": "1234567890123456",
"engagementAnchor": "story_token",
"siblingReelIds": ["2431011122334455", "2432022233445566", "2433033344556677", "2434044455667788", "2435055566778899"],
"siblingReelCount": 5,
"captionLocales": ["en_US"],
"automatic_captions": {},
"subtitles": {},
"requested_subtitles": null,
"formats": [
{
"format_id": "0",
"manifest_url": "https://video.xx.fbcdn.net/v/manifest.mpd",
"ext": "m4a",
"width": null,
"height": null,
"tbr": 128.0,
"asr": 44100,
"fps": null,
"format_note": "DASH audio",
"container": "m4a_dash",
"vcodec": "none",
"acodec": "mp4a.40.2",
"resolution": "audio only",
"format": "0 - audio only (DASH audio)"
},
{
"format_id": "sd",
"quality": -3,
"url": "https://video.xx.fbcdn.net/v/sd.mp4?bitrate=512000",
"ext": "mp4",
"resolution": null,
"format": "sd - unknown"
},
{
"format_id": "249",
"manifest_url": "https://video.xx.fbcdn.net/v/manifest.mpd",
"ext": "mp4",
"width": 720,
"height": 1280,
"tbr": 1024.0,
"fps": 30.0,
"format_note": "DASH video",
"container": "mp4_dash",
"vcodec": "avc1.64001f",
"acodec": "none",
"resolution": "720x1280",
"aspect_ratio": 0.56,
"format": "249 - 720x1280 (DASH video)"
}
],
"requested_formats": ["<the DASH video object above>", "<the DASH audio object above>"],
"format": "249 - 720x1280 (DASH video)+0 - audio only (DASH audio)",
"format_id": "249+0",
"ext": "mp4",
"protocol": "https+https",
"language": null,
"format_note": "DASH video+DASH audio",
"filesize_approx": 142857,
"tbr": 1152.0,
"vbr": 1024.0,
"abr": 128.0,
"width": 720,
"height": 1280,
"resolution": "720x1280",
"fps": 30.0,
"dynamic_range": "SDR",
"vcodec": "avc1.64001f",
"acodec": "mp4a.40.2",
"asr": 44100,
"audio_channels": 2,
"aspect_ratio": 0.56,
"stretched_ratio": null,
"_has_drm": null,
"playlist": null,
"playlist_index": null,
"pageBytes": 1867432,
"scrapedAt": "2026-07-26T09:00:00+00:00"
}

formats carries three shapes side by side: DASH audio representations (format_note: "DASH audio", container: "m4a_dash", vcodec: "none"), DASH video representations (format_note: "DASH video", container: "mp4_dash", acodec: "none"), and progressive sd/hd MP4 links (no container/manifest_url, a direct playable url, dynamic_range: "SDR"). requestUserAgent: "facebookexternalhit" returns only the progressive entries — no DASH manifest, so no formats entries carry container: "mp4_dash" or "m4a_dash", and the flattened requested_formats/format/resolution/etc. fields fall back accordingly or are omitted if nothing resolves at all.

How do you filter and target specific reels?

startUrls accepts four shapes and you can mix them in one list: a creator/Page URL (https://www.facebook.com/natgeo), a reels-tab URL (https://www.facebook.com/nba/reels/), a single reel URL (https://www.facebook.com/reel/2429400350831482), or a bare video ID (2429400350831482). Page URLs go through catalog discovery; reel URLs and IDs are scraped directly — use a Page URL when you want a creator's output over time, and a reel URL/ID when you already know the exact video.

maxReelsPerProfile controls discovery depth per Page — set it to 0 for no cap, or leave it at the default 10 for a quick sample. expandSiblingReels (on by default) adds the 5 same-creator reels embedded on every reel page at no extra request, and fetchFullSiblingRows decides whether those siblings stay lightweight (ID, creator ID, URL, engagement) or get upgraded to full detail at 1 extra request each. minReactions is a quality threshold read against each video's own decoded story token — not a neighbouring one — so it never filters on the wrong video's number, and any row whose reaction count can't be resolved is dropped once this is above 0. maxItems is the volume control: a single global cap across input reels, discovered reels and siblings combined, applied after de-duplication by videoId, so duplicates never eat into your quota.

Three real examples:

{ "startUrls": ["https://www.facebook.com/BuzzFeedTasty"], "maxReelsPerProfile": 25, "expandSiblingReels": false, "maxItems": 25 }

A capped, sibling-free catalog pull — exactly the Page's own reels, nothing borrowed from neighbours.

{ "startUrls": ["https://www.facebook.com/reel/2429400350831482"], "expandSiblingReels": true, "fetchFullSiblingRows": true, "minReactions": 50 }

One reel expanded into its full sibling network, all fully fetched, with low-engagement rows dropped.

{ "startUrls": ["https://www.facebook.com/LADbible", "https://www.facebook.com/nba"], "fetchProfileReelDetails": false, "maxItems": 200 }

Cheap ID-only catalog listing across two Pages, capped at 200 total rows, with no per-reel detail fetch.

▶️ Want to try other Facebook scrapers?

Scraper NameWhat it extracts
Facebook Video Search Scraper - Description & HashtagsPublic Facebook Watch videos by keyword, with caption text and structured hashtag entities
Facebook Hashtag Search Scraper — Top Posts & Engagement RankingHashtag posts ranked by engagement score and rate
Facebook Search Scraper By HashtagPages posting under a hashtag, with matching post text and full Page profile data
Facebook Pages Scraper With Ad Library ActivityPublic Page data plus Ad Library activity and individual ad creatives
Facebook Page Content Strategy ScraperPer-post content type, hashtags, mentions and a run-level content-mix summary
Facebook Groups Search Scraper — Member Size & Activity MetricsFacebook Groups ranked by member size and activity
Instagram Single Reels ScraperA single Instagram Reel's caption, engagement counts, video/thumbnail URLs and music metadata
TikTok Video Scraper - Hashtag & Sound ReachTikTok videos enriched with hashtag reach and sound-usage stats

How to extract Facebook video data programmatically

Facebook Reels Scraper is a standard Apify Actor run — one API call, one auth header, structured JSON back in the dataset.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<YOUR_USERNAME>/facebook-videos-scraper-by-creator-profile").call(run_input={
"startUrls": ["https://www.facebook.com/natgeo"],
"maxReelsPerProfile": 20,
"minReactions": 25,
"maxItems": 100,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row.get("charged"):
print(row["videoId"], row["reactionsCount"], row.get("resolution"))

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

Export to spreadsheets or CRM

Export the dataset as CSV directly from the Apify Console and import it, mapping title and uploader to name columns, reactionsCount/commentsCount/sharesCountRounded to engagement columns, and webpage_url/reelUrl to a link column.

Yes — Facebook Reels Scraper reads only public reel and Page content, the same video, caption and engagement counts already visible to any anonymous visitor on the reel page. No login, cookie or authenticated session is used or accepted anywhere in the input.

This output is business/content data — public video posts and their publicly displayed engagement counts, not private profile information — so the framework that applies is Facebook's Terms of Service and database-rights rules around systematic reuse of a compiled catalogue, not personal-data regimes like GDPR/CCPA. Consult legal counsel for commercial applications involving bulk storage of this data.

❓ Frequently asked questions

What if a Page publishes no reels?

You get a real zero, not an invented row or a silent failure. The catalog-discovery step reports the actual reel-ID count it found on the Page — including 0 — and writes a single uncharged row with validity: "no_reels_on_page" and status: "Empty" rather than fabricating results.

Can I get sibling reels along with the main reel I requested?

Yes. expandSiblingReels is on by default and harvests up to 5 same-creator sibling reels already embedded on the reel page you fetched, at no extra request. Set fetchFullSiblingRows to true if you also want each sibling's formats, duration and thumbnail — that costs 1 extra request per sibling.

How accurate are the reaction, comment and share counts?

The Actor returns the counts exactly as Facebook renders them on the reel page at request time, anchored to that specific video's decoded story token rather than a neighbouring one in the same page. Accuracy depends on how current Facebook's own counters are at the moment of the request; re-run the target reel later to see updated counts.

How many reels can I get per run?

maxItems is the hard stop — a single cap across input reels, discovered reels and sibling reels combined, applied after de-duplication by videoId. Default is 0 (unlimited), maximum is 100000. Separately, maxReelsPerProfile (default 10, maximum 500, 0 for no cap) limits how many reel IDs are taken from each individual Page before those per-reel caps and filters apply.

What does minReactions actually filter on?

It drops any row whose reaction count is below the threshold, but the filter reads against that exact video's own decoded story token rather than the first reaction count it finds on the page — Facebook repeats the same counter block up to 6 times per reel page (once per sibling), in randomised order, so a naive read would sometimes filter on the wrong video's number. Rows whose reaction count can't be resolved at all are dropped once this filter is above 0.

Does Facebook Reels Scraper work with Claude, ChatGPT and AI agent frameworks?

Yes. It is callable as a standard HTTP-triggered Apify Actor run through the Apify API, so LangChain, CrewAI, n8n or a hand-written tool definition can invoke it and receive typed JSON with no parsing step.

How does Facebook Reels Scraper compare to other Facebook scrapers?

Checked on the Apify Store on 2026-07-26: curious_coder/facebook-profile-scraper and igolaizola/facebook-profile-scraper both target full profile/page data — bio, contact info, ratings, or posts pulled with your own session cookies — rather than a reel catalog specifically; igolaizola's Actor documents requiring exported Facebook cookies for its scrape. cleansyntax/facebook-profile-posts-scraper documents a profile-posts API with pagination and retry logic, returning post objects with media links but not DASH manifests or the sibling-reel graph. None of the three document harvesting sibling reels or anchoring engagement counts to a specific video's story token, which is what this Actor is built around.

Can I use Facebook Reels Scraper without a Facebook account or login?

Yes. No account, cookie, session or API key for Facebook is required or accepted anywhere in the input schema. The only credential you need is your Apify token.

Conclusion

Facebook Reels Scraper By Creator Profile turns a single Page URL into a structured catalog of that creator's public reels — video metadata, DASH/MP4 formats, and reaction/comment/share counts anchored to the right video every time — plus the sibling reels each page already carries, for free. It is built for social teams, agencies, researchers and AI pipelines that need that data as typed rows rather than a scraping project of their own. Open Facebook Reels Scraper on Apify and start a run with a Page URL to see it working.