# XHamsterLive Downloader (`maximedupre/xhamsterlive-downloader`) Actor

XHamsterLive downloader for accessible live rooms, model pages, saved videos, and VR-capable media. Export HLS media links, variants, thumbnails, duration, model context, and source URLs.

- **URL**: https://apify.com/maximedupre/xhamsterlive-downloader.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.65 / 1,000 media items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

### 📥 XHamsterLive downloader for media links

XHamsterLive Downloader extracts direct media links and metadata from accessible [XHamsterLive](https://xhamsterlive.com/) pages. Add live-room, model-page, saved-video, listing, or VR-capable URLs, then export a clean Apify dataset with source URLs, media type, model context, thumbnails, duration when available, VR signals, and source-hosted HLS media links.

Use this XHamsterLive downloader when you already have target pages and need repeatable output for content review, cataloging, media operations, research, or an API workflow. The Actor works with media that the source publicly exposes to the run. You do not need an XHamsterLive account, cookies, a browser extension, local recorder, or source API key for public targets.

For a small first run, keep the prefilled XHamsterLive listing URL or paste one public model or saved-video page. Start the Actor, open the dataset, and inspect the `mediaVariants` array for the HLS links your downstream tool can use.

### ✅ What this Actor does

- Accepts public XHamsterLive listing URLs such as `https://xhamsterlive.com/`, `/girls`, `/men`, `/trans`, and `/couples`.
- Accepts public model and live-room URLs such as `https://xhamsterlive.com/ExampleModel`.
- Accepts public saved-video pages and model video pages such as `https://xhamsterlive.com/ExampleModel/videos`.
- Saves one dataset row per successful accessible media item.
- Returns direct source-hosted HLS media links in `mediaVariants`.
- Adds source page URL, media ID, title, model name, model URL, duration, thumbnail, media kind, VR signal, quality, dimensions, content type, and expiry evidence when the source exposes them.
- Skips invalid, private, paid, member-only, offline, inaccessible, duplicate, or no-media targets without saving failure rows.

This Actor is focused on source-hosted media URLs. It does not install a browser extension, record your screen, wait for rooms to come online, bypass private access, download files into Apify storage, create ZIP archives, or transcode video.

### 📦 Data you can export

Each saved row represents one accessible XHamsterLive live stream, saved video, or VR-capable media item where direct media links were found. Core fields include:

- `mediaId` - source-visible room, stream, or video identifier when available.
- `sourceUrl` - XHamsterLive page URL for the media item.
- `title` - live-room label or saved-video title when available.
- `modelName` - model or room display name when available.
- `modelUrl` - model or room page URL when available.
- `mediaKind` - `liveStream`, `savedVideo`, `vr`, or `unknown`.
- `durationSeconds` - saved-video duration in seconds when available. Live streams use `null`.
- `thumbnailUrl` - source thumbnail or poster image URL when available.
- `isVr` - whether the source marks the media as VR-capable.
- `mediaVariants` - direct source-hosted media variants with `mediaUrl`, `quality`, `width`, `height`, `contentType`, and `expiresAt` when available.

Live-room and saved-video rows return HLS media links because that is what XHamsterLive exposes for public playback. These are source-hosted URLs, so use them while they are fresh and while the source still makes the media available.

You can export the dataset as JSON, CSV, Excel, XML, RSS, or HTML, call it from the Apify API, schedule recurring runs, or connect results to webhooks and integrations.

### 🚀 How to run

1. Open the Actor input.
2. Add one XHamsterLive page per row in **XHamsterLive URLs**.
3. Start the Actor.
4. Open the dataset.
5. Use `mediaVariants` to pick the HLS media URL you need.

The Actor pushes successful rows during the run, so you can inspect early results before a larger batch finishes. The public input accepts up to 100 URL rows.

### 🧾 Input

| Field | What to enter |
| ----- | ------------- |
| `startUrls` | Accessible XHamsterLive listing, live-room, model-page, saved-video, model-video, or VR-capable page URLs. |

Input example:

```json
{
	"startUrls": [
		{
			"url": "https://xhamsterlive.com/"
		},
		{
			"url": "https://xhamsterlive.com/ExampleModel/videos"
		}
	]
}
````

### 📤 Output example

```json
{
	"mediaId": "123456789",
	"sourceUrl": "https://xhamsterlive.com/ExampleModel/videos",
	"title": "Sample saved video",
	"modelName": "ExampleModel",
	"modelUrl": "https://xhamsterlive.com/ExampleModel",
	"mediaKind": "savedVideo",
	"durationSeconds": 742,
	"thumbnailUrl": "https://static.example.xhamsterlive.com/thumbs/example.jpg",
	"isVr": false,
	"mediaVariants": [
		{
			"mediaUrl": "https://edge-hls.example.com/path/playlist.m3u8",
			"quality": "hls",
			"width": null,
			"height": null,
			"contentType": "application/vnd.apple.mpegurl",
			"expiresAt": null
		}
	]
}
```

Failed targets are reported in logs and status messages, not as dataset rows. This keeps exports focused on media items that include at least one usable source-hosted media link.

### 💳 Pricing

This Actor uses pay-per-event pricing. You are charged one `Media item` event for each successful media row that includes at least one direct source-hosted media URL.

Actor starts, invalid URLs, private or paid targets, offline rooms, inaccessible pages, duplicate targets, empty outputs, and no-media pages do not create paid result rows.

### ⚠️ Limits and access

- Works with accessible XHamsterLive pages only.
- Does not use your XHamsterLive account, cookies, browser session, or private data.
- Returns source-hosted HLS media links, not hosted video files.
- Does not download files to Apify key-value storage.
- Does not process paid, member-only, private, or account-restricted media.
- Live stream URLs can stop working when a room goes offline or when the source rotates playback URLs.
- Saved-video URLs may depend on source-side availability and playback rules.

### ❓ FAQ

#### 📼 Does this XHamsterLive downloader save MP4 files?

No. The Actor returns source-hosted HLS media links and metadata. It does not download, store, transcode, or mirror video files.

#### 📡 Can it download XHamsterLive live rooms?

It returns HLS media links for public live rooms when the room is online and the source exposes playable stream URLs. It does not create a long-running recording or wait for a room to come online.

#### 🎞️ Can it get saved videos?

Yes, when the saved video is accessible and the source exposes a full media URL. Paid, fan-club, trailer-only, private, or account-only rows are skipped.

#### 🔐 Does it need cookies, login, or an API key?

No for public targets. The Actor does not expose cookie or session inputs and cannot retrieve media that requires private access the run does not have.

#### 🔎 Why did my run save no rows?

The submitted URLs may be invalid, private, paid, offline, unsupported, or may not expose direct media URLs. The Actor saves successful media rows only, so no-result targets do not create placeholder rows.

### 📝 Changelog

- 0.1: Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~xhamsterlive-downloader/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Other actors

- [MyFreeCams Downloader ↗](https://apify.com/maximedupre/myfreecams-downloader) - Extract public MyFreeCams live-room and recording media URLs.
- [AShemaleTube Downloader ↗](https://apify.com/maximedupre/ashemaletube-downloader) - Export public AShemaleTube HLS media links and video metadata.
- [RedGifs Bulk Downloader ↗](https://apify.com/maximedupre/redgifs-bulk-downloader) - Extract RedGifs video links, metadata, and optional hosted files.
- [Streamable Video Downloader ↗](https://apify.com/maximedupre/streamable-video-downloader) - Export Streamable media links, thumbnails, and quality variants.
- [Facebook Media Downloader ↗](https://apify.com/maximedupre/facebook-media-downloader) - Get public Facebook video and reel media links with metadata.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `startUrls` (type: `array`):

Add XHamsterLive pages that already expose the media you want. Results include direct source-hosted media links, variants, and source metadata when available.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://xhamsterlive.com/girls"
    },
    {
      "url": "https://xhamsterlive.com/men"
    },
    {
      "url": "https://xhamsterlive.com/trans"
    },
    {
      "url": "https://xhamsterlive.com/couples"
    }
  ]
}
```

# Actor output Schema

## `results` (type: `string`):

Open successful XHamsterLive media rows with metadata, source URLs, and direct media links.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        {
            "url": "https://xhamsterlive.com/girls"
        },
        {
            "url": "https://xhamsterlive.com/men"
        },
        {
            "url": "https://xhamsterlive.com/trans"
        },
        {
            "url": "https://xhamsterlive.com/couples"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/xhamsterlive-downloader").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "startUrls": [
        { "url": "https://xhamsterlive.com/girls" },
        { "url": "https://xhamsterlive.com/men" },
        { "url": "https://xhamsterlive.com/trans" },
        { "url": "https://xhamsterlive.com/couples" },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/xhamsterlive-downloader").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://xhamsterlive.com/girls"
    },
    {
      "url": "https://xhamsterlive.com/men"
    },
    {
      "url": "https://xhamsterlive.com/trans"
    },
    {
      "url": "https://xhamsterlive.com/couples"
    }
  ]
}' |
apify call maximedupre/xhamsterlive-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/xhamsterlive-downloader",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "XHamsterLive Downloader",
        "description": "XHamsterLive downloader for accessible live rooms, model pages, saved videos, and VR-capable media. Export HLS media links, variants, thumbnails, duration, model context, and source URLs.",
        "version": "0.1",
        "x-build-id": "BHeG3GPppjdjziIGI"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~xhamsterlive-downloader/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-xhamsterlive-downloader",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/maximedupre~xhamsterlive-downloader/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-xhamsterlive-downloader",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/maximedupre~xhamsterlive-downloader/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-xhamsterlive-downloader",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "XHamsterLive URLs",
                        "minItems": 1,
                        "maxItems": 100,
                        "type": "array",
                        "description": "Add XHamsterLive pages that already expose the media you want. Results include direct source-hosted media links, variants, and source metadata when available.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
