Vimeo Video Downloader avatar

Vimeo Video Downloader

Pricing

from $2.70 / 1,000 video reads

Go to Apify Store
Vimeo Video Downloader

Vimeo Video Downloader

Download public and unlisted Vimeo videos by URL or ID: save full-resolution MP4 files, plus HLS/DASH stream links, direct MP4 links when offered and full metadata. Works with Apify MCP and the API.

Pricing

from $2.70 / 1,000 video reads

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

33

Total users

10

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

What is Vimeo Video Downloader?

Vimeo Video Downloader turns Vimeo video links, IDs, channel pages, group pages or user pages into one row per video: title, description, owner, duration, resolution, upload date, thumbnail, caption tracks and the stream links Vimeo offers. Turn on saveVideosToStore and videos that Vimeo serves without copy protection are saved as MP4 files in the run's storage. Video editors, archivists, marketers, researchers and AI agents use it to collect Vimeo videos in bulk, with no Vimeo account.

Why teams use it to collect Vimeo videos

  • Honest about protected videos. Many Vimeo videos are copy-protected (DRM) and play only inside Vimeo's own player. Those rows say downloadable: false, return no fake link, and still include the details and caption tracks. You are never charged for a protected video that has nothing to deliver.
  • Captions in every row. captionTracks lists each language with a ready WebVTT link, and includeCaptionText adds the plain text for transcripts and AI use.
  • Channel, group and user pages. Paste a page such as https://vimeo.com/channels/staffpicks and the newest videos on it are read, 12 per page.
  • Fast and light. Videos run in parallel, and the run size follows your list size, so a 3-video job is cheap and a 500-video job is not slowed down.
  • Pay per video. One charge per video delivered with a playable link, a saved file or captions. Private, removed and restricted videos come back with a reason and are free.

How to use it

Links and captions for a list of videos:

{
"videoUrls": [
"https://vimeo.com/22439234",
"https://player.vimeo.com/video/336812686"
],
"includeCaptionText": true
}

The newest videos of a channel:

{
"channelUrls": ["https://vimeo.com/channels/staffpicks"],
"maxVideos": 24
}

Save the video as an MP4 file (only videos without copy protection can be saved, and files are limited in size):

{
"videoUrls": ["https://vimeo.com/22439234"],
"saveVideosToStore": true
}
InputWhat it controls
videoUrlsVimeo links or numeric IDs; unlisted links keep their hash, such as https://vimeo.com/123456/abc123
channelUrlsChannel, group or user pages; the newest videos on each are read. Showcases are not supported
maxVideosVideos to process per run, after removing duplicates (default 50; free Apify plan: 10)
saveVideosToStoreSave each video as an MP4 file in the run's key-value store (default off)
includeCaptionTextAdd the plain text of every caption track (default off)
proxyConfigurationApify Proxy settings for reading Vimeo's player data

Output: Vimeo video data you receive

A real row for a downloadable video with captions (long values shortened):

{
"id": "1070499175",
"title": "National Theatre: Expanding the stage globally with Vimeo",
"description": "Pre-pandemic, National Theatre didn't have streaming on its digital roadmap. Dis...",
"url": "https://vimeo.com/1070499175",
"duration": 79,
"fps": 25,
"width": 3840,
"height": 2160,
"uploadDate": "2025-03-28T18:57:00Z",
"ownerName": "Vimeo",
"ownerUrl": "https://vimeo.com/staff",
"thumbnailUrl": "https://i.vimeocdn.com/video/2042226952-aff13a0faf4e30a73c20725bfa25bd13...",
"downloadable": true,
"downloadUrl": "https://vod-adaptive-ak.vimeocdn.com/exp=1794522541~acl=%2F236ec1a2-5d1a...",
"bestQuality": "hls",
"hlsMasterUrl": "https://vod-adaptive-ak.vimeocdn.com/exp=1794522541~acl=%2F236ec1a2-5d1a...",
"dashMasterUrl": "https://vod-adaptive-ak.vimeocdn.com/exp=1794522541~acl=%2F236ec1a2-5d1a...",
"drmProtected": false,
"captionTracks": [
{ "language": "en", "label": "English", "kind": "captions", "url": "https://captions.vimeo.com/captions/252891146.vtt?expires=17...", "text": "This partnership with Vimeo has really helped us b..." }
],
"captionLanguages": ["en", "de", "es", "fr", "ja", "ko", "pt"],
"success": true
}

A copy-protected video looks the same, with "downloadable": false, "drmProtected": true, "downloadUrl": null and its captionTracks.

FieldWhat it contains
id, url, title, descriptionThe video and its text
duration, width, height, fpsLength in seconds, resolution and frame rate
uploadDate, ownerName, ownerUrl, ownerAccountTypeWhen it was published and by whom
thumbnailUrl, unlisted, isPrivatePreview image and visibility
downloadable, drmProtecteddownloadable is true when a playable link is returned; drmProtected is true when Vimeo serves the video only to licensed players
downloadUrl, bestQualityThe best available stream: a direct MP4 or an HLS playlist (empty when protected)
progressiveStreams, hlsMasterUrl, dashMasterUrlDirect MP4 files by quality and adaptive playlists, when Vimeo offers them
captionTracks, captionLanguagesCaption tracks with language, label and WebVTT link (plus text when requested)
savedFileUrl, savedFileBytes, saveSkippedReasonLink and size of the saved MP4, or why a save was skipped (too_large, not_downloadable, no_hls, save_failed)
sourcePageThe channel, group or user page the video came from
success, error, noteWhether the video was read, the reason when it was not, and a plain-words note

Stream links are signed by Vimeo and stay valid for a limited time, so download or save soon after the run. OUTPUT in the default key-value store reports the run outcome, counts, the memory used and an agentSummary sentence.

Example workflow: archiving a client's video library

A video agency moves a client's portfolio off Vimeo. They paste the client's 40 video links into videoUrls with includeCaptionText on. Each row's title, description, uploadDate and caption text go into the new site's records. Unprotected videos are saved as MP4 files with saveVideosToStore; rows with drmProtected true are listed for the client to export from their own Vimeo account, and those rows cost nothing if they carry no captions.

Pricing

Startup billing and empty runs

The apify-actor-start event costs $0.00005 per startup unit. Apify charges one startup unit per GB of allocated memory, with a minimum of one unit, so most runs here pay one unit. This startup charge still applies when input is invalid, no results are found, or an upstream request fails. Statements about free, unbilled, or skipped results refer only to the corresponding result event; they do not waive the startup charge. Apify platform usage is included in the event prices and is not passed through as an additional customer charge. Check the live Pricing tab for current events, tiers, and rates. Result limits cap result events, not the entire run cost.

This Actor uses Pay per event with Store discount tiers: the more you use Apify, the lower the price per video. You pay one event per video delivered with a playable link, a saved file or caption tracks, plus the start event per run. Videos returned with a reason instead of streams, and copy-protected videos with nothing to deliver, are free.

Example runVideos deliveredCost at the Bronze tier
Quick check5$0.016
Channel page24$0.077
Library batch100$0.32
  • maxVideos caps each run, so it doubles as a cost ceiling.
  • Saved files are limited to 10 MB per file today. Larger files (up to 100 MB) arrive with a separate small File saved event from the date shown in the live Pricing tab.

What's new

  • Copy-protected videos are now flagged downloadable: false instead of returning a link that cannot play, and are not charged unless captions are delivered.
  • Caption tracks (and optional caption text) in every row.
  • Channel, group and user pages in channelUrls.
  • Parallel reading, and run memory that follows the size of your job.
  • Lower prices with Store discount tiers.

Video research with AI agents (MCP)

Connect this Actor to an AI agent through Apify MCP and ask in plain language:

Get the title, length, upload date and caption languages for these three Vimeo videos, and tell me which ones I can actually download.

Agent checklist:

  1. Pass links or IDs in videoUrls, or a channel page in channelUrls.
  2. Set includeCaptionText: true when the user wants transcripts.
  3. Set saveVideosToStore: true only when the user wants files, and only small videos are saved.
  4. Read rows with get-dataset-items; check downloadable before sharing downloadUrl.
  5. Explain drmProtected or error rows in plain words, and read agentSummary in OUTPUT.

API example

curl -X POST "https://api.apify.com/v2/acts/khadinakbar~vimeo-video-downloader/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"videoUrls": ["https://vimeo.com/22439234"], "includeCaptionText": true}'
Your next stepUseWhy
When you download from many video sitesAll-in-One Media DownloaderVideos or audio from many supported sites
When you work with DailymotionDailymotion Video DownloaderDailymotion videos to MP4 with metadata
When you work with YouTubeYouTube Video DownloaderPermitted YouTube videos or audio to storage
When you then want captions or textYouTube Transcript ExtractorTranscripts for YouTube videos

Best results

Starting situationHelpful actionExpected outcome
You need captions or transcriptsTurn on includeCaptionTextPlain text per language, even for protected videos
You need the actual video fileTurn on saveVideosToStoreOne MP4 per unprotected video up to the size limit
Building a player or embedUse hlsMasterUrl or dashMasterUrlAdaptive streaming at every quality
Unlisted videosPaste the full link with its hashThe same access as the share link
A large list or channelSet maxVideos to the list size and run onceOne row per video, duplicates removed

Builder's note

I found that many Vimeo videos are now copy-protected: Vimeo hands out a playlist that only licensed players can open. A downloader that sells that link sells something that cannot work, so this Actor says downloadable: false plainly, keeps the details and captions that are still public, and charges only for what it delivers.

FAQ

Do I need a Vimeo account?

No. The Actor reads public and unlisted videos through their links and needs no login.

Can it download private or password-protected videos?

Videos that need a login or password come back with a reason in error and no video charge. Startup billing still applies. Unlisted videos work when you include the hash from the share link.

What does drmProtected mean?

Vimeo serves some videos only to licensed players. Those rows have downloadable: false and no stream link, because such a link would not play outside Vimeo. Details and caption tracks are still returned, and you pay only if captions are delivered.

Why was my video not saved as a file?

Only unprotected videos can be saved, and each file is limited in size. The row's saveSkippedReason says too_large, not_downloadable, no_hls or save_failed.

Which pages can I paste in channelUrls?

Vimeo channels, groups and user video pages. The newest videos are read, 12 per page, up to maxVideos. Showcases and search pages are not supported.

Vimeo signs stream links for a limited time. Saved MP4 files stay in the run's storage according to your Apify data retention.

Why does a video sometimes come back with a reason and work on a later run?

Vimeo occasionally shows a security check to automated visitors. The row explains it, the video is free, and running it again usually works.

Responsible use

This Actor downloads videos that are publicly available on Vimeo or shared with you by link. Download only videos you own or have permission to use, respect creators' copyright and licenses, and follow Vimeo's terms. Read Apify's guide on whether web scraping is legal for more context. Vimeo is a trademark of Vimeo.com, Inc. This independent Actor is not affiliated with, associated with, or endorsed by Vimeo. For questions or bugs, open a ticket in the Issues tab.