# Youku Scraper (优酷): Shows, Videos, Episodes & Uploaders (`memo23/youku-scraper`) Actor

Youku (优酷) scraper with no login: search shows and dramas by keyword, then get each video's episode count, duration, likes, comments, VIP flag and post date, plus uploader followers, likes and location. Paste v.youku.com links or ids. $2 per 1,000 search rows, $8 per 1,000 videos.

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

## Pricing

from $8.00 / 1,000 videos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 (优酷): Shows, Videos, Episodes & Uploaders

Search **Youku (优酷)**, one of China's largest video platforms, and get clean rows for shows, dramas, films and variety programmes, for **$2 per 1,000 search rows**. Add video details (episode count, duration, likes, comments, VIP flag, post date, uploader id) for **$8 per 1,000 videos**, and uploader profiles (followers, likes, bio, location, verification) for **$8 per 1,000**. Paste a keyword, a v.youku.com link or an id. No login, no Youku account.

![How the Youku Scraper works](https://api.apify.com/v2/key-value-stores/G8umWfDex1ztLGsGU/records/how-it-works-youku.png)

```json
{
  "searchKeywords": ["庆余年"],
  "fetchSearchDetails": true
}
```

| Input | Rows |
|---|---|
| Search keyword | One `search-result` row per show (usually 15-25 per keyword): title, subtitle, category, release year, completed or not, VIP/首播 badge, poster |
| Search keyword + `fetchSearchDetails` | Also one `video` row per show |
| Video link or video id | One `video` row: episode count, duration, likes, comments, VIP flag, post date, uploader id |
| Show id or show page | One `video` row for a representative video of that show, with the show's episode count |
| Uploader id or profile link | One `profile` row: followers, likes, bio, location, verification |
| `includeUploaderProfiles` | One `profile` row for each distinct uploader of the videos in the run |

### Why Use This Scraper?

- **2.5 times cheaper than the alternative.** $0.002 per search row and $0.008 per video or uploader; the other maintained Youku actor charges $0.005 per search row and $0.02 per video or profile on a paid plan, and three times that on the free plan.
- **Episode counts and VIP status.** Know whether a drama is finished, how many episodes are out, and whether it needs a Youku VIP membership.
- **Engagement numbers.** Likes and comment counts for every video, followers and likes for every uploader.
- **Links or ids, whatever you have.** v.youku.com and m.youku.com links, show pages, video ids (XN…==) and show ids all work.

### Use Cases

- **Drama and film tracking:** which titles in a franchise are on Youku, finished or still airing, VIP or free.
- **Content licensing research:** catalogue what Youku carries for a keyword, by category and release year.
- **Creator research:** find the uploaders behind recap and commentary channels, with follower counts and verification.
- **Engagement monitoring:** compare likes and comments across videos of a show.
- **Market research on Chinese streaming:** sample what Youku surfaces for a topic.

### How It Works

1. Video links and ids are looked up four at a time; one lookup takes about 10 seconds.
2. Each search keyword returns one page of shows. With `fetchSearchDetails`, each show is then looked up for a video row.
3. Uploader profiles are looked up last: the ones you asked for, then the uploaders of the videos if `includeUploaderProfiles` is on.
4. Every row is charged as it is delivered, and the run stops cleanly at your spending limit or row cap.

### Input Configuration

| Field | Type | Description |
|---|---|---|
| `searchKeywords` | array | Keywords to search. Chinese titles work best. |
| `maxResultsPerKeyword` | integer | Cap on search rows per keyword, 5-150. Default 150; a keyword returns 15-25 in practice. |
| `fetchSearchDetails` | boolean | Add a video row for every search result. Default off. |
| `videoUrls` | array | Youku video links, show pages, video ids or show ids. |
| `userIds` | array | Uploader ids (U…=) or m.youku.com/profile?uid=… links. |
| `includeUploaderProfiles` | boolean | Add the profile of each video's uploader. Default off. |
| `maxItems` | integer | Cap on all rows. Default 1,000; free-plan runs return up to 100. |

#### Example input

Two videos by link and the profiles of their uploaders:

```json
{
  "videoUrls": [
    "https://v.youku.com/v_show/id_XNjU2OTc2NDk5Mg==.html",
    "XNjM2ODU2MTM4MA=="
  ],
  "includeUploaderProfiles": true
}
```

One uploader by id:

```json
{
  "userIds": ["UNjAxNTI2NjYwNA=="]
}
```

### Output Samples

A search result (from a run on 2026-10-26):

```json
{
  "type": "search-result",
  "showId": "cbbe76ee40ff459dab01",
  "url": "https://v.youku.com/v_show/id_cbbe76ee40ff459dab01.html",
  "title": "《庆余年第二季》深度解读",
  "subtitle": "范闲假死归京在权谋中觉醒",
  "category": "电视剧",
  "sourceName": "优酷",
  "releaseYear": 2026,
  "isCompleted": true,
  "cornerTag": null,
  "thumbnailUrl": "https://m.ykimg.com/050C00006A7D5C782012C914C3AB2678",
  "rank": 2,
  "searchKeyword": "庆余年"
}
```

A video:

```json
{
  "type": "video",
  "videoId": "XNjU2OTc2NDk5Mg==",
  "showId": "cbab6fa83dbd4ccd9fea",
  "url": "https://v.youku.com/v_show/id_XNjU2OTc2NDk5Mg==.html",
  "title": "老江湖",
  "showName": "老江湖",
  "subtitle": "一起失窃案引发的正邪博弈",
  "category": "电影",
  "videoType": "正片",
  "durationSec": 6000,
  "episodeTotal": 1,
  "episodeLast": 1,
  "isCompleted": true,
  "commentCount": 494,
  "likeCount": 12,
  "isVip": true,
  "allowComment": true,
  "postedAt": "2026-10-21T15:34:06.000Z",
  "showReleaseTime": "2026-10-21T16:00:00.000Z",
  "thumbnailUrl": "https://m.ykimg.com/053500006AD71FE070A43D13A35C3AC7",
  "authorId": "UNjAxNTI2NjYwNA==",
  "authorUrl": "https://m.youku.com/profile?uid=UNjAxNTI2NjYwNA=="
}
```

An uploader:

```json
{
  "type": "profile",
  "userId": "UMjkyMDA1NTkxMg==",
  "numericId": "730013978",
  "name": "包晓琳",
  "url": "https://m.youku.com/profile?uid=UMjkyMDA1NTkxMg==",
  "bio": "作家，编剧，影视策划\n用光影认知世界，丈量人心",
  "followerCount": 3744,
  "likeCount": 939,
  "isVerified": false,
  "location": "河北",
  "uploaderOfVideoId": "XNjM2ODU2MTM4MA=="
}
```

### Key Output Fields

| Field | Meaning |
|---|---|
| `type` | `video`, `search-result` or `profile` |
| `showId`, `videoId` | Youku's show (programme) id and video id |
| `episodeTotal`, `episodeLast` | Episodes planned and episodes out so far |
| `isCompleted` | Whether the show has finished airing |
| `isVip` | Whether the video needs a Youku VIP membership |
| `cornerTag` | The badge on a search result, such as VIP, 首播 or 预告 |
| `likeCount`, `commentCount` | Engagement on a video |
| `followerCount`, `likeCount` (profile) | The uploader's audience |
| `authorId` | Uploader id; put it in `userIds` for the profile |

### FAQ

**How many results does a keyword return?**
One page, usually 15 to 25 shows. Youku search has no further pages through this actor, so `maxResultsPerKeyword` above 25 changes nothing. Use more specific keywords to reach more shows.

**Do videos include view counts or cast lists?**
No. The source does not return play counts or cast for Youku videos. Likes, comments, episode counts and duration are included.

**What does a show id return?**
One representative video of the show (usually the newest or first episode) with the show's episode count, not one row per episode.

**Are transcripts available?**
Not at the moment. The transcript service failed on every test on 2026-10-26, so it is not offered.

**What if an id is wrong?**
An unknown video or uploader is logged as not found and not charged.

**English keywords?**
They work, but Youku is a Chinese site and English searches return few or no results. Use the Chinese title.

**Do I need a Youku account?**
No.

### Pricing

| Event | When | Price |
|---|---|---|
| Actor start | Once per run (per GB of memory, 256 MB default) | $0.005 |
| Search result | Each show from keyword search | $0.002 |
| Video | Each video row | $0.008 |
| Uploader profile | Each uploader profile | $0.008 |

Example: 10 keywords with `fetchSearchDetails` on, about 20 shows each, cost 200 × $0.002 + 200 × $0.008 + $0.005 = $2.01.

### Support

Found a bug or need a field? Open an issue on the actor's Issues tab and include the run link.

### ⚠️ Disclaimer

This actor reads public Youku data. It is not affiliated with or endorsed by Youku or Alibaba. You are responsible for using the data in line with Youku's terms and the laws that apply to you. Titles, posters and descriptions belong to their owners.

### SEO Keywords

Youku scraper, 优酷 scraper, 优酷爬虫, Youku API alternative, Youku video data, Youku search scraper, Chinese drama data, Chinese streaming data, Youku uploader followers, Youku episodes, Youku VIP, China video platform scraper

# Actor input Schema

## `searchKeywords` (type: `array`):

Search Youku for shows, dramas, films, variety and documentaries. Chinese titles work best (庆余年, 综艺). One keyword returns one page of results, usually 15-25 shows; Youku search has no further pages.

## `maxResultsPerKeyword` (type: `integer`):

Cap on search rows from one keyword. In practice a keyword returns 15-25.

## `fetchSearchDetails` (type: `boolean`):

Also look up every search result and add a video row with episode count, duration, likes, comments, VIP flag, post date and uploader id. Billed as a video row each.

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

v.youku.com/v_show/id\_….html links, m.youku.com video links, show pages, video ids (XNjU1Nzk5MTc0OA==) or show ids (20 hex characters, as in search results). A show id returns one representative video of that show with the show's episode count.

## `userIds` (type: `array`):

Encoded uploader ids (UMTg3NzMzMDM0NDg=, the authorId field of a video row) or m.youku.com/profile?uid=… links. Returns followers, likes, bio, location and verification.

## `includeUploaderProfiles` (type: `boolean`):

After the videos, look up each video's uploader once and add a profile row. Billed as a profile row each.

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

Cap on all rows together. Free-plan runs return up to 100.

## Actor input object example

```json
{
  "searchKeywords": [
    "庆余年"
  ],
  "maxResultsPerKeyword": 150,
  "fetchSearchDetails": false,
  "includeUploaderProfiles": false,
  "maxItems": 1000
}
```

# Actor output Schema

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

Rows told apart by `type`: `video`, `search-result` and `profile`.

# 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 = {
    "searchKeywords": [
        "庆余年"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/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 = { "searchKeywords": ["庆余年"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/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 '{
  "searchKeywords": [
    "庆余年"
  ]
}' |
apify call memo23/youku-scraper --silent --output-dataset

```

## MCP server setup

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