XVideos Video Downloader avatar

XVideos Video Downloader

Pricing

$2.65 / 1,000 resolved videos

Go to Apify Store
XVideos Video Downloader

XVideos Video Downloader

Resolve public XVideos watch-page URLs into direct source-hosted MP4 and HLS links. Export video IDs, titles, uploaders, durations, thumbnails, source URLs, and expiry times when available to an Apify dataset.

Pricing

$2.65 / 1,000 resolved videos

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

38

Total users

0

Monthly active users

4 days ago

Last modified

Share

Built for developers, researchers, media teams, and anyone who already has public XVideos watch-page URLs. XVideos Downloader turns known pages into structured dataset rows with direct source-hosted MP4 or HLS links, video IDs, titles, uploader names, durations, thumbnails, source URLs, and expiry times when available. This gives you source data to review, catalog, or pass into an API workflow without copying page details by hand.

Use it for these focused tasks:

Each successful row represents one public XVideos video with source-exposed media. The row keeps the stable videoId, source-confirmed sourceUrl, title, uploader, duration, and thumbnail when those values are available. availableFormats lists MP4 or HLS choices with quality, dimensions, content type, direct media URL, and expiresAt when the source provides them. Missing source values stay null instead of being guessed.

The Actor saves the first eligible occurrence of a source video as soon as it is found. If another submitted URL points to the same videoId, it is ignored after that first saved occurrence. The saved row describes the first match, not later aliases.

▶️ Resolve known XVideos watch pages

  1. Add one or more public XVideos watch-page URLs in XVideos video URLs.
  2. Start the Actor.
  3. Open the default dataset and inspect the saved rows.
  4. Choose a mediaUrl from availableFormats for the format your workflow needs.

The Actor supports public watch pages on xvideos.com, xvideos.es, and xvideos2.com. It does not search XVideos, crawl categories or profiles, bypass private access, download files into Apify storage, create ZIP archives, or install a browser extension.

It works with public, reachable pages without XVideos cookies, an XVideos account, a browser extension, or a source API key. Use the prefilled URLs for a small first run, then add your own known targets or schedule repeated runs after you inspect the output. Use the Actor only for content you have the right to access, process, or download.

⚙️ Input

Input fields

FieldTypeWhat it does
videoUrlsarray of objectsRequired list of public XVideos watch-page URLs, with one URL object per row.
videoUrls[].urlstringAdds one public watch-page URL. Supported hosts are xvideos.com, xvideos.es, and xvideos2.com; invalid or unsupported URLs are skipped while the run continues.

Example input

This is the public input from a successful current-beta default-input run.

{
"videoUrls": [
{
"url": "https://www.xvideos.com/video.oufvclb3b56/my_therapist_made_my_fantasy_come_true_-_lexis_star"
},
{
"url": "https://www.xvideos.com/video.opkiitu533e/alanna_s_bitty_bikini_comes_right_off_alanna_pow_brazzers_enter_xvpromo_on_official_site_for_discount"
},
{
"url": "https://www.xvideos.com/video.optlktt7c95/a_stranger_groped_me_on_a_public_bus_he_inserted_a_shaft_into_my_virgin_asshole_ai_"
},
{
"url": "https://www.xvideos.com/video.oofavpl9a3f/i_took_my_hot_stepmom_on_a_secret_vacation_and_filled_her_tight_pussy_-_cory_chase"
},
{
"url": "https://www.xvideos.com/video.oofpkpv3d79/gf_s_sister_no_penetration_just_rubbing_my_pussy_oops..._i_creampied_her"
}
]
}

🧾 Output

Run output

FieldTypeWhat it does
resultsstringOpens the default dataset overview with successful public video rows.

Dataset row

FieldTypeWhat it does
videoIdstringStable XVideos video identifier for repeatable identification.
sourceUrlstringSource-confirmed XVideos watch-page URL for the video.
titlestring or nullVideo title shown by XVideos, when available.
uploaderstring or nullUploader or author name shown by XVideos, when available.
durationSecondsinteger or nullVideo duration in seconds, when available.
thumbnailUrlstring or nullThumbnail or poster URL shown by XVideos, when available.
availableFormatsarray of objectsDirect MP4, HLS, or other playable formats exposed by XVideos for the video.
availableFormats[].qualitystring or nullSource quality label or normalized resolution label, when known.
availableFormats[].widthinteger or nullFormat width in pixels, when known.
availableFormats[].heightinteger or nullFormat height in pixels, when known.
availableFormats[].contentTypestring or nullMedia content type, when known.
availableFormats[].mediaUrlstringDirect source-hosted media URL for the format.
availableFormats[].expiresAtstring or nullExpiry timestamp for the media URL, when XVideos exposes or implies one.

Genuine dataset row

This complete row is copied from a successful run of the current beta build. Its source URLs are shown as returned.

{
"videoId": "oufvclb3b56",
"sourceUrl": "https://www.xvideos.com/video.oufvclb3b56/my_therapist_made_my_fantasy_come_true_-_lexis_star",
"title": "My Therapist Made My Fantasy Come True - LEXIS STAR",
"uploader": "lexis_star",
"durationSeconds": 1045,
"thumbnailUrl": "https://thumb-cdn77.xvideos-cdn.com/6ae96fc7-c6cc-4563-8178-7fa3567d4fbd/3/xv_26_t.jpg",
"availableFormats": [
{
"quality": "low",
"width": null,
"height": null,
"contentType": "video/mp4",
"mediaUrl": "https://mp4-cdn77.xvideos-cdn.com/6ae96fc7-c6cc-4563-8178-7fa3567d4fbd/3/mp4_sd.mp4?secure=rnaqTXFctUNWKnq3kBw_Qw==,1789949389",
"expiresAt": "2026-09-21T00:09:49.000Z"
},
{
"quality": "hls",
"width": null,
"height": null,
"contentType": "application/vnd.apple.mpegurl",
"mediaUrl": "https://hls-cdn77.xvideos-cdn.com/hkM0wzhFcbutyfxM--VIFQ==,1789949389/6ae96fc7-c6cc-4563-8178-7fa3567d4fbd/3/hls.m3u8",
"expiresAt": "2026-09-21T00:09:49.000Z"
}
]
}

💳 Pricing

This Actor uses pay-per-event pricing. The Resolved video event is charged once for each successfully resolved public video saved to the dataset. Invalid, duplicate, unsupported, private, unavailable, and no-media targets do not create this video-result event.

🔌 Integrations

Read the dataset in Apify or through the Apify API. Export rows as JSON, CSV, Excel, XML, RSS, or HTML, or schedule runs for known public targets.

❓ FAQ

What happens if a URL uses an unsupported host?

Hosts outside xvideos.com, xvideos.es, and xvideos2.com are skipped. They do not create a video-result charge, and the Actor does not add support for other hosts.

What warning is shown for an invalid or unsupported URL?

The run gives one concise warning for the submitted value, with a safe host and video ID representation when available, then continues. Query tokens and internal details are not exposed.

What happens when the same video appears more than once?

The Actor saves the first eligible occurrence and ignores later URLs for the same source video. The saved row describes the first match and does not merge later matches into it.

What happens when a target has no usable media?

The Actor saves no video row for that target. Invalid, private, removed, blocked, unavailable, duplicate, or no-media targets do not become failure rows.

Can this XVideos downloader save MP4 files into Apify storage?

No. It returns direct source-hosted MP4 or HLS links and metadata in the dataset. It does not mirror files, create ZIP archives, or store video copies.

Some source links are signed or time-limited. Check expiresAt when it is present and run the same source URL again when you need a fresh link.

Can I search XVideos by keyword?

No. Add known public watch-page URLs. The Actor does not search XVideos or crawl categories, profiles, or other listing pages.

Do I need XVideos cookies, an account, or a source API key?

No. The Actor is built for public, reachable watch pages and does not ask for those credentials.

📝 Changelog

v1.0 (20-09-2026)

  • Invalid or unsupported submitted URLs get one safe warning, and processing continues without a dataset row or charge.
  • Output rows no longer include fetchedAt; direct media formats and source details remain available.

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é