OnlyFans Downloader avatar

OnlyFans Downloader

Pricing

$4.50 / 1,000 media links

Go to Apify Store
OnlyFans Downloader

OnlyFans Downloader

Get source-hosted media links from public OnlyFans profiles, media sections, and posts. Export creator, post, thumbnail, file, and source details.

Pricing

$4.50 / 1,000 media links

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

1

Bookmarked

238

Total users

13

Monthly active users

4 days ago

Last modified

Share

OnlyFans Downloader is for researchers, media teams, and developers who have public OnlyFans targets and need source-hosted media links with creator, post, thumbnail, file, and source details in an Apify dataset. Add profiles, media sections, posts, usernames, or supported URLs in one run. Use filters and a per-target limit to keep the output focused and make a short run easier to review.

This Actor does not bypass subscriptions, paywalls, private profiles, DRM, expired links, or OnlyFans access rules. It does not copy or host the media files.

📦 Media rows and source details

Each dataset row is one saved media link. Fields include the submitted target, source page, creator details, post details, media links, thumbnails, technical details, and other source versions. Some fields can be null when OnlyFans does not show them. Source-hosted links can expire or stop working.

  1. Add one or more public OnlyFans targets.
  2. Choose the media kind to collect.
  3. Add a date range if needed.
  4. Set the maximum media rows to save per target.
  5. Start the Actor and open the dataset.

The Actor continues with other targets when one target is invalid or cannot be read. A valid target with no matching media creates no dataset row. Source startup failures, timeouts, and unreadable replies are reported as run failures after retries. The Actor saves the first eligible occurrence of a media item and ignores later matches of that same item, so it does not merge later target or source matches into the saved row.

For a shorter run, use a small maxMediaPerTarget value. Leave it empty to return all available results until the source is exhausted.

⚙️ Input

Input fields

FieldTypeWhat it does
targetsarray of stringsAdds 1 to 100 public usernames, @handles, profile URLs, media-section URLs, or post URLs.
downloadModestringChooses media for all media, videos, photos, or post_media.
sortOrderstringRequests latest, oldest, mostLiked, or highestTips. If the source does not support the choice, rows keep source order.
dateFromstring in YYYY-MM-DD formKeeps media posted on or after this date.
dateTostring in YYYY-MM-DD formKeeps media posted on or before this date.
maxMediaPerTargetintegerSets a positive media-row limit for each target. Leave it empty to return all available results until the source is exhausted.

Example input

{
"targets": [
"https://onlyfans.com/oftv/videos"
],
"downloadMode": "videos",
"sortOrder": "latest",
"maxMediaPerTarget": 5
}

🧾 Output

The output link opens the default dataset. Each saved dataset row has the same shape.

Output fields

FieldTypeWhat it does
resultsstringOpens the saved media rows in the default dataset overview.
targetstringShows the submitted target that led to this media item.
normalizedTargetstringShows the target in a standard form.
sourceUrlstringLinks to the OnlyFans page where the media item was found.
profileUsernamestringShows the creator's OnlyFans username.
profileIdstring or nullShows the creator's source ID when available.
profileDisplayNamestring or nullShows the creator's display name when available.
profileUrlstringLinks to the creator's OnlyFans profile.
profileAvatarUrlstring or nullLinks to the creator's avatar when available.
accessLevelstringShows the source visibility label for the media.
postIdstring or nullShows the parent post's source ID when available.
postUrlstring or nullLinks to the parent OnlyFans post when available.
postTextstring or nullShows the parent post's text when available.
publishedAtdate-time string or nullShows when the parent post was published when available.
likesCountinteger or nullShows the parent post's like count when available.
commentsCountinteger or nullShows the parent post's comment count when available.
mediaIdstringShows the source ID used to identify the media item.
mediaTypestringSays whether the media is a photo, video, audio, stream, or unknown.
mediaUrlstringGives the source-hosted URL for the media file.
thumbnailUrlstring or nullGives the media thumbnail URL when available.
durationSecondsnumber or nullGives the media length in seconds when available.
widthinteger or nullGives the media width in pixels when available.
heightinteger or nullGives the media height in pixels when available.
fileExtensionstring or nullGives the file extension hint when available.
mediaVariantsarray of objectsLists other source media versions when available.
mediaVariants.urlstringGives the source URL for this media version.
mediaVariants.widthinteger or nullGives this media version's width in pixels when available.
mediaVariants.heightinteger or nullGives this media version's height in pixels when available.
mediaVariants.labelstring or nullGives the source label for this media version when available.

Example media row

This complete row is a genuine example from a successful run:

{
"target": "https://onlyfans.com/oftv/videos",
"normalizedTarget": "https://onlyfans.com/oftv/videos",
"sourceUrl": "https://onlyfans.com/2651908713/oftv",
"profileUsername": "oftv",
"profileId": "82517634",
"profileDisplayName": "OFTV",
"profileUrl": "https://onlyfans.com/oftv",
"profileAvatarUrl": "https://public.onlyfans.com/files/i/iq/iq5/iq5mc3hvgh4uq3rgdx8xrnvugxymbhiz1667246997/82517634/avatar.jpg",
"accessLevel": "public",
"postId": "2651908713",
"postUrl": "https://onlyfans.com/2651908713/oftv",
"postText": "Sean King at Fury FC 122 | Fury Fighting @furyfighting follows Sean King through fight week in New Orleans as he prepares to represent his hometown at Fury FC 122. Watch here: https://of.tv/v/dHhM8 onlyfans.com/furyfighting",
"publishedAt": "2026-08-14T23:00:25+00:00",
"likesCount": 9,
"commentsCount": null,
"mediaId": "4621552783",
"mediaType": "video",
"mediaUrl": "https://cdn2.onlyfans.com/files/7/75/754512d865ca9d797a4eb5f89db17009/0ig1rhf424ccu5ilnc1sj_source.mp4?Tag=2&u=0&Expires=1786838400&Signature=Ci3Xl-5YCuaapMAcBqU5im40y7J0LVr4lxJAbZhqDVHMyZBINYHf6twN04dkfMnFiosK96AQsHvd-ee3XyoOaK0vgOZyUZy8553C67ErL3HjQSStt~gv45~rF0Y-SpQoaObMoohSOoQawv4k5kqPxK9usGDJuTb8ZOBwbEjrWrp-rBiUi3dpk~WZ0feK0uZO4ZpaJHs70Is8yljIpkRMvSsKsoJMCpJkD962Sjcid8DbvglwTIuKPWz8ZgZIgaX5cThQsLnFlLDtB~gR3~216RCAnNCBWa5UCnlDKZxcfxnUPYPekgTDs3iMMnI~gLk6R71my5D208BFabq~gwP8Zg__&Key-Pair-Id=APKAUSX4CWPPATFK2DGD",
"thumbnailUrl": null,
"durationSeconds": 170,
"width": 1920,
"height": 1080,
"fileExtension": "mp4",
"mediaVariants": [
{
"url": "https://cdn2.onlyfans.com/files/7/75/754512d865ca9d797a4eb5f89db17009/0ig1rhf424ccu5ilnc1sj_source.mp4?Tag=2&u=0&Expires=1786838400&Signature=Ci3Xl-5YCuaapMAcBqU5im40y7J0LVr4lxJAbZhqDVHMyZBINYHf6twN04dkfMnFiosK96AQsHvd-ee3XyoOaK0vgOZyUZy8553C67ErL3HjQSStt~gv45~rF0Y-SpQoaObMoohSOoQawv4k5kqPxK9usGDJuTb8ZOBwbEjrWrp-rBiUi3dpk~WZ0feK0uZO4ZpaJHs70Is8yljIpkRMvSsKsoJMCpJkD962Sjcid8DbvglwTIuKPWz8ZgZIgaX5cThQsLnFlLDtB~gR3~216RCAnNCBWa5UCnlDKZxcfxnUPYPekgTDs3iMMnI~gLk6R71my5D208BFabq~gwP8Zg__&Key-Pair-Id=APKAUSX4CWPPATFK2DGD",
"width": 1920,
"height": 1080,
"label": null
},
{
"url": "https://cdn2.onlyfans.com/files/c/c2/c228cd05a59848e15fbe23aa84cd6d46/300x300_af2e68e8e44f4e6b200df8ec8e4a2df9.jpg?Tag=2&u=0&Expires=1786838400&Signature=MRT-jzZueeVf1mESfk2M~V5cnsAmrHn9ucQwlydGDQ2w~9D3-QZkbkHsVvu2yPeJ375DIkNyMBBYWaV5TeghCaQBLHQKBdZJu2-Or~VDAfB5AoRKIldAhrSFB1gc2gfXKE1DTGLaiEqmL3j~pSvE1lLrN8GuBRiYsyxbSup6dV9oMwbMEKXqhnx-TgHvffYYlJabfddvET-e60rwBbX5~o6JL-zAqkwxWTix8WcBeR3FOQjEr6eMkOdo1rDEZmFXwMFmkDvq2-pSHTXjUIi20kfsAujlaXv31WIs09ofkaE7K8WkPIsbCePmlM1ZM2jGhYvlXwZ4oD2MUwhI-SlqHA__&Key-Pair-Id=APKAUSX4CWPPATFK2DGD",
"width": 300,
"height": 300,
"label": null
},
{
"url": "https://cdn2.onlyfans.com/files/f/f4/f4d88cf13338c22051d08748c56eb88a/960x540_af2e68e8e44f4e6b200df8ec8e4a2df9.jpg?Tag=2&u=0&Expires=1786838400&Signature=FXCbcqAlWxOVvCCV-6o4DgmxjKEUOP0quOvZbdMxbm2YwS0MDcyy41G-yvoEfXRhVMt1egGjLQdGRAn~-p0ykFc1JzGNJrIPGZrD1rmLDwthjihTs38aBAk5lwuMX9AlbNaPAVMJEPVFucsGxIqCik61wBTB0BbvPcJuexY9eW6MZ9c2eLFPxbCUav-Y3gr-KivgZNVpxJ3Hcsj4QkPB8EH1DUo71n46Vv2Sz93cSOBobhM8uG5pJlTK15Tf1Bv9Ncd7oxpFA~IIl3ncTT-6qSlegowjE-~P3kYx8TaQbrtelpdkcRfUO53zCmSCgtog4imyp1Pz1mG62y0GyfpO-Q__&Key-Pair-Id=APKAUSX4CWPPATFK2DGD",
"width": 960,
"height": 540,
"label": null
}
]
}

Dataset exports

Export the dataset as JSON, CSV, Excel, XML, RSS, or HTML. You can also read it through the Apify API. Source-hosted links in the row can expire, so use them while they are available.

💳 Pricing

Charged event

This Actor uses pay-per-event pricing. You pay once for each media link saved to the dataset. A target that saves no media link does not create this event.

Control run size

Use a small maxMediaPerTarget value when you want a short run. Leave it empty to return all available results until the source is exhausted.

🔌 Integrations

Ways to use the output

Run the Actor in Apify Console, use the Apify API, schedule repeat runs, add webhooks for run events, or connect the dataset to Apify integrations.

❓ FAQ

What happens when the same media is found more than once?

The Actor saves the first eligible occurrence and ignores later matches of that same source item. The saved row keeps the target and source details from the first match.

Why did a valid target return no rows?

It may have no media that matches your media kind or date range. A public page may also have no usable source-hosted media link.

What happens when OnlyFans is slow or cannot be read?

The Actor retries temporary source problems. It reports an access issue for one target and continues with the next when possible. If the source stays unstable or gives no readable reply, the run fails instead of showing a generic empty result.

Can one invalid target stop the other targets?

Usually no. The Actor reports invalid or inaccessible targets and continues with other targets when possible.

Can it read paid, private, or message media?

No. The Actor uses public page access and does not take an OnlyFans session. It does not bypass a paywall, private profile, or message access rule.

Does it download or store media files?

No. It saves source-hosted URLs and metadata, but it does not copy or host the files. Use the links soon because the source can change or expire them.

No. The source can change or expire a link after the run. Use or refresh important links while they are available.

Does it need an OnlyFans login or API key?

No. The public input uses usernames and supported public URLs. The Actor does not ask for an OnlyFans session or API key and does not unlock private content.

Can I use it on Android, Firefox, or another device?

Yes, through Apify Console or the Apify API. This Actor is not a browser extension or mobile app, and device choice does not unlock more OnlyFans content.

Can I use the output with ChatGPT or Perplexity?

You can export the dataset and use suitable text fields in your own tools. The Actor does not send data to ChatGPT or Perplexity.

📝 Changelog

1.0: More reliable public media links

  • Improves access to public OnlyFans media and reports persistent source problems clearly.
  • Focuses collection on video, photo, all-media, and post-media links with source details.

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é