Facebook Media Downloader
Pricing
from $4.05 / 1,000 media links
Facebook Media Downloader
Get direct source-hosted links for public Facebook videos, reels, and photos. Export media variants, captions, author details, engagement counts, and a clear outcome for each accepted URL.
Pricing
from $4.05 / 1,000 media links
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
38
Total users
12
Monthly active users
6 days ago
Last modified
Categories
Share
📥 Get public Facebook media links
Facebook Media Downloader helps researchers, creators, and teams get direct source-hosted links for known public Facebook videos, reels, and photos. It also returns available media variants, public details, and a success or failure outcome for every accepted URL.
- Get a public video without a watermark with Download Facebook Video Without Watermark.
- Get an HD link from a known public video when Facebook exposes one with Facebook Video Downloader HD.
- Resolve a known public video with Download Facebook Video.
- Resolve a public video, reel, or photo with Facebook Media Downloader.
- Get a direct link from a known public reel with Facebook Reel Downloader.
📊 What data is returned?
Saved media
Each row in Media results is one public Facebook media item found from the first eligible occurrence of a target. Repeated references to the same source item are ignored after that first occurrence. The row keeps direct source-hosted links, available public details, variant data, and a stable duration when trusted source data agrees.
🚀 How do I run the Actor?
Run steps
- Add one or more known public Facebook media URLs.
- Pick the preferred video quality.
- Start the Actor.
- Open Media results for saved media and Target outcomes for one outcome per accepted URL.
Access limits
The Actor does not search Facebook or crawl Pages, profiles, groups, albums, or stories. It does not use Facebook cookies, a login, or a Meta API key.
⚙️ Input
Input fields
| Field | Type | What it does |
|---|---|---|
urls | string array | Accepts 1 to 100 public Facebook video, reel, photo, mobile, or share URLs. |
preferredQuality | string | Picks best, hd, or sd for the main video link. If that choice is missing, the best available quality is used. |
Example input
This is the public input from a successful current beta run:
{"urls": ["https://www.facebook.com/watch?v=1358040539510776"],"preferredQuality": "best"}
🧾 Output
Output links
| Field | Type | What it does |
|---|---|---|
results | dataset | Opens one row for each successful public Facebook media item. |
targetOutcomes | JSON report | Opens one success or failure outcome for each accepted URL. |
Media results
Each saved row has the same shape for a video, reel, photo, or other accepted media kind.
| Field | Type | What it does |
|---|---|---|
facebookId | string | Gives the Facebook media ID. |
mediaType | string | Says whether the item is a video, reel, photo, or unknown kind. |
sourceUrl | string or null | Gives the canonical Facebook page when known. |
title | string or null | Gives the source title when exposed. |
caption | string or null | Gives the public caption or description when exposed. |
authorName | string or null | Gives the public author or Page name when exposed. |
authorUrl | string or null | Gives the public author or Page URL when exposed. |
publishedAt | string or null | Gives the source publish time when exposed. |
thumbnailUrl | string or null | Gives a direct thumbnail link when exposed. |
downloadUrl | string | Gives the main source-hosted media link for your quality choice. |
quality | string | Gives the quality label for downloadUrl. |
format | string or null | Gives the file format when known. |
durationSeconds | number or null | Gives video length in seconds when trusted source data agrees. It is null when the value is missing or conflicts. |
downloadAvailable | boolean | Says whether the main link worked when checked. |
expiresAt | string or null | Gives the time the link may expire when Facebook exposes it. |
downloadLinks | array | Lists all source-hosted variants found. |
downloadLinks[].url | string | Gives the direct link for a variant. |
downloadLinks[].quality | string | Gives its source quality label. |
downloadLinks[].format | string or null | Gives its file format when known. |
downloadLinks[].width | integer or null | Gives its width in pixels when known. |
downloadLinks[].height | integer or null | Gives its height in pixels when known. |
downloadLinks[].bitrate | integer or null | Gives its bitrate when exposed. |
downloadLinks[].durationSeconds | number or null | Gives its length in seconds when trusted source data agrees. |
engagement | object | Holds public engagement counts when exposed. |
engagement.reactionCount | integer or null | Gives known public reactions. |
engagement.reactionCounts | object | Holds counts for each reaction type when Facebook exposes them. |
engagement.reactionCounts.like | integer or null | Gives known Like reactions. |
engagement.reactionCounts.love | integer or null | Gives known Love reactions. |
engagement.reactionCounts.care | integer or null | Gives known Care reactions. |
engagement.reactionCounts.haha | integer or null | Gives known Haha reactions. |
engagement.reactionCounts.wow | integer or null | Gives known Wow reactions. |
engagement.reactionCounts.sad | integer or null | Gives known Sad reactions. |
engagement.reactionCounts.angry | integer or null | Gives known Angry reactions. |
engagement.commentCount | integer or null | Gives known public comments. |
engagement.shareCount | integer or null | Gives known public shares. |
engagement.viewCount | integer or null | Gives known public views. |
engagement.playCount | integer or null | Gives known public plays. |
Example media row (shortened)
This is a genuine row from a successful current beta run. The "..." values mark long values or variants omitted to keep the example short.
{"facebookId": "1358040539510776","mediaType": "video","sourceUrl": "https://www.facebook.com/reel/1358040539510776/","title": "@jackedjumper is bringing viewers directly into the game, capturing high-energy beach volleyball matches from his first-person perspective with Oakley Meta glasses and sharing Reels of his most intense rallies. While on the court he uses Meta AI via his glasses to stay updated on the time, the weather, and to quickly cue up playlists hands-free. Follow @jackedjumper to see the volleyball court from a new perspective. | Meta","caption": "@jackedjumper is bringing viewers directly into the game, capturing high-energy beach volleyball matches from his first-person perspective with Oakley Meta glasses and sharing Reels of his most intense rallies. While on the court he uses Meta AI via his glasses to stay updated on the time, the weather, and to quickly cue up playlists hands-free. Follow @jackedjumper to see the volleyball court from a new perspective.","authorName": "Meta","authorUrl": "https://www.facebook.com/Meta","publishedAt": "2026-06-15T16:00:27.000Z","thumbnailUrl": "...","downloadUrl": "...","quality": "HD","format": "mp4","durationSeconds": 14,"downloadAvailable": true,"expiresAt": "2026-08-18T12:07:53.000Z","downloadLinks": [{"url": "...","quality": "HD","format": "mp4","width": null,"height": 1080,"bitrate": 4082158,"durationSeconds": 14},{"url": "...","quality": "SD","format": "mp4","width": null,"height": null,"bitrate": 606709,"durationSeconds": 14},"..."],"engagement": {"reactionCount": 4163,"commentCount": 826,"shareCount": null,"viewCount": 177240,"playCount": 514797}}
Target outcomes
Every accepted URL gets one report, even when no media row is saved. The report uses the accepted URL, an outcome status, the known processing stage, and a short reason.
For an unresolved target, the report points to the known stage, such as input validation, fetching, redirect handling, source access classification, or media parsing. The Actor marks content unavailable only when Facebook proves it. Otherwise, it gives the narrower known failure and does not guess.
| Field | Type | What it does |
|---|---|---|
url | string | Identifies the accepted Facebook URL. |
status | string | Says whether the target succeeded or failed. |
stage | string | Names the known stage reached, such as input validation, fetching, redirect handling, source access classification, or media parsing. |
reason | string | Gives the known success or failure reason without guessing that content is unavailable. |
💳 Pricing
This Actor uses pay-per-event pricing. You pay for each public video, reel, or photo saved with a direct media link. A target that produces no saved media is not charged as a media item.
🔌 Integrations
Run it in Apify Console or connect the dataset and target report to the Apify API, schedules, webhooks, and Apify integrations.
❓ FAQ
Why did my accepted URL return no media?
Open Target outcomes. It tells you whether validation, fetching, redirects, source access classification, or media parsing failed. It does not call the target unavailable unless Facebook proved that response.
Can it download private Facebook videos?
No. It works with publicly reachable media and does not accept credentials or bypass private, friends-only, closed-group, deleted, or login-only access limits.
Does it use the official Meta or Facebook API?
No. It accepts known public Facebook URLs and does not need a Meta API key.
Can it find Facebook videos by keyword?
No. Add the known public video, reel, or photo URLs you want to resolve. The Actor does not search Facebook or crawl Pages, profiles, groups, albums, or stories.
Does it store the media file?
No. It returns source-hosted Facebook links. Facebook may rotate or expire them, so use or refresh them soon.
Can I use it from an app or workflow?
Yes. Use the Apify API, schedules, webhooks, or Apify integrations with the dataset and target report.
Can I choose HD or SD?
Yes. The choice sets the main video link. If that quality is missing, the Actor uses the best available one and keeps the variants it found.
When is duration empty?
The Actor returns durationSeconds only when trusted source data agrees. If the value is missing or conflicts, it returns null.
Does “without watermark” mean the Actor edits the file?
No. It returns the source-hosted file Facebook exposes. It does not remove marks, transform files, or transcode media.
📝 Changelog
v1.1
- Added public photo support.
- Added a target outcome report for every accepted URL.
- Added known stages for fetching, redirects, source access, parsing, and limit failures.
v1.0
- Simplified output rows to direct Facebook video and reel media links.
- Removed Apify-hosted media copies.
- Lowered media item pricing.
v0.1
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Facebook Page Video Downloader exports videos and public details from Facebook Page libraries.
- Facebook User Posts Scraper exports public timeline posts and attached Facebook media.
- Instagram Downloader API gets direct media links from public Instagram posts and reels.
- TikTok Video Downloader saves public TikTok video or audio links from known URLs.
- Pinterest Video Downloader gets video and image links from public Pinterest pins.
Made with ❤️ by Maxime Dupré

