Facebook Media Downloader
Pricing
from $3.20 / 1,000 media links
Facebook Media Downloader
Get direct source-hosted links for known public Facebook videos, reels, and photos. Export available media variants, captions, author details, and engagement counts when Facebook exposes them, plus one outcome for each accepted URL.
Pricing
from $3.20 / 1,000 media links
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
48
Total users
13
Monthly active users
a day ago
Last modified
Categories
Share
📥 Get public Facebook media links
Facebook Media Downloader helps researchers, creators, and teams resolve known public Facebook videos, reels, and photos. It returns direct source-hosted links, available media variants, public details, and one success or failure outcome for each 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.
📊 Facebook media data
Saved media
Each row in Media results is one public Facebook media item saved from the first eligible occurrence of a target. Repeated references to the same source item are ignored after that first occurrence. A row includes source links, available public details, media variants, and a duration only when trusted source data agrees.
🚀 Run Facebook media links
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. Open the
TARGET-OUTCOMESrecord in the run's default key-value store 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 known 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 link
| Field | Type | What it does |
|---|---|---|
results | string | Links to one row for each successful public Facebook media item. |
Media results
Each saved row has the same shape for a video, reel, or photo.
| Field | Type | What it does |
|---|---|---|
facebookId | string | Gives the Facebook media ID. |
mediaType | string | Says whether the item is a video, reel, or photo. |
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 URL for your quality choice. It can point to a media file or a DASH manifest. |
quality | string | Gives the quality label for downloadUrl. |
format | string or null | Gives the file or manifest format for downloadUrl when known. mpd means a DASH manifest. |
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 media or manifest variants found. |
downloadLinks[].url | string | Gives the direct source URL for a media or manifest variant. |
downloadLinks[].quality | string | Gives its source quality label. |
downloadLinks[].format | string or null | Gives the file or manifest format for this variant when known. mpd means a DASH manifest. |
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.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 row is shortened. The "..." values mark omitted URL values and additional variants.
{"facebookId": "1358040539510776","mediaType": "reel","sourceUrl": "https://www.facebook.com/Meta/videos/jackedjumper-is-bringing-viewers-directly-into-the-game-capturing-high-energy-be/1358040539510776/","title": null,"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": null,"authorUrl": null,"publishedAt": "2026-06-15T16:00:27.000Z","thumbnailUrl": "...","downloadUrl": "...","quality": "HD","format": "mp4","durationSeconds": null,"downloadAvailable": true,"expiresAt": "2026-09-04T16:07:53.000Z","downloadLinks": [{"url": "...","quality": "HD","format": "mp4","width": 1080,"height": 1920,"bitrate": 4082158,"durationSeconds": null},{"url": "...","quality": "SD","format": "mp4","width": 360,"height": 640,"bitrate": 606709,"durationSeconds": null},"..."],"engagement": {"reactionCount": null,"commentCount": 843,"viewCount": null,"playCount": null}}
Target outcomes
Every accepted URL gets one report, even when no media row is saved. The Actor saves these reports in the run's default key-value store under the exact record name TARGET-OUTCOMES. Open the run's Key-value store and select that record.
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 source link. A target that produces no saved media is not charged as a media item.
🔌 Integrations
Use it in Apify Console or through the Apify API. You can also schedule runs, send webhooks, or connect Apify integrations to the dataset and the TARGET-OUTCOMES key-value-store record.
❓ FAQ
Why did my accepted URL return no media?
Open the TARGET-OUTCOMES record in the run's default key-value store. It tells you whether validation, fetching, redirects, source access classification, or media parsing failed. It calls the target unavailable only when Facebook proves that.
What happens when the same media appears more than once?
The Actor saves the first eligible match and ignores later references to the same source item. The saved row shows the first match. It does not combine later URLs or handles into that row.
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.
Is this a Facebook download video app?
It is an Apify Actor. Run it in Apify Console or through the Apify API, then add known public Facebook video, reel, or photo URLs.
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 them soon and run the Actor again when you need a fresh link.
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 URL Facebook exposes. It does not remove marks, transform files, or transcode media.
📝 Changelog
v2.0 (07-09-2026)
- Removes the
engagement.shareCountfield from media rows. - Documents
TARGET-OUTCOMESin the run's default key-value store as the supported place for one outcome per accepted URL.
v1.2
- Reports the matching format when Facebook provides a direct media file or DASH manifest.
- Adds public counts for individual reaction types when Facebook exposes them.
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 Post Extractor 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é


