# Vimeo Video Downloader & Scraper (`maximedupre/vimeo-scraper`) Actor

Get public Vimeo video details, direct download links for each quality, and existing captions. Start from video links, IDs, channels, showcases, groups, or web pages with Vimeo videos. No Vimeo login is needed.

- **URL**: https://apify.com/maximedupre/vimeo-scraper.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

$0.45 / 1,000 videos

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

### 🎬 Get Vimeo video data, download links, and captions in one run

This Vimeo scraper is for marketers, researchers, editors, and developers who need facts about public Vimeo videos. Give it video links, video IDs, channels, showcases, groups, or web pages that embed Vimeo videos. You get one clean row per video with the title, creator, counts, thumbnails, direct download links for each quality, and existing captions. No Vimeo login or API key is needed.

- Save the details of a list of Vimeo video links into one spreadsheet.
- Get every video in a public Vimeo channel, showcase, or group.
- Find all Vimeo videos embedded on a website and get their details.
- Get direct MP4 download links for each video quality.
- Read video transcripts as plain text, timed segments, SRT, or VTT.

#### 📦 What data you get from each Vimeo video

- **Video basics:** video ID, link, title, description, tags, length, and upload, release, and change dates.
- **Counts:** views, likes, and comments.
- **Creator:** name, profile link, bio, location, verified status, account tier, profile pictures, websites, skills, and follower, following, and video totals.
- **Media:** thumbnails in many sizes, plus every video file Vimeo makes public with its quality, size in pixels and bytes, frame rate, and a direct download link.
- **Captions:** the list of caption languages, and one chosen caption track as plain text, timed segments, and SRT and VTT files.
- **Other details:** privacy setting, license, language, content ratings, audio flag, and player embed link and HTML.

#### 🚀 How to run the Vimeo scraper

1. Open the Actor and pick how to find videos in **Find videos from**.
2. Choose **Vimeo URLs or IDs** and paste video links, video IDs, or channel, showcase, or group links. Or choose **Page URLs** and paste links to pages that embed Vimeo videos.
3. Set **Maximum videos**, or leave it blank to get all videos.
4. Optional: pick a **Download quality** and a **Caption language**.
5. Click **Start**. Each video shows up in the dataset as soon as it is saved.
6. Export the results as JSON, CSV, Excel, or HTML, or read them with the Apify API.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `discoveryMethod` | string | Required. How to find videos: `vimeoInputs` (Vimeo URLs or IDs) or `pageUrls` (Page URLs). The form starts on `vimeoInputs`. Only the section you pick is used. |
| `vimeoInputs` | array of strings | Used with `vimeoInputs`. One public Vimeo video URL, numeric video ID, or channel, showcase, or group URL per entry. A collection link gets all of its videos. The form starts with `https://vimeo.com/channels/staffpicks`. |
| `pageUrls` | array of objects | Used with `pageUrls`. Links to public web pages, each as `{ "url": "..." }`. The Actor opens each page and gets the Vimeo videos it links to or embeds. |
| `maxItems` | integer | Stop after this many video rows, in total for the whole run. Leave it blank or use `0` to get all videos. The form starts with `5`. |
| `downloadQuality` | string | Which video file is listed first in `renditions`. Use `highest`, `medium`, or `lowest`, or an exact quality label such as `1080p` or `540p`. Default: `highest`. All available files are still listed. |
| `captionLanguage` | string | Which caption track to read. Use `auto` to pick an available track, or an exact code such as `en` or `en-x-autogen`. Default: `auto`. |

Notes on the fields:

- The `5` in **Maximum videos** and the Staff Picks link are form prefills. If you call the Actor with the API and leave them out, there is no limit and no default list.
- A quality label must match a `renditions[].quality` value of that video. Run once with `highest` to see the labels. If a video does not have the label, its row has no `renditions`.
- A caption code must match a value in `captionLanguages` of that video. Run once with `auto` to see the codes. A language name or a short code may not match a track.
- The Actor reads only captions that already exist. It does not make new captions or translations.

**Example input**

```json
{
  "maxItems": 5,
  "discoveryMethod": "vimeoInputs",
  "vimeoInputs": [
    "https://vimeo.com/channels/staffpicks"
  ],
  "downloadQuality": "highest",
  "captionLanguage": "auto"
}
```

#### 🧾 Output

**Output fields**

| Field | Type | What it does |
| --- | --- | --- |
| `videoId` | string | Vimeo video ID. |
| `url` | string | Link to the Vimeo video page. |
| `title` | string | Video title. |
| `description` | string | Video description. |
| `tags` | array of strings | Tags on the video. |
| `durationSeconds` | number | Video length in seconds. |
| `uploadedAt` | string | Upload date given by Vimeo. |
| `releasedAt` | string | Release time given by Vimeo. |
| `modifiedAt` | string | Last change time given by Vimeo. |
| `privacy` | string | Privacy setting, such as `anybody` or `unlisted`. |
| `viewCount` | integer | View count. |
| `likeCount` | integer | Like count. |
| `commentCount` | integer | Comment count. |
| `license` | string | License code published by Vimeo. |
| `language` | string | Video language code. This is separate from caption languages. |
| `contentRatings` | array of strings | Content rating labels. |
| `hasAudio` | boolean | Whether Vimeo says the video has audio. |
| `owner.name` | string | Creator name. |
| `owner.url` | string | Link to the creator on Vimeo. |
| `owner.biography` | string | Creator bio. |
| `owner.shortBiography` | string | Short creator bio. |
| `owner.location` | string | Creator location. |
| `owner.createdAt` | string | When the creator profile was made. |
| `owner.isVerified` | boolean | Whether Vimeo marks the creator as verified. |
| `owner.accountTier` | string | Creator account tier. |
| `owner.pictures[].url` | string | Link to a profile picture. |
| `owner.pictures[].width` | integer | Picture width in pixels. |
| `owner.pictures[].height` | integer | Picture height in pixels. |
| `owner.websites[].name` | string | Name of a website on the creator profile. |
| `owner.websites[].url` | string | Link to that website. |
| `owner.skills` | array of strings | Skills listed by the creator. |
| `owner.availableForHire` | boolean | Whether the creator says they are available for hire. |
| `owner.canWorkRemotely` | boolean | Whether the creator says they can work remotely. |
| `owner.followerCount` | integer | Creator follower total. |
| `owner.followingCount` | integer | How many accounts the creator follows. |
| `owner.videoCount` | integer | Creator video total. |
| `thumbnails[].url` | string | Link to a preview image. |
| `thumbnails[].width` | integer | Image width in pixels. |
| `thumbnails[].height` | integer | Image height in pixels. |
| `renditions[].downloadUrl` | string | Direct link to download this video file. |
| `renditions[].quality` | string | Quality label, such as `1080p`. |
| `renditions[].width` | integer | Video width in pixels. |
| `renditions[].height` | integer | Video height in pixels. |
| `renditions[].format` | string | File format, such as `mp4`. |
| `renditions[].sizeBytes` | integer | File size in bytes. |
| `renditions[].frameRate` | number | Frames per second. |
| `renditions[].createdAt` | string | When Vimeo made this file. |
| `renditions[].expiresAt` | string | When this download link stops working, if Vimeo gives that date. |
| `captionLanguages` | array of strings | All caption language codes on the video, including tracks that were not read. |
| `captions[].language` | string | Language code of the caption track that was read. |
| `captions[].name` | string | Track name given by Vimeo. |
| `captions[].origin` | string | Whether the captions were added by the uploader or generated. |
| `captions[].transcript` | string | Plain text of the captions. |
| `captions[].segments[].startSeconds` | number | Start time of a caption line. |
| `captions[].segments[].endSeconds` | number | End time of a caption line. |
| `captions[].segments[].text` | string | Text of a caption line. |
| `captions[].srtDownloadUrl` | string | Link to the captions as an SRT file. |
| `captions[].vttDownloadUrl` | string | Link to the captions as a VTT file. |
| `embed.url` | string | Player embed link. |
| `embed.html` | string | Player embed HTML. |

A field is left out of the row when Vimeo has no value for it. The first file in `renditions` is the one that matches your **Download quality**.

**Example video row**

```json
{
  "videoId": "1237176348",
  "url": "https://vimeo.com/1237176348",
  "title": "Pipes",
  "owner": {
    "name": "Kilian Feusi",
    "url": "https://vimeo.com/user127325284",
    "createdAt": "2020-11-17T14:34:58+00:00",
    "isVerified": true,
    "accountTier": "starter",
    "pictures": [
      {
        "url": "https://i.vimeocdn.com/portrait/114924150_30x30?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1&region=us",
        "width": 30,
        "height": 30
      },
      {
        "url": "https://i.vimeocdn.com/portrait/114924150_72x72?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1&region=us",
        "width": 72,
        "height": 72
      },
      {
        "url": "https://i.vimeocdn.com/portrait/114924150_75x75?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1&region=us",
        "width": 75,
        "height": 75
      },
      {
        "url": "https://i.vimeocdn.com/portrait/114924150_100x100?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1&region=us",
        "width": 100,
        "height": 100
      },
      {
        "url": "https://i.vimeocdn.com/portrait/114924150_144x144?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1&region=us",
        "width": 144,
        "height": 144
      },
      {
        "url": "https://i.vimeocdn.com/portrait/114924150_216x216?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1&region=us",
        "width": 216,
        "height": 216
      },
      {
        "url": "https://i.vimeocdn.com/portrait/114924150_288x288?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1&region=us",
        "width": 288,
        "height": 288
      },
      {
        "url": "https://i.vimeocdn.com/portrait/114924150_300x300?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1&region=us",
        "width": 300,
        "height": 300
      },
      {
        "url": "https://i.vimeocdn.com/portrait/114924150_360x360?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1&region=us",
        "width": 360,
        "height": 360
      }
    ],
    "websites": [],
    "skills": [],
    "availableForHire": false,
    "canWorkRemotely": false,
    "followerCount": 36,
    "followingCount": 0,
    "videoCount": 3
  },
  "contentRatings": [
    "language"
  ],
  "hasAudio": true,
  "releasedAt": "2026-10-19T08:15:05+00:00",
  "modifiedAt": "2026-10-30T02:52:20+00:00",
  "embed": {
    "url": "https://player.vimeo.com/video/1237176348?context=Vimeo%5CController%5CApi%5CResources%5CChannel%5CVideosController.&h=ca22258f23&s=83ccc0249bc6967df3036f5f7af906956996f42a_1793430786",
    "html": "<iframe src=\"https://player.vimeo.com/video/1237176348?title=0&amp;byline=0&amp;portrait=0&amp;badge=0&amp;autopause=0&amp;player_id=0&amp;app_id=58479\" width=\"1920\" height=\"1080\" frameborder=\"0\" allow=\"autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" title=\"Pipes\"></iframe>"
  },
  "durationSeconds": 242,
  "description": "Bob the plumber is hired to fix a broken pipe and lands to his surprise in a gay fetish club.\n\nDirection: Kilian Feusi, Jessica Meier, Sujanth Ravichandran\nProduction: Hochschule Luzern – Design Film Kunst, BA Animation\nAdditional 2D Animation: Julia Krummenacher, Ezeani Lelani, Gastl Olivia, Böhme Sarai, Kristlbauer Sven, Tamara Milosevic\nAdditional Compositing: Marco Jörger\nMusic: Esteban Marena, Emanuel Meshvinski, ZHdK film music department - André Bellmont\nCast: Tom von Arx, Dave Striegel\nSound Design: Noah Lüthi,  Markley Cahn von Seelen\nSound Mix: Jeroen Visser\nMentoring: Jochen Ehmann\nDistribution: SND Films\n\nFor more information about the production of this short film and previous screenings and awards visit this page.",
  "tags": [],
  "thumbnails": [
    {
      "url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_100x75?&r=pad&region=us",
      "width": 100,
      "height": 75
    },
    {
      "url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_200x150?&r=pad&region=us",
      "width": 200,
      "height": 150
    },
    {
      "url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_295x166?&r=pad&region=us",
      "width": 295,
      "height": 166
    },
    {
      "url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_640x360?&r=pad&region=us",
      "width": 640,
      "height": 360
    },
    {
      "url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_960x540?&r=pad&region=us",
      "width": 960,
      "height": 540
    },
    {
      "url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_1280x720?&r=pad&region=us",
      "width": 1280,
      "height": 720
    },
    {
      "url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_1920x1080?&r=pad&region=us",
      "width": 1920,
      "height": 1080
    }
  ],
  "uploadedAt": "2026-10-19T08:15:05+00:00",
  "privacy": "anybody",
  "viewCount": 24878,
  "likeCount": 56,
  "commentCount": 3,
  "captionLanguages": [
    "de-x-autogen"
  ],
  "captions": [
    {
      "language": "de-x-autogen",
      "name": "Deutsch (automatisch generiert)",
      "origin": "generated",
      "transcript": "Hold!",
      "segments": [
        {
          "startSeconds": 45.18,
          "endSeconds": 45.48,
          "text": "Hold!"
        }
      ],
      "vttDownloadUrl": "https://captions.vimeo.com/captions/333129797.vtt?expires=1793333586&sig=d5bfc80d9770415aa5328be11057cb837fed77a1",
      "srtDownloadUrl": "https://api.apify.com/v2/key-value-stores/aRE3QFpkrO9DBbSVD/records/captions-1237176348-de-x-autogen.srt?signature=rL48uo61L6QTxHTbHsNQ"
    }
  ],
  "renditions": [
    {
      "downloadUrl": "https://player.vimeo.com/progressive_redirect/download/1237176348/container/79074d98-55c5-417c-a78f-7fbb70a7ce2c/b7cbe870-75045d8c/pipes%20%281080p%29.mp4?expires=1793416462&loc=external&signature=b483d72cd32a8e01be48ff55b797523fc2cd6957a687d31da20b8370a20f6c26",
      "quality": "1080p",
      "width": 1920,
      "height": 1080,
      "format": "mp4",
      "sizeBytes": 93371763,
      "frameRate": 24,
      "createdAt": "2026-10-19T08:29:59+00:00",
      "expiresAt": "2026-10-31T03:14:22+00:00"
    },
    {
      "downloadUrl": "https://player.vimeo.com/progressive_redirect/download/1237176348/container/79074d98-55c5-417c-a78f-7fbb70a7ce2c/2794ebec-75045d8c/pipes%20%28720p%29.mp4?expires=1793416462&loc=external&signature=1781044d6c340bc4135f1d7d7cc0cbe26700bf24f9d3dbf9d44906817c0d5b74",
      "quality": "720p",
      "width": 1280,
      "height": 720,
      "format": "mp4",
      "sizeBytes": 53959728,
      "frameRate": 24,
      "createdAt": "2026-10-19T08:16:50+00:00",
      "expiresAt": "2026-10-31T03:14:22+00:00"
    },
    {
      "downloadUrl": "https://player.vimeo.com/progressive_redirect/download/1237176348/container/79074d98-55c5-417c-a78f-7fbb70a7ce2c/c13e46d8-75045d8c/pipes%20%28540p%29.mp4?expires=1793416462&loc=external&signature=b2b6adfaa9702873463b582a2c620b841ea75e1dfa46d5b56e1df57c029d2530",
      "quality": "540p",
      "width": 960,
      "height": 540,
      "format": "mp4",
      "sizeBytes": 32438103,
      "frameRate": 24,
      "createdAt": "2026-10-19T08:16:49+00:00",
      "expiresAt": "2026-10-31T03:14:22+00:00"
    },
    {
      "downloadUrl": "https://player.vimeo.com/progressive_redirect/download/1237176348/container/79074d98-55c5-417c-a78f-7fbb70a7ce2c/ad2538ea-75045d8c/pipes%20%28360p%29.mp4?expires=1793416462&loc=external&signature=2852a29680c4069b874d6af1aa3e20ad5e2401fb3a529f3e370de012886bee1b",
      "quality": "360p",
      "width": 640,
      "height": 360,
      "format": "mp4",
      "sizeBytes": 20482564,
      "frameRate": 24,
      "createdAt": "2026-10-19T08:16:47+00:00",
      "expiresAt": "2026-10-31T03:14:22+00:00"
    },
    {
      "downloadUrl": "https://player.vimeo.com/progressive_redirect/download/1237176348/container/79074d98-55c5-417c-a78f-7fbb70a7ce2c/b9a5e691-75045d8c/pipes%20%28240p%29.mp4?expires=1793416462&loc=external&signature=08e042c9b7dd7ee43429d8df39c02e0398e774543e08ef3aa9afeed298475c7d",
      "quality": "240p",
      "width": 426,
      "height": 240,
      "format": "mp4",
      "sizeBytes": 12916922,
      "frameRate": 24,
      "createdAt": "2026-10-19T08:16:45+00:00",
      "expiresAt": "2026-10-31T03:14:22+00:00"
    }
  ]
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. You pay for one **Video** event each time a video row is saved to your dataset. The price is $0.00045 per video, which is $0.45 for 1,000 videos.

There is no charge for a video that could not be read, a page with no Vimeo videos, or a collection with no videos. Usual Apify platform usage for the run is billed by Apify as normal. If you set a maximum cost for the run, the Actor stops when it reaches that limit.

#### 🔌 Integrations

You can connect this Actor to other tools with the Apify platform. Send results to Google Sheets, Make, Zapier, Slack, or your own app with webhooks and the Apify API. You can also run it on a schedule to check channels or showcases for new videos.

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

#### ❓ FAQ

##### Can I scrape private or password-protected Vimeo videos?

No. The Actor reads public videos only. Unlisted videos work when you give the full link with its hash, such as `https://vimeo.com/123456789/abcdef1234`. It does not log in to Vimeo.

##### Why does a video have no download links?

Some owners turn off downloads for their videos. Then the video row is still saved, but `renditions` is empty. This also happens when your exact **Download quality** label is not one of that video's qualities.

##### How long do the download links work?

Vimeo download links stop working after some time. When Vimeo gives the date, it is in `renditions[].expiresAt`. Download the files soon after the run, or run the Actor again to get fresh links.

##### Does the Actor save the video files for me?

No. It gives you a direct download link for each file. You can open the link or pass it to your own download tool.

##### Can I get captions in a language the video does not have?

No. The Actor reads only caption tracks that already exist on Vimeo. It does not make or translate captions. Check `captionLanguages` to see which codes each video has.

##### Are auto-generated captions included?

Yes, when Vimeo has them. `captions[].origin` tells you if the captions were added by the uploader or generated. Generated tracks often have codes such as `en-x-autogen`.

##### Which Vimeo videos are found on a web page?

The Actor opens the page and reads Vimeo video links and embedded Vimeo players. It also checks frames on the page. It can miss players that only show up after a click or a scroll, and links that are only inside page scripts.

##### What happens if the same video shows up twice?

Each video is saved only once per run, even if it appears in more than one input.

##### Do I need a Vimeo API key?

No. You do not need a Vimeo account, login, or API key.

##### How is this different from the official Vimeo API?

The Vimeo API needs an app and a token, and you have to handle paging yourself. This Actor takes plain links or IDs, reads whole channels, showcases, and groups, and saves the results in an Apify dataset that you can export or send to other tools.

### 📝 Changelog

**v0.0** (30-10-2026)

- Initial release.

### 🆘 Support

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

### 🔗 Related Actors

- [Vimeo Video Downloader](https://apify.com/maximedupre/vimeo-video-downloader): download Vimeo videos when you only need the video files.
- [Dailymotion Video Downloader & Scraper](https://apify.com/maximedupre/dailymotion-scraper): get the same kind of video data and download links from Dailymotion.
- [Loom Video Downloader](https://apify.com/maximedupre/loom-video-downloader): download shared Loom videos for your archive.
- [Streamable Video Downloader](https://apify.com/maximedupre/streamable-video-downloader): get video files from Streamable links.
- [YouTube Transcript API](https://apify.com/maximedupre/youtube-transcript-api): get transcripts of YouTube videos for research or AI tools.

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

# Actor input Schema

## `maxItems` (type: `integer`):

Stop after this many video rows. Leave blank or use 0 to get all available videos. This limit applies to every way of finding videos.

## `discoveryMethod` (type: `string`):

Choose Vimeo URLs or IDs, or pages that link to Vimeo videos.

## `vimeoInputs` (type: `array`):

Enter one full public Vimeo URL or video ID per entry. You can mix video URLs, numeric video IDs, and channel, showcase, or group URLs. A video ID is the number in its Vimeo URL. Collection URLs get the videos in that collection. Used only when Vimeo URLs or IDs is selected.

## `pageUrls` (type: `array`):

Enter full URLs of public pages that link to or embed Vimeo videos. Get the Vimeo videos linked or embedded on each submitted page. Used only when Page URLs is selected.

## `downloadQuality` (type: `string`):

Choose which video file comes first in renditions for each video. All files Vimeo makes public are still listed. Choose highest, medium, or lowest to pick from the qualities each video has. To choose a specific quality, first run with highest and check renditions\[].quality in each video row. Then enter an exact label from that video, such as 540p or 2160p. Labels can differ from the file height. If a video does not have that label, its row has no renditions. Downloads depend on what Vimeo makes public.

## `captionLanguage` (type: `string`):

Use auto to select an available caption track. To choose a track, first run with auto and check captionLanguages in each video row. Then enter an exact code from that video, such as en or en-x-autogen. A language name or base code may not match the track. Get existing text, timed segments, SRT, and VTT where available. No new captions or translations are made.

## Actor input object example

```json
{
  "maxItems": 5,
  "discoveryMethod": "vimeoInputs",
  "vimeoInputs": [
    "https://vimeo.com/channels/staffpicks"
  ],
  "downloadQuality": "highest",
  "captionLanguage": "auto"
}
```

# Actor output Schema

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

Open the saved Vimeo videos.

# 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 = {
    "maxItems": 5,
    "discoveryMethod": "vimeoInputs",
    "vimeoInputs": [
        "https://vimeo.com/channels/staffpicks"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/vimeo-scraper").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 = {
    "maxItems": 5,
    "discoveryMethod": "vimeoInputs",
    "vimeoInputs": ["https://vimeo.com/channels/staffpicks"],
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/vimeo-scraper").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 '{
  "maxItems": 5,
  "discoveryMethod": "vimeoInputs",
  "vimeoInputs": [
    "https://vimeo.com/channels/staffpicks"
  ]
}' |
apify call maximedupre/vimeo-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/vimeo-scraper"
        }
    }
}
```

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/vcfDyOV7j4hWEQCAk/builds/90Mcr84OAJSgf40py/openapi.json
