Facebook Media Downloader avatar

Facebook Media Downloader

Pricing

from $4.05 / 1,000 media links

Go to Apify Store
Facebook Media Downloader

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é

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

38

Total users

12

Monthly active users

6 days ago

Last modified

Share

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.

📊 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

  1. Add one or more known public Facebook media URLs.
  2. Pick the preferred video quality.
  3. Start the Actor.
  4. 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

FieldTypeWhat it does
urlsstring arrayAccepts 1 to 100 public Facebook video, reel, photo, mobile, or share URLs.
preferredQualitystringPicks 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

FieldTypeWhat it does
resultsdatasetOpens one row for each successful public Facebook media item.
targetOutcomesJSON reportOpens 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.

FieldTypeWhat it does
facebookIdstringGives the Facebook media ID.
mediaTypestringSays whether the item is a video, reel, photo, or unknown kind.
sourceUrlstring or nullGives the canonical Facebook page when known.
titlestring or nullGives the source title when exposed.
captionstring or nullGives the public caption or description when exposed.
authorNamestring or nullGives the public author or Page name when exposed.
authorUrlstring or nullGives the public author or Page URL when exposed.
publishedAtstring or nullGives the source publish time when exposed.
thumbnailUrlstring or nullGives a direct thumbnail link when exposed.
downloadUrlstringGives the main source-hosted media link for your quality choice.
qualitystringGives the quality label for downloadUrl.
formatstring or nullGives the file format when known.
durationSecondsnumber or nullGives video length in seconds when trusted source data agrees. It is null when the value is missing or conflicts.
downloadAvailablebooleanSays whether the main link worked when checked.
expiresAtstring or nullGives the time the link may expire when Facebook exposes it.
downloadLinksarrayLists all source-hosted variants found.
downloadLinks[].urlstringGives the direct link for a variant.
downloadLinks[].qualitystringGives its source quality label.
downloadLinks[].formatstring or nullGives its file format when known.
downloadLinks[].widthinteger or nullGives its width in pixels when known.
downloadLinks[].heightinteger or nullGives its height in pixels when known.
downloadLinks[].bitrateinteger or nullGives its bitrate when exposed.
downloadLinks[].durationSecondsnumber or nullGives its length in seconds when trusted source data agrees.
engagementobjectHolds public engagement counts when exposed.
engagement.reactionCountinteger or nullGives known public reactions.
engagement.reactionCountsobjectHolds counts for each reaction type when Facebook exposes them.
engagement.reactionCounts.likeinteger or nullGives known Like reactions.
engagement.reactionCounts.loveinteger or nullGives known Love reactions.
engagement.reactionCounts.careinteger or nullGives known Care reactions.
engagement.reactionCounts.hahainteger or nullGives known Haha reactions.
engagement.reactionCounts.wowinteger or nullGives known Wow reactions.
engagement.reactionCounts.sadinteger or nullGives known Sad reactions.
engagement.reactionCounts.angryinteger or nullGives known Angry reactions.
engagement.commentCountinteger or nullGives known public comments.
engagement.shareCountinteger or nullGives known public shares.
engagement.viewCountinteger or nullGives known public views.
engagement.playCountinteger or nullGives 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.

FieldTypeWhat it does
urlstringIdentifies the accepted Facebook URL.
statusstringSays whether the target succeeded or failed.
stagestringNames the known stage reached, such as input validation, fetching, redirect handling, source access classification, or media parsing.
reasonstringGives 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 🫡

Made with ❤️ by Maxime Dupré