# Stripchat Video Downloader | How to Download Stripchat Videos (`maximedupre/stripchat-video-downloader`) Actor

Download public Stripchat saved videos or record active live streams as MP4 files. Choose the source quality. Get each finished file from Apify storage.

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

## Pricing

$5.00 / 1,000 video files

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

### 🎬 Download public Stripchat videos as MP4 files

Stripchat Video Downloader is for creators, media teams, and people who have permission to save public Stripchat media. Download saved videos or record active live streams. Each finished MP4 file comes with an Apify storage link and useful source details.

- **[Stripchat Video Downloader](https://apify.com/maximedupre/stripchat-video-downloader/examples/stripchat-video-downloader)** — save supported public videos as MP4 files.
- **[Stripchat Saved Video Downloader](https://apify.com/maximedupre/stripchat-video-downloader/examples/stripchat-saved-video-downloader)** — download a known saved video or the supported saved videos on a model page.
- **[Stripchat Live Stream Recorder](https://apify.com/maximedupre/stripchat-video-downloader/examples/stripchat-live-stream-recorder)** — record an active public stream for the time you choose.
- **[Stripchat VR Video Downloader](https://apify.com/maximedupre/stripchat-video-downloader/examples/stripchat-vr-video-downloader)** — save public VR videos when Stripchat exposes them.
- **[Stripchat MP4 Downloader](https://apify.com/maximedupre/stripchat-video-downloader/examples/stripchat-mp4-downloader)** — prepare a playback-friendly MP4 file in Apify storage.
- **[Stripchat Bulk Video Downloader](https://apify.com/maximedupre/stripchat-video-downloader/examples/stripchat-bulk-video-downloader)** — process a list of public Stripchat URLs in one run.

Use this Actor only for media you own or have permission to save. It does not bypass paid, private, members-only, removed, geo-restricted, or account-gated access.

#### 📦 Returned data

Each successful video creates one dataset row. It can include:

- `downloadUrl` for the MP4 file in Apify storage
- `sourceUrl`, `videoId`, `title`, and `creatorUsername`
- `mediaKind`, which is `savedVideo` or `liveStream`
- `quality`, `durationSeconds`, and `isVr`
- `fileName` and `fileSizeBytes`

A field such as the title or duration may be missing when Stripchat does not show it. Invalid, unavailable, unsupported, or duplicate videos do not create placeholder rows.

#### 🚀 Running the Actor

1. Choose **Saved videos** or **Live streams** as the Target.
2. Add one or more public Stripchat URLs for that Target.
3. For a live stream, set the capture duration in seconds.
4. Pick a video quality, or keep **Best available**.
5. Start the Actor and open the dataset when files are ready.

The Actor keeps working on other submitted URLs when one URL cannot be used. A live stream must be public and active when the Actor checks it.

#### 🎯 Input

| Field | What to enter |
| --- | --- |
| `target` | `savedVideos` or `liveStreams`. |
| `savedVideoUrls` | Public saved-video or model-page URLs. Used for the Saved videos Target. |
| `liveStreamUrls` | Public model or live-stream URLs. Used for the Live streams Target. |
| `captureDuration` | Recording time from 1 to 3,600 seconds. Used for live streams. |
| `quality` | `best` or a quality such as `1080p` that Stripchat offers. |

Example input:

```json
{
  "target": "savedVideos",
  "savedVideoUrls": [
    "https://stripchat.com/example-model/videos/123456789"
  ],
  "quality": "1080p"
}
````

Options for the other Target are ignored. A chosen quality must be offered for each video or stream.

#### 📄 Output

A saved video row can look like this:

```json
{
  "downloadUrl": "https://api.apify.com/v2/key-value-stores/example/records/VIDEO-saved-123456789.mp4?disableRedirect=true",
  "sourceUrl": "https://stripchat.com/example-model/videos/123456789",
  "videoId": "123456789",
  "title": "Example video",
  "creatorUsername": "example-model",
  "mediaKind": "savedVideo",
  "quality": "1080p",
  "durationSeconds": 60,
  "isVr": false,
  "fileName": "example-model-123456789.mp4",
  "fileSizeBytes": 10485760
}
```

Open `downloadUrl` to get the stored MP4 file. You can also export the dataset as JSON, CSV, Excel, XML, RSS, or HTML, or read it through the Apify API.

#### 💳 Pricing

This Actor uses pay-per-event pricing. You are charged for each video file that is successfully prepared, stored, and saved to the dataset. Invalid URLs, unavailable media, duplicate videos, and targets that produce no file do not create this charge.

#### 🔌 Integrations

Use Apify schedules for repeat runs, webhooks for run events, the Apify API for your apps, and dataset integrations for exported data.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Why did my saved-video URL produce no file?

The video may be paid, private, removed, not public, or no longer available. A model page can also have no supported public saved videos.

##### Why did my live-stream URL produce no file?

The model must be in an active public stream when the Actor checks the URL. The Actor does not wait for an offline model or rebuild an earlier broadcast.

##### Can I choose 1080p or another quality?

Yes, when Stripchat offers that quality for the video or stream. Use `best` to pick the highest quality offered by the source. The Actor does not create a quality that Stripchat does not provide.

##### Does it support Stripchat VR videos?

Yes, for accessible saved videos and active public streams marked as VR by Stripchat. The Actor keeps source-exposed VR playback metadata when it prepares the file. VR details may be missing when the source does not provide them.

##### Do I need a Stripchat account, cookies, or login?

No for supported public media. The Actor has no cookie or login input. It cannot open private, paid, members-only, or account-gated media.

##### Does it bypass DRM or access rules?

No. It does not bypass DRM, paywalls, source permissions, or other access controls. Only save media you own or have permission to use.

##### What happens if I submit the same video twice?

The Actor avoids preparing and charging for the same source video more than once in one run, even when submitted URLs overlap.

##### Can I send the output to ChatGPT or Perplexity?

You can export the dataset and use suitable source details in your own tools. The Actor does not send files or data to ChatGPT or Perplexity.

### 📝 Changelog

- 0.1: Initial release.

### 🆘 Support

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

### 🔗 Related Actors

- [XHamsterLive Downloader](https://apify.com/maximedupre/xhamsterlive-downloader) — get source-hosted HLS links and details for accessible live rooms and saved videos.
- [ManyVids Video Downloader](https://apify.com/maximedupre/manyvids-video-downloader) — get source-hosted media links and details from known ManyVids video URLs.
- [XNXX Video Downloader](https://apify.com/maximedupre/xnxx-video-downloader) — get public MP4 or HLS links and video details from XNXX URLs or IDs.
- [XVideos Downloader](https://apify.com/maximedupre/xvideos-downloader) — get public MP4 or HLS links and video details from XVideos watch pages.
- [PornTrex Downloader](https://apify.com/maximedupre/porntrex-downloader) — get source-hosted media links and details from public PornTrex video URLs.

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

# Actor input Schema

## `target` (type: `string`):

Choose what to download. Options for the other Target are ignored.

## `savedVideoUrls` (type: `array`):

Add public Stripchat saved-video or model-page URLs. The Actor finds supported saved videos on each page. Used only for the Saved videos Target.

## `liveStreamUrls` (type: `array`):

Add public Stripchat model or live stream URLs. Each model must be live when the Actor checks it. Used only for the Live streams Target.

## `captureDuration` (type: `integer`):

Set how long to record each live stream. The stream may end before this time.

## `quality` (type: `string`):

Choose a quality that Stripchat offers for the video or stream. Pick Best available to use the highest offered quality.

## Actor input object example

```json
{
  "target": "savedVideos",
  "savedVideoUrls": [
    "https://stripchat.com/KarissaChantelle/videos/8914353"
  ],
  "captureDuration": 60,
  "quality": "best"
}
```

# Actor output Schema

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

Open the dataset with each video, its download link, and source details.

# 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 = {
    "target": "savedVideos",
    "savedVideoUrls": [
        "https://stripchat.com/KarissaChantelle/videos/8914353"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/stripchat-video-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 = {
    "target": "savedVideos",
    "savedVideoUrls": ["https://stripchat.com/KarissaChantelle/videos/8914353"],
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/stripchat-video-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 '{
  "target": "savedVideos",
  "savedVideoUrls": [
    "https://stripchat.com/KarissaChantelle/videos/8914353"
  ]
}' |
apify call maximedupre/stripchat-video-downloader --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Stripchat Video Downloader | How to Download Stripchat Videos",
        "description": "Download public Stripchat saved videos or record active live streams as MP4 files. Choose the source quality. Get each finished file from Apify storage.",
        "version": "0.1",
        "x-build-id": "8UboieFySLEj9DkhN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/maximedupre~stripchat-video-downloader/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-maximedupre-stripchat-video-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~stripchat-video-downloader/runs": {
            "post": {
                "operationId": "runs-sync-maximedupre-stripchat-video-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~stripchat-video-downloader/run-sync": {
            "post": {
                "operationId": "run-sync-maximedupre-stripchat-video-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": [
                    "target"
                ],
                "properties": {
                    "target": {
                        "title": "Target",
                        "enum": [
                            "savedVideos",
                            "liveStreams"
                        ],
                        "type": "string",
                        "description": "Choose what to download. Options for the other Target are ignored."
                    },
                    "savedVideoUrls": {
                        "title": "Stripchat URLs",
                        "minItems": 1,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Add public Stripchat saved-video or model-page URLs. The Actor finds supported saved videos on each page. Used only for the Saved videos Target.",
                        "items": {
                            "type": "string",
                            "pattern": "^https?://(?:www\\.)?stripchat\\.com/(?:[^\\s]+)?$"
                        }
                    },
                    "liveStreamUrls": {
                        "title": "Stripchat live stream URLs",
                        "minItems": 1,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Add public Stripchat model or live stream URLs. Each model must be live when the Actor checks it. Used only for the Live streams Target.",
                        "items": {
                            "type": "string",
                            "pattern": "^https?://(?:www\\.)?stripchat\\.com/(?:[^\\s]+)?$"
                        }
                    },
                    "captureDuration": {
                        "title": "Capture duration",
                        "minimum": 1,
                        "maximum": 3600,
                        "type": "integer",
                        "description": "Set how long to record each live stream. The stream may end before this time.",
                        "default": 60
                    },
                    "quality": {
                        "title": "Video quality",
                        "pattern": "^(?:best|[1-9][0-9]{2,3}p)$",
                        "type": "string",
                        "description": "Choose a quality that Stripchat offers for the video or stream. Pick Best available to use the highest offered quality.",
                        "default": "best"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
