# Douban Scraper - Films, Books, Music, People and Groups (`lentic_clockss/douban-scraper`) Actor

Extract Douban film, book and music pages, public member profiles, person filmographies and group topics as structured rows. Pay per delivered row plus a start fee.

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

## Pricing

from $2.20 / 1,000 results

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

## Douban Scraper

**Extract Douban film, book and music pages, public member profiles, person filmographies and group topics as structured rows you can export.**

- Ratings exactly as Douban keeps them, with their own scale.
- Cast and crew with their Douban IDs, long reviews, short comments and stills with uploader profiles.
- Public member profiles, with the fields Douban hides left out rather than written empty.
- One row per entity, so a review, a still and a film are counted separately and clearly.
- Pay only for the rows you receive: $3.00 per 1,000 rows on the Free plan plus a small start fee.

### What does Douban Scraper do?

Douban Scraper reads the pages Douban publishes for visitors and turns them into rows. No browser, no login and no account of yours is involved, and nothing is read from a member's private area.

- **Subject search** (`keywords`): matching titles with their rating, year and cover, in Chinese or English.
- **Subject details** (`subjectIds` with `subjectType`): one row per film, TV series, book or album, with the fields Douban shows.
- **Extra rows** (`includeReviews`, `includeInterests`, `includeCelebrities`, `includePhotos`): one row per review, short comment, cast member or still. Each added row is billed and counts toward the same limit.
- **People** (`celebrityIds`): a director or actor, plus one row per work with `includeWorks`.
- **Members** (`userIds`): what a public profile publishes.
- **Group topics** (`groupIds`): topic rows with their authors and reply counts.
- **Tags** (the `tags` view): the film tag list, useful for building searches.

Filling one target field picks the view automatically. All markets are supported through Douban's own site, in Simplified Chinese as Douban writes it.

### What data can you extract from Douban?

Fields depend on the row type and on what Douban publishes. A value Douban does not show stays empty or `null`; nothing is guessed.

#### Subject rows (`rowType`: `movie`, `tv`, `book`, `music`)

| Field | Description | Example |
| --- | --- | --- |
| `id` | Douban subject ID | `1292052` |
| `title` | Title as Douban writes it | `肖申克的救赎` |
| `url` | Subject page | `https://movie.douban.com/subject/1292052/` |
| `rating` | `value`, `max`, `count`; `max` is 10 for a title | `{"value": 9.7, "max": 10, "count": 3353407}` |
| `cardSubtitle` | Country, genre, director and cast summary | `美国 / 剧情 犯罪 / 弗兰克·德拉邦特 / …` |
| `intro` | The synopsis Douban publishes | `一场谋杀案使银行家安迪蒙冤入狱…` |
| `genres` | Genre list | `["剧情", "犯罪"]` |
| `countries` | Country list | `["美国"]` |
| `durations` | Running time as Douban writes it | `["142分钟"]` |
| `languages`, `aka`, `pubdate` | Language, alternate titles and release dates | `["英语"]` |
| `year` | Release year | `1994` |
| `isTv`, `episodesCount` | A series is reported with `rowType: tv` | `true`, `24` |
| `commentCount` | Number of comments Douban reports | `740000` |
| `actors`, `directors` | Names with roles, as on the detail page | `[{"name": "蒂姆·罗宾斯"}]` |
| `honors` | Awards Douban lists for the title | `[{"kind": "获奖", "title": "奥斯卡金像奖"}]` |
| `authors`, `presses` | Book author and publisher | `["余华"]`, `["作家出版社"]` |
| `pages`, `price`, `isbn` | Book extent and identifiers | `["283"]`, `["28.00元"]`, `9787506365437` |
| `authorIntro`, `catalog` | Author biography and table of contents | `余华，1960年出生…` |
| `performers`, `media` | Album performers and medium | `["未知艺术家"]`, `CD` |
| `publisher`, `releaseDate`, `discCount` | Album label, date and disc count | `民族音像出版社`, `2004`, `1` |
| `barcode`, `isrc` | Album identifiers | `9787887053411`, `CNM060400690` |
| `coverUrl` | Cover image | `https://img9.doubanio.com/view/subject/m/public/s1415705.jpg` |

#### Person rows (`rowType`: `celebrity`)

| Field | Description | Example |
| --- | --- | --- |
| `id` | Douban person ID | `27253735` |
| `name` | Name as Douban writes it | `蒂姆·罗宾斯` |
| `latinName` | Latin spelling when published | `Tim Robbins` |
| `subtype` | What the person is known as | `演员` |
| `followedCount` | Followers Douban reports | `4321` |
| `roles`, `character` | On a cast row: the job and the part | `["演员"]`, `安迪` |
| `subjectId` | The title a cast row belongs to | `1292052` |

#### Member rows (`rowType`: `user`)

| Field | Description | Example |
| --- | --- | --- |
| `id` | Douban member ID | `3945601` |
| `uid` | Display ID | `example-member` |
| `name` | Display name | `Jane Doe` |
| `avatar` | Avatar image | `https://img1.doubanio.com/icon/u3945601-1.jpg` |
| `kind` | Account kind | `user` |
| `gender`, `ipLocation` | What the profile publishes | `女`, `北京` |
| `location` | Self-declared place | `上海` |
| `regTime` | Registration date | `2009-03-01 12:00:00` |
| `movieCollectedCount`, `bookCollectedCount` | Titles marked as watched or read | `842`, `96` |
| `joinedGroupCount`, `statusesCount` | Groups joined and posts written | `12`, `340` |

- `email` and `phone_number` are never published on a visitor's view of a profile, so they are not written as rows or columns.
- `followers_count` reads 0 for every visitor, so it is treated as unavailable rather than as data.
- A cast row and a person row can both appear in one dataset; filter on `rowType` to work with one kind.

#### Review, comment, still and topic rows

| Field | Description | Example |
| --- | --- | --- |
| `id` | Douban ID of the review, comment, still or topic | `17796919` |
| `subjectId`, `groupId` | The title or group it belongs to | `1292052`, `1` |
| `title`, `abstract` | Review or topic heading and opening text | `希望是好事` |
| `comment` | The short comment itself | `看了三遍，还是会哭。` |
| `rating` | On a comment, `max` is 5 | `{"value": 5, "max": 5}` |
| `usefulCount`, `voteCount` | How many readers found it useful | `1204` |
| `commentsCount` | Replies Douban reports | `312` |
| `createTime` | When it was posted | `2009-06-01 21:04:00` |
| `description` | Still caption | `安迪在雨中` |
| `userId`, `userName`, `userUrl` | The author's public identity | `3945601`, `Jane Doe` |
| `userAvatar`, `userRegTime`, `userLocation` | More of the author's public profile | `上海` |

Every row also carries `source` (`douban.com`), `rowType` and `scrapedAt`.

### How to scrape Douban

1. Open the Actor in Apify Console. A free Apify account is enough to try it.
2. Fill one target: Search terms, Film/book/music IDs, People IDs, Member IDs or Group IDs.
3. Set `maxResults` to `3` for a small first run.
4. Click **Start** and wait for completion.
5. Download the dataset or read it through the Apify API.

Empty input `{}` starts an example search for `肖申克的救赎`, limited to 3 rows. That is a normal priced run, not a free preview. The form prefills use the same example.

With `mode` on Automatic, the field you filled picks the view. Search terms win over subject IDs, which win over people, members and groups. `INPUT_REPORT` records which view ran and what was ignored.

#### Subject search

Enter one or more terms in `keywords`. Each term is its own input with its own row allowance. A term that matches nothing ends as a successful empty run with `emptyReason: NO_MATCH`, which costs no row charge.

#### Subject details

Put IDs in `subjectIds` and choose `subjectType`: `movie` (films and TV series), `book` or `music`. A full Douban link works as well as the number. Switch on the extra row types you want; each review, comment, person or still is one more billed row.

#### People and members

`celebrityIds` reads a director, actor or writer, and `includeWorks` adds one row per work. `userIds` reads a public member profile.

#### Group topics

`groupIds` reads a group's topics, with pinned topics included once at the start of the list.

#### Tags

Pick `mode: tags` for the film tag vocabulary. It takes no target and returns up to `maxResults` tags.

### What to fill in

| Field | What to enter | Default |
| --- | --- | --- |
| `keywords` | One or more search terms, Chinese or English | Empty; form sample `肖申克的救赎` |
| `subjectIds` | Douban subject IDs or links | Empty; form sample `1292052` |
| `subjectType` | `movie`, `book` or `music` | `movie` |
| `celebrityIds` | Douban person IDs or links | Empty |
| `userIds` | Douban member IDs | Empty |
| `groupIds` | Douban group IDs | Empty |
| `mode` | `auto`, `search`, `subjects`, `celebrities`, `users`, `groups`, `tags` | `auto` |
| `maxResults` | Rows per input, `1` to `70` | `70`; form sample `3` |
| `includeReviews` | Add one row per long review | `false` |
| `includeInterests` | Add one row per short comment | `false` |
| `includeCelebrities` | Add one row per cast or crew member | `false` |
| `includePhotos` | Add one row per still | `false` |
| `includeWorks` | Add one row per work of each person | `false` |
| `cursor` | An earlier `RUN_SUMMARY.nextCursor` | Empty |

Subject search:

```json
{"keywords": ["肖申克的救赎"], "maxResults": 3}
```

Film details with extra rows:

```json
{"subjectIds": ["1292052"], "subjectType": "movie", "includeCelebrities": true, "maxResults": 5}
```

Book details:

```json
{"subjectIds": ["26748033"], "subjectType": "book", "maxResults": 2}
```

Album details:

```json
{"subjectIds": ["1407080"], "subjectType": "music", "maxResults": 2}
```

A person with their filmography:

```json
{"celebrityIds": ["27253735"], "includeWorks": true, "maxResults": 5}
```

A public member profile:

```json
{"userIds": ["3945601"], "maxResults": 1}
```

Group topics:

```json
{"groupIds": ["1"], "maxResults": 5}
```

The film tag list:

```json
{"mode": "tags", "maxResults": 20}
```

- `maxItems` and `limit` are accepted aliases for `maxResults`.
- Unknown fields do not fail input resolution. Close misspellings can be corrected; others are ignored with a note.
- Input errors arrive as `INVALID_INPUT: <field> — <how to fix>`, before any row is collected or charged. The start fee is separate.
- `INPUT_REPORT` in the run's key-value store records which fields were filled, normalized, inferred or ignored, including whether the example ran.

### Output example

Illustrative film row, shortened to the main fields; the values are examples, not a freshly collected title:

```json
{
  "source": "douban.com",
  "rowType": "movie",
  "entityType": "movie",
  "id": "1292052",
  "title": "肖申克的救赎",
  "url": "https://movie.douban.com/subject/1292052/",
  "year": "1994",
  "genres": ["剧情", "犯罪"],
  "countries": ["美国"],
  "durations": ["142分钟"],
  "rating": {"value": 9.7, "max": 10, "count": 3353407},
  "cardSubtitle": "美国 / 剧情 犯罪 / 弗兰克·德拉邦特 / 蒂姆·罗宾斯 摩根·弗里曼",
  "isTv": false,
  "scrapedAt": "2026-10-26T09:00:00+00:00"
}
```

You can export the dataset as JSON, CSV, Excel, XML, RSS or an HTML table.

### Why use this Douban scraper?

- **Pay per delivered row.** A film, a review, a comment, a person and a still each cost the same and are counted separately.
- **Ratings keep their scale.** A title rating stays on Douban's 10-point scale and a comment's rating on its 5-point scale, so an average is never silently wrong.
- **Useful partial results.** If a title or group cannot be read, the rows already collected are still delivered with a warning that says what was left out.
- **Explainable empty fields.** A field Douban does not publish stays empty instead of being filled with a guess, and a query Douban blocks is reported as out of scope rather than as "no results".
- **Several inputs per run.** Several search terms or IDs run in one go, each with its own allowance.
- **No proxy setup.** You do not need proxies, cookies or a Douban account.

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

The Actor uses pay-per-event pricing. The start event costs **$0.005**, charged once per GB of run memory with a minimum of one event. At the default **512 MB**, one start costs **$0.005**. Platform usage is included in these prices.

| Apify plan | Price per row | Price per 1,000 rows |
| --- | --- | --- |
| Free | $0.0030 | $3.00 |
| Starter | $0.0030 | $3.00 |
| Scale | $0.0026 | $2.60 |
| Business | $0.0022 | $2.20 |

`maxResults` applies to each input: each search term, subject ID, person ID, member ID or group. Its default is 70, not a promise of 70 matches. A larger request is collected in parts. Every row type shares the allowance of its input, so switching on extra rows does not add a separate allowance.

Free Apify plan runs are capped at **200 rows**, with **10 runs of this Actor** in total. Paid plans remove that run-count restriction, but row limits, what the site publishes and your spending limit still apply. The whole run is capped by **Maximum cost per run** (`maxTotalChargeUsd` in the API).

Example: one search delivering 3 rows on the Free plan costs `3 × $0.003 + $0.005 = $0.014`. A run with no rows has no row charge; it can still incur the start fee.

### Use with AI agents and the API

#### Apify MCP server (Claude, ChatGPT, Cursor, VS Code)

Add this Actor to a client that supports remote MCP servers:

```text
https://mcp.apify.com?tools=lentic_clockss/douban-scraper
```

Sign in with Apify through OAuth, or send `Authorization: Bearer <YOUR_APIFY_TOKEN>`. The tool returns run and dataset IDs; read rows with `get-dataset-items`. Clients without remote support can use `npx @apify/actors-mcp-server --tools lentic_clockss/douban-scraper` with `APIFY_TOKEN` set.

Example prompt: "Read the Douban film page 1292052 and return its title, rating and cast."

#### Apify API

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lentic_clockss/douban-scraper").call(
    run_input={"subjectIds": ["1292052"], "subjectType": "movie", "maxResults": 1}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

JavaScript:

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('lentic_clockss/douban-scraper').call({
    subjectIds: ['1292052'], subjectType: 'movie', maxResults: 1
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

For HTTP, send the JSON input to `POST https://api.apify.com/v2/acts/lentic_clockss~douban-scraper/runs`, with `Authorization: Bearer <YOUR_APIFY_TOKEN>`. After completion, read `GET https://api.apify.com/v2/datasets/<datasetId>/items?format=json`, using the run's `defaultDatasetId`.

#### Integrations

Use Apify integrations with Google Sheets, Make, Zapier, n8n, Slack or Airtable, or connect a webhook. Use Apify Schedules for recurring runs.

### FAQ

#### Is it legal to scrape Douban?

This Actor collects information Douban publishes to visitors. You are responsible for checking Douban's terms and applicable data-protection law, including China's Personal Information Protection Law. Personal data needs a lawful basis for collection and use; public visibility alone does not settle that question.

#### Why did my run end as ABORTED?

Check the run log and status message to identify why it stopped, including whether it was aborted by hand. An aborted run may have delivered rows already, so inspect the dataset before starting another.

#### How many results can I get?

`maxResults` is the row limit for each input, default 70. One subject ID normally yields one row per requested row type; a search term yields as many matching titles as Douban returns, up to the limit. The Free plan caps a run at 200 rows, and your maximum cost can stop a run earlier.

#### Why are some fields empty?

Douban does not publish every field for every title. A film without a rating has too few votes; a profile hides its email address and phone number; an album page may lack a barcode. Empty means "not published", not "not collected".

#### Why did a rating come back as `null`?

Douban shows no average until enough people have rated a title. The row still carries the rating scale so you can see what a value would mean.

#### Why do two row types have different rating scales?

A title rating is Douban's 10-point community score; a short comment carries the commenter's own 5-point score. Each row states its own `max`, so you can compare them without guessing.

#### Why are there several `rowType` values in one dataset?

Extra row types are opt-in and each is a separate entity, so a review and the film it belongs to are separate rows. Filter on `rowType` to work with one kind at a time.

#### Can I continue a large search?

Pass the `RUN_SUMMARY.nextCursor` value back as `cursor` with the same input. A cursor continues that input only, and it is left out when the maximum cost stopped delivery early.

#### Do I need a Douban account?

No. The Actor reads pages Douban shows to visitors and never posts, rates or follows anything on your behalf.

### Limitations

- Fields follow what Douban publishes today. A layout change can leave a field empty until the Actor is updated.
- A member profile shows only the public view: no email address, no phone number, and the follower count Douban reports to visitors is always 0.
- A group's topic rows carry the topic text Douban shows in the list, not the full post body.
- Album pages publish fewer fields than film pages; a track list is not available.
- Ratings and counts are community figures at the time of the run and change over time.
- The site occasionally answers a visitor with a challenge page. The Actor reports that as a failed run; running again later usually works.

### Related scrapers

More social media and video scrapers from the same publisher:

- [TikTok Scraper](https://apify.com/lentic_clockss/tiktok-scraper)
- [Reddit Scraper](https://apify.com/lentic_clockss/reddit-scraper)
- [YouTube Shorts Scraper](https://apify.com/lentic_clockss/youtube-shorts-scraper)
- [YouTube Research Scraper](https://apify.com/lentic_clockss/youtube-research-scraper)
- [Hacker News Scraper](https://apify.com/lentic_clockss/hacker-news-scraper)

Browse all of our scrapers at [apify.com/lentic_clockss](https://apify.com/lentic_clockss).

### Support

Found a problem or need another field? Open an issue in the **Issues** tab of this Actor's page and include the run ID and the input you used.

# Actor input Schema

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

Titles, directors, authors or anything else you would type into Douban's search box, in Chinese or English. Each term is one input, and maxResults applies to each of them.

## `subjectIds` (type: `array`):

Douban subject IDs such as 1292052, or full links such as https://movie.douban.com/subject/1292052/. Used only when Search terms is empty.

## `subjectType` (type: `string`):

Which Douban catalogue the IDs above belong to. Films include TV series, which are tagged automatically.

## `celebrityIds` (type: `array`):

Douban person IDs such as 27253735, or links such as https://www.douban.com/personage/27253735/.

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

Public Douban member IDs, as they appear in https://www.douban.com/people/<id>/. Email addresses and phone numbers are never published on this route and are not collected.

## `groupIds` (type: `array`):

Douban group IDs, the number in https://www.douban.com/group/<id>/. Topic rows carry titles, abstracts and authors.

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

Leave on Automatic unless you want to force one data view. Automatic picks the view from the field you filled.

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

Rows delivered and billed for each input (each search term, ID or group). Child rows such as reviews or cast count toward the same limit. Default 70.

## `includeReviews` (type: `boolean`):

Add one row per long review of each subject. Each row is billed and counts toward Max rows per input.

## `includeInterests` (type: `boolean`):

Add one row per short comment (with the commenter's rating on Douban's 5-point scale).

## `includeCelebrities` (type: `boolean`):

Add one row per director and actor of each film, with their Douban IDs.

## `includePhotos` (type: `boolean`):

Add one row per still, with the uploader's public profile and image links.

## `includeWorks` (type: `boolean`):

For People mode: add one row per work of each person.

## `cursor` (type: `string`):

Leave empty. To read further, pass the nextCursor value from a previous run's RUN_SUMMARY with the same input.

## Actor input object example

```json
{
  "keywords": [
    "肖申克的救赎"
  ],
  "subjectIds": [
    "1292052"
  ],
  "subjectType": "movie",
  "mode": "auto",
  "maxResults": 3,
  "includeReviews": false,
  "includeInterests": false,
  "includeCelebrities": false,
  "includePhotos": false,
  "includeWorks": false
}
```

# Actor output Schema

## `rows` (type: `string`):

Film, book, music, person, member, review, comment, still, topic or search rows from this run.

## `runSummary` (type: `string`):

Run status, delivered row count, warnings and the continuation cursor when more rows remain.

## `inputEcho` (type: `string`):

Input settings used for the run, including applied row limits.

## `inputReport` (type: `string`):

Every input change the resolver made: aliases, inferred mode, example run, ignored fields.

## `errorSummary` (type: `string`):

Failure type and message when the Actor records an error.

# 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 = {
    "keywords": [
        "肖申克的救赎"
    ],
    "subjectIds": [
        "1292052"
    ],
    "maxResults": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("lentic_clockss/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 = {
    "keywords": ["肖申克的救赎"],
    "subjectIds": ["1292052"],
    "maxResults": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("lentic_clockss/douban-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 '{
  "keywords": [
    "肖申克的救赎"
  ],
  "subjectIds": [
    "1292052"
  ],
  "maxResults": 3
}' |
apify call lentic_clockss/douban-scraper --silent --output-dataset

```

## MCP server setup

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