XFree Video Scraper
Pricing
$1.00 / 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
$1.00 / 1,000 video results
Rating
0.0
(0)
Developer
DataWatcher
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Scrape video data from xfree.com by search, account, tag or video URL, as JSON, CSV or Excel, or through the API. Every 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, title, creator, tagged accounts, views, likes, date, 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.
🔎 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=examplecreator | searchQueries or startUrls |
| Profile (account) | https://www.xfree.com/examplecreator | 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=examplecreator | videoUrls or startUrls |
- Tag names are kept exactly as the site writes them (
pl-Amatorzy). - Search tabs:
all(default),postandtag. - 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": "examplecreator", "filter": "all" }], "maxResults": 50 }
{ "usernames": ["examplecreator"], "maxResults": 100 }
{ "tags": ["pl-Amatorzy"], "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 examplecreator 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 | Matched by id over the whole run: 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. |
| Same input twice | Read once. |
maxResults | One cap for the run, split fairly over the inputs still to read. |
| Input check | Every input is checked: valid ones run, others get a clear message. |
🎬 Direct video links
videoFileUrlis the direct link to the video file, e.g.https://cdn.example/xfree-prod/1/2/3/12345678-aaaa-bbbb-cccc-123456789abc/full.mp4. Open it in a browser to play the video, or save it to download it. It is the full-quality file the site's player plays.
previewVideoUrlis the smaller copy the site plays in its lists, e.g.https://cdn.example/xfree-prod/1/2/3/12345678-aaaa-bbbb-cccc-123456789abc/listing7.mp4?1.
- Both links come with every row in every mode at no extra request.
mediaUrlsFoundandmediaUrlsMissingin the run stats count the rows with and without a file link. urlis the video's page on xfree.com, not the file.
🔗 OnlyFans link
creator.onlyfansUrl is the creator's OnlyFans link, e.g. https://onlyfans.com/examplecreator. 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.
⚡ 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). It is the fastest run. 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). 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. |
maxRequests | integer | 200 | 1 to 1,000 | Maximum page requests of the run (listing pages, load-more steps, video pages). |
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. |
Use at least one of startUrls, searchQueries, usernames, tags or videoUrls. When a cap ends the run, stopReason says which (see Run stats).
📦 Output: XFree video data
Every full row has all of these fields. A missing text, number or object is null. A missing list is [].
| Field | Type | Meaning |
|---|---|---|
recordType, schemaVersion, source | text | Always video; the output schema 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). |
sourceType | text | search, profile, tag or direct_video. |
sourceUrl | text | The input that first found the video. |
title | text or null | Visible title, when the site shows one. |
creator | object or null | username, displayName, profileUrl, onlyfansUrl of the account that posted it. |
taggedAccounts | list | Other accounts shown on the video page, without the creator. Each has name and profileUrl. |
views | integer or null | Views as a number. |
likes | integer or null | Likes. |
durationSeconds | number or null | Length in seconds. |
thumbnailUrl | text or null | Preview image URL. |
tags | list | Tags without #, in the site's order, no repeats. Hashtags only. |
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 the row was made), ISO 8601 UTC. |
Example: a full row
An example row (videoUrls input). The tag list is shortened.
{"recordType": "video","schemaVersion": "4.0.0","source": "xfree","id": "123456789","url": "https://www.xfree.com/video?id=123456789","sourceType": "direct_video","sourceUrl": "https://www.xfree.com/video?id=123456789&user=examplecreator","title": "Example video title","creator": { "username": "examplecreator", "displayName": "Example Creator", "profileUrl": "https://www.xfree.com/examplecreator", "onlyfansUrl": "https://onlyfans.com/examplecreator" },"taggedAccounts": [{ "name": "exampletagged1", "profileUrl": "https://www.xfree.com/tag/exampletagged1" },{ "name": "exampletagged2", "profileUrl": "https://www.xfree.com/tag/exampletagged2" }],"views": 123456,"likes": 1234,"durationSeconds": 25.067,"thumbnailUrl": "https://thumbs.xfree.com/listing/medium_retina/12345678-aaaa-bbbb-cccc-123456789abc_3.jpg","tags": ["Amateurs", "Teen", "Tits", "Brunette", "Blonde", "SmallTits", "Latina", "Solo"],"videoFileUrl": "https://cdn.example/xfree-prod/1/2/3/12345678-aaaa-bbbb-cccc-123456789abc/full.mp4","previewVideoUrl": "https://cdn.example/xfree-prod/1/2/3/12345678-aaaa-bbbb-cccc-123456789abc/listing7.mp4?3","dates": { "posted": "2025-01-01T12:00:00Z", "scraped": "2025-01-02T12:00:00Z" }}
Example: a links-only row
{"url": "https://www.xfree.com/video?id=123456789","videoFileUrl": "https://cdn.example/xfree-prod/1/2/3/12345678-aaaa-bbbb-cccc-123456789abc/full.mp4","previewVideoUrl": "https://cdn.example/xfree-prod/1/2/3/12345678-aaaa-bbbb-cccc-123456789abc/listing7.mp4?1"}
📊 Run stats
Each run saves two records in the key-value store. OUTPUT:
| Key | Meaning |
|---|---|
status | success, partial (some inputs failed, rows kept) or failed. |
sourcesProcessed | Inputs read. |
listingPagesVisited, loadMoreSteps | Listing pages read; "load more" steps made. |
videoCardsFound | Video cards seen, before dedupe. |
uniqueVideosEmitted | Rows written. |
duplicatesSkipped | Videos already written. |
mediaUrlsFound, mediaUrlsMissing | Rows with / without a videoFileUrl. |
requestsUsed | Page requests made. |
stoppedEarly | true when a cap ended the run. |
stopReason | The cap: maxResults, maxRequests, maxPagesPerSource, maxScrollsPerPage or chargeLimit; else null. |
sourceErrors | List of inputs that failed, with the message. |
sources | One entry per input: type, URL, status, pages, videos. |
accountProfiles | The profile data, once per profile read. |
chargedEvents | How many times each billing event was charged. |
RUN_HEALTH: {"status": "ok" | "degraded" | "failed", "reason": ...}. reason says why a run is not ok.
💰 Pricing
Pay per event. There is no start fee.
| Event | Price | When it is charged |
|---|---|---|
video-scraped | $0.0010 ($1.00 per 1,000) | Each unique video row written, with its direct video links. Links-only rows too. |
- 1,000 videos, each with its direct
.mp4link: $1.00. - Duplicate videos are free. The links are included in the video price.
❓ 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?
Every row has videoFileUrl (full quality) and previewVideoUrl. Turn on onlyVideoUrls for rows with only the links, the fastest run.
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.
💬 Feedback and custom work
Need another portal, a field or a custom feed? Open an issue on the Issues tab.