Vimeo Video Downloader & Scraper avatar

Vimeo Video Downloader & Scraper

Pricing

$0.45 / 1,000 videos

Go to Apify Store
Vimeo Video Downloader & Scraper

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é

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

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

FieldTypeWhat it does
discoveryMethodstringRequired. 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.
vimeoInputsarray of stringsUsed 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.
pageUrlsarray of objectsUsed 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.
maxItemsintegerStop 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.
downloadQualitystringWhich 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.
captionLanguagestringWhich 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

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

🧾 Output

Output fields

FieldTypeWhat it does
videoIdstringVimeo video ID.
urlstringLink to the Vimeo video page.
titlestringVideo title.
descriptionstringVideo description.
tagsarray of stringsTags on the video.
durationSecondsnumberVideo length in seconds.
uploadedAtstringUpload date given by Vimeo.
releasedAtstringRelease time given by Vimeo.
modifiedAtstringLast change time given by Vimeo.
privacystringPrivacy setting, such as anybody or unlisted.
viewCountintegerView count.
likeCountintegerLike count.
commentCountintegerComment count.
licensestringLicense code published by Vimeo.
languagestringVideo language code. This is separate from caption languages.
contentRatingsarray of stringsContent rating labels.
hasAudiobooleanWhether Vimeo says the video has audio.
owner.namestringCreator name.
owner.urlstringLink to the creator on Vimeo.
owner.biographystringCreator bio.
owner.shortBiographystringShort creator bio.
owner.locationstringCreator location.
owner.createdAtstringWhen the creator profile was made.
owner.isVerifiedbooleanWhether Vimeo marks the creator as verified.
owner.accountTierstringCreator account tier.
owner.pictures[].urlstringLink to a profile picture.
owner.pictures[].widthintegerPicture width in pixels.
owner.pictures[].heightintegerPicture height in pixels.
owner.websites[].namestringName of a website on the creator profile.
owner.websites[].urlstringLink to that website.
owner.skillsarray of stringsSkills listed by the creator.
owner.availableForHirebooleanWhether the creator says they are available for hire.
owner.canWorkRemotelybooleanWhether the creator says they can work remotely.
owner.followerCountintegerCreator follower total.
owner.followingCountintegerHow many accounts the creator follows.
owner.videoCountintegerCreator video total.
thumbnails[].urlstringLink to a preview image.
thumbnails[].widthintegerImage width in pixels.
thumbnails[].heightintegerImage height in pixels.
renditions[].downloadUrlstringDirect link to download this video file.
renditions[].qualitystringQuality label, such as 1080p.
renditions[].widthintegerVideo width in pixels.
renditions[].heightintegerVideo height in pixels.
renditions[].formatstringFile format, such as mp4.
renditions[].sizeBytesintegerFile size in bytes.
renditions[].frameRatenumberFrames per second.
renditions[].createdAtstringWhen Vimeo made this file.
renditions[].expiresAtstringWhen this download link stops working, if Vimeo gives that date.
captionLanguagesarray of stringsAll caption language codes on the video, including tracks that were not read.
captions[].languagestringLanguage code of the caption track that was read.
captions[].namestringTrack name given by Vimeo.
captions[].originstringWhether the captions were added by the uploader or generated.
captions[].transcriptstringPlain text of the captions.
captions[].segments[].startSecondsnumberStart time of a caption line.
captions[].segments[].endSecondsnumberEnd time of a caption line.
captions[].segments[].textstringText of a caption line.
captions[].srtDownloadUrlstringLink to the captions as an SRT file.
captions[].vttDownloadUrlstringLink to the captions as a VTT file.
embed.urlstringPlayer embed link.
embed.htmlstringPlayer 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&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.

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

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.

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 🫡

Made with ❤️ by Maxime Dupré