# Vimeo Video Downloader (`khadinakbar/vimeo-video-downloader`) Actor

Download public and unlisted Vimeo videos by URL or ID — direct MP4 links in every quality, HLS/DASH streams, full metadata, and optional save-to-store. MCP/API-ready.

- **URL**: https://apify.com/khadinakbar/vimeo-video-downloader.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Videos, Social media, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 video downloadeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Vimeo Video Downloader

Download **public and unlisted Vimeo videos** by URL or ID. Returns direct **MP4 download links in every available quality** (240p → 1080p+), **HLS and DASH** stream URLs, full **metadata** (title, owner, duration, fps, thumbnail), and an optional **MP4 file saved straight into storage**. HTTP-only, no login, no API key, no browser — fast and reliable. Built for bulk jobs and for AI agents (MCP-ready).

### What you get

| Field | Description |
|-------|-------------|
| `id` | Vimeo numeric video ID |
| `title` | Video title |
| `ownerName` / `ownerUrl` | Uploader name and profile URL |
| `duration` | Length in seconds |
| `fps`, `width`, `height` | Frame rate and native resolution |
| `uploadDate` | Upload timestamp (as reported by Vimeo) |
| `bestQuality` | Quality label of the best progressive stream (e.g. `1080p`) |
| `downloadUrl` | Direct link to the best-quality MP4 (or HLS/DASH master if no MP4) |
| `progressiveStreams[]` | Every progressive MP4 rendition: `quality`, `width`, `height`, `fps`, `url` |
| `hlsMasterUrl` / `dashMasterUrl` | Adaptive-stream master playlist URLs |
| `thumbnailUrl` | Poster image |
| `savedFileUrl` | Public URL of the MP4 saved to storage (when enabled) |
| `success` / `error` | Per-video status; restricted/removed videos are reported, never crash the run |

### When to use it

- Archive or back up your own Vimeo uploads in bulk.
- Feed Vimeo video files or metadata into a transcription, editing, or analysis pipeline.
- Let an AI agent fetch a downloadable link for any public Vimeo URL in one tool call.
- Pull every quality variant of a video to pick the right size for your use case.

**Not for:** channel, showcase, group, or user-profile URLs — pass individual video links. Private, password-protected, or domain-locked videos cannot be downloaded unless you supply the unlisted hash (`vimeo.com/{id}/{hash}`).

### Input

| Field | Type | Default | Notes |
|-------|------|---------|-------|
| `videoUrls` | array of strings | — (required) | Video URLs or IDs. Full, embed, unlisted-with-hash, or bare-ID forms all work. |
| `maxVideos` | integer | `50` | Caps processed + billed videos per run (max 1000). |
| `saveVideosToStore` | boolean | `false` | Also download the MP4 into the run's key-value store and return `savedFileUrl`. |
| `proxyConfiguration` | object | Apify DC | Used only for the config request; the CDN download is direct. |

#### Example input

```json
{
  "videoUrls": [
    "https://vimeo.com/76979871",
    "https://vimeo.com/22439234",
    "https://vimeo.com/123456789/0a1b2c3d4e"
  ],
  "maxVideos": 50,
  "saveVideosToStore": false
}
````

### Pricing

**Pay-per-event** — you pay only for what you get:

| Event | Price |
|-------|-------|
| Actor start | $0.00005 |
| Video downloaded (per successfully extracted video) | **$0.005** |

Private, removed, or restricted videos are **not** charged — only videos that return real download links bill the $0.005 event. Pay-Per-Usage (compute + proxy) is also available for very large jobs.

### How it works

The actor reads Vimeo's public player configuration endpoint (`player.vimeo.com/video/{id}/config`) — the same data the Vimeo web player uses to play a video. No scraping of rendered HTML, no headless browser, no login. That makes it fast (sub-second per video) and resilient. The direct MP4/HLS/DASH URLs in the response are Vimeo's own pre-signed CDN links.

For unlisted videos, include the hash from the share URL (`vimeo.com/{id}/{hash}`); the actor passes it through automatically.

### Output usage

#### Get the dataset via API

```bash
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?clean=true&format=json"
```

#### Call the actor from Python

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("khadinakbar/vimeo-video-downloader").call(run_input={
    "videoUrls": ["https://vimeo.com/76979871"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["downloadUrl"])
```

#### Call the actor from JavaScript

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

const client = new ApifyClient({ token: '<APIFY_TOKEN>' });
const run = await client.actor('khadinakbar/vimeo-video-downloader').call({
    videoUrls: ['https://vimeo.com/76979871'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].downloadUrl);
```

### Use with AI agents (MCP)

This actor is MCP-ready. Connect via `https://mcp.apify.com?tools=khadinakbar/vimeo-video-downloader` and an agent can pass a Vimeo URL and receive a structured download link plus metadata in one call.

### FAQ

**Can it download private videos?** Only if you have the unlisted hash (`vimeo.com/{id}/{hash}`). Truly private, password-protected, or domain-locked videos return a clear `error` and are not billed.

**What about 4K?** If Vimeo exposes a higher progressive rendition for that video, it appears in `progressiveStreams[]` and is selected as `downloadUrl`. Some videos expose only HLS/DASH — in that case `downloadUrl` is the adaptive master and `bestQuality` is `hls`/`dash`.

**Does it download the actual file or just a link?** Links by default (fast, cheap). Set `saveVideosToStore: true` to also store the MP4 file and get a `savedFileUrl`.

**Will links expire?** Vimeo CDN URLs are time-signed. Download promptly, or use `saveVideosToStore` to keep a copy.

**Bulk?** Yes — pass many URLs in `videoUrls`, bounded by `maxVideos`.

### Legal

This actor accesses publicly available data exposed by Vimeo's own video player. You are responsible for ensuring your use complies with Vimeo's Terms of Service, applicable copyright law, and the rights of content owners. Download only content you own or are authorized to download. This tool is provided for lawful archival, research, and personal-backup purposes.

# Actor input Schema

## `videoUrls` (type: `array`):

List of Vimeo videos to download. Accepts full URLs (https://vimeo.com/76979871), unlisted URLs with a hash (https://vimeo.com/76979871/abc123def), embed URLs (https://player.vimeo.com/video/76979871), or bare numeric IDs (76979871). NOT for channel, showcase, or user-profile URLs — pass individual video links.

## `maxVideos` (type: `integer`):

Hard cap on how many videos are processed and billed in one run, applied after de-duplication of the input list. Defaults to 50; maximum 1000. Use a small value while testing to control cost. This bounds spend — it is NOT a per-video quality setting.

## `saveVideosToStore` (type: `boolean`):

When enabled, the best-quality progressive MP4 is downloaded and stored in this run's key-value store, and its public URL is added to each record as savedFileUrl. Defaults to false (links only, faster and cheaper). Enable when you need the actual video file, not just a download link. Has no effect on HLS/DASH-only videos that expose no progressive MP4.

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

Proxy used for the Vimeo player-config requests (the MP4 file download from the CDN never uses a proxy because the CDN URL is pre-signed). Defaults to Apify Proxy datacenter, which is sufficient for Vimeo. Switch to Residential only if you see geo-blocks. Leave as default unless you have a specific reason.

## Actor input object example

```json
{
  "videoUrls": [
    "https://vimeo.com/76979871",
    "https://vimeo.com/22439234"
  ],
  "maxVideos": 50,
  "saveVideosToStore": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `videos` (type: `string`):

One record per Vimeo video with download links and metadata.

## `summary` (type: `string`):

Per-run counts and estimated billed cost.

# 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 = {
    "videoUrls": [
        "https://vimeo.com/76979871"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/vimeo-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 = { "videoUrls": ["https://vimeo.com/76979871"] }

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/vimeo-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 '{
  "videoUrls": [
    "https://vimeo.com/76979871"
  ]
}' |
apify call khadinakbar/vimeo-video-downloader --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Vimeo Video Downloader",
        "description": "Download public and unlisted Vimeo videos by URL or ID — direct MP4 links in every quality, HLS/DASH streams, full metadata, and optional save-to-store. MCP/API-ready.",
        "version": "1.0",
        "x-build-id": "MWI60zBJhEs8d8HR8"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~vimeo-video-downloader/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-vimeo-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/khadinakbar~vimeo-video-downloader/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-vimeo-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/khadinakbar~vimeo-video-downloader/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-vimeo-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": [
                    "videoUrls"
                ],
                "properties": {
                    "videoUrls": {
                        "title": "Vimeo video URLs or IDs",
                        "type": "array",
                        "description": "List of Vimeo videos to download. Accepts full URLs (https://vimeo.com/76979871), unlisted URLs with a hash (https://vimeo.com/76979871/abc123def), embed URLs (https://player.vimeo.com/video/76979871), or bare numeric IDs (76979871). NOT for channel, showcase, or user-profile URLs — pass individual video links.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxVideos": {
                        "title": "Max videos",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Hard cap on how many videos are processed and billed in one run, applied after de-duplication of the input list. Defaults to 50; maximum 1000. Use a small value while testing to control cost. This bounds spend — it is NOT a per-video quality setting.",
                        "default": 50
                    },
                    "saveVideosToStore": {
                        "title": "Save MP4 files to storage",
                        "type": "boolean",
                        "description": "When enabled, the best-quality progressive MP4 is downloaded and stored in this run's key-value store, and its public URL is added to each record as savedFileUrl. Defaults to false (links only, faster and cheaper). Enable when you need the actual video file, not just a download link. Has no effect on HLS/DASH-only videos that expose no progressive MP4.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy used for the Vimeo player-config requests (the MP4 file download from the CDN never uses a proxy because the CDN URL is pre-signed). Defaults to Apify Proxy datacenter, which is sufficient for Vimeo. Switch to Residential only if you see geo-blocks. Leave as default unless you have a specific reason.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
