# iQIYI Album Profile & Channel Ranking Scraper (`dataspryva/iqiyi-album-profile-and-channel-ranking-scraper`) Actor

Get iQIYI drama, movie, anime and variety-show details by album ID, pull the top-ranked titles for any channel, or fetch search-box suggestions for a query. Returns genres, cast, episode counts, ratings and licensed regions.

- **URL**: https://apify.com/dataspryva/iqiyi-album-profile-and-channel-ranking-scraper.md
- **Developed by:** [Dataspryva](https://apify.com/dataspryva) (community)
- **Categories:** Videos, Automation, Developer tools
- **Security:** 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

## iQIYI Album Profile & Channel Ranking Scraper

iQIYI (iq.com) is the international home of Chinese, Korean, Thai and other Asian dramas, movies, anime and variety shows. This actor reads the public catalogue without an account and returns album profiles with released episode lists, the current hot lists for four channels, eight ranking boards, a weekly top 10, full title search results across regional catalogues, and the autocomplete suggestions from iQIYI's own search box.

### What this actor does

- **Album profiles:** look up a title by slug, album URL, play URL or numeric album ID and get its score, release year, age rating, genres, licensed regions, cast with roles, directors and every currently released episode with a direct play link.
- **Full title search:** search the international catalogue, or one of eight regional catalogues, in seven metadata languages. Results include episodes, cast and optional album-level score/description enrichment.
- **Rankings:** pull the hot list for Drama, Movie, Anime or Variety (up to 30 titles each), the eight global charts (hot, anticipated, rising, must-watch and four curated picks), or the weekly top 10 with view counts.
- **Legacy modes:** the original search-box suggestions and channel-ranking modes still work for saved tasks.
- **Clean records:** empty fields are omitted, image URLs are normalized, dates are ISO, scores are numeric, and IDs are kept as iQIYI publishes them.

### Output per mode

#### `byId` — album profile

- `albumId`, `qipuId` — slug and internal content ID
- `title`, `subtitle`, `alterTitle` — title variants
- `description` — synopsis
- `releaseYear`, `releaseStatus`, `type`, `isSeries` — release and content type
- `score`, `scoreVotes`, `contentRating` — user score, vote count and age rating
- `totalEpisodes`, `releasedEpisodeCount`, `episodes[]` — planned count, released count, and episode rows (`order`, `name`, `episodeId`, `url`, `publishDate`, `durationSeconds`, plus `subtitle` when published)
- `durationMinutes` — runtime for a movie, or the first released episode's runtime
- `channelId` — 1 Movie, 2 TV series, 4 Anime, 6 Variety show
- `TypeDsj`, `SubjectMatter`, `Language`, `Place`, `Adaptation` — tag groups
- `genres`, `tags` — flattened genre and tag lists
- `starring`, `cast[]`, `creator`, `directors[]` — cast and directors; cast rows include `name`, `role`, `character` and `profileUrl` when published
- `posterUrl`, `bannerUrl` — portrait and landscape artwork
- `availableRegions` — countries where the title is licensed
- `audioLanguages` — published audio tracks
- `isPremium`, `isFinished`, `isExclusive`, `isQiyiProduced` — availability flags
- `playUrl`, `iqiyiUrl`, `sourceUrl` — direct play and album links
- `recordType: "album"`, `scrapedAt`

#### `rankings` — channel and global rankings

- `rankingType` — `top10`, `hot`, `anticipated`, `rising`, `mustWatch`, `dramaPicks`, `moviePicks`, `animePicks`, `varietyPicks`, `channelDrama`, `channelMovie`, `channelAnime`, `channelVariety`
- `rank` — 1-based position
- `title`, `qipuId`, `albumId`, `channelId`
- `score`, `contentRating`, `year`, `tags[]`
- `updateText`, `episodeCount`, `description`
- `weeklyViews` — top-10 only
- `posterUrl`, `thumbnailUrl`, `albumUrl`, `playUrl`
- `isPremium`, `recordType: "ranking"`, `scrapedAt`

#### `searchTitles` — full search results

- `query`, `rank`, `title`, `albumId`, `qipuId`
- `type`, `channelId`, `isSeries`, `year`, `publishDate`
- `score`, `contentRating`, `description`, `tags[]` — present when details are included
- `episodeCount`, `releasedEpisodeCount`, `episodes[]`
- `cast[]`, `directors[]`
- `posterUrl`, `thumbnailUrl`, `albumUrl`, `playUrl`
- `isPremium`, `recordType: "searchResult"`, `scrapedAt`

#### `search` — suggestions (legacy)

- `suggestion`, `sourceUrl`, `recordType: "suggestion"`, `scrapedAt`

#### `trending` — channel ranking (legacy)

Keeps the original fields `name`, `qipuId`, `albumId`, `publishDate`, `posterUrl`, `iqiyiUrl`, `sourceUrl`, `recordType`, `scrapedAt`, and includes `rank`, `rating`, `contentRating`, `year`, `tags`, `updateText` and `episodeCount` where available. `playCount` is omitted because intl iq.com does not publish cumulative play counts.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `byId` | `byId`, `searchTitles`, `rankings`, `search` (legacy suggestions), `trending` (legacy channel ranking) |
| `albumIds` | array | `[]` | Album slugs, album URLs, play URLs or numeric IDs (mode=byId) |
| `searchQueries` | array | `["love"]` | Keywords or iq.com search URLs (mode=searchTitles) |
| `searchQuery` | string | `love` | Suggestion text (mode=search) |
| `region` | string | `intl` | intl, vn, th, id, my, ph, sg, kr, jp (mode=searchTitles) |
| `language` | string | `en_us` | en_us, zh_cn, zh_tw, th_th, vi_vn, id_id, ms_my (mode=searchTitles) |
| `includeDetails` | boolean | `true` | Add score, description, genres, age rating and cast roles to search rows |
| `includeEpisodes` | boolean | `true` | Include released episode lists |
| `rankingType` | string | `top10` | One of the 13 ranking types (mode=rankings) |
| `channelId` | string | `2` | 0 Top, 1 Movie, 2 Series, 4 Anime, 6 Variety (mode=trending) |
| `maxItems` | integer | `25` | Hard cap on emitted records (1–1000) |

#### Example: three album profiles

```json
{
  "mode": "byId",
  "albumIds": [
    "genius-girlfriend-2026-28fzrln6il1",
    "fated-hearts-2025-d6iyehcx4p",
    "a-better-jianghu-2026-1qi696xihh0"
  ],
  "includeEpisodes": true,
  "maxItems": 3
}
```

#### Example: full search in a regional catalogue

```json
{
  "mode": "searchTitles",
  "searchQueries": ["love", "revenge"],
  "region": "th",
  "language": "th_th",
  "includeDetails": true,
  "includeEpisodes": true,
  "maxItems": 30
}
```

#### Example: drama channel hot list

```json
{
  "mode": "rankings",
  "rankingType": "channelDrama",
  "maxItems": 30
}
```

#### Example: weekly top 10

```json
{
  "mode": "rankings",
  "rankingType": "top10",
  "maxItems": 10
}
```

#### Example: legacy suggestions

```json
{
  "mode": "search",
  "searchQuery": "love",
  "maxItems": 10
}
```

### Use cases

- Build a catalogue of iQIYI dramas, movies, anime and variety shows with scores, genres and cast.
- Track which titles are on a channel hot list, a global chart or the weekly top 10 over time.
- Enrich a recommendation database with released episodes, cast roles and play links.
- Research regional catalogue differences across nine iQIYI markets.
- Monitor a genre or franchise with scheduled searches and deduplicated results.
- Check a title's licensed regions and premium status before planning a release.

### FAQ

#### Is this affiliated with iQIYI?

No. This is an independent actor that reads public iQ.com pages and catalogue data. It is not endorsed by or connected to iQIYI.

#### Do I need an iQIYI account or subscription?

No. No login, cookie or API key is required.

#### Why are some fields missing from a record?

iQIYI does not publish every field for every title. Anime and some variety shows often have no cast list, unreleased shows have no episodes yet, and some titles have no description. Missing fields are omitted rather than sent as null or empty values.

#### Why are there fewer episodes than `totalEpisodes`?

`totalEpisodes` is the planned episode count. The `episodes` array contains episodes that are currently released and listed by iQIYI. Ongoing shows can have a planned count above the released count, and some unreleased titles publish no episode list at all, so `episodes` is omitted even though `totalEpisodes` is present.

#### Why is there no play count?

The international iq.com catalogue does not expose a cumulative play count. The weekly top-10 ranking does include `weeklyViews`, and that is the only view metric included.

#### Which regions and languages are supported?

Search supports the international catalogue plus Vietnam, Thailand, Indonesia, Malaysia, the Philippines, Singapore, South Korea and Japan. Metadata languages are English, Simplified and Traditional Chinese, Thai, Vietnamese, Indonesian and Malay. Other iQIYI languages and the Taiwan region currently return no search results, so they are not offered.

#### How many search results can one query return?

It depends on the query. Popular terms can return several hundred unique titles (currently around 400 for broad terms); narrow terms can return only a handful. The actor follows iQIYI's pages until they stop adding new titles and never promises the catalogue's reported total.

#### Why are there only four channel hot lists?

The international catalogue publishes hot lists for Drama, Movie, Anime and Variety. Kids and documentary channels redirect to the home page and have no equivalent list. The eight global charts and the weekly top 10 cover the rest of the catalogue.

#### Do I need to configure a proxy?

No. The actor connects directly to iq.com without a proxy; no proxy configuration is needed. Just fill in the input and run it.

#### How current is the data?

Every run reads iQIYI live, so scores, rankings, episodes and availability reflect what iq.com shows at run time.

# Actor input Schema

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

What to fetch.

## `albumIds` (type: `array`):

iQIYI album slugs, album URLs, play URLs or numeric album IDs. Examples: `genius-girlfriend-2026-28fzrln6il1`, `https://www.iq.com/album/fated-hearts-2025-d6iyehcx4p`, `https://www.iq.com/play/fated-hearts-episode-1-1ggw7a63yug`, `1324877168319701`.

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

Title keywords or iq.com search URLs. Each query is searched in the selected region and language.

## `searchQuery` (type: `string`):

Text used by the legacy search-box suggestion mode, e.g. `love`.

## `region` (type: `string`):

iQIYI serves a different catalogue per region. `intl` is the global catalogue; the others are regional catalogues.

## `language` (type: `string`):

Language for titles and metadata. These are the languages iQIYI currently returns for search results.

## `includeDetails` (type: `boolean`):

Add score, exact release year, description, genres, age rating and cast roles to search results by reading each matching album profile.

## `includeEpisodes` (type: `boolean`):

Include every currently released episode for album profiles and search results. Planned episode counts are always returned.

## `rankingType` (type: `string`):

Which ranking list to fetch.

## `channelId` (type: `string`):

Legacy channel ranking selector. 0 = Top, 1 = Movie, 2 = Series, 4 = Anime, 6 = Variety.

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "byId",
  "albumIds": [
    "genius-girlfriend-2026-28fzrln6il1",
    "fated-hearts-2025-d6iyehcx4p",
    "a-better-jianghu-2026-1qi696xihh0"
  ],
  "searchQueries": [
    "love"
  ],
  "searchQuery": "love",
  "region": "intl",
  "language": "en_us",
  "includeDetails": true,
  "includeEpisodes": true,
  "rankingType": "top10",
  "channelId": "2",
  "maxItems": 3
}
```

# Actor output Schema

## `albums` (type: `string`):

Dataset containing album profiles, ranking rows, search results, and suggestions.

# 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": "byId",
    "albumIds": [
        "genius-girlfriend-2026-28fzrln6il1",
        "fated-hearts-2025-d6iyehcx4p",
        "a-better-jianghu-2026-1qi696xihh0"
    ],
    "searchQueries": [
        "love"
    ],
    "searchQuery": "love",
    "region": "intl",
    "language": "en_us",
    "includeDetails": true,
    "includeEpisodes": true,
    "rankingType": "top10",
    "channelId": "2",
    "maxItems": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("dataspryva/iqiyi-album-profile-and-channel-ranking-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": "byId",
    "albumIds": [
        "genius-girlfriend-2026-28fzrln6il1",
        "fated-hearts-2025-d6iyehcx4p",
        "a-better-jianghu-2026-1qi696xihh0",
    ],
    "searchQueries": ["love"],
    "searchQuery": "love",
    "region": "intl",
    "language": "en_us",
    "includeDetails": True,
    "includeEpisodes": True,
    "rankingType": "top10",
    "channelId": "2",
    "maxItems": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("dataspryva/iqiyi-album-profile-and-channel-ranking-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": "byId",
  "albumIds": [
    "genius-girlfriend-2026-28fzrln6il1",
    "fated-hearts-2025-d6iyehcx4p",
    "a-better-jianghu-2026-1qi696xihh0"
  ],
  "searchQueries": [
    "love"
  ],
  "searchQuery": "love",
  "region": "intl",
  "language": "en_us",
  "includeDetails": true,
  "includeEpisodes": true,
  "rankingType": "top10",
  "channelId": "2",
  "maxItems": 3
}' |
apify call dataspryva/iqiyi-album-profile-and-channel-ranking-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dataspryva/iqiyi-album-profile-and-channel-ranking-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/LkWGg07CebatgVipI/builds/8qFI5HOJyCNleBrtc/openapi.json
