Facebook Media Downloader avatar

Facebook Media Downloader

Pricing

from $4.50 / 1,000 media items

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.50 / 1,000 media items

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

29

Total users

14

Monthly active users

2 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 clear outcome for every accepted URL, so failed targets do not vanish behind an empty run.

📊 What data is returned?

Each saved dataset row is one public Facebook media item found from the first eligible occurrence of a target. Duplicate targets are ignored after that first occurrence.

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 known.
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 known.
engagementobjectHolds public engagement counts when exposed.
engagement.reactionCountinteger or nullGives known public 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.
{
"facebookId": "1027429115410647",
"mediaType": "photo",
"sourceUrl": "https://www.facebook.com/photo.php?fbid=1027429115410647&set=a.714359800050915&id=100044307047609",
"title": "31 juillet 1982 : l’accident de... - Histoire d'apprendre",
"caption": "31 juillet 1982 : l’accident de... - Histoire d'apprendre",
"authorName": null,
"authorUrl": null,
"publishedAt": null,
"thumbnailUrl": null,
"downloadUrl": "https://scontent.fsyd8-1.fna.fbcdn.net/v/t39.30808-6/481220128_1171403471013210_6752279108487433151_n.jpg?stp=cp0_dst-jpg_e15_fr_q65_tt6&_nc_cat=105&_nc_map=urlgen_bucketless&ccb=1-7&_nc_sid=e5c1b6&_nc_ohc=7zW-QGmi7u0Q7kNvwFZ0S4z&_nc_oc=AdpCIiNpenPAZeK98OPl7p3jyyGtsP9dvtIuHjKL550j269akbjT8Fi1XKur7enBkw93ocRnVa77IL6JBmJtsPwE&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_rml=0&_nc_ht=scontent.fsyd8-1.fna&_nc_gid=VFRnIaqqg3FAgLeRvCvOqw&_nc_ss=7b289&oh=00_AQAZA35IaUOZGEsUv8OPY41jQM8pGEzscO8QlA6ED8lHkA&oe=6A6EC55D",
"quality": "unknown",
"format": "jpg",
"durationSeconds": null,
"downloadAvailable": true,
"expiresAt": "2026-08-02T04:19:41.000Z",
"downloadLinks": [
{
"url": "https://scontent.fsyd8-1.fna.fbcdn.net/v/t39.30808-6/481220128_1171403471013210_6752279108487433151_n.jpg?stp=cp0_dst-jpg_e15_fr_q65_tt6&_nc_cat=105&_nc_map=urlgen_bucketless&ccb=1-7&_nc_sid=e5c1b6&_nc_ohc=7zW-QGmi7u0Q7kNvwFZ0S4z&_nc_oc=AdpCIiNpenPAZeK98OPl7p3jyyGtsP9dvtIuHjKL550j269akbjT8Fi1XKur7enBkw93ocRnVa77IL6JBmJtsPwE&_nc_ad=z-m&_nc_cid=0&_nc_zt=23&_nc_rml=0&_nc_ht=scontent.fsyd8-1.fna&_nc_gid=VFRnIaqqg3FAgLeRvCvOqw&_nc_ss=7b289&oh=00_AQAZA35IaUOZGEsUv8OPY41jQM8pGEzscO8QlA6ED8lHkA&oe=6A6EC55D",
"quality": "unknown",
"format": "jpg",
"width": null,
"height": null,
"bitrate": null,
"durationSeconds": null
}
],
"engagement": {
"reactionCount": null,
"commentCount": null,
"shareCount": null,
"viewCount": null,
"playCount": null
}
}

🚀 How do I run the Actor?

  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.

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 to cross access limits.

⚙️ Input

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.

This is the public input from a successful current beta run:

{
"urls": [
"https://www.facebook.com/watch?v=1358040539510776"
],
"preferredQuality": "best"
}

📦 Output and failed targets

Media results opens successful rows in the default dataset. Target outcomes opens a JSON report with a success or failure outcome for each accepted URL.

For an unresolved target, the outcome points to the known stage: input validation, fetching, redirect handling, source access classification, or media parsing. The Actor says content is unavailable only when the observed Facebook response proves it. In other cases, it gives the narrower known failure and does not guess. This means a successful run with no media still has a report for each accepted target.

💸 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 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 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.

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

  • 1.1: Added public photo support and a target outcome report that distinguishes fetching, redirect, access, parsing, and limit failures without guessing that content is unavailable.
  • 1.0: Simplified output rows to direct Facebook video and reel media links, removed Apify-hosted media copies, and lowered media item pricing.
  • 0.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é