# Clips4Sale Video Downloader (`datavoid/clips4sale-video-downloader`) Actor

Download Clips4Sale videos from a URL for offline viewing.

- **URL**: https://apify.com/datavoid/clips4sale-video-downloader.md
- **Developed by:** [VacuVids](https://apify.com/datavoid) (community)
- **Categories:** Videos, Automation, Social media
- **Features:** Limited permissions
- **Stats:** 3,112 total users, 67 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$50.00 / 1,000 video download links

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Clips4Sale Video Downloader

Save supported Clips4Sale clips from a URL for offline viewing, archiving purchases, QA, or organizing a personal media library. Paste one clip link or a whole list, optionally add your logged-in cookie for clips your account can access, and the Actor returns a browser-ready download link and useful metadata for each clip without making you dig through page code or browser network requests.

### What You Get

- Batch downloads: paste a list of clip URLs and get one download link per clip, with several resolved at the same time
- A simple URL-based workflow for supported Clips4Sale clips
- Support for free clips, public previews, and paid clips your account can access
- A direct download link: open it and the download starts right away
- Extra metadata for each clip, including title, studio, duration, resolution, price, thumbnails, tags, and engagement stats
- A clear result type: `free`, `preview`, or `paid`

### Common Use Cases

- Build a personal offline Clips4Sale media library from supported clip URLs
- Prepare downloaded clips for organizers like [Stash App](https://github.com/stashapp/stash) or a Plex Media Library
- Keep favorite clips together with useful metadata
- Archive clips your account can access so your collection is easier to browse later
- Collect preview videos and metadata for cataloging, QA, or research workflows

### Pricing

The pricing below applies from October 14, 2026.

- **Pay only for results.** The Actor charges once per video download link it returns. Failed, invalid, or unavailable URLs never trigger the per-video charge. See the Pricing tab for the current price.
- **Free Apify plan:** each account can download 1 video with this Actor. The prefilled example URL always works, so you can test the Actor as often as you like. In a batch, clips past the limit are skipped and never charged.
- **Paid Apify plans:** no limit. Upgrade at [apify.com/pricing](https://apify.com/pricing) to keep downloading after your first video.

### Input

#### Download a free clip or paid preview

Use this when you do not need account-only access. Paid clips will fall back to the public preview if one is available.

```json
{
  "urls": ["https://www.clips4sale.com/studio/157741/24835661/teacher-belly-button-fetish"],
  "debug": false
}
```

#### Download a paid clip your account can access

Paste the Cookie header value from a logged-in Clips4Sale browser session. The Actor uses it to fetch the full clip your account has purchased. If the cookie does not unlock the clip, the run returns `invalid_cookie` or `not_free` (see below) instead of the public preview.

```json
{
  "urls": ["https://www.clips4sale.com/studio/157741/24835661/teacher-belly-button-fetish"],
  "cookie": "session=...; token=...",
  "debug": false
}
```

#### Download a batch of clips

Paste as many clip URLs as you need (up to 1,000 per run). Each clip gets its own dataset item and download link, and several are resolved at the same time. Repeated URLs are downloaded once.

```json
{
  "urls": ["https://www.clips4sale.com/studio/157741/24835661/teacher-belly-button-fetish", "https://www.clips4sale.com/studio/61819/27322879/example"]
}
```

| Field                | Required | Description                                                                                                                         |
| -------------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| `urls`               | Yes      | Full Clips4Sale clip page URLs, one per line. A single `url` string is also accepted.                                               |
| `cookie`             | No       | Full Cookie header value from your logged-in browser session. Leave empty for free clips and public paid previews.                  |
| `debug`              | No       | Adds selected diagnostics and raw Clips4Sale page data. Usually only needed while troubleshooting.                                  |
| `proxyConfiguration` | No       | Residential proxy pinned to the U.S. Virgin Islands by default. Override the country/groups or disable it via Apify's proxy editor. |

The number of clips resolved at the same time follows the memory you give the run, so there is nothing to set. A long list finishes sooner with more memory (Run options): in our tests a run at 1 GB (the default) resolved about 4.5 clips a second, and one at 4 GB about 9.

### Output

The Actor saves one item per clip URL to the default dataset. Successful results include normalized metadata plus:

```json
{
  "thumbnailUrl": "https://...",
  "downloadUrl": "https://dl.vacuvids.com/d/v1...",
  "downloadType": "preview",
  "title": "Teacher Belly Button Fetish",
  "description": "A clean, HTML-free description of the clip.",
  "creatorName": "Example Studio",
  "price": 11.99,
  "currency": "USD",
  "scrapeStatus": "ok",
  "scrapedAt": "2026-05-26T12:00:00.000Z",
  "videoId": "24835661"
}
```

Important download fields:

- `downloadUrl`: direct download link. Open the link and the download starts right away. The link works for 1 hour. After that it opens the vacuvids.com page with your video filled in, where one more click starts the download. For a paid video, paste your cookie there again to get the full video.
- `downloadType`: `free` for free clips, `preview` for public paid-clip previews, `paid` for paid clips resolved with an authorized cookie.

If the clip cannot be resolved, the dataset item still contains a machine-readable status:

- `invalid_input`: Required input is missing or malformed.
- `invalid_cookie`: A cookie was supplied but did not unlock the clip, so only the public preview was reachable. The session may be expired, signed out, or from an account that has not purchased it. The run fails instead of returning that preview.
- `not_found`: The clip could not be found.
- `not_free`: The clip is paid and no preview/full download was available, or the supplied cookie is signed in but the account has not purchased the clip.
- `no_download_url`: Metadata was found, but no usable media URL was exposed.
- `api_error`: Clips4Sale returned an unexpected page or network error.

### Cookie Tips

- Copy only the Cookie header value, for example `session=...; token=...`.
- Use a fresh cookie from an active browser session. Cookies can expire quickly.
- The cookie must belong to an account that already has access to the paid clip.
- Keep `debug` disabled when using real cookies unless you are actively troubleshooting.

#### How to get your Cookie?

1. Install the Cookie-Editor browser extension from https://cookie-editor.com/.
2. Open Clips4Sale in the same browser and make sure you are logged in.
3. Click the Cookie-Editor cookie icon in the browser toolbar.
4. Click **Export** in the bottom right.
5. Choose **Header String**.
6. Paste the exported value into the Actor's `cookie` input field.

### Limits and Notes

- Up to 1,000 clip URLs per run, each with its own download result. Repeated URLs are downloaded once.
- Runs time out after 1 hour by default. For long lists, raise the timeout in the run options; near the timeout the Actor stops starting new clips and the run status says how many were not started.
- If the run reaches your maximum charge, the Actor stops starting new clips and the run status says how many were not started. Nothing is charged for them.
- Site changes, expired cookies, unavailable clips, or changed Clips4Sale page data can affect results.

### Terms of Use

By running this Actor you confirm that you are 18 or older and that you only download videos you have the right to download, for personal use. You are responsible for your downloads and for following copyright law and the Clips4Sale terms. This Actor is not affiliated with Clips4Sale and is provided as is, without warranty. If you paste a cookie, you explicitly allow this Actor and the vacuvids.com servers to use it, through proxy servers, to access your Clips4Sale account on your behalf and fetch the download link of the requested video.

# Actor input Schema

## `urls` (type: `array`):

Paste one or more full Clips4Sale clip page URLs, one per line. Each clip becomes its own result with its own download link and is charged separately; repeated URLs are downloaded once. Up to 1,000 URLs per run. From October 14, 2026, free Apify plan: 1 video per account (the prefilled example always works); paid plans have no limit.

## `url` (type: `string`):

One Clips4Sale clip page URL. Kept for API callers that send a single URL; it is downloaded together with any Video URLs.

## `cookie` (type: `string`):

Optional. Paste the full Cookie header value from a logged-in Clips4Sale browser session to try full downloads for clips your account can access. Leave empty for public/free downloads and paid previews.

## `debug` (type: `boolean`):

Enable only when troubleshooting. Adds selected diagnostics and raw Clips4Sale page data to the dataset item.

## `proxyConfiguration` (type: `object`):

Uses a residential proxy by default to help avoid anti-bot detection and age-verification blocks.

## Actor input object example

```json
{
  "urls": [
    "https://www.clips4sale.com/studio/157741/24835661/teacher-belly-button-fetish"
  ],
  "url": "https://www.clips4sale.com/studio/157741/24835661/teacher-belly-button-fetish",
  "cookie": "__session=...; clips4sale_forever_session_v2=...; jwtToken=...",
  "debug": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "VI"
  }
}
```

# Actor output Schema

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

Dataset items produced by this run.

# 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 = {
    "urls": [
        "https://www.clips4sale.com/studio/157741/24835661/teacher-belly-button-fetish"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "VI"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datavoid/clips4sale-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 = {
    "urls": ["https://www.clips4sale.com/studio/157741/24835661/teacher-belly-button-fetish"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "VI",
    },
}

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

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.clips4sale.com/studio/157741/24835661/teacher-belly-button-fetish"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "VI"
  }
}' |
apify call datavoid/clips4sale-video-downloader --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datavoid/clips4sale-video-downloader"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/qB9QrGvKWNEoEHv0x/builds/L7ejR4jL0DsMuaknQ/openapi.json
