Facebook Media Downloader avatar

Facebook Media Downloader

Pricing

from $3.20 / 1,000 media links

Go to Apify Store
Facebook Media Downloader

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é

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

48

Total users

13

Monthly active users

a day ago

Last modified

Share

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.

📊 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 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. Open the TARGET-OUTCOMES record 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

FieldTypeWhat it does
urlsstring arrayAccepts 1 to 100 known 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 link

FieldTypeWhat it does
resultsstringLinks 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.

FieldTypeWhat it does
facebookIdstringGives the Facebook media ID.
mediaTypestringSays whether the item is a video, reel, or photo.
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 URL for your quality choice. It can point to a media file or a DASH manifest.
qualitystringGives the quality label for downloadUrl.
formatstring or nullGives the file or manifest format for downloadUrl when known. mpd means a DASH manifest.
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 media or manifest variants found.
downloadLinks[].urlstringGives the direct source URL for a media or manifest variant.
downloadLinks[].qualitystringGives its source quality label.
downloadLinks[].formatstring or nullGives the file or manifest format for this variant when known. mpd means a DASH manifest.
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.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 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.

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 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.shareCount field from media rows.
  • Documents TARGET-OUTCOMES in 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 🫡

Made with ❤️ by Maxime Dupré