Vimeo Video Downloader & Scraper
Pricing
$0.45 / 1,000 videos
Vimeo Video Downloader & Scraper
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.
Pricing
$0.45 / 1,000 videos
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
🎬 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
- Open the Actor and pick how to find videos in Find videos from.
- 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.
- Set Maximum videos, or leave it blank to get all videos.
- Optional: pick a Download quality and a Caption language.
- Click Start. Each video shows up in the dataset as soon as it is saved.
- 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
5in 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[].qualityvalue of that video. Run once withhighestto see the labels. If a video does not have the label, its row has norenditions. - A caption code must match a value in
captionLanguagesof that video. Run once withautoto 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
{"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
{"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®ion=us","width": 30,"height": 30},{"url": "https://i.vimeocdn.com/portrait/114924150_72x72?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1®ion=us","width": 72,"height": 72},{"url": "https://i.vimeocdn.com/portrait/114924150_75x75?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1®ion=us","width": 75,"height": 75},{"url": "https://i.vimeocdn.com/portrait/114924150_100x100?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1®ion=us","width": 100,"height": 100},{"url": "https://i.vimeocdn.com/portrait/114924150_144x144?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1®ion=us","width": 144,"height": 144},{"url": "https://i.vimeocdn.com/portrait/114924150_216x216?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1®ion=us","width": 216,"height": 216},{"url": "https://i.vimeocdn.com/portrait/114924150_288x288?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1®ion=us","width": 288,"height": 288},{"url": "https://i.vimeocdn.com/portrait/114924150_300x300?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1®ion=us","width": 300,"height": 300},{"url": "https://i.vimeocdn.com/portrait/114924150_360x360?subrect=11%2C649%2C1064%2C1702&r=cover&sig=966a799e571718c558cb0bbdabe5db557043f9477b4e6482e5fef5ebabd49bf2&v=1®ion=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&byline=0&portrait=0&badge=0&autopause=0&player_id=0&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®ion=us","width": 100,"height": 75},{"url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_200x150?&r=pad®ion=us","width": 200,"height": 150},{"url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_295x166?&r=pad®ion=us","width": 295,"height": 166},{"url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_640x360?&r=pad®ion=us","width": 640,"height": 360},{"url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_960x540?&r=pad®ion=us","width": 960,"height": 540},{"url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_1280x720?&r=pad®ion=us","width": 1280,"height": 720},{"url": "https://i.vimeocdn.com/video/2216929615-37651044bfb21ed4573e9349bb0f3b466c516a6220617caa17e51aaaf8c93785-d_1920x1080?&r=pad®ion=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.
❓ 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 and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Vimeo Video Downloader: download Vimeo videos when you only need the video files.
- Dailymotion Video Downloader & Scraper: get the same kind of video data and download links from Dailymotion.
- Loom Video Downloader: download shared Loom videos for your archive.
- Streamable Video Downloader: get video files from Streamable links.
- YouTube Transcript API: get transcripts of YouTube videos for research or AI tools.
Made with ❤️ by Maxime Dupré