XFree Video Scraper
Pricing
from $0.85 / 1,000 video results
XFree Video Scraper
Scrapes public video data from xfree.com searches, profiles, tags and video pages: creator with OnlyFans link, tagged accounts, tags, views, likes, date, duration, thumbnail and the direct .mp4 video file URLs. Or just the video page and file URLs.
Pricing
from $0.85 / 1,000 video results
Rating
0.0
(0)
Developer
DataWatcher
Maintained by CommunityActor stats
0
Bookmarked
39
Total users
3
Monthly active users
13 hours ago
Last modified
Categories
Features
Share
Scrape XFree videos from xfree.com by search, account, tag or video URL, and get clean data as JSON, CSV or Excel, or through the API. Each row has the direct link to the video file (.mp4): open it to play the video, or save it to download it. You also get the creator's OnlyFans link when the site shows one, plus title, creator, tagged accounts, views, likes, duration, tags and thumbnail.
- Direct video links:
videoFileUrl(full quality) andpreviewVideoUrl(smaller copy). - OnlyFans link:
creator.onlyfansUrl. - Searches, profiles and tags are read page by page until your
maxResultsor another cap in the input is reached.
The actor reads public data and returns the links to the videos.
Want the video files saved? Use XFree Video Downloader.
⭐ Why this one
1️⃣ One schema across video sites. All our video actors share one output schema and one input schema. Build your pipeline once: our other video actors (Erome Video Scraper, Redgifs Video Scraper, Erome Video Downloader, RedGIFs Video Downloader, XFree Video Downloader) take the same input and return the same fields, so adding a site means changing the actor name, not your code.
- Low price, no start fee. $1.00 per 1,000 videos. You pay only for rows you get.
- A direct
.mp4link on each row.videoFileUrl(full quality) andpreviewVideoUrlcome with each video, in full and links-only mode. - The creator's OnlyFans link.
creator.onlyfansUrlis on the row, with the creator, tagged accounts, views, likes, duration and tags. - Inputs buyers ask for: search words (with the
all,postortagtab), usernames, tags (latest or popular), video URLs, or any xfree.com URL. Mix them in one run. - Links-only mode.
onlyVideoUrlsreturns just the page and the two direct links, at the same price per video. - One row per video. A video found twice in a run is written once and billed once.
🔎 What it extracts
One row per unique video. The page types it reads:
| Page type | Example URL | Input to use |
|---|---|---|
| Search | https://www.xfree.com/search?q=creatorname | searchQueries or startUrls |
| Profile (account) | https://www.xfree.com/creatorname | usernames or startUrls |
| Tag, including language tags | https://www.xfree.com/tag/Solo, https://www.xfree.com/tag/pl-Amatorzy | tags or startUrls |
| Video page | https://www.xfree.com/video?id=123456789&user=creatorname | videoUrls or startUrls |
- Tag names are kept exactly as the site writes them (
pl-Amatorzy). - Search tabs:
all(default),postandtag.postreturns the same rows asall. - Account data (followers, total videos, bio and more) is saved once per profile in the run stats (
accountProfiles).
🚀 How to scrape XFree videos
- Open the actor on Apify and click Try for free.
- Fill in a search, usernames or tags, or paste xfree.com URLs into
startUrlsorvideoUrls. - Click Start.
- Download the XFree video data as JSON, CSV or Excel from the Output tab, or fetch it with the Apify API.
Example inputs:
{ "searchQueries": [{ "query": "teen", "filter": "all" }], "maxResults": 50 }
{ "usernames": ["creatorname"], "maxResults": 100 }
{ "tags": ["Teen"], "tagSort": "latest", "maxResults": 100 }
🤖 Use with AI agents (MCP)
AI assistants (Claude, ChatGPT, Cursor…) can run this actor through Apify's MCP server. Connect the server in your assistant, then ask, for example:
Use the XFree Video Scraper to get the 20 newest videos of creatorname with their direct .mp4 links and OnlyFans link.
🔌 Run it your way
- Schedule it with Apify schedules.
- Call it from the Apify API and its clients (Python, JavaScript).
- Connect it to Make, n8n, Zapier, webhooks or Google Sheets.
- Ask an AI agent to run it: see Use with AI agents (MCP).
🔀 Mixing inputs and duplicates
You can use all five source inputs in one run: startUrls, searchQueries, usernames, tags, videoUrls.
| Rule | What happens |
|---|---|
| One row per video | A video found by a search and by its profile is written once. |
| First input kept | sourceType and sourceUrl keep the first input that found it. |
maxResults | One cap for the run, shared fairly over the inputs. |
🎬 Direct video links
videoFileUrlis the direct link to the video file (.mp4, full quality). Open it in a browser to play the video, or save it to download it.
previewVideoUrlis the smaller copy the site plays in its lists.
- Both links come with each row.
urlis the video's page on xfree.com, not the file.
🔗 OnlyFans link
creator.onlyfansUrl is the creator's OnlyFans link. It is the link button the site shows with the video. On a profile, a video without a button gets the profile's own OnlyFans link. It is null when the site shows none.
⚡ Links-only mode (onlyVideoUrls)
With onlyVideoUrls set to true, each row has only the video page and the two direct links (see the links-only row under Output). The price per video is the same as for a full row.
⚙️ Input
| Input | Type | Default | Range | Meaning |
|---|---|---|---|---|
startUrls | list of URLs | none | xfree.com URLs | Search, profile, tag or video page URLs. The kind is found from the URL. |
searchQueries | list | none | – | Items {"query": "...", "filter": "all" | "post" | "tag"}. filter is optional (default all). post is ignored: it gives the same request and rows as all. A plain text line means {"query": text, "filter": "all"}. |
usernames | list of text | none | – | Account handles, with or without @, or profile URLs. Every video of each account. |
tags | list of text | none | – | Tag names exactly as the site writes them (e.g. pl-Amatorzy), or tag page URLs. |
tagSort | text | empty (site default order) | latest or popular | Order of tag pages. |
videoUrls | list of URLs | none | – | Video page URLs. One row per video. |
onlyVideoUrls | yes/no | false | – | Rows are only url, videoFileUrl, previewVideoUrl. |
maxResults | integer | 100 | 1 to 1,000 | Maximum videos returned over all inputs. Free plan Apify users get at most 1,000 videos per run. |
maxRequests | integer | 200 | 1 to 1,000 | Maximum page requests of the run. |
maxPagesPerSource | integer | 100 | 1 to 100 | Maximum listing pages for one search, profile or tag. |
maxScrollsPerPage | integer | 100 | 1 to 100 | Maximum "load more" steps on one listing page. |
maxRequestRetries | integer | 2 | 0 to 5 | Retries after a network error or a server error. |
requestTimeoutSecs | integer | 30 | 5 to 120 | Time limit of one page request, in seconds. |
proxyConfiguration | object | Apify proxy off | – | Proxy settings, useful when many detail pages are requested. |
Use at least one of startUrls, searchQueries, usernames, tags or videoUrls.
📦 Output: XFree video data
One row per unique video. A field the site does not give is null.
| Field | Type | Meaning |
|---|---|---|
recordType, schemaVersion, source | text | video; the output version; the site (xfree). |
id | text | The site's id of the video. |
url | text | The video's page on xfree.com (the HTML page, not the file). |
mediaType | text | video or image. video on XFree. |
imageUrl | text or null | Direct link to the full-size image when mediaType is image; null for videos. |
sourceType | text | search, profile, tag or direct_video. |
sourceUrl | text | The input that first found the video. |
title | text or null | The video's title. |
creator | object or null | username, displayName, profileUrl, onlyfansUrl of the account that posted it. Names are trimmed of spaces. |
taggedAccounts | list | Performers tagged in the video, without the creator. Each has name and profileUrl. |
views | integer or null | Views of the video. |
likes | integer or null | Likes of the video. |
durationSeconds | number or null | Length in seconds. |
width, height | integer or null | Video size in pixels. |
hasAudio | yes/no or null | null for XFree: the site does not say. |
thumbnailUrl | text or null | Preview image URL. |
posterUrl | text or null | null for XFree: the site gives only thumbnailUrl. |
tags | list | Hashtags without #, in the site's order, no repeats. Not performer names. |
videoFileUrl | text or null | Direct link to the video file (.mp4, full quality). Play or download it. |
previewVideoUrl | text or null | Direct link to the smaller .mp4 copy the site plays in its lists. |
dates | object | posted (when the video was posted) and scraped (when this run read it), ISO 8601 UTC. |
Example: a full row
An example row (videoUrls input). The tag list is shortened.
{"recordType": "video","schemaVersion": "4.4.1","source": "xfree","id": "1421379","url": "https://www.xfree.com/video?id=1421379","mediaType": "video","sourceType": "direct_video","title": "Dark-skinned man pounds his partner on the bed","creator": {"username": "mightguy","displayName": "MightGuy","profileUrl": "https://www.xfree.com/mightguy"},"taggedAccounts": [],"views": 172424,"likes": 3488,"durationSeconds": 1082.2,"width": 718,"height": 1280,"thumbnailUrl": "https://thumbs.xfree.com/listing/medium_retina/85396487-c6ce-4f4c-b54b-4c9c9498a46b_0.jpg","tags": ["Amateurs", "Anal", "Creampie", "BBC", "Brunette"],"videoFileUrl": "https://cdn.xfree.com/xfree-prod/8/5/3/85396487-c6ce-4f4c-b54b-4c9c9498a46b/full.mp4","previewVideoUrl": "https://cdn.xfree.com/xfree-prod/8/5/3/85396487-c6ce-4f4c-b54b-4c9c9498a46b/listing7.mp4?0"}
Example: a links-only row
{"url": "https://www.xfree.com/video?id=1525880","videoFileUrl": "https://cdn.xfree.com/xfree-prod/2/4/a/24a50df8-40a0-4bfd-82a0-29313675da3d/full.mp4","previewVideoUrl": "https://cdn.xfree.com/xfree-prod/2/4/a/24a50df8-40a0-4bfd-82a0-29313675da3d/listing7.mp4?0"}
📊 Run stats
Each run also saves the data of each profile it read, once per profile, as accountProfiles in the run stats. It is not a row field.
💰 Pricing
Pay per event. There is no start fee. Free plan: each run returns up to 1,000 videos; upgrade your Apify plan for more.
| Event | Price | When it is charged |
|---|---|---|
video-scraped | $1.00 per 1,000 events | Each unique video row written, with its direct video links. Links-only rows too. |
- 1,000 videos, each with its direct
.mp4link: $1.00. - The links are included in the video price.
🎯 Use cases
- Build a library of creators' videos with direct
.mp4links for your own app or archive. - Track the newest videos of chosen creators or tags on a daily schedule.
- Find a creator's OnlyFans link for outreach lists.
- Rank videos by views and likes to see which are popular.
- Run the same pipeline over several video sites, since our video actors share one output format.
🩺 If a run fails
The run health (the RUN_HEALTH record, RUN_SUMMARY and the last line of the log) names the cause, for example site down: list request answered 500 x3. Find that start of the message in the table.
| Error in the log / run health | What it means | What you do |
|---|---|---|
site down: <request> answered 500, 502-504, 520-526 | The site is offline or has a fault. The actor waits longer between tries, then stops the run. | Try again later. |
blocked: <request> answered 401, 403, 1020 or a captcha page | The site refused the request or showed a captcha page. | The actor already retries once through the Apify proxy. If it still fails, turn on the Apify proxy in the input (use the RESIDENTIAL group if it is already on). |
rate limited: <request> answered 429 | The site asks for fewer requests. The actor waits and slows down by itself. | Try again later. |
gone: <request> answered 404, 410 | The page or offer was removed. The actor skips it and it is not charged. | Nothing; this is normal. |
network error: <request> failed with timeout (or connection error, DNS error) | A timeout or a broken connection. The actor retries with a pause. | Try again later. |
wrong answer: <request> returned HTML instead of JSON (or an empty body) | The site answered with a page that is not data (HTML instead of JSON, an empty body). The site has probably changed. | Report it in the Issues tab; we fix it. |
❓ FAQ
How do I export XFree videos to Excel or CSV?
Run the actor, open the Output tab and pick Excel or CSV in the export options. JSON, XML and HTML are there too, and the Apify API returns the same data.
How do I get direct .mp4 links in my XFree video data?
Each row has videoFileUrl (full quality) and previewVideoUrl. Turn on onlyVideoUrls for rows with only the links.
Can I use it through an API?
Yes. Start the actor with the Apify API or its Python and JavaScript clients, then read the rows as JSON.
How much does it cost to scrape XFree videos?
$1.00 per 1,000 videos with their direct links, and no start fee.
Can I combine it with other sites?
Yes. All our video actors share one output schema and one input schema, so rows from different sites fit one table. See the list below.
Data notice
This actor returns only what the site shows publicly at run time. We don't store or keep that data and are not its controller — you decide how you use it.
🔗 Other video scrapers (same schema)
XFree (this site)
- XFree Video Downloader: saves the video files (.mp4)
Erome
- Erome Video Scraper: links and data
- Erome Video Downloader: saves the video files (.mp4)
RedGIFs
- Redgifs Video Scraper: links and data
- RedGIFs Video Downloader: saves the video files (.mp4)
💬 Feedback and custom work
Need another portal, a field or a custom feed? Open an issue on the Issues tab.