# Youku 优酷 Scraper - Video Search, Video & Channel Details (`clover_folktale/youku-scraper`) Actor

Collect Youku (优酷) data without an account: search videos by keyword, get any video's details (title, category, duration, publish time, likes, comments, uploader) and any uploader channel's public profile (followers, likes, IP location). No login or cookies. Export JSON, CSV or Excel.

- **URL**: https://apify.com/clover_folktale/youku-scraper.md
- **Developed by:** [Silkline](https://apify.com/clover_folktale) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

Youku Scraper reads public data from Youku (优酷), one of China's largest video platforms: it searches videos by keyword, returns the details of any video and the public channel profile of any uploader, as clean, flat JSON records. It is built for media researchers, content and MCN teams, marketers and developers who need Chinese video data without a Youku account. No Youku account, API keys, proxies or cookies are needed.

Pricing is pay-per-event: **$0.005 per video** found by search and **$0.025 per video or channel profile** looked up by ID, plus a $0.02 start fee per run. 100 search results cost about $0.52.

### What is Youku?

Youku (优酷) is a Chinese video platform. It hosts licensed series, films and documentaries as well as videos uploaded by creators (UGC). Every video has an ID, and every uploader has a channel with a user ID, followers and likes.

### What data can you get?

The Actor has three modes, chosen with `mode`:

- `search` (default) finds videos by keyword (`type` is `video`), about 28 per page.
- `video` returns the details of videos you name by ID or link (`type` is `videoDetail`).
- `profile` returns the public channel profile of uploaders you name by ID or link (`type` is `profile`).

#### Video fields (mode: search)

| Field | What it is |
|---|---|
| `videoId`, `url` | Video ID (use it as input of `video` mode) and the link to the video page |
| `title` | Video title (Chinese) |
| `coverUrl` | Cover image link |
| `durationSeconds` | Video length in seconds |
| `publishedText` | When the video was published as the search result shows it, for example 4天前 (4 days ago) |
| `danmakuCount` | Danmaku (on-screen comments) of the video |
| `showId` | ID of the series the video belongs to; empty for stand-alone uploads |
| `uploaderId`, `uploaderName`, `uploaderAvatar` | Uploader ID (use it as input of `profile` mode), name and avatar link |
| `searchKeyword` | The keyword that found the video |

#### Video detail fields (mode: video)

| Field | What it is |
|---|---|
| `videoId`, `url`, `title`, `coverUrl`, `durationSeconds` | As in search mode |
| `publishedAt` | Exact publish time, ISO 8601 UTC |
| `category`, `videoType` | Youku category (for example 纪录片) and kind of video (for example 正片, a full episode) |
| `likeCount`, `commentCount` | Likes and comments of the video |
| `showId`, `showName`, `episodeNumber`, `episodeTotal` | The series the video belongs to, its episode number and episode count |
| `genres`, `areas`, `releaseYear`, `description` | Genres, production regions, release year and synopsis of the series |
| `uploaderId`, `uploaderName`, `uploaderAvatar`, `uploaderVerification`, `uploaderFollowerCount` | The uploader's public card: ID, name, avatar, verification label and followers |

#### Profile fields (mode: profile)

| Field | What it is |
|---|---|
| `userId`, `numericUserId`, `name`, `avatar` | IDs, channel name and avatar link |
| `description` | The channel bio exactly as published |
| `verification` | Verification label, for example 机构认证 (organisation) or 大鱼号认证作者 |
| `followerCount`, `followingCount`, `likeCount` | Followers, accounts followed and total likes received |
| `genderCode` | Gender code as Youku shows it (1 or 2) |
| `ipLocation` | IP location shown on the channel page |

### How to use Youku Scraper

1. Open the Actor on Apify and click **Try for free** (or **Start**).
2. Choose a **Mode**: search videos (`search`), details of videos (`video`) or profiles of uploaders (`profile`).
3. For `search`, enter one or more words in **Keywords**. For `video`, enter video IDs or links such as `https://v.youku.com/v_show/id_XNjU1NTAzMDQ5Ng==.html` in **Videos**. For `profile`, enter uploader IDs (the `uploaderId` of search and video records) in **Uploaders**.
4. Set **Max results** to the total number of records you want for the run.
5. Click **Start**, then open the **Videos**, **Video details** or **Channel profiles** view of the dataset and export as JSON, CSV or Excel, or fetch it through the API.

The Actor also runs with an empty input: `{}` searches for 纪录片 (documentary), a quick way to see the output format.

A common workflow is to search a topic, then look up the `videoId` of interesting videos in `video` mode and their `uploaderId` in `profile` mode.

### Input

| Field | Type | Required | What it does | Default |
|---|---|---|---|---|
| `mode` | string | Optional | `search`, `video` or `profile` | prefilled with `search`; when left out, `video` if `videos` is given, `profile` if `users` is given, otherwise `search`. Giving more than one of the three lists without `mode` is an error. |
| `keywords` | array of strings | Optional | Used in `search` mode. Videos are collected keyword by keyword, page by page, until `maxResults` is reached. | Falls back to 纪录片 when empty |
| `videos` | array of strings | Needed for `video` mode | Video IDs or links containing `id_<ID>`. | none |
| `users` | array of strings | Needed for `profile` mode | Uploader IDs, or channel links such as `https://i.youku.com/i/<ID>` or links containing `uid=<ID>`. | none |
| `maxResults` | integer | Optional | Maximum number of records to return in total for this run, from 1 to 5000. The run stops as soon as it is reached. You are charged per record returned. | 20 |

#### Example: search videos

```json
{"mode": "search", "keywords": ["纪录片", "美食"], "maxResults": 100}
```

#### Example: details of videos

```json
{"mode": "video", "videos": ["XNjU1NTAzMDQ5Ng==", "https://v.youku.com/v_show/id_XNjU4MTk3NTI0OA==.html"]}
```

#### Example: profile of an uploader

```json
{"mode": "profile", "users": ["UMTU5MjkzNTE2NzI="]}
```

### Output example

```json
{
  "type": "video",
  "videoId": "XNjU1NTAzMDQ5Ng==",
  "url": "https://v.youku.com/v_show/id_XNjU1NTAzMDQ5Ng==.html",
  "title": "雨林巨物",
  "coverUrl": "https://vthumb.ykimg.com/054106016AD9EDEA1F0B3301A404C7FA",
  "durationSeconds": 2495,
  "publishedText": "前天",
  "danmakuCount": 0,
  "showId": "fcac9491c8614d6da993",
  "uploaderId": "UMTU5MjkzNTE2NzI=",
  "uploaderName": "示例频道",
  "uploaderAvatar": "https://m.ykimg.com/example-avatar",
  "searchKeyword": "纪录片"
}
```

```json
{
  "type": "videoDetail",
  "videoId": "XNjU1NTAzMDQ5Ng==",
  "url": "https://v.youku.com/v_show/id_XNjU1NTAzMDQ5Ng==.html",
  "title": "雨林巨物",
  "coverUrl": "https://m.ykimg.com/054101016A9E6EE7334D992488A9C6D1",
  "durationSeconds": 2495,
  "publishedAt": "2026-10-24T16:00:01Z",
  "category": "纪录片",
  "videoType": "正片",
  "likeCount": 0,
  "commentCount": 0,
  "showId": "fcac9491c8614d6da993",
  "showName": "追踪巨型鱼 第五季",
  "episodeNumber": 7,
  "episodeTotal": 8,
  "genres": ["探险", "自然"],
  "areas": ["加拿大"],
  "releaseYear": 2026,
  "description": "《追踪巨型鱼 第五季》跟随西里尔深入全球最偏远危险的水域……",
  "uploaderId": "UMTU5MjkzNTE2NzI=",
  "uploaderName": "示例频道",
  "uploaderAvatar": "https://m.ykimg.com/example-avatar",
  "uploaderVerification": "机构认证",
  "uploaderFollowerCount": 225
}
```

```json
{
  "type": "profile",
  "userId": "UMTU5MjkzNTE2NzI=",
  "numericUserId": "3982337918",
  "name": "示例频道",
  "avatar": "https://m.ykimg.com/example-avatar",
  "description": "做优质精品短视频",
  "verification": "机构认证",
  "followerCount": 225,
  "followingCount": 0,
  "likeCount": 392,
  "genderCode": 2,
  "ipLocation": "北京"
}
```

### How much does it cost?

The Actor uses pay-per-event pricing. These are the charge events:

| Event | Price (USD) | When it is charged |
|---|---|---|
| `run-start` | $0.02 | Once per run, charged when the first request to the data source succeeds, even if that request returns nothing. It is not charged when the data source fails from the start, or when your spending limit cannot cover it. Each further keyword, video or uploader the run actually reaches pays one more start fee. That fee is charged before its first request and is kept even if it then fails or returns nothing. A later keyword, video or uploader is only reached when the earlier ones did not fill `maxResults`. |
| `result` | $0.005 | For each video returned by `search` mode. |
| `detail` | $0.025 | For each video returned by `video` mode and for each channel profile returned by `profile` mode. |

Worked examples:

- 100 videos from one keyword cost $0.02 + 100 × $0.005 = **$0.52**. Two keywords that together fill 100 videos cost $0.04 + 100 × $0.005 = **$0.54**.
- 10 videos in `video` mode cost 10 × $0.02 (the run's start fee and one more for each further video) + 10 × $0.025 = **$0.45**.
- 5 channel profiles cost 5 × $0.02 + 5 × $0.025 = **$0.225**.

You never pay for more than `maxResults` records, and you are never charged for records that were not delivered. The run stops by itself if your spending limit is reached.

On the free Apify plan, every run returns a sample dataset: a real result of this Actor's prefilled input, captured on the date shown in the run status, so you can see exactly what the output looks like. Your own input is not used and nothing is charged. To run your own queries, use any paid Apify plan.

### Use cases

- **Content and trend research**: see which videos and uploaders appear for a topic on Youku, and how long they run.
- **Creator discovery**: find uploaders by the videos they publish, then read their follower count, likes and verification in `profile` mode.
- **Catalogue and series tracking**: follow the episodes, genres, regions and synopsis of series and documentaries.
- **Media monitoring**: check regularly which videos Youku returns for a brand, a title or a person.
- **AI and data projects**: collect Chinese video titles, categories and metadata for search, classification and recommendation models.

### Integrations and API

You can start runs from your own code through the Apify API, schedule them on the Apify platform (for example a weekly keyword check), and send results to other tools with Apify integrations and webhooks. Results are stored in a dataset you can download as JSON, CSV or Excel.

Python example using the `apify-client` package:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("clover_folktale/youku-scraper").call(run_input={
    "mode": "search",
    "keywords": ["纪录片"],
    "maxResults": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### Tips and limits

- **Reliability.** The Actor retries transient errors on its own and stops cleanly instead of failing half-way. It never charges for records it did not deliver.
- **Speed.** A search page holds about 28 videos, so large runs make many requests; expect roughly 2-5 seconds per page.
- **Run size.** `maxResults` is the total for the whole run (1 to 5000, default 20). With several keywords, IDs or uploaders, records are collected one after the other until the total is reached.
- **Search results.** Search mode returns video cards: ID, title, cover, length, relative publish time, danmaku count and uploader. Likes, comments and the exact publish time come with `video` mode. A page with fewer than 5 new videos (videos not already returned in this run), ends the listing.
- **No play counts.** Youku does not show a play count on these pages, so none is returned.
- **Series and stand-alone videos.** For an episode of a series, `description`, `genres`, `areas` and `releaseYear` describe the series. For a stand-alone upload they are empty.
- **Two forms of one uploader ID.** The search result and the video page can show different forms of the same uploader ID. `profile` mode accepts both, and returns the form Youku uses on the channel page in `userId`.
- **Channel profiles.** The bio is the text the channel published. A user ID Youku does not know is skipped as nothing found. The profile does not include a video count.
- **Video details.** One request per video. A video ID Youku does not know is asked a few times and then skipped as nothing found; no `detail` is charged for it; the start fee of a further ID is kept.
- **Free plan.** Every run on the free Apify plan returns a stored sample dataset (a real result of the prefilled input); your own input is not used and nothing is charged. Use any paid Apify plan to run your own queries.
- **Privacy.** Only public data is returned: what anyone sees on Youku video and channel pages. No private messages, no contact data beyond what a channel publishes in its bio.

### FAQ

#### Do I need a Youku account, cookies or an API key?

No. You only need an Apify account to run the Actor.

#### Is this the official Youku API?

No. This Actor is not affiliated with Youku. It is an independent tool that collects public data and returns it as structured JSON.

#### Is it legal to scrape Youku?

The Actor only returns public data that anyone can see on Youku. It does not return private messages or account data. You are responsible for how you use the data and for following the laws and rules that apply to you.

#### How fresh is the data?

The data is collected live during each run.

#### Where do I find a video ID or an uploader ID?

In the links and in search results: `https://v.youku.com/v_show/id_XNjU1NTAzMDQ5Ng==.html` is video `XNjU1NTAzMDQ5Ng==`. Search records carry `videoId` and `uploaderId`, ready to use as input.

#### Why are some fields empty?

Stand-alone uploads have no series, so `showName`, `genres` and the like are empty. Gender, IP location and a bio are shown only when the channel has them.

#### How many results can I get?

You can set `maxResults` up to 5000 per run. A keyword with fewer matches returns what exists.

#### Can I schedule runs and export the data?

Yes. You can schedule runs on Apify, start them through the API, and export the dataset as JSON, CSV or Excel.

#### Something is missing. How do I ask for it?

Missing a field or a mode? Open an issue from the Actor page and it will be looked at.

### More tools from the same developer

- [Bilibili B站 Scraper - Videos, Comments, Subtitles & User IDs](https://apify.com/clover_folktale/bilibili-scraper)
- [Douyin 抖音 Scraper - Videos, Comments, User IDs & IP Location](https://apify.com/clover_folktale/douyin-scraper)
- [Xiaohongshu 小红书 RedNote Scraper - Notes, Comments & User IP](https://apify.com/clover_folktale/xiaohongshu-scraper)
- [Douban 豆瓣 Scraper - Movies, Ratings, Comments & Reviews](https://apify.com/clover_folktale/douban-scraper)
- [YouTube Scraper - Shorts, Channel Videos & Video Search](https://apify.com/clover_folktale/youtube-scraper)

# Actor input Schema

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

Search videos by keyword (search), get the details of videos (video) or get the public channel profile of uploaders (profile). When left out (API calls), video is used if videos are given, profile if users are given, otherwise search.

## `keywords` (type: `array`):

Search words, Chinese works best. Videos are collected keyword by keyword, page by page (about 28 per page), until Max results is reached. Falls back to 纪录片 (documentary) when empty.

## `videos` (type: `array`):

Video IDs (the videoId field of search mode, for example XNjU1NTAzMDQ5Ng==) or video links such as https://v.youku.com/v_show/id_XNjU1NTAzMDQ5Ng==.html. Each video gives one record.

## `users` (type: `array`):

Uploader IDs (the uploaderId field of search and video records, for example UMTU5MjkzNTE2NzI=) or channel links such as https://i.youku.com/i/<ID> or containing uid=<ID>. Each uploader gives one record.

## `maxResults` (type: `integer`):

Maximum number of records (videos, video details or profiles) to return in total for this run. You are charged per record returned.

## Actor input object example

```json
{
  "mode": "search",
  "keywords": [
    "纪录片"
  ],
  "maxResults": 20
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped items (JSON, CSV, Excel via the dataset API).

# 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": "search",
    "keywords": [
        "纪录片"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("clover_folktale/youku-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 = {
    "mode": "search",
    "keywords": ["纪录片"],
}

# Run the Actor and wait for it to finish
run = client.actor("clover_folktale/youku-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 '{
  "mode": "search",
  "keywords": [
    "纪录片"
  ]
}' |
apify call clover_folktale/youku-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,clover_folktale/youku-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/6xUzpJSof3aWP3DBL/builds/M44ZGxapy2dDyKPrl/openapi.json
