xHamster Downloader avatar

xHamster Downloader

Pricing

from $9.00 / 1,000 videos

Go to Apify Store
xHamster Downloader

xHamster Downloader

Download public xHamster videos and photo galleries. Paste video URLs or IDs to get an MP4 download link, quality options, creator, tags, and view counts. Paste gallery URLs to get a link to every photo.

Pricing

from $9.00 / 1,000 videos

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

xHamster Downloader is for people who want to keep public xHamster videos and photos without copying links by hand. Paste video URLs, video IDs, or gallery URLs. For each video, you get an MP4 download link in the quality you pick, plus its title, creator, tags, and view counts. For each photo gallery, you get a direct link to every photo.

Videos

  • An MP4 download link in the quality you pick, and the quality you got.
  • A list of all qualities and file formats that xHamster offers for the video.
  • The video ID, page URL, title, and description.
  • The creator name, ID, and profile URL.
  • The length in seconds, width, height, orientation, and publish date.
  • Tags, views, likes, dislikes, comments, and the thumbnail link.

Photo galleries

  • The gallery ID, page URL, and title.
  • A direct link to each photo in the gallery, with its width and height when known.

You do not need an xHamster account. The Actor works with public videos and galleries only.

🚀 How to download xHamster videos and photos

  1. Open the Actor and pick Videos or Photo galleries in Result type.
  2. For videos, add video URLs or IDs in Video URLs or IDs and pick a Video quality.
  3. For galleries, add gallery URLs in Gallery URLs.
  4. Click Start. Each result shows up in the dataset as soon as it is ready.
  5. Open the download links, or export the dataset as JSON, CSV, Excel, or another format.

Download links come from xHamster and work only for a limited time. Use them soon after the run.

⚙️ Input

Input fields

FieldTypeWhat it does
resultTypestringPick videos to get one result for each video, or galleries to get one result for each photo gallery. This field is required. The form fills in videos for you. The Actor only reads the field that matches the type you pick.
videosarray of stringsThe public xHamster videos you want. Use a full video page URL, such as https://xhamster.com/videos/some-title-xhAbC12, or only the video ID, such as xhAbC12. Shorts, embed, mobile, and other language versions of video URLs work too. If you add the same video twice, you get it once. Values that are not a valid video URL or ID are skipped with a warning in the log. The form fills in xhdGDXX as a starter example.
qualitystringThe quality of the download link: best, 720p, 480p, 240p, or 144p. The default is best, which gives the highest MP4 quality xHamster offers, at most 720p. When a video does not have the quality you pick, you get the best quality below it. If there is no lower quality, you get the lowest quality it offers.
galleryUrlsarrayThe public xHamster photo gallery URLs you want, such as https://xhamster.com/photos/gallery/some-title-12345678. Each gallery gives one result with links to its photos. Repeated galleries are saved once.

Example input

{
"resultType": "videos",
"quality": "best",
"videos": [
"xhdGDXX"
]
}

🧾 Output

Output fields

Each row is either a video or a photo gallery. The type field tells you which one it is.

Video row

FieldTypeWhat it does
typestringAlways video for a video row.
videoIdstringThe xHamster ID of the video.
urlstringThe main xHamster page URL of the video.
titlestringThe title of the video.
descriptionstring or nullThe description of the video, if it has one.
downloadUrlstringA link to download the video file in the quality shown in quality.
qualitystringThe quality of the download link, such as 720p.
formatsarray of objectsAll qualities and file formats that xHamster offers for the video.
formats.qualitystringOne video quality, such as 720p.
formats.formatstringThe file format of that quality, such as mp4 or hls.
creatorobject or nullThe person or channel that posted the video.
creator.idstring or nullThe xHamster ID of the creator.
creator.namestring or nullThe name of the creator.
creator.urlstring or nullThe xHamster profile page of the creator.
durationSecondsinteger or nullHow long the video is, in seconds.
widthinteger or nullThe width of the video in pixels.
heightinteger or nullThe height of the video in pixels.
orientationstring or nullThe video orientation that xHamster states for the video.
publishedAtstring or nullWhen the video was published, as an ISO 8601 date and time.
tagsarray of stringsThe tags of the video.
viewCountinteger or nullHow many times the video was viewed.
likeCountinteger or nullHow many likes the video has.
dislikeCountinteger or nullHow many dislikes the video has.
commentCountinteger or nullHow many comments the video has.
thumbnailUrlstring or nullA link to the thumbnail image of the video.

Example video row

{
"type": "video",
"videoId": "xhdGDXX",
"url": "https://xhamster.com/videos/47-year-old-busty-milf-moon-flower-gets-ass-fucked-and-does-xhdGDXX",
"title": "47-year-old busty MILF Moon Flower gets ass-fucked and does",
"description": "Now that she's sucked dick and taken a load all over her big, beautiful tits, 47-year-old MILF Moon Flower is back to show us how much she enjoys cocks in her pink pussy and tight ass, too, and while she does it, she engages in some ass-to-mouth action. Once again, the guy finishes off by paying tribute to her breasts. Hobbies: Swimming, bicycling and fitness.",
"downloadUrl": "https://video7.xhcdn.com/key=3p4m8OS2mCdV-TqENe+QrQ,end=1793066400,limit=3/data=192.227.205.70-dvp/speed=0/026/974/000/720p.h264.mp4",
"quality": "720p",
"formats": [
{
"quality": "144p",
"format": "mp4"
},
{
"quality": "240p",
"format": "mp4"
},
{
"quality": "480p",
"format": "mp4"
},
{
"quality": "720p",
"format": "mp4"
},
{
"quality": "144p",
"format": "hls"
},
{
"quality": "240p",
"format": "hls"
},
{
"quality": "480p",
"format": "hls"
},
{
"quality": "720p",
"format": "hls"
}
],
"creator": {
"id": "127864703",
"name": "Scorepass",
"url": "https://xhamster.com/users/scorepass"
},
"durationSeconds": 623,
"width": 1366,
"height": 720,
"orientation": "straight",
"publishedAt": "2025-11-09T00:01:40.000Z",
"tags": [
"MILF Bundle",
"Moon Flower",
"Steve Hardy",
"Anal",
"Big Tits",
"Blonde",
"Brunette",
"Cum on Tits",
"HD Videos",
"Hardcore",
"MILF",
"Mature",
"Nude",
"Titty Fucking",
"Fucked",
"Mature Women",
"Matures",
"Busty",
"Cuty",
"Guy",
"Melone",
"Paid",
"Old MILF",
"Breasts",
"Load",
"Blonde Girl",
"Giant Boob",
"Cumshot on Tits",
"Finish",
"Swimming",
"Older MILF",
"Brunette Girl",
"Tight Asses",
"Beautiful",
"Hardcore Mature",
"How Much",
"Huge Tit Mature",
"Big Tit Mature",
"Mooning",
"Ilikecomix"
],
"viewCount": 11290119,
"likeCount": 29519,
"dislikeCount": 434,
"commentCount": 79,
"thumbnailUrl": "https://ic-vt-nss.xhcdn.com/a/NmI3NzQ0NDM1OGM3NzJhN2U4MzZkN2VkOTRmNmZmMjM/s(w:1280,h:720),webp/026/974/000/v2/2560x1440.226.webp"
}

Photo gallery row

FieldTypeWhat it does
typestringAlways gallery for a photo gallery row.
galleryIdstringThe xHamster ID of the photo gallery.
urlstringThe main xHamster page URL of the gallery.
titlestringThe title of the gallery.
photosarray of objectsThe photos in the gallery.
photos.imageUrlstringA link to download the photo.
photos.widthinteger or nullThe width of the photo in pixels.
photos.heightinteger or nullThe height of the photo in pixels.

Example photo gallery row

{
"type": "gallery",
"galleryId": "16613137",
"url": "https://xhamster.com/photos/gallery/beach-16613137",
"title": "Beach",
"photos": [
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/NTdlYjQwOTM1MWQ4ZTIxMjVlZDNiYzQ3OGIwYzZiNDI/webp/000/520/312/312_1000.jpg",
"width": 2000,
"height": 924
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/Yjk1M2ZjMjEwMjc0M2U4YTNlZGFhMTUzOTc0NzRmZDI/webp/000/520/312/298_1000.jpg",
"width": 2000,
"height": 1500
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/ZmM3ZGYyZWQ5MDg5Nzg1OGZmZmJiNjVhNjIxODZiY2Y/webp/000/520/312/299_1000.jpg",
"width": 1200,
"height": 1600
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/YjEyYzM0ZTc1NTE5NmQ5ZmNjMTk2Mzc4OGNhM2U5ZjA/webp/000/520/312/300_1000.jpg",
"width": 1599,
"height": 1200
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/MzgyNWVjN2VkNDRhNjM2MDFhYmYxOThlMDkzYmUxNTE/webp/000/520/312/304_1000.jpg",
"width": 901,
"height": 2000
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/MmFiNTA2OWRjODBhMWI0YzE3MDMzMDA5N2UxMDY0YjY/webp/000/520/312/305_1000.jpg",
"width": 2000,
"height": 924
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/MWVhMmFhNDllYTgwNDMzNmZjNjI2M2ZlMTc2YmY3MGE/webp/000/520/312/310_1000.jpg",
"width": 924,
"height": 2000
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/ZmIxOWUyOWYzOWM0ZmZhMjhlZWQxMDFhZTc4NGIxNTA/webp/000/520/312/301_1000.jpg",
"width": 1125,
"height": 2000
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/YzBlZTNiZDY2ZWMyM2NjOTUzNDc1MjFjMDNiMWQxNTU/webp/000/520/312/302_1000.jpg",
"width": 901,
"height": 2000
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/Yzk3NTFlMzUzOTBhZjI3Mjk2YWRmZjY3MTUxNDE5YWU/webp/000/520/312/303_1000.jpg",
"width": 901,
"height": 2000
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/NjNjN2RmMmFlZmViMTg1NzcxZmQ0YjZjZTRhY2I5NDk/webp/000/520/312/292_1000.jpg",
"width": 848,
"height": 1131
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/ZTg0Yzg0YzdlMmU0OTQ4YjNiZjM1ODg2MTAxNzk3MTk/webp/000/520/312/293_1000.jpg",
"width": 848,
"height": 1131
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/MGI4MjcyOWVkYjdkMDMwMzdmMzU2ZTNjMDBhMjU1YzI/webp/000/520/312/294_1000.jpg",
"width": 640,
"height": 480
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/NWQ5OGRhODU2MGVkMDAzNTIzYTM4Y2UxMjM0MTNmZmE/webp/000/520/312/295_1000.jpg",
"width": 480,
"height": 640
},
{
"imageUrl": "https://ic-ph-nss.xhcdn.com/a/MTlkNmZmZmMzMzliNzVmOWZiYThhNjVhZjk0YjEzZTI/webp/000/520/312/296_1000.jpg",
"width": 480,
"height": 640
}
]
}

💳 Pricing

This Actor uses pay-per-event pricing. You pay only for what is saved to your dataset:

  • Video: $0.009 for each video saved with its download link and details.
  • Photo gallery: $0.005 for each photo gallery saved with links to its photos.

You are not charged for links that are not valid, videos or galleries that cannot be found, items that cannot be read, or repeated links. If you set a maximum cost for the run, the Actor stops when it reaches that limit.

🔌 Integrations

You can connect xHamster Downloader to other apps and services with Apify integrations, such as Make, Zapier, Google Drive, webhooks, and the Apify API. For example, you can send each new download link to a sheet or start a run from your own code.

❓ FAQ

The Actor only reads public pages that anyone can open without an account. It does not sign in, and it does not get private or paid videos. Download only content you own or have permission to save, and follow the xHamster terms and the laws where you live.

Can I get 1080p or 4K videos?

The MP4 download link is at most 720p. When xHamster offers higher qualities, they show in the formats list only as HLS streams.

What happens if a video does not have the quality I picked?

You get the best quality below it. If there is no lower quality, you get the lowest quality the video has. The quality field shows the quality you got.

Does the Actor save the video file itself?

No. Each row gives a download link that you can open to save the file. The link works only for a limited time, so use it soon after the run.

Can I mix videos and photo galleries in one run?

No. Each run reads one type: the type you pick in Result type. Start a second run for the other type.

The Actor writes a warning in the log, skips that link, and moves on to the next one. You are not charged for it.

Do I need an xHamster account?

No. The Actor works with public videos and photo galleries without any login.

📝 Changelog

v0.0 (26-10-2026)

  • 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é