# Douban Pro Scraper — Reviews, Discussions & Subject Data (`zhorex/douban-scraper`) Actor

Scrape long-form reviews, comments, and group discussions from Douban (豆瓣) — China's leading reviews + interest community. Movies, books, music, plus subject search. Built for Chinese-LLM training corpus, sentiment analysis, and academic NLP research. Pure HTTP, no auth.

- **URL**: https://apify.com/zhorex/douban-scraper.md
- **Developed by:** [Sami](https://apify.com/zhorex) (community)
- **Categories:** AI, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 review scrapeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Douban Scraper — Reviews, Comments & Group Discussions

Extract long-form reviews, ratings, comments, and group discussions from **Douban (豆瓣)** — China's leading reviews + interest community. **Movies, books, and music.** No API key, no browser, no VPN. Best Douban data source for Chinese AI training corpora and consumer research in 2026.

### How to scrape Douban in 3 easy steps

1. **Go to the [Douban Scraper](https://apify.com/zhorex/douban-scraper) page** on Apify and click **"Try for free"**
2. **Configure your input** — choose a mode (`subject_reviews`, `subject_comments`, `group_topic`, or `subject_search`), enter your Douban URLs or query, and set the number of results
3. **Click "Run"**, wait for the scraper to finish, then **download your data** in JSON, CSV, or Excel format

No coding required. No API key. Works with Apify's free plan.

> 🏢 **Production pipeline running 1,000+ items per week?**
>
> I offer custom output schemas matched to your data warehouse, dedicated proxy infrastructure for sustained throughput, schema stability SLA (no breaking changes without 30-day notice), and volume pricing above 50K items/month.
>
> DM me on Apify, open an Issue with subject **"Enterprise inquiry"**, or email **samimassis2002@gmail.com** with subject **"Douban enterprise"**.

### Part of the Chinese Digital Intelligence Suite

Built by **Zhorex** — the only developer on Apify specializing in Chinese platforms:

- **[Weibo Scraper](https://apify.com/zhorex/weibo-scraper)** — China's Twitter (microblogging, hot search, public opinion)
- **[Bilibili Scraper](https://apify.com/zhorex/bilibili-scraper)** — China's YouTube (video, danmaku, creator analytics)
- **[RedNote (Xiaohongshu) Scraper](https://apify.com/zhorex/rednote-xiaohongshu-scraper)** — China's Instagram + Pinterest
- **[RedNote Shop Scraper](https://apify.com/zhorex/rednote-shop-scraper)** — RedShop e-commerce data
- **Douban Scraper** — You are here (reviews, ratings, group discussions)

Together, these cover the five pillars of Chinese digital intelligence: microblogging, video, social commerce, e-commerce, and reviews.

### What is Douban?

**Douban (豆瓣)** is China's reviews and interest-community platform — Goodreads + Letterboxd + Rate Your Music + niche-Reddit fused into one site, with **200M+ monthly users**. It's where Chinese readers, cinephiles, music fans, and hobby communities post the longest-form opinion content on the Chinese internet. Movies, books, music, TV shows, and tens of thousands of user-run discussion groups.

For anyone building a Chinese-language LLM, sentiment classifier, or consumer research dataset, Douban is the densest source of opinion-rich long-form Chinese text outside of Zhihu.

### Modes

| Mode | What it does | Records |
|------|--------------|---------|
| **`subject_reviews`** | Long-form reviews (500-5,000+ Chinese chars each) for a movie/book/music album | One per review |
| **`subject_comments`** | Short comments + star ratings under a subject's discussion page | One per comment |
| **`subject_search`** | Search Douban for movies / books / music by keyword | One per result |
| **`group_topic`** ⚠️ Beta | Pull a discussion thread + its replies from a Douban Group | One per topic (with nested replies) |

### v1.0 Known Limitations (read before buying)

- **Movie comments require browser rendering.** Douban serves movie short-comments through a JS-only mobile widget that v1.0 cannot extract — `subject_comments` for movies returns a diagnostic record explaining the limitation. **Use `subject_reviews` for movie data instead** — long-form movie reviews are richer for AI training anyway. Books and music short-comments work normally.
- **Movie review list bodies are excerpt-only by default.** Mobile movie list pages don't expose author / publication date / full body — only review IDs, titles, and ratings. Set `fetchFullReviewBody: true` (default) to fetch each review's detail page and fill in the full markdown body.
- **Book / music comment coverage varies by subject.** Popular subjects (rating count > 10K — e.g. 三体, OK Computer) reliably serve inline short-comments; some less-popular books have begun moving comment lists to AJAX-only rendering and will return 0 records. If `subject_comments` returns 0 records for a URL, fall back to `subject_reviews` (which works on all subjects).
- **Movie search returns Douban's tag-matched feed.** For precise targeting of a specific film, use `subject_reviews` with the movie's subject URL directly.
- **Book search caps at ~10 discovery results per query.** Douban's book suggestion endpoint doesn't paginate. For bulk book review extraction, supply multiple subject URLs to `subject_reviews` mode.
- **`group_topic` mode is Beta.** Works on most current public topics; some IDs return 403 (moderated) or 404 (deleted). When a topic fails, the run logs a warning and continues — you are not charged for failed topics.
- **Residential proxies are strongly recommended** (default in input). Datacenter IPs degrade movie-mode and may trigger generic anti-bot challenges.

### Use Cases

| Who | Why |
|-----|-----|
| **AI / LLM training data buyers** | Densest source of Chinese long-form opinion text outside Zhihu — key for Chinese-language model fine-tuning |
| **Sentiment analysis researchers** | Star-rating-labelled Chinese review text, ideal for supervised sentiment classifiers |
| **Brand monitoring teams** | Find Chinese consumer reviews mentioning your product, competitor films, or book titles |
| **Cultural trend analysts** | Track which films / books / albums are gaining traction in Chinese-speaking markets |
| **Academic NLP researchers** | Pre-built corpus of opinion text with engagement metrics — citable in cross-cultural studies |
| **Localization / translation teams** | Real Chinese phrasing patterns for entertainment vocabulary |

### Scrape Douban with Python, JavaScript, or no code

You can use the Douban Scraper directly from the Apify Console (no code), or integrate it into your scripts.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("zhorex/douban-scraper").call(run_input={
    "mode": "subject_reviews",
    "subjectUrls": ["https://book.douban.com/subject/1084336/"],
    "maxResults": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
````

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('zhorex/douban-scraper').call({
    mode: 'subject_reviews',
    subjectUrls: ['https://book.douban.com/subject/1084336/'],
    maxResults: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => console.log(item));
```

### Input examples

#### 1. Subject reviews (long-form)

Pull long-form reviews for one or more movies, books, or music albums. Provide subject URLs or numeric subject IDs.

```json
{
    "mode": "subject_reviews",
    "subjectUrls": [
        "https://movie.douban.com/subject/1292052/",
        "https://book.douban.com/subject/1084336/",
        "https://music.douban.com/subject/1419463/"
    ],
    "maxResults": 100,
    "fetchFullReviewBody": true
}
```

#### 2. Subject comments + ratings

Short comments + star ratings for a book or music album. **Movie comments are not supported in v1.0** — use `subject_reviews` mode for movies.

```json
{
    "mode": "subject_comments",
    "subjectUrls": ["https://book.douban.com/subject/1084336/"],
    "maxResults": 200
}
```

#### 3. Subject search

Search Douban for movies, books, or music by keyword. Returns Douban's discovery feed for that query.

```json
{
    "mode": "subject_search",
    "searchQuery": "三体",
    "searchType": "all",
    "maxResults": 30
}
```

#### 4. Group topic (Beta)

Pull one or more group discussion threads with embedded replies.

```json
{
    "mode": "group_topic",
    "topicUrls": ["https://www.douban.com/group/topic/319929381/"],
    "maxRepliesPerTopic": 100
}
```

### Output examples

#### Review record

```json
{
    "type": "review",
    "reviewId": "1000104",
    "subjectId": "1084336",
    "subjectName": "小王子",
    "subjectType": "book",
    "title": "长大就笨了",
    "content": "(Full review body in markdown — Chinese long-form text)",
    "rating": 5,
    "ratingLabel": "力荐",
    "authorUsername": "大头绿豆",
    "authorUrl": "https://www.douban.com/people/bighead/",
    "authorAvatarUrl": "https://img3.doubanio.com/icon/u1000152-23.jpg",
    "publishedAt": "2005-04-06 11:51:52",
    "publishedAtIso": "2005-04-06T03:51:52Z",
    "stats": { "replyCount": 444 },
    "reviewUrl": "https://book.douban.com/review/1000104/",
    "scrapedAt": "2026-05-13T01:39:22Z"
}
```

#### Comment record

```json
{
    "type": "comment",
    "commentId": "10287387",
    "subjectId": "1084336",
    "subjectName": "小王子",
    "subjectType": "book",
    "content": "十几岁的时候渴慕着小王子，一天之间可以看四十四次日落。",
    "rating": 5,
    "ratingLabel": "力荐",
    "authorUsername": "眠去",
    "authorUrl": "https://www.douban.com/people/rebekah/",
    "publishedAt": "2007-02-08 11:16:40",
    "publishedAtIso": "2007-02-08T03:16:40Z",
    "stats": { "votesCount": 9232 },
    "scrapedAt": "2026-05-13T01:39:22Z"
}
```

#### Subject (search result)

```json
{
    "type": "subject",
    "subjectId": "2567698",
    "subjectName": "三体",
    "subjectType": "book",
    "year": "2008",
    "author": "刘慈欣",
    "rating": null,
    "cover": "https://img1.doubanio.com/view/subject/s/public/s2768378.jpg",
    "subjectUrl": "https://book.douban.com/subject/2567698/",
    "scrapedAt": "2026-05-13T01:39:22Z"
}
```

#### Group topic record (Beta)

```json
{
    "type": "group_topic",
    "topicId": "319929381",
    "groupName": "(Group name)",
    "title": "(Discussion title)",
    "content": "(Topic body in markdown — Chinese long-form text)",
    "authorUsername": "(Author handle)",
    "publishedAt": "2026-04-01 10:20:30",
    "publishedAtIso": "2026-04-01T02:20:30Z",
    "stats": { "replyCount": 50 },
    "replies": [
        {
            "replyId": "...",
            "authorUsername": "...",
            "content": "...",
            "publishedAt": "...",
            "votesCount": 12
        }
    ],
    "topicUrl": "https://www.douban.com/group/topic/319929381/",
    "scrapedAt": "2026-05-13T01:39:22Z"
}
```

### Pricing

Pay per result — no monthly fee, no minimum, free trial included.

| Event | Price | When charged |
|-------|-------|--------------|
| `review-scraped` | **$0.030** | Per long-form review record extracted |
| `comment-scraped` | **$0.005** | Per short comment record extracted |
| `group-topic-scraped` | **$0.030** | Per group topic (with embedded replies) |
| `subject-search-result` | **$0.005** | Per search result row |

**Concrete cost examples:**

- 100 long-form reviews of one popular movie's reviews page: **$3.00**
- 1,000 short comments across multiple books: **$5.00**
- 50 group discussions with replies: **$1.50**
- 200 search results to seed a crawl: **$1.00**

Diagnostic / log records (e.g. movie comment limitation notices) are NEVER charged.

### Content is in Chinese

All content is returned in the **original Simplified Chinese**. Douban is a Chinese-language platform — reviews, comments, group discussions, and user names are in Chinese.

If you need English translations, pipe the output through a translation API (Google Translate, DeepL, or Claude).

### Technical Details

- **No browser** — pure HTTP, runs in 512MB RAM
- **No login required** — works against publicly accessible content only
- **Built-in rate limiting** — exponential backoff on 429 / 503
- **Globally accessible** — residential proxy recommended (default in input)
- **UTF-8 throughout** — Chinese text round-trips cleanly
- **Markdown review bodies** — `<p>`, `<a>`, `<strong>` etc. converted to lightweight markdown for downstream LLM ingestion

### FAQ

#### Is there a Douban API?

Douban's official developer API has been deprecated for several years. There is no working public Douban API for international developers. This Douban Scraper is the best Douban data source in 2026 — it extracts reviews, comments, ratings, and group discussions from publicly accessible web endpoints.

#### Do I need a Douban login or cookies?

No. All four modes work against publicly accessible content. Login-walled content (private groups, blocked users) is not in scope.

#### Why are movie comments not supported?

Douban serves movie short-comments through a JavaScript-only widget on the mobile site that requires headless browser execution. v1.0 returns long-form movie **reviews** instead, which contain richer opinion text and are the primary value for AI training data. Books and music short-comments work normally.

#### Can I scrape Douban in Python?

Yes. Install the Apify Python client (`pip install apify-client`), then call the `zhorex/douban-scraper` actor. See the Python code example above.

#### How much does it cost to scrape Douban?

Each record type has its own price (see the Pricing table). A typical research run extracting 100 movie reviews costs about $3. There is no monthly fee or minimum spend — pay only for what you extract. Diagnostic records (e.g. movie-comment-mode limitation notices) are never charged.

#### Is scraping Douban legal?

This scraper accesses publicly available content through Douban's public web endpoints. It does not bypass authentication and does not access private/locked content. Always review your local laws and Douban's terms of service before scraping.

#### What if a group topic URL fails?

Group topics are marked **Beta** in v1.0. Most public group topic URLs work; some may fail (private group, moderated topic, deleted post). When a topic fails, the run logs a warning and continues with the next URL — you are not charged for failed topics.

#### What is the best Douban scraper in 2026?

The [Douban Scraper by Zhorex](https://apify.com/zhorex/douban-scraper) — covers reviews, comments, group discussions, and search across movies, books, and music. Built specifically for Chinese AI training data buyers and sentiment research teams. Part of the Chinese Digital Intelligence Suite (Weibo, Bilibili, RedNote, Douban).

### Integrations & data export

The Douban Scraper integrates with your existing workflow:

- **Google Sheets** — Send scraped reviews + ratings directly to a spreadsheet
- **Zapier / Make / n8n** — Automate workflows triggered by new Douban records
- **REST API** — Call the actor programmatically and retrieve data via Apify's REST API
- **Webhooks** — Get notified when a run finishes
- **Data formats** — Download as JSON, CSV, Excel, XML, or RSS

### More scrapers by Zhorex

#### Chinese Digital Intelligence Suite

- [Weibo Scraper](https://apify.com/zhorex/weibo-scraper) — China's Twitter (microblog, hot search)
- [Bilibili Scraper](https://apify.com/zhorex/bilibili-scraper) — China's YouTube (video, danmaku, creators)
- [RedNote (Xiaohongshu) Scraper](https://apify.com/zhorex/rednote-xiaohongshu-scraper) — China's Instagram + Pinterest
- [RedNote Shop Scraper](https://apify.com/zhorex/rednote-shop-scraper) — RedShop e-commerce

#### Reviews & ratings (cross-vertical)

- [Letterboxd Scraper](https://apify.com/zhorex/letterboxd-scraper) — Western film reviews and ratings
- [G2 Reviews Scraper](https://apify.com/zhorex/g2-reviews-scraper) — B2B software reviews
- [Capterra Reviews Scraper](https://apify.com/zhorex/capterra-reviews-scraper) — Software product reviews
- [Booking.com Reviews Scraper](https://apify.com/zhorex/booking-reviews-scraper) — Hotel reviews
- [Review Intelligence Aggregator](https://apify.com/zhorex/review-intelligence-aggregator) — Multi-source review aggregation

#### Streaming & video

- [Twitch Scraper](https://apify.com/zhorex/twitch-scraper) — Twitch profiles, live streams, clips, VODs
- [Kick Scraper](https://apify.com/zhorex/kick-scraper) — Kick.com profiles, streams, clips
- [YouTube Shorts Scraper Pro](https://apify.com/zhorex/youtube-shorts-scraper-pro) — Shorts metadata + analytics

#### Markets & alt-data

- [TradingView Scraper](https://apify.com/zhorex/tradingview-scraper) — Stocks, crypto, forex, indices

#### Other tools

- [Perplexity AI Scraper](https://apify.com/zhorex/perplexity-ai-scraper) — AI-powered search results
- [Telegram Channel Scraper](https://apify.com/zhorex/telegram-channel-scraper) — Public Telegram channel messages
- [Tech Stack Detector](https://apify.com/zhorex/tech-stack-detector) — Detect technologies used by websites
- [LinkedIn Company Enrichment](https://apify.com/zhorex/linkedin-company-enrichment) — Enrich company records
- [Domain Authority Checker](https://apify.com/zhorex/domain-authority-checker) — Domain SEO metrics
- [Phone Number Validator](https://apify.com/zhorex/phone-number-validator) — Validate and format phone numbers
- [Sneaker Price Tracker](https://apify.com/zhorex/sneaker-price-tracker) — Track sneaker prices

### Support

Found a bug or want a new field? Open an issue on the Actor's [Issues page](https://apify.com/zhorex/douban-scraper/issues) — typical response within 48 hours.

***

💡 **Found this Actor useful?** Please [leave a star rating](https://apify.com/zhorex/douban-scraper/reviews) — it helps other users discover this tool.

# Actor input Schema

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

What to scrape from Douban.

## `subjectUrls` (type: `array`):

Douban subject URLs (movies, books, or music). Used for subject\_reviews and subject\_comments modes. Examples: https://movie.douban.com/subject/1292052/, https://book.douban.com/subject/2567698/, https://music.douban.com/subject/1419463/. Note: some less-popular books have moved short-comments behind AJAX-only rendering — popular subjects (rating count > 10K) reliably serve inline comments.

## `topicUrls` (type: `array`):

Douban group topic URLs. Used for group\_topic mode. Example: https://www.douban.com/group/topic/319929381/. (Beta — group\_topic mode works for most public groups but may fail on private or recently-moderated topics. Report issues at the Actor's Issues page.)

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

Search query in Chinese or English. Used for subject\_search mode.

## `searchType` (type: `string`):

Restrict subject\_search to a single category. Note: book search returns up to ~10 discovery results per query; for bulk book review extraction, use subject\_reviews mode with multiple subject URLs.

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

Max records to scrape per input URL / search query.

## `maxRepliesPerTopic` (type: `integer`):

Cap on the number of replies attached to each group topic record.

## `fetchFullReviewBody` (type: `boolean`):

When true (default), each review record includes the full long-form body (extra request per review). Disable for faster, cheaper runs that only need the review meta + excerpt.

## `proxyConfiguration` (type: `object`):

Proxy settings. Douban WAFs the movie subdomain — residential proxies are strongly recommended.

## Actor input object example

```json
{
  "mode": "subject_reviews",
  "subjectUrls": [
    "https://book.douban.com/subject/2567698/"
  ],
  "searchQuery": "三体",
  "searchType": "all",
  "maxResults": 50,
  "maxRepliesPerTopic": 50,
  "fetchFullReviewBody": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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": "subject_reviews",
    "subjectUrls": [
        "https://book.douban.com/subject/2567698/"
    ],
    "searchQuery": "三体"
};

// Run the Actor and wait for it to finish
const run = await client.actor("zhorex/douban-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": "subject_reviews",
    "subjectUrls": ["https://book.douban.com/subject/2567698/"],
    "searchQuery": "三体",
}

# Run the Actor and wait for it to finish
run = client.actor("zhorex/douban-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": "subject_reviews",
  "subjectUrls": [
    "https://book.douban.com/subject/2567698/"
  ],
  "searchQuery": "三体"
}' |
apify call zhorex/douban-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=zhorex/douban-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Douban Pro Scraper — Reviews, Discussions & Subject Data",
        "description": "Scrape long-form reviews, comments, and group discussions from Douban (豆瓣) — China's leading reviews + interest community. Movies, books, music, plus subject search. Built for Chinese-LLM training corpus, sentiment analysis, and academic NLP research. Pure HTTP, no auth.",
        "version": "0.1",
        "x-build-id": "7YcVLonBlEzDapfA0"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/zhorex~douban-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-zhorex-douban-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/zhorex~douban-scraper/runs": {
            "post": {
                "operationId": "runs-sync-zhorex-douban-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/zhorex~douban-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-zhorex-douban-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "subject_reviews",
                            "subject_comments",
                            "group_topic",
                            "subject_search"
                        ],
                        "type": "string",
                        "description": "What to scrape from Douban.",
                        "default": "subject_reviews"
                    },
                    "subjectUrls": {
                        "title": "Subject URLs",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Douban subject URLs (movies, books, or music). Used for subject_reviews and subject_comments modes. Examples: https://movie.douban.com/subject/1292052/, https://book.douban.com/subject/2567698/, https://music.douban.com/subject/1419463/. Note: some less-popular books have moved short-comments behind AJAX-only rendering — popular subjects (rating count > 10K) reliably serve inline comments.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "topicUrls": {
                        "title": "Group topic URLs",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Douban group topic URLs. Used for group_topic mode. Example: https://www.douban.com/group/topic/319929381/. (Beta — group_topic mode works for most public groups but may fail on private or recently-moderated topics. Report issues at the Actor's Issues page.)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Search query in Chinese or English. Used for subject_search mode."
                    },
                    "searchType": {
                        "title": "Search type",
                        "enum": [
                            "all",
                            "movie",
                            "book",
                            "music"
                        ],
                        "type": "string",
                        "description": "Restrict subject_search to a single category. Note: book search returns up to ~10 discovery results per query; for bulk book review extraction, use subject_reviews mode with multiple subject URLs.",
                        "default": "all"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Max records to scrape per input URL / search query.",
                        "default": 50
                    },
                    "maxRepliesPerTopic": {
                        "title": "Max replies per topic (group_topic mode)",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Cap on the number of replies attached to each group topic record.",
                        "default": 50
                    },
                    "fetchFullReviewBody": {
                        "title": "Fetch full review body",
                        "type": "boolean",
                        "description": "When true (default), each review record includes the full long-form body (extra request per review). Disable for faster, cheaper runs that only need the review meta + excerpt.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Douban WAFs the movie subdomain — residential proxies are strongly recommended.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
