# Douyin Collection Scraper - Series & Short Drama Episodes (`hgservices/douyin-collection-scraper`) Actor

Scrape every episode of a Douyin (抖音) collection (合集) or short drama (短剧) in order: episode number, caption, likes, comments, shares, saves and no-watermark video links, plus the series name, author, episode count and plays. Paste collection or episode links. No login.

- **URL**: https://apify.com/hgservices/douyin-collection-scraper.md
- **Developed by:** [Harish Garg](https://apify.com/hgservices) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 episodes

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

## Douyin Collection Scraper — Get Every Episode of a Series or Short Drama (抖音合集 / 短剧)

The **Douyin Collection Scraper** gets **every episode of a Douyin (抖音) collection (合集) or short drama (短剧)**, in episode order. Paste a collection link, a link to any one episode, or a **creator's profile link** to get all of that creator's collections.

Each episode comes with its **episode number, caption, publish date, duration, likes, comments, shares, saves and a no-watermark video link**. Every row also has the **series name, author, episode count and total plays**.

No Douyin account, no login, no cookies and no coding. Export the episodes to **JSON, CSV, Excel, XML or HTML**, use them through the **Apify API**, or ask an AI assistant such as **Claude** or **ChatGPT** to get them for you.

### What does the Douyin Collection Scraper do?

- 📚 **Scrapes a whole Douyin series in order.** You get episode 1 to the last published episode, with the episode number on every row.
- 🎭 **Works for collections and short dramas.** Use it for creators' collections (合集, also called playlists or series) and for short-drama series (短剧).
- 🔗 **Accepts any episode link.** Paste a link to one episode. The scraper finds its collection and returns all episodes.
- 👤 **Gets all collections of a creator.** Paste a profile link. The scraper finds every collection of that creator and returns their episodes.
- 🆕 **Gets only the new episodes.** Set **Start at episode** to skip the episodes that you already have. This is ideal for scheduled runs on a running series.
- 📊 **Adds engagement stats to each episode.** Likes, comments, shares and saves show which episodes perform best.
- 🎬 **Gives no-watermark video links.** Every video episode has a direct link to the video without the Douyin watermark.
- ✅ **Reports problems clearly.** A removed collection, a video that is not in a collection, or an incorrect link gets a row with an `error` message. A run never fails silently.

### What data can you get from a Douyin collection?

| Data | Fields |
|------|--------|
| Collection | ID, link, name, description, number of episodes, total plays, saves, cover image, created and updated dates |
| Collection author | Name, author ID and profile link |
| Episode | Episode number, video ID, video page link, caption, publish date (UTC), duration |
| Video | No-watermark video link, cover image, image links for photo posts, hashtags |
| Episode author | Name, author ID and profile link |
| Engagement | Likes, comments, shares and saves |

### Input

| Field | Required | Description |
|-------|----------|-------------|
| **Collection, episode or profile links, or IDs** (`collectionUrls`) | Yes | One or more links or IDs. See the list of accepted links below. |
| **Max episodes per collection** (`maxEpisodesPerCollection`) | No | Stops after this many episodes in each collection. Leave it empty to get all episodes. |
| **Start at episode** (`startEpisode`) | No | Skips the episodes before this episode number in every collection. Leave it empty to start at episode 1. |

#### Which links can you use?

- A collection or short-drama link: `https://www.douyin.com/collection/7476716946881251362`
- A link to any episode: `https://www.douyin.com/video/7663759369313586482`
- A creator's profile link, for all of their collections: `https://www.douyin.com/user/MS4wLjABAAAAgq8cb7cn9ByhZbmx-XQDdRTvFzmJeBBXOUO4QflP96M`
- A `v.douyin.com` share link from the Douyin app, for a collection, an episode or a profile
- A plain collection ID: `7476716946881251362`

A profile link must contain the long `MS4wLjABAAAA…` ID. A short numeric user ID such as `https://www.douyin.com/user/85660211731` does not work. Open the profile on www.douyin.com and copy the link from the address bar.

#### Input example

```json
{
    "collectionUrls": [
        "https://www.douyin.com/collection/7476716946881251362",
        "https://www.douyin.com/video/7663759369313586482",
        "https://www.douyin.com/user/MS4wLjABAAAAgq8cb7cn9ByhZbmx-XQDdRTvFzmJeBBXOUO4QflP96M"
    ],
    "maxEpisodesPerCollection": 40
}
```

### Output

You get one row for each episode. This is episode 1 of the series "零基础看懂全球", from an episode link. The long links are shortened here.

```json
{
    "sourceInput": "https://www.douyin.com/video/7663759369313586482",
    "collectionId": "7661908799594170404",
    "collectionUrl": "https://www.douyin.com/collection/7661908799594170404",
    "collectionName": "零基础看懂全球",
    "collectionDesc": "零基础看懂全球",
    "collectionEpisodeCount": 96,
    "collectionPlayCount": 42882006,
    "collectionSaveCount": 177240,
    "collectionAuthorName": "凯老通史",
    "collectionAuthorSecUid": "MS4wLjABAAAAsEmTm9HiayqTZqvdCH4KwajBpyG7ZdMsEz1ixZmRL7I",
    "collectionAuthorProfileUrl": "https://www.douyin.com/user/MS4wLjABAAAAsEmTm9HiayqTZqvdCH4KwajBpyG7ZdMsEz1ixZmRL7I",
    "collectionCoverUrl": "https://p3-sign.douyinpic.com/obj/tos-cn-i-dy/637c30b8875c44f4b26adac91738c7ee?...",
    "collectionCreateTime": "2026-07-13T07:19:17+00:00",
    "collectionUpdateTime": "2026-10-15T01:03:22+00:00",
    "episode": 1,
    "awemeId": "7661908441769757979",
    "url": "https://www.douyin.com/video/7661908441769757979",
    "desc": "一个外国人能为中国的苦难走多远？  巴黎街头一幕让中国人破防 #南京大屠杀 #零基础看懂全球  #全球创作者计划",
    "createTime": "2026-07-13T07:17:59+00:00",
    "authorName": "凯老通史",
    "secUserId": "MS4wLjABAAAAsEmTm9HiayqTZqvdCH4KwajBpyG7ZdMsEz1ixZmRL7I",
    "authorProfileUrl": "https://www.douyin.com/user/MS4wLjABAAAAsEmTm9HiayqTZqvdCH4KwajBpyG7ZdMsEz1ixZmRL7I",
    "durationMs": 246109,
    "isVideo": true,
    "videoUrlNoWatermark": "https://www.douyin.com/aweme/v1/play/?video_id=v0300fg10000d9a8ucnog65jb4umof40&...",
    "cover": "https://p3-pc-sign.douyinpic.com/tos-cn-p-0015/o0BIIcsSwzUT4DASxAWkPhAQigavvMI1PilIP~tplv-dy-360p.jpeg?...",
    "images": [],
    "hashtags": ["零基础看懂全球", "全球创作者计划"],
    "diggCount": 2327,
    "commentCount": 112,
    "shareCount": 67,
    "collectCount": 173
}
```

`diggCount` is the number of likes and `collectCount` is the number of saves.

If an input does not give episodes, you get one row with an `error` message instead:

```json
{
    "sourceInput": "7688751380592381222",
    "error": "This video is not part of a collection (合集) or short drama (短剧)."
}
```

### How to use the Douyin Collection Scraper

You can run the scraper in Apify Console, through the Apify API, or from an AI assistant. All examples below use the same input.

#### In Apify Console (no coding)

1. Open the Douyin Collection Scraper and click **Try for free**.
2. Paste `https://www.douyin.com/collection/7476716946881251362` into **Collection, episode or profile links, or IDs**. You can add more links, one on each line.
3. Optional: set **Max episodes per collection** to get a sample, or **Start at episode** to skip earlier episodes.
4. Click **Start**.
5. When the run finishes, open the **Output** tab. Click **Export** to download the episodes as JSON, CSV, Excel, XML or HTML.

To get new episodes automatically, save the input as a **task** and add a **schedule**, for example once a day.

#### With the Apify API

Get your API token in Apify Console, in **Settings → API & Integrations**. Replace `YOUR_API_TOKEN` in the examples with it.

##### HTTP (cURL)

This request starts the scraper, waits for it to finish and returns the episodes in the response:

```bash
curl -X POST "https://api.apify.com/v2/acts/hgservices~douyin-collection-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"collectionUrls": ["https://www.douyin.com/collection/7476716946881251362"]}'
```

The request waits up to 5 minutes. For very long series or many profiles, start the run without waiting and read the results when it finishes:

```bash
## 1. Start the run. The response contains the run "id" and its "defaultDatasetId".
curl -X POST "https://api.apify.com/v2/acts/hgservices~douyin-collection-scraper/runs?token=YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"collectionUrls": ["https://www.douyin.com/collection/7476716946881251362"]}'

## 2. When the run status is SUCCEEDED, download the episodes as CSV.
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&token=YOUR_API_TOKEN" -o episodes.csv
```

##### JavaScript / Node.js (apify-client)

Install the client with `npm install apify-client`.

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });

const run = await client.actor('hgservices/douyin-collection-scraper').call({
    collectionUrls: ['https://www.douyin.com/collection/7476716946881251362'],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const ep of items) {
    console.log(ep.episode, ep.desc, ep.diggCount);
}
```

##### Python (apify-client)

Install the client with `pip install apify-client`. This example is for version 3 or later.

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("hgservices/douyin-collection-scraper").call(run_input={
    "collectionUrls": ["https://www.douyin.com/collection/7476716946881251362"],
})

for ep in client.dataset(run.default_dataset_id).iterate_items():
    print(ep.get("episode"), ep.get("desc"), ep.get("diggCount"))
```

The **API** tab of the scraper page has more examples, including webhooks that tell you when a run finishes.

#### With Claude, ChatGPT and other AI assistants (Apify MCP server)

AI assistants can run the scraper through the **Apify MCP server**. Use this server address, which gives the assistant the Douyin Collection Scraper as a tool:

```text
https://mcp.apify.com?tools=hgservices/douyin-collection-scraper
```

You sign in to Apify the first time that you connect. You do not need to copy your API token.

**Claude (claude.ai and Claude Desktop)**

1. Open **Settings → Connectors**.
2. Click **Add**, then **Add custom connector**.
3. Type `Apify` as the name and paste the server address above as the **Remote MCP server URL**.
4. Click **Add** and sign in to Apify.

On Claude Team and Enterprise plans, an organization owner must add the connector.

**Claude Code**

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=hgservices/douyin-collection-scraper"
```

**ChatGPT**

1. Turn on **Developer mode** in ChatGPT. Custom connectors need it.
2. Open **Settings → Apps & Connectors** and click **Create**.
3. Type a name, for example `Apify Douyin`, and paste the server address above as the **MCP Server URL**.
4. Select **OAuth** as the authentication, click **Create** and sign in to Apify.
5. In a new chat, click **+**, then **More**, and select the connector.

**Cursor, VS Code, Windsurf and other MCP clients**

Add this to the MCP configuration of your client:

```json
{
    "mcpServers": {
        "apify": {
            "url": "https://mcp.apify.com?tools=hgservices/douyin-collection-scraper"
        }
    }
}
```

**Example prompts**

- *"Get all episodes of the Douyin short drama https://www.douyin.com/collection/7476716946881251362 and show the 10 episodes with the most likes."*
- *"List all collections of the Douyin creator https://www.douyin.com/user/MS4wLjABAAAAgq8cb7cn9ByhZbmx-XQDdRTvFzmJeBBXOUO4QflP96M with their episode counts and total plays."*
- *"Get the episodes of https://www.douyin.com/collection/7476716946881251362 from episode 70 and summarize their captions."*

### Use cases

- **Short-drama market research.** Compare series and episodes in the fast-growing Douyin short-drama (短剧) market.
- **Audience retention analysis.** See how likes, comments and saves change from episode 1 to the last episode.
- **Creator analytics.** Measure how all of a creator's collections perform, with plays and saves for each series.
- **Series monitoring.** Run the scraper on a schedule and get each new episode of a running series.
- **Content archiving.** Save a complete series with its episode order, captions and video links.
- **Datasets for AI and research.** Build ordered episode datasets with captions, hashtags and engagement data.

### Integrations

Send the episodes to the tools that you already use with Apify integrations: **Google Sheets, Google Drive, Slack, Make, Zapier, n8n, Airbyte, GitHub** and webhooks.

To follow a running series, schedule a daily run. Set **Start at episode** to the last episode that you have plus 1, so each run gets only the new episodes.

### Tips for the best results

- **Episode links are enough.** You do not need the collection page. Any episode link returns the whole series.
- **Get a sample first.** For a long series or a large creator, set **Max episodes per collection** to a small number, for example 5.
- **Each collection comes once.** If two inputs point to the same collection, you get its episodes one time.
- **Download videos soon.** The no-watermark video links expire after some time. Download the videos soon after the run.
- **Paid short dramas.** Some short dramas lock later episodes behind payment in the Douyin app. Those episodes can come without a video link.

### FAQ

**What is a Douyin collection (合集)?**
A collection is a playlist that a creator makes from their own videos. It is often a series with numbered episodes.

**What is a Douyin short drama (短剧)?**
A short drama is a series of short vertical episodes, usually 1 to 3 minutes each. On Douyin, a short drama is a special kind of collection, and this scraper gets it in the same way.

**Do I need a Douyin account?**
No. The scraper works without a Douyin account, a password or cookies.

**Can I get all collections of a creator?**
Yes. Paste the creator's profile link. The scraper finds every collection that has episodes and returns them all. Use **Max episodes per collection** to limit a large creator. A creator with no collections gets one row that tells you so.

**Can I get only the new episodes of a series?**
Yes. Set **Start at episode** to the first episode that you do not have. The scraper skips the earlier episodes. If the series has no new episodes, the run returns no rows for it.

**Can I get all videos of a creator?**
Not with this scraper. It returns only the videos that are in collections. To get all videos of a creator, use the [Douyin Profile Scraper](https://apify.com/hgservices/douyin-profile-scraper).

**Can I download the videos without a watermark?**
Yes. Each video episode has a `videoUrlNoWatermark` link. Open or download the link soon after the run, because it expires.

**Does it work with TikTok playlists?**
No. This scraper works with Douyin, the Chinese version of TikTok, only.

### Other Douyin scrapers

- [Douyin Video Downloader & Scraper](https://apify.com/hgservices/douyin-scraper) — get Douyin videos with stats and no-watermark links.
- [Douyin Profile Scraper](https://apify.com/hgservices/douyin-profile-scraper) — get all videos of a Douyin creator.
- [Douyin Search Scraper](https://apify.com/hgservices/douyin-search-scraper) — find Douyin videos by keyword.
- [Douyin Comments Scraper](https://apify.com/hgservices/Douyin-Comments-Scraper) — get the comments under Douyin videos.
- [Douyin Related Videos Scraper](https://apify.com/hgservices/douyin-related-videos-scraper) — get similar and recommended videos.
- [Douyin AI Transcript Scraper](https://apify.com/hgservices/douyin-ai-transcript-scraper) — get the transcripts of Douyin videos.

### Is it legal to scrape Douyin?

This scraper collects only **publicly available** data. You are responsible for how you use the data. Obey Douyin's terms of service and the laws that apply to you, such as the GDPR and copyright law. Do not use the content in ways that infringe the rights of creators and rights holders.

### Feedback and support

Did you find a problem, or do you need a new field? Open an issue on the **Issues** tab.

# Actor input Schema

## `collectionUrls` (type: `array`):

Douyin collection or short-drama links (https://www.douyin.com/collection/7476716946881251362), a link to any episode video of the collection (https://www.douyin.com/video/...), a creator's profile link (https://www.douyin.com/user/MS4wLjABAAAA...) for all of their collections, v.douyin.com share links, or plain numeric collection IDs. You get every episode of each collection, in episode order.

## `maxEpisodesPerCollection` (type: `integer`):

Stop after this many episodes for each collection, counted from the start episode. Leave empty to get all episodes.

## `startEpisode` (type: `integer`):

Skip the episodes before this episode number in every collection. On a schedule, set it to the last episode you have plus 1 to get only the new episodes. Skipped episodes are not fetched and cost nothing. Leave empty to start at episode 1.

## Actor input object example

```json
{
  "collectionUrls": [
    "https://www.douyin.com/collection/7476716946881251362"
  ]
}
```

# Actor output Schema

## `episodes` (type: `string`):

One item per episode: the collection (ID, link, name, description, episode count, plays, saves, author, cover, created and updated times), episode number, video ID and URL, caption, publish time, author, duration, no-watermark video link, cover, images, hashtags and engagement counts (likes, comments, shares, saves).

# 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 = {
    "collectionUrls": [
        "https://www.douyin.com/collection/7476716946881251362"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hgservices/douyin-collection-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 = { "collectionUrls": ["https://www.douyin.com/collection/7476716946881251362"] }

# Run the Actor and wait for it to finish
run = client.actor("hgservices/douyin-collection-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 '{
  "collectionUrls": [
    "https://www.douyin.com/collection/7476716946881251362"
  ]
}' |
apify call hgservices/douyin-collection-scraper --silent --output-dataset

```

## MCP server setup

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