# Vimeo Channel, Creator & Video Metadata Extractor (`xyrelith-data/vimeo-channel-creator-and-video-metadata-extractor`) Actor

Get Vimeo video metadata from channels, creator uploads, specific video URLs, or Staff Picks, with views, likes, comments, duration, and uploader details.

- **URL**: https://apify.com/xyrelith-data/vimeo-channel-creator-and-video-metadata-extractor.md
- **Developed by:** [Xyrelith Data](https://apify.com/xyrelith-data) (community)
- **Categories:** Videos, Social media, Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Vimeo Channel, Creator & Video Metadata Extractor

Scrape **Vimeo** — public videos, creators, channels, comments and likers. Search by keyword with filters and sort orders, browse categories, tags and showcases, pull a channel or creator's uploads, or look up specific videos by any public URL. No account, API key or proxy setup is needed.

### What this actor does

- **Twelve modes:** `byChannel`, `byUser`, `videoDetails`, `staffPicks`, `search`, `searchCreators`, `searchChannels`, `category`, `tag`, `showcase`, `videoComments` and `videoLikes`
- **Search that narrows:** duration, 4K, price, Creative Commons license, upload date, Staff Picks, HDR, 360/spatial, live status and category, plus relevance, date, views, likes, comments, duration and alphabetical sorts
- **Rich video metadata:** views, likes, comments, tags, language, license, content rating, playability, download permission and Staff Pick / HDR / live / VOD badges
- **Creator and channel profiles:** bios, links, locations, avatars, logos, headers, follower/video counts, tags and categories, emitted before their videos when enabled
- **Conversations:** comments with authors, dates and reply totals; likers with profile links and join dates
- **Empty fields are omitted** — a video with no tags simply has no `tags` field, and zero counts are kept as real data

### Output per video

- `videoId` — numeric Vimeo video ID
- `title`, `description` — title and plain-text description
- `url`, `embedUrl` — canonical video page and player embed URL
- `thumbnailUrl` — largest available thumbnail
- `uploaderId`, `uploaderName`, `uploaderUrl`, `uploaderAvatarUrl` — uploader identity
- `publishedAt` — upload time in ISO 8601
- `releasedAt`, `updatedAt` — release and last-modified times in ISO 8601
- `duration` — length in seconds
- `width`, `height`, `isHD` — resolution and whether it is 720p or higher
- `viewCount` — public play count (omitted when the owner hides it)
- `likeCount`, `commentCount` — engagement counts, including genuine zeros
- `tags[]` — tag names, when the uploader set them
- `language` — language code, when Vimeo reports one
- `license` — Creative Commons license code, when set
- `contentRating` — Vimeo content rating, e.g. `safe`, `unrated`
- `privacy` — `public` or `unlisted`
- `isEmbeddable`, `downloadAllowed`, `isPlayable`, `hasAudio`
- `isStaffPick`, `isHdr`, `isLive`, `isVod` — Vimeo badges
- `channelName`, `channelTotalVideos`, `channelTotalSubscribers` — channel context
- `channelId`, `channelSlug`, `channelUrl`, `channelDescription`, `channelCreatedAt`, `channelFollowers`, `channelCreatorName`, `channelCreatorUrl` — fuller channel context
- `sourceUrl` — the page used to discover the video
- `recordType: "video"`, `scrapedAt`

### Output per creator

Emitted by `searchCreators`, or before a creator's videos with `includeCreatorProfile`.

- `creatorId`, `username`, `displayName`, `url`
- `bio`, `shortBio`, `location`, `createdAt`, `avatarUrl`
- `isVerified`, `accountType`
- `videoCount`, `followerCount`, `followingCount`, `likeCount`, `albumCount`
- `websites[]` — profile links
- `sourceUrl`, `recordType: "creator"`, `scrapedAt`

### Output per channel

Emitted by `searchChannels`, or before a channel's videos with `includeChannelProfile`.

- `channelId`, `slug`, `name`, `url`
- `description`, `createdAt`, `updatedAt`
- `logoUrl`, `headerUrl`
- `creatorId`, `creatorName`, `creatorUrl`
- `videoCount`, `followerCount`
- `tags[]`, `categories[]`, `privacy`
- `sourceUrl`, `recordType: "channel"`, `scrapedAt`

### Output per comment

Emitted by `videoComments`.

- `commentId`, `videoId`, `videoUrl`
- `text`
- `authorId`, `authorName`, `authorUrl`, `authorAvatarUrl`
- `publishedAt`
- `replyCount` — total replies, including zero
- `sourceUrl`, `recordType: "comment"`, `scrapedAt`

### Output per liker

Emitted by `videoLikes`.

- `videoId`, `videoUrl`
- `userId`, `userName`, `userUrl`, `userAvatarUrl`
- `userLocation`, `userCreatedAt`
- `sourceUrl`, `recordType: "like"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `byChannel` | `byChannel`, `byUser`, `videoDetails`, `staffPicks`, `search`, `searchCreators`, `searchChannels`, `category`, `tag`, `showcase`, `videoComments`, `videoLikes` |
| `channelSlugs` | array | `["staffpicks"]` | Channel slugs or URLs (mode=`byChannel`) |
| `usernames` | array | – | Creator usernames, numeric IDs, `user123` IDs or profile URLs (mode=`byUser`) |
| `videoUrls` | array | – | Vimeo video URLs or numeric IDs (mode=`videoDetails`, `videoComments`, `videoLikes`) |
| `searchQueries` | array | – | Keywords (mode=`search`, `searchCreators`, `searchChannels`) |
| `categorySlugs` | array | – | Category slugs such as `documentary`, `animation`, `music`, `2d`, `vfx`, `food` (mode=`category`) |
| `tagSlugs` | array | – | Tags with or without `#`, e.g. `nature`, `timelapse` (mode=`tag`) |
| `showcaseUrls` | array | – | Showcase or album URLs, or numeric showcase IDs (mode=`showcase`) |
| `maxItems` | integer | `20` | Records per source (1–10,000) |
| `sort` | string | `default` | `default`, `relevance`, `newest`, `oldest`, `mostViewed`, `mostLiked`, `mostCommented`, `longest`, `shortest`, `titleAZ`, `titleZA` |
| `filterCategory` | string | `any` | Search only: any search-supported category |
| `filterDuration` | string | `any` | Search only: `short`, `medium`, `long` |
| `filterResolution` | string | `any` | Search only: `4k` |
| `filterPrice` | string | `any` | Search only: `free`, `paid` |
| `filterLicense` | string | `any` | Search only: `cc0`, `cc-by`, `cc-by-sa`, `cc-by-nd`, `cc-by-nc`, `cc-by-nc-sa`, `cc-by-nc-nd` |
| `filterUploaded` | string | `any` | Search only: `this-week`, `this-month`, `this-year` |
| `filterStaffPicked` | boolean | `false` | Search only: Staff Picks only |
| `filterHdr` | string | `any` | Search only: `anyHdr`, `dolbyVision`, `hdr10` |
| `filterVimeo360` | string | `any` | Search only: `spatial`, `360` |
| `filterLive` | boolean | `false` | Search only: currently live videos |
| `includeCreatorProfile` | boolean | `false` | Emit one creator record before their videos (mode=`byUser`) |
| `includeChannelProfile` | boolean | `false` | Emit one channel record before its videos (mode=`byChannel`, `staffPicks`) |

#### Example: search with filters

```json
{
  "mode": "search",
  "searchQueries": ["documentary", "short film"],
  "filterDuration": "short",
  "filterStaffPicked": true,
  "filterUploaded": "this-year",
  "sort": "mostViewed",
  "maxItems": 100
}
```

#### Example: a channel with its profile

```json
{
  "mode": "byChannel",
  "channelSlugs": ["staffpicks", "https://vimeo.com/channels/animation/videos"],
  "includeChannelProfile": true,
  "sort": "newest",
  "maxItems": 50
}
```

#### Example: creator search and profile rows

```json
{
  "mode": "searchCreators",
  "searchQueries": ["film", "animation studio"],
  "maxItems": 30
}
```

#### Example: comments and likers for specific videos

```json
{
  "mode": "videoComments",
  "videoUrls": ["https://vimeo.com/22439234", "https://vimeo.com/showcase/6262886/video/1127880772"],
  "maxItems": 200
}
```

### Use cases

- **Content curation** — monitor Staff Picks, channels and categories for new films worth featuring
- **Creator research** — compare a creator's upload history, follower counts and engagement
- **Brand and agency monitoring** — find brand films by keyword, category, license or upload date
- **Audience analysis** — export commenters and likers for community and influencer research
- **Metadata archiving** — keep a structured catalog of titles, tags, licenses, dates and badges
- **Embed sourcing** — collect player URLs and thumbnails for a curated video collection

### FAQ

**Do I need a Vimeo account, API key or proxy?**
No. Everything comes from public Vimeo pages and public video data. Fill in the input and run it.

**Can I use any Vimeo URL in `videoUrls`?**
Yes. Plain video URLs, player URLs, channel paths, vanity URLs, showcase links, unlisted hash links and plain numeric IDs all resolve to the same video.

**Why is `viewCount` missing on some videos?**
Some owners hide their play count. Vimeo does not expose it publicly, so the field is omitted rather than reported as zero. Likes and comments still come through, including genuine zeros.

**Why do some videos have no `tags` or `language`?**
Those fields are optional on Vimeo. If the uploader did not set tags or Vimeo did not detect a language, the field is omitted. Older videos are more likely to have tags.

**How many results can one run return?**
`maxItems` supports up to 10,000 records per source. Vimeo itself caps keyword search and tag listings at 10,000 results; split a broad query into narrower filters to cover more.

**Why are some comments missing?**
Vimeo hides comments it classifies as spam or that the owner has filtered. The actor returns the publicly visible comment set.

**What is the difference between `byChannel` and `staffPicks`?**
`staffPicks` is a shortcut for Vimeo's curated Staff Picks channel. `byChannel` accepts that slug too, plus any other public channel.

**Can I scrape several creators, channels or queries in one run?**
Yes. Add multiple values to the matching list field; `maxItems` applies to each source, and duplicate videos are removed across sources.

**Does `maxItems` apply to creator and channel searches?**
Yes, it caps each query's creator or channel results. Profile rows added by `includeCreatorProfile` or `includeChannelProfile` are extra context records, not part of the video count.

**Is this affiliated with Vimeo?**
No. This is an independent, third-party actor that reads publicly available Vimeo data and is not operated by or affiliated with Vimeo.

# Actor input Schema

## `mode` (type: `string`):

What to scrape from Vimeo. Each mode uses the matching list field below.

## `channelSlugs` (type: `array`):

Channels to scrape in byChannel mode. Paste a slug (staffpicks) or a channel URL. maxItems applies to each channel.

## `usernames` (type: `array`):

Creators to scrape in byUser mode. Paste a username, numeric user ID, user123 ID, or profile URL.

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

Videos for videoDetails, videoComments or videoLikes. Any public Vimeo URL form works (video, player, vanity, showcase, unlisted hash) or a numeric ID.

## `searchQueries` (type: `array`):

Keywords for search, searchCreators and searchChannels. Each query produces up to maxItems results.

## `categorySlugs` (type: `array`):

Categories for category mode, e.g. documentary, animation, music, travel, 2d, vfx, food. Unknown slugs are skipped.

## `tagSlugs` (type: `array`):

Tags for tag mode. Enter them with or without '#', e.g. nature, timelapse, shortfilm.

## `showcaseUrls` (type: `array`):

Showcases (albums) for showcase mode. Paste a showcase URL, album URL or numeric showcase ID.

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

Maximum records to return per source (channel, creator, query, category, tag, showcase or video). Search and tag results are capped by Vimeo at 10,000.

## `sort` (type: `string`):

Result order. Unsupported combinations fall back to Vimeo's default order and appear in the run status.

## `filterCategory` (type: `string`):

Only used in search mode. Restricts keyword results to one category.

## `filterDuration` (type: `string`):

Only used in search mode. Short is under 3 minutes, medium is 3-10 minutes, long is over 10 minutes.

## `filterResolution` (type: `string`):

Only used in search mode. Restricts results to 4K and above.

## `filterPrice` (type: `string`):

Only used in search mode. Free or paid (Vimeo On Demand) videos.

## `filterLicense` (type: `string`):

Only used in search mode. Restricts results to a Creative Commons license.

## `filterUploaded` (type: `string`):

Only used in search mode. Restricts results to videos uploaded this week, this month or this year.

## `filterStaffPicked` (type: `boolean`):

Only used in search mode. Return only videos that Vimeo staff picked.

## `filterHdr` (type: `string`):

Only used in search mode. Restricts results to any HDR format, Dolby Vision or HDR10.

## `filterVimeo360` (type: `string`):

Only used in search mode. Restricts results to spatial or 360-degree videos.

## `filterLive` (type: `boolean`):

Only used in search mode. Return only currently live videos.

## `includeCreatorProfile` (type: `boolean`):

In byUser mode, emit one creator record (bio, links, followers, counts) before that creator's videos.

## `includeChannelProfile` (type: `boolean`):

In byChannel and staffPicks modes, emit one channel record (description, logo, header, tags, counts) before that channel's videos.

## Actor input object example

```json
{
  "mode": "byChannel",
  "channelSlugs": [
    "staffpicks"
  ],
  "usernames": [],
  "videoUrls": [],
  "searchQueries": [],
  "categorySlugs": [],
  "tagSlugs": [],
  "showcaseUrls": [],
  "maxItems": 20,
  "sort": "default",
  "filterCategory": "any",
  "filterDuration": "any",
  "filterResolution": "any",
  "filterPrice": "any",
  "filterLicense": "any",
  "filterUploaded": "any",
  "filterStaffPicked": false,
  "filterHdr": "any",
  "filterVimeo360": "any",
  "filterLive": false,
  "includeCreatorProfile": false,
  "includeChannelProfile": false
}
```

# Actor output Schema

## `records` (type: `string`):

Dataset containing video, creator, channel, comment and like records.

# 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 = {
    "mode": "byChannel",
    "channelSlugs": [
        "staffpicks"
    ],
    "usernames": [],
    "videoUrls": [],
    "searchQueries": [],
    "categorySlugs": [],
    "tagSlugs": [],
    "showcaseUrls": [],
    "maxItems": 20,
    "sort": "default",
    "filterCategory": "any",
    "filterDuration": "any",
    "filterResolution": "any",
    "filterPrice": "any",
    "filterLicense": "any",
    "filterUploaded": "any",
    "filterStaffPicked": false,
    "filterHdr": "any",
    "filterVimeo360": "any",
    "filterLive": false,
    "includeCreatorProfile": false,
    "includeChannelProfile": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("xyrelith-data/vimeo-channel-creator-and-video-metadata-extractor").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 = {
    "mode": "byChannel",
    "channelSlugs": ["staffpicks"],
    "usernames": [],
    "videoUrls": [],
    "searchQueries": [],
    "categorySlugs": [],
    "tagSlugs": [],
    "showcaseUrls": [],
    "maxItems": 20,
    "sort": "default",
    "filterCategory": "any",
    "filterDuration": "any",
    "filterResolution": "any",
    "filterPrice": "any",
    "filterLicense": "any",
    "filterUploaded": "any",
    "filterStaffPicked": False,
    "filterHdr": "any",
    "filterVimeo360": "any",
    "filterLive": False,
    "includeCreatorProfile": False,
    "includeChannelProfile": False,
}

# Run the Actor and wait for it to finish
run = client.actor("xyrelith-data/vimeo-channel-creator-and-video-metadata-extractor").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 '{
  "mode": "byChannel",
  "channelSlugs": [
    "staffpicks"
  ],
  "usernames": [],
  "videoUrls": [],
  "searchQueries": [],
  "categorySlugs": [],
  "tagSlugs": [],
  "showcaseUrls": [],
  "maxItems": 20,
  "sort": "default",
  "filterCategory": "any",
  "filterDuration": "any",
  "filterResolution": "any",
  "filterPrice": "any",
  "filterLicense": "any",
  "filterUploaded": "any",
  "filterStaffPicked": false,
  "filterHdr": "any",
  "filterVimeo360": "any",
  "filterLive": false,
  "includeCreatorProfile": false,
  "includeChannelProfile": false
}' |
apify call xyrelith-data/vimeo-channel-creator-and-video-metadata-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,xyrelith-data/vimeo-channel-creator-and-video-metadata-extractor"
        }
    }
}
```

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/0MfeySD0gdL0g8yWT/builds/CvVs0Gux7gi2jJKSK/openapi.json
