OnlyFans Downloader
Pricing
$4.50 / 1,000 media links
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é
Maintained by CommunityActor stats
1
Bookmarked
238
Total users
13
Monthly active users
4 days ago
Last modified
Categories
Share
📥 Export public OnlyFans media links
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.
- Collect media from several public targets in one run with OnlyFans Bulk Downloader.
- Keep video links and available details with OnlyFans Video Downloader.
- Keep photo links and thumbnails when shown with OnlyFans Photo Downloader.
- Extract source-hosted media URLs for a downstream workflow with OnlyFans Media URL Extractor.
- Collect media and post context from known posts with OnlyFans Post Media Downloader.
- Export creator, post, size, duration, and source details when shown with OnlyFans Media Metadata Export.
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.
🚀 Run the OnlyFans media link collector
- Add one or more public OnlyFans targets.
- Choose the media kind to collect.
- Add a date range if needed.
- Set the maximum media rows to save per target.
- 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
| Field | Type | What it does |
|---|---|---|
targets | array of strings | Adds 1 to 100 public usernames, @handles, profile URLs, media-section URLs, or post URLs. |
downloadMode | string | Chooses media for all media, videos, photos, or post_media. |
sortOrder | string | Requests latest, oldest, mostLiked, or highestTips. If the source does not support the choice, rows keep source order. |
dateFrom | string in YYYY-MM-DD form | Keeps media posted on or after this date. |
dateTo | string in YYYY-MM-DD form | Keeps media posted on or before this date. |
maxMediaPerTarget | integer | Sets 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
| Field | Type | What it does |
|---|---|---|
results | string | Opens the saved media rows in the default dataset overview. |
target | string | Shows the submitted target that led to this media item. |
normalizedTarget | string | Shows the target in a standard form. |
sourceUrl | string | Links to the OnlyFans page where the media item was found. |
profileUsername | string | Shows the creator's OnlyFans username. |
profileId | string or null | Shows the creator's source ID when available. |
profileDisplayName | string or null | Shows the creator's display name when available. |
profileUrl | string | Links to the creator's OnlyFans profile. |
profileAvatarUrl | string or null | Links to the creator's avatar when available. |
accessLevel | string | Shows the source visibility label for the media. |
postId | string or null | Shows the parent post's source ID when available. |
postUrl | string or null | Links to the parent OnlyFans post when available. |
postText | string or null | Shows the parent post's text when available. |
publishedAt | date-time string or null | Shows when the parent post was published when available. |
likesCount | integer or null | Shows the parent post's like count when available. |
commentsCount | integer or null | Shows the parent post's comment count when available. |
mediaId | string | Shows the source ID used to identify the media item. |
mediaType | string | Says whether the media is a photo, video, audio, stream, or unknown. |
mediaUrl | string | Gives the source-hosted URL for the media file. |
thumbnailUrl | string or null | Gives the media thumbnail URL when available. |
durationSeconds | number or null | Gives the media length in seconds when available. |
width | integer or null | Gives the media width in pixels when available. |
height | integer or null | Gives the media height in pixels when available. |
fileExtension | string or null | Gives the file extension hint when available. |
mediaVariants | array of objects | Lists other source media versions when available. |
mediaVariants.url | string | Gives the source URL for this media version. |
mediaVariants.width | integer or null | Gives this media version's width in pixels when available. |
mediaVariants.height | integer or null | Gives this media version's height in pixels when available. |
mediaVariants.label | string or null | Gives 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.
Do the source-hosted links stay valid forever?
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 🫡
🔗 Related Actors
- ManyVids Video Downloader: resolve known public ManyVids video pages into source-hosted media links and creator details.
- EroThots Video Downloader: get direct MP4 links and quality details from known public EroThots videos.
- Pornhub Downloader: collect public Pornhub video data and source-visible media links from URLs or discovery targets.
- Instagram Downloader API: collect direct media URLs and post context from public Instagram posts, reels, and TV links.
- Telegram Media Downloader: get media links and public post context from Telegram channels, archives, and handles.
Made with ❤️ by Maxime Dupré