Facebook Videos Scraper
Pricing
from $2.99 / 1,000 results
Facebook Videos Scraper
Facebook Videos Scraper — Extract Facebook video data including titles, descriptions, views, likes, comments, shares, upload dates, page or profile details, and video URLs. Useful for content research, competitor analysis, monitoring, and social media insights.
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
Social Data API
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Facebook Videos Scraper — Captions, Stream Links and Video Details
Facebook Videos Scraper extracts the details and playable streams of public Facebook reels and videos. Each row gives the caption, title, owner ID, duration, publish date, thumbnail and every stream with a direct link, from the HD and SD MP4 files to each DASH video and audio track. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a media archiving pipeline. No Facebook account or cookies needed. Start with one reel, then paste the whole list you need.
What data can I extract with Facebook Videos Scraper?
Using this Facebook Video API, you will be able to extract the following Facebook video data:
| 🆔 Video ID | 📝 Title | 💬 Caption (if the video has one) | 👤 Owner ID |
|---|---|---|---|
| 🏷️ Uploader name (page-video and Watch links) | ⏱️ Duration in seconds | 🕒 Duration as M:SS | 📅 Publish time (Unix) |
| 🗓️ Upload date (YYYYMMDD) | 🖼️ Thumbnail image | 🔗 Video page link | 📥 Input URL |
| 🎞️ All streams (DASH video, DASH audio, HD and SD MP4) with direct links | 🎯 Selected top video + audio pair | 📐 Width, height and resolution | 🎚️ Frame rate |
| 🎥 Video codec and bitrate | 🔊 Audio codec, bitrate, sample rate and channels | 📦 Estimated file size | 🚦 Status, reason and charged flag |
How to use Facebook Videos Scraper
Developers, archivists and analysts who scrape facebook videos get one structured row per link from a single run: the video's details plus every playable stream.
Copy to your AI assistant:
Facebook Videos Scraper is an Apify Actor that returns the metadata and playable stream links of public Facebook reels and videos as structured JSON: caption, title, owner ID, duration, publish time, upload date, thumbnail, and every DASH and MP4 stream with its codec, resolution, bitrate and direct URL. Use it whenever someone needs Facebook video data without cookies, a login, or a browser - archiving reels with their captions, feeding stream URLs to a transcoder, or indexing captions for search. Inputs: urls (array of strings, required, one public Facebook link per line: https://www.facebook.com/reel/<id>, https://www.facebook.com/<page>/videos/<id>/ or https://www.facebook.com/watch/?v=<id>, no default), proxyConfiguration (object, optional, Apify Proxy or your own proxy URLs, prefilled as {"useApifyProxy": false}). Every URL gives exactly one row with a status field: "Success" rows carry the full data and are the only rows charged (event row_result); "Unavailable" rows (the page had no playable video: deleted, private or not a video) and "Failed" rows (the page could not be fetched after 3 attempts, with an error field) are not charged. A summary of the run is saved as SUMMARY.json in the run's key-value store. Media links are signed by Facebook and expire, so download them soon after the run.
Facebook Videos Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor
Point your AI assistant at the Apify MCP server and it can find this Actor through the server's search, add and call actor tools, then read Facebook videos on its own. No glue code, no scraping logic in your prompts.
$claude mcp add --transport http apify "https://mcp.apify.com"
Step by step
- Create a free Apify account.
- Open Facebook Videos Scraper in the Apify Store.
- Paste the Facebook reel or video URLs, one per line.
- Click Start (or send your API request).
- Download or stream your results in JSON, CSV or Excel.
How to scale Facebook Videos Scraper to bulk
The URL list has no size cap, so one run can take hundreds of links; that makes it a bulk Facebook video scraper without any extra setup. The Actor fetches up to three links at a time and saves the rows in the same order as your list, each one as soon as it is ready. Remove duplicate links first: a link listed twice is fetched twice and returns two rows. For recurring jobs, save the input as an Apify task and put it on a schedule, or start runs from your own code through the Apify API.
✨ Features
Facebook Videos Scraper fetches clean, structured videos from Facebook ⚡. It's ideal for building reel archives, feeding stream URLs to a downloader or transcoder, tracking what a page publishes, and collecting captions for search or AI pipelines. It works as a facebook reels scraper and a facebook video metadata scraper in one.
It extracts, per video:
- Streams with direct links – every DASH video and audio track plus the HD and SD MP4 files, each with its codec, bitrate, resolution and the download settings that come with it, so each entry works as a facebook video download link.
- Selected pair – the highest-bitrate video track plus the audio track, with resolution, frame rate, codecs and estimated size.
- Caption – the text the creator wrote, taken from the requested video only, never from the other reels on the same page.
- Owner ID – the numeric ID of the account that posted the video.
- Publish time – Unix timestamp and upload date.
- Duration – in seconds and as M:SS.
- Thumbnail – the preferred preview image.
⚡ A link that carries no playable video is reported as "Unavailable" instead of a half-empty success row, and it is never charged.
Use cases 💡
- Media archivist — save each reel's HD link with its caption, owner ID and publish date.
- Pipeline engineer — pick the DASH track whose height matches the target and skip needless re-encodes.
- Content analyst — track a page's video length and posting dates over time.
- Researcher — use it as a facebook reel caption extractor and study hashtags across reel sets.
- AI engineer — index captions and titles into a RAG pipeline, keyed on video ID.
Building an AI agent? Connect Facebook Videos Scraper over MCP and let it call the actor on its own.
Why choose this actor?
- Six links, six rows, under four seconds. A recorded run with 6 links (two reels, a page video, a Watch link, a deleted reel and a repeated reel) returned 6 rows in 3.5 to 3.8 seconds, each with its status.
- The full media picture for each video. A recorded National Geographic reel came back with a 62.687-second runtime, 5 stream entries up to 720x1280 at 23.976 frames per second, and its full caption.
- 45 output fields, three link types, honest statuses. Reel, page-video and Watch links are accepted, and every row says whether it is a success, unavailable or failed.
⬇️ Input
The Actor takes a list of public Facebook links in the URL field, which is the only required input. Proxy settings are optional.
Accepted URLs for the Facebook video scraper
https://www.facebook.com/reel/<id>https://www.facebook.com/<page>/videos/<id>/https://www.facebook.com/watch/?v=<id>
| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
urls | Yes | array | Public Facebook reel or video links, one per line. Each link gives one row. No default. | ["https://www.facebook.com/reel/1775334020324572"] |
proxyConfiguration | No | object | Apify Proxy or your own proxy URLs (only the first one is used). Prefilled as {"useApifyProxy": false}, a direct connection; on a direct connection a blocked request is retried through a proxy. | {"useApifyProxy": true} |
Example input
{"urls": ["https://www.facebook.com/reel/1775334020324572","https://www.facebook.com/reel/816552800975144","https://www.facebook.com/watch/?v=1395487772147320"],"proxyConfiguration": {"useApifyProxy": true}}
⬆️ Output
Every video is one typed, normalized JSON item with the same field names on every run, and you can export facebook reels to CSV, JSON (default) or Excel. Each URL gives exactly one row, and its status tells you which kind it is.
Facebook video scraper row types
- Success – the full row, charged as one
row_resultevent. - Unavailable – the page carried no playable video (deleted, private or not a video). Only the video ID, input URL, status, reason and charged flag; not charged.
- Failed – the page could not be fetched after 3 attempts. Input URL, status, reason, charged flag and the error message; not charged.
Example output
A real Success row and a real Unavailable row from a recorded run. The stream list is cut to two entries and the long signed media links are shortened here; a real row lists every stream with its full link.
[{"title": "Some sharks navigate across entire ocean basins, covering distances comparable to Earth's circumference. Hidden within their snouts is the sensory system that helps guide these extraordinary journeys. But some species are adjusting their migrations—National Geographic Explorer Arzucan Askin explains why. | National Geographic","description": "Some sharks navigate across entire ocean basins, covering distances comparable to Earth's circumference. Hidden within their snouts is the sensory system that helps guide these extraordinary journeys. But some species are adjusting their migrations—National Geographic Explorer Arzucan Askin explains why.","uploader": null,"uploader_id": "100044623170418","thumbnail": "https://scontent.fdac8-1.fna.fbcdn.net/v/t15.5256-10/740365861_177533419…","duration": 62.687,"id": "1775334020324572","formats": [{"format_id": "2121894758360781a","manifest_url": "https://www.facebook.com/dash_mpd_debug.mpd?v=1775334020324572&dummy=.mpd","ext": "m4a","width": null,"height": null,"tbr": 59.806,"asr": 48000,"fps": null,"language": null,"format_note": "DASH audio","filesize": 468632,"container": "m4a_dash","vcodec": "none","acodec": "mp4a.40.5","dynamic_range": null,"url": "https://video.fdac8-1.fna.fbcdn.net/o1/v/t2/f2/m412/AQMtnRVE7KQ1xseaN553…","manifest_stream_number": 0,"is_dash_periods": true,"http_headers": {"User-Agent": "facebookexternalhit/1.1","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language": "en-us,en;q=0.5","Sec-Fetch-Mode": "navigate"},"downloader_options": {"http_chunk_size": 262144000},"protocol": "https","audio_ext": "m4a","video_ext": "none","audio_channels": 2,"vbr": 0,"abr": 59.806,"resolution": "audio only","aspect_ratio": null,"format": "2121894758360781a - audio only (DASH audio)"},{"format_id": "hd","quality": -2,"url": "https://video.fdac8-1.fna.fbcdn.net/o1/v/t2/f2/m366/AQNWFkIfscJ3e75ieKsJ…","http_headers": {"User-Agent": "facebookexternalhit/1.1","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language": "en-us,en;q=0.5","Sec-Fetch-Mode": "navigate"},"downloader_options": {"http_chunk_size": 262144000},"protocol": "https","ext": "mp4","video_ext": "mp4","audio_ext": "none","vbr": null,"abr": null,"tbr": 1508.885,"resolution": null,"dynamic_range": "SDR","aspect_ratio": null,"filesize_approx": 11823434,"format": "hd - unknown"}],"timestamp": 1784401217,"webpage_url": "https://www.facebook.com/100044623170418/videos/1775334020324572/","original_url": "https://www.facebook.com/reel/1775334020324572","webpage_url_basename": "1775334020324572","webpage_url_domain": "facebook.com","extractor": "facebook","extractor_key": "Facebook","thumbnails": [{"url": "https://scontent.fdac8-1.fna.fbcdn.net/v/t15.5256-10/740365861_177533419…","id": "0"}],"display_id": "1775334020324572","fulltitle": "Some sharks navigate across entire ocean basins, covering distances comparable to Earth's circumference. Hidden within their snouts is the sensory system that helps guide these extraordinary journeys. But some species are adjusting their migrations—National Geographic Explorer Arzucan Askin explains why. | National Geographic","duration_string": "1:02","upload_date": "20260718","epoch": 1790844848,"requested_formats": [{"format_id": "2121894841694106v","manifest_url": "https://www.facebook.com/dash_mpd_debug.mpd?v=1775334020324572&dummy=.mpd","ext": "mp4","width": 720,"height": 1280,"tbr": 2213.98,"asr": null,"fps": 23.976,"language": null,"format_note": "DASH video","filesize": 17348470,"container": "mp4_dash","vcodec": "avc1.64001f","acodec": "none","dynamic_range": "SDR","url": "https://video.fdac8-1.fna.fbcdn.net/o1/v/t2/f2/m366/AQNWFkIfscJ3e75ieKsJ…","manifest_stream_number": 0,"is_dash_periods": true,"http_headers": {"User-Agent": "facebookexternalhit/1.1","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language": "en-us,en;q=0.5","Sec-Fetch-Mode": "navigate"},"downloader_options": {"http_chunk_size": 262144000},"protocol": "https","video_ext": "mp4","audio_ext": "none","abr": 0,"vbr": 2213.98,"resolution": "720x1280","aspect_ratio": 0.56,"format": "2121894841694106v - 720x1280 (DASH video)"},{"format_id": "2121894758360781a","manifest_url": "https://www.facebook.com/dash_mpd_debug.mpd?v=1775334020324572&dummy=.mpd","ext": "m4a","width": null,"height": null,"tbr": 59.806,"asr": 48000,"fps": null,"language": null,"format_note": "DASH audio","filesize": 468632,"container": "m4a_dash","vcodec": "none","acodec": "mp4a.40.5","dynamic_range": null,"url": "https://video.fdac8-1.fna.fbcdn.net/o1/v/t2/f2/m412/AQMtnRVE7KQ1xseaN553…","manifest_stream_number": 0,"is_dash_periods": true,"http_headers": {"User-Agent": "facebookexternalhit/1.1","Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8","Accept-Language": "en-us,en;q=0.5","Sec-Fetch-Mode": "navigate"},"downloader_options": {"http_chunk_size": 262144000},"protocol": "https","audio_ext": "m4a","video_ext": "none","audio_channels": 2,"vbr": 0,"abr": 59.806,"resolution": "audio only","aspect_ratio": null,"format": "2121894758360781a - audio only (DASH audio)"}],"format": "2121894841694106v - 720x1280 (DASH video)+2121894758360781a - audio only (DASH audio)","format_id": "2121894841694106v+2121894758360781a","ext": "mp4","protocol": "https+https","format_note": "DASH video+DASH audio","filesize_approx": 17817102,"tbr": 2273.786,"width": 720,"height": 1280,"resolution": "720x1280","fps": 23.976,"dynamic_range": "SDR","vcodec": "avc1.64001f","vbr": 2213.98,"aspect_ratio": 0.56,"acodec": "mp4a.40.5","abr": 59.806,"asr": 48000,"audio_channels": 2,"status": "Success","unavailableReason": null,"charged": true},{"id": "2429400350831482","original_url": "https://www.facebook.com/reel/2429400350831482","status": "Unavailable","unavailableReason": "video_unavailable_or_not_a_reel","charged": false}]
How does it work?
The Actor reads only public data that any logged-out visitor can see, with one plain HTTP request per link and no browser. For each link it collects the video ID, owner ID, caption, publish time, thumbnail and the full list of streams, and it makes sure the caption and owner belong to the exact video you asked for, not to other videos shown on the same page. Each request gets up to three attempts. You can use Apify Proxy or your own proxy; a blocked request, or a live video whose data Facebook holds back, is retried through a proxy automatically. A deleted or private video is reported as unavailable instead of a half-empty row. The row shape is defined by the Actor, not by Facebook's page layout, so your field names stay the same from run to run.
How do you integrate Facebook Videos Scraper into your stack?
Facebook Videos Scraper works with what you already use: the REST API from any language (a simple facebook reels api for your own code), MCP for AI agents, and no-code tools.
MCP integration for AI agents
Add the Apify MCP server to your agent with one command:
$claude mcp add --transport http apify "https://mcp.apify.com"
Your agent then finds this Actor with the server's search, add and call actor tools, which registers it as a tool your agent can call directly. The same server URL works in Claude Code, Cursor and Windsurf, so your assistant can pass in links and read back structured video rows.
No-code tools (n8n, Make, LangChain)
- n8n – add the Apify node, choose "Run an Actor", pick this Actor and pass your list of links; the next node reads the run's dataset items.
- Make – use the Apify app's "Run an Actor" module, then "Get Dataset Items" to send each row to Google Sheets, Airtable or your storage.
- LangChain – load a finished run's dataset with
ApifyDatasetLoaderfromlangchain-apifyand map each row's caption and title into documents.
Is it legal to scrape Facebook data?
Scraping publicly available Facebook video data is generally legal when no login is bypassed and no private content is accessed. Facebook Videos Scraper returns only publicly available data, what any user sees without logging in. Captions and owner IDs can identify people, so under GDPR and similar laws, storing and using that data must have a lawful basis and follow local data-protection rules. The stream links point to videos that their creators own; a link is not a licence to republish the video. Consult legal counsel if your use case involves bulk storage of personal data.
Frequently asked questions
What fields does Facebook Videos Scraper return?
It returns the caption, the owner ID, the duration, the publish time and every playable stream with its direct link, plus the title, thumbnail and the selected video and audio pair. See the data fields section for the full list.
Does Facebook Videos Scraper require a Facebook account or login?
No. Only public video data is extracted, and there is no field for a cookie, token or password. No credentials are needed beyond your Apify account.
How fast does Facebook Videos Scraper run?
A recorded run with 6 links returned 6 rows in 3.5 to 3.8 seconds, with up to three links fetched at a time. Data is fetched live at run time, not from a cache.
What happens if a video is private or doesn't exist?
You get one row with status "Unavailable" and a reason, and it is not charged. If the video exists but Facebook holds its data back, the Actor first retries through a proxy, so an Unavailable row means the video could not be shown publicly. If the page cannot be fetched after 3 attempts, the row has status "Failed" with the error message, also not charged. In code, keep the rows where status equals "Success" and read the other fields with .get(), because Unavailable and Failed rows carry only a few fields.
Can I scrape multiple Facebook videos at once?
Yes. Put as many links as you like in the URL list; up to three are fetched at a time and the rows are saved in your list's order.
Does Facebook Videos Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes, this Actor is available as an MCP tool through the Apify MCP server. Register the server in Claude Code, Cursor or Windsurf with claude mcp add --transport http apify "https://mcp.apify.com" and the agent finds the Actor with the search, add and call actor tools. Any agent that can call an HTTP endpoint can also use the Apify REST API directly.
Does Facebook Videos Scraper return data in a format LLMs can use directly?
Yes. Rows are typed, normalized JSON with consistent field names, with no HTML parsing and no selectors. Pass them to an LLM, index them into a vector store, or hand them to an agent tool with no transformation step.
What happens when Facebook changes its layout or updates its anti-bot system?
The Actor is maintained, and when Facebook changes, the Actor is updated so your calls keep returning the same JSON field names with no changes on your end. If a value stops being available, it shows up as an empty field rather than a wrong one.
Can I use Facebook Videos Scraper without managing proxies or browser infrastructure?
Yes. There is no browser to run, and proxies are optional: tick Apify Proxy, add your own proxy URL, or leave it off and let the Actor retry blocked requests through a proxy on its own. You send a list of links and get structured JSON back.
Which Facebook video fields work best for AI training data and RAG indexing?
For RAG, use the caption and the title, with the input URL as the citation link. For training data, use the duration, publish time, width, height, frame rate and bitrates, which are plain numbers. All fields are typed values, strings, numbers or plain objects, so no extra cleaning is needed.
Your feedback
Found a bug or missing a field? Let us know through the Actor's Issues tab in Apify Console. Include the exact Facebook link and the input you ran so the problem can be reproduced quickly.