Facebook Media Downloader – Video, Reel & Photo Links
Pricing
from $5.00 / 1,000 facebook media resolveds
Facebook Media Downloader – Video, Reel & Photo Links
Download public Facebook videos, Reels, Watch pages, and photos by URL. Returns direct CDN links plus metadata; optionally saves bounded files to run storage. Cookieless, no login. MCP-ready. $0.005/media.
Pricing
from $5.00 / 1,000 facebook media resolveds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Turn a public Facebook video, Reel, Watch, or photo URL into one dataset row with a direct CDN download link, thumbnail, author, caption, and dimensions when Facebook exposes them. Optionally copy a bounded progressive file into this run's key-value store. Cookieless. MCP-ready.
This Actor is the URL-in → media-out tool for known public posts. Prefer Facebook Video Downloader when you only need Reels or Watch videos and want that video-only listing; use this Actor when the same job must also include public photos.
Best fit for this Actor
- You already have a public Facebook Reel, Watch, video, or photo URL and need a direct downloadable link.
- You want cookieless, MCP-ready resolution rather than a page crawl or engagement scrape.
- You need photos and videos in one SKU with predictable Pay per event pricing.
Start with a single URL for agent calls. Continue with a small batch when you are archiving a known list. For page follower counts after you resolve media, continue with Facebook Followers Scraper.
Sibling routing
- Video-only SKU → Facebook Video Downloader when you only need Reels/Watch/video and prefer that listing
- Page follower counts → Facebook Followers Scraper when the next step is page metrics rather than media files
- Supported scope here: public video, Reel, Watch, and photo URLs that resolve while logged out
- Route Stories, private posts, Marketplace items, and album crawls to dedicated products instead of this downloader
Workflow story: from a pasted Reel to a durable link
A social archivist drops a public Reel URL into this Actor. The managed provider chain resolves the public post, and one row lands with an MP4 CDN link, caption, author, and duration. She exports JSON into her archive sheet. When she needs a durable copy later, she re-runs with Save media files to storage enabled so a bounded file stays in the run's key-value store.
Quick start input
{"mediaUrls": ["https://www.facebook.com/reel/1535656380759655/"]}
mediaUrls is the only required field. Accepts facebook.com, m.facebook.com, and fb.watch links for public video, Reel, Watch, and photo URLs.
Input reference
| Field | Type | What it controls |
|---|---|---|
mediaUrls | array (required) | Public Facebook media URLs |
maxMedia | integer | Budget cap on saved/billed media records (1–1000, default 20) |
mediaTypes | array | Optional keep-filter: video, reel, watch, photo |
providerOrder | enum | Managed provider priority (scrapecreators-first default) |
downloadToStorage | boolean | Copy progressive MP4/image into run storage |
maxFileSizeMB | integer | Cap per stored file (1–500 MB, default 200) |
What data you receive
One dataset item represents one public media asset.
| Field | What it answers |
|---|---|
downloadUrl, hdDownloadUrl, hlsManifestUrl, mimeType | Where to fetch the media |
mediaType, mediaId, durationSeconds, width, height | What kind of asset it is |
title, caption, thumbnailUrl | Context around the post |
authorName, authorUrl | Who published it |
storedFileUrl | Durable copy when file save is enabled |
sourceUrl, provider, scrapedAt, postedAt | Provenance |
{"mediaId": "1535656380759655","sourceUrl": "https://www.facebook.com/reel/1535656380759655/","mediaType": "reel","mimeType": "video/mp4","downloadUrl": "https://video.xx.fbcdn.net/o1/v/t2/example.mp4","hdDownloadUrl": null,"storedFileUrl": null,"caption": "Public reel caption","authorName": "Example Creator","durationSeconds": 23.3,"provider": "scrapecreators","scrapedAt": "2026-09-22T12:00:00.000Z"}
Download the dataset as JSON, CSV, Excel, or HTML. Every terminal run also writes OUTPUT and RUN_SUMMARY with outcome (COMPLETE / PARTIAL / VALID_EMPTY / INVALID_INPUT / UPSTREAM_FAILED / CONFIG_ERROR). Inspect that outcome, then read the dataset.
API example
curl "https://api.apify.com/v2/acts/khadinakbar~facebook-media-downloader/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"mediaUrls": ["https://www.facebook.com/reel/1535656380759655/"],"maxMedia": 1,"downloadToStorage": false}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('khadinakbar/facebook-media-downloader').call({mediaUrls: ['https://www.facebook.com/photo.php?fbid=1635563591272344'],maxMedia: 1,mediaTypes: ['photo'],});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Best results guidance
- Provide a public URL you can open while logged out.
- Prefer Reel / Watch / photo.php /
/videos/URLs over ambiguous share wrappers. - CDN links expire. Use
downloadToStoragepromptly when you need a durable file. - Validate
OUTPUT.outcomebefore treating an empty dataset as a product issue: missing public posts reportVALID_EMPTYwith zeromedia-resolvedcharges.
Why AI agents and MCP clients choose this Actor
- One required input.
mediaUrlsis the only required field. - Predictable cost. Saved media uses the
media-resolvedPay per event unit; see the live Pricing tab. - Structured output. Stable keys plus a published dataset schema.
- Honest outcomes. Inspect
OUTPUTforINVALID_INPUT,VALID_EMPTY, orUPSTREAM_FAILED, then read the dataset.
Resolve these public Facebook media URLs into direct download links with media type, caption, author, and provenance. Return the dataset rows and the run outcome.
MCP tool name: apify--facebook-media-downloader. Hosted setup lives at mcp.apify.com. After the call, read the dataset, keep sourceUrl / provider / scrapedAt, and respect the run cost cap.
Pricing — Pay per event + platform usage
| Event | Price | When charged |
|---|---|---|
apify-actor-start | $0.00005 | Once per valid run start |
media-resolved | $0.005 | Each validated public media row with a usable direct link |
media-file-saved | $0.005 | Each optional file successfully stored |
Platform compute and proxy usage are passed through to the caller (Pay per event + usage). Invalid inputs and empty public results are not charged the primary media event. See the Actor Pricing tab for the live table.
Builder's note
First-hand implementation note from live provider probes: Facebook's logged-out HTML is a moving target for direct scrapers. During live probes, ScrapeCreators GET /v1/facebook/post returned progressive MP4 fields for Reels and image_url for photo.php IDs, with SociaVault as the same-shape fallback. The extractor therefore prefers structured video.sd_url / video.hd_url and top-level image_url before walking nested blobs, and it records provider not_found as VALID_EMPTY so agents can branch cleanly when a URL is gone.
Legal / responsible use
Only download media you have the right to use. Respect Meta's terms, copyright, and applicable privacy laws. This Actor returns publicly reachable media links for authorized archival, research, and personal use cases. It does not bypass privacy settings.
Facebook and Meta are trademarks of their owners. This independent Actor is not affiliated with, associated with, or endorsed by Facebook or Meta Platforms, Inc.
FAQ
Do I need a Facebook login? No. Cookies and passwords are not accepted.
Does it include Stories? Stories belong on a dedicated Stories product; this Actor covers public video, Reel, Watch, and photo URLs.
Why is a row missing HD? Facebook often exposes only one progressive quality to public no-login views.
Related Actors
- Prefer Facebook Video Downloader for a video-only Store listing and pricing shape
- Continue with Facebook Followers Scraper when you need page follower counts after media resolve