# Douyin 抖音 Comments Scraper - Comments & Replies (`zen-studio/douyin-comments-scraper`) Actor

Scrape Douyin (抖音) video comments and replies. Each row is one top-level comment with author info, like count, region, and (optionally) all replies nested. Supports any Douyin video URL or aweme ID.

- **URL**: https://apify.com/zen-studio/douyin-comments-scraper.md
- **Developed by:** [Zen Studio](https://apify.com/zen-studio) (community)
- **Categories:** Social media, Videos, Automation
- **Stats:** 2 total users, 1 monthly users, 80.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.99 / 1,000 comments

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

## Douyin Comments Scraper (抖音) — Comments, Replies, Author Profiles & Engagement (2026)

<blockquote style="border-left:4px solid #4C945E;background:#F0FDF4;padding:12px 16px">
<span style="font-size:16px;font-weight:700;color:#1C1917">Scrape every top-level comment (评论) on any Douyin (抖音) video — with author profile, like count, region, pinned / author-liked flags, and the full reply tree (回复) nested under each row</span> <span style="font-size:15px;color:#57534E"> — one row per comment, clean structured JSON, billed per result.</span>
</blockquote>

![Douyin Comments Scraper](https://iili.io/BbkoYZv.png)

#### Copy to your AI assistant

````

zen-studio/douyin-comments-scraper on Apify. Scrapes Douyin video comments and (optionally) nested replies. One row per top-level comment with 15 top-level fields + 4-field user object + replies\[] array of the same shape. Call ApifyClient("TOKEN").actor("zen-studio/douyin-comments-scraper").call(run\_input={...}), then client.dataset(run\["defaultDatasetId"]).list\_items().items. Required: awemeUrls (string\[] — full douyin.com/video/<id> URLs, iesdouyin.com share URLs, or bare numeric aweme IDs; short v.douyin.com share links not supported). Optional: maxCommentsPerAweme (int 1–5000, default 100), includeReplies (bool, default false), maxRepliesPerComment (int 1–2000, default 100). Pricing: $5.99 per 1,000 items — each comment AND each reply counts as one item (replies are nested in parent rows). Full spec: GET https://api.apify.com/v2/acts/zen-studio~douyin-comments-scraper/builds/default (Bearer TOKEN) → inputSchema, actorDefinition.storages.dataset, readme. Token: https://console.apify.com/account/integrations

````

<table>
<tr>
<td colspan="5" style="padding:10px 14px;background:#4C945E;border:none;border-radius:4px 4px 0 0">
<span style="color:#FAFAF9;font-size:14px;font-weight:700;letter-spacing:0.5px">Zen Studio · 抖音 + 西瓜视频 (Xigua)</span>
<span style="color:#E8F5E9;font-size:13px">&nbsp;&nbsp;&bull;&nbsp;&nbsp;Full-stack China short-video data: search, profiles, posts, comments, transcripts</span>
</td>
</tr>
<tr>
<td style="padding:12px 16px;border:1px solid #E7E5E4;border-radius:0 0 0 4px;background:#E8F5E9;border-right:none;border-top:none;vertical-align:top;width:20%">
<a href="https://apify.com/zen-studio/douyin-comments-scraper" style="color:#4C945E;text-decoration:none;font-weight:700;font-size:14px">Douyin Comments</a><br>
<span style="color:#4C945E;font-size:12px;font-weight:600">&#10148; You are here</span>
</td>
<td style="padding:12px 16px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:20%">
<a href="https://apify.com/zen-studio/douyin-search-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:14px">Douyin Search</a><br>
<span style="color:#78716C;font-size:12px">Keyword search + filters</span>
</td>
<td style="padding:12px 16px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:20%">
<a href="https://apify.com/zen-studio/douyin-profile-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:14px">Douyin Profiles</a><br>
<span style="color:#78716C;font-size:12px">博主 followers, posts, hashtags</span>
</td>
<td style="padding:12px 16px;border:1px solid #E7E5E4;border-right:none;border-top:none;vertical-align:top;width:20%">
<a href="https://apify.com/zen-studio/douyin-video-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:14px">Douyin Video</a><br>
<span style="color:#78716C;font-size:12px">Metadata + MP4 download</span>
</td>
<td style="padding:12px 16px;border:1px solid #E7E5E4;border-radius:0 0 4px 0;border-top:none;vertical-align:top;width:20%">
<a href="https://apify.com/zen-studio/douyin-transcripts-scraper" style="color:#1C1917;text-decoration:none;font-weight:700;font-size:14px">Douyin Transcripts</a><br>
<span style="color:#78716C;font-size:12px">字幕 + 50-language translation</span>
</td>
</tr>
</table>

### How to Scrape Douyin Comments (抖音评论)

#### Basic — one video, top 100 comments

```json
{
  "awemeUrls": ["https://www.douyin.com/video/7577614489533680959"],
  "maxCommentsPerAweme": 100
}
````

#### Top 500 comments + every reply tree under each one

```json
{
  "awemeUrls": ["https://www.douyin.com/video/7577614489533680959"],
  "maxCommentsPerAweme": 500,
  "includeReplies": true,
  "maxRepliesPerComment": 200
}
```

#### Batch — many videos at once, comments only

```json
{
  "awemeUrls": [
    "https://www.douyin.com/video/7577614489533680959",
    "https://www.douyin.com/video/7579679818335175483",
    "7610711200906065509",
    "https://www.iesdouyin.com/share/video/7584089129034761019/"
  ],
  "maxCommentsPerAweme": 250
}
```

### Input Parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `awemeUrls` | string\[] | *required* | Douyin video URLs or aweme IDs. See accepted formats below. |
| `maxCommentsPerAweme` | integer | `100` | Top-level comments to fetch per video (1–5,000). Cost scales with the number of unique comments delivered. |
| `includeReplies` | boolean | `false` | Also fetch every reply tree under each top-level comment. Replies are nested inside `replies[]` on the parent row and billed at the same per-item price. |
| `maxRepliesPerComment` | integer | `100` | Cap on replies fetched under each top-level comment (1–2,000). Only effective when `includeReplies` is on. |

#### Accepted aweme formats

| Format | Example |
|---|---|
| Browser address bar | `https://www.douyin.com/video/7577614489533680959` |
| Legacy share link | `https://www.iesdouyin.com/share/video/7577614489533680959/` |
| Bare numeric aweme ID | `7577614489533680959` |

> Short app share links like `https://v.douyin.com/iAbc123/` are **not** supported. Open them in a browser first and paste the full `douyin.com/video/<id>` URL.

Duplicate aweme IDs (across formats) are deduped automatically, so you never pay twice for the same video's comments.

### What Data Can You Extract from Douyin Comments (抖音评论)?

One row per top-level comment. Each row carries **15 top-level fields** including the commenter's user object (4 fields nested under `user`). When `includeReplies` is on, every reply for that comment is nested under `replies[]` in the same shape.

#### Output Example

Every top-level field is shown below. Long avatar URLs and the reply array are trimmed with `…`.

```json
{
  "id": "7578047136747717434",
  "text": "猪蹄爆米花，他们这么这么会吃[懵]",
  "createTime": 1764401595,
  "createDate": "2025-11-29",
  "likeCount": 429409,
  "replyCount": 8165,
  "isAuthorLiked": false,
  "isPinned": false,
  "isLiked": false,
  "region": null,
  "user": {
    "id": "74136233600",
    "secUid": "MS4wLjABAAAAXX8Vg_PQJIvUQivRx6JFGTQrI45qmEi7UZJSgb6dwlk",
    "nickname": "aiqi",
    "avatarUrl": "https://p11.douyinpic.com/aweme-avatar/tos-cn-i-0813c000-ce_oYItx6w3nEABEAJpA4AaQoIlfGAEeCEoXD39kF~tplv-dy-shrink:64:64.jpeg?from=2956013662"
  },
  "replies": [
    {
      "id": "7580014842238174006",
      "text": "[泪奔]也不是卤鸭脖卤鸭头",
      "createTime": 1764859738,
      "createDate": "2025-12-04",
      "likeCount": 2624,
      "replyCount": 0,
      "isAuthorLiked": false,
      "isPinned": false,
      "isLiked": false,
      "region": null,
      "user": {
        "id": "94540959329",
        "secUid": "MS4wLjABAAAA8fN97d6ydIoiGVTCU2_yv8gZWjNAaECgm-21MiXqPsU",
        "nickname": "_ 雷小姐",
        "avatarUrl": "https://p26.douyinpic.com/aweme-avatar/tos-cn-i-0813c001_740645b1532d4fc88fbcadc6585267cd~tplv-dy-shrink:64:64.jpeg?from=2956013662"
      }
    },
    {
      "id": "7606775985363927848",
      "text": "更不是干噎酸奶僵尸肉巨大串串[黑脸]",
      "createTime": 1771090555,
      "createDate": "2026-02-14",
      "likeCount": 748,
      "replyCount": 0,
      "isAuthorLiked": false,
      "isPinned": false,
      "isLiked": false,
      "region": null,
      "user": {
        "id": "102079005652",
        "secUid": "MS4wLjABAAAAlQzbs1EDN7DefE-lGo0SSUSd8oPkfUeq02PqOD38gtU",
        "nickname": "Cheese",
        "avatarUrl": "https://p26.douyinpic.com/aweme-avatar/tos-cn-i-0813_o0BZ1NvoAM4V0iAAgi2CA3CCifIAaEpge9DA5z~tplv-dy-shrink:64:64.jpeg?from=2956013662"
      }
    }
  ],
  "awemeId": "7579679818335175483",
  "awemeUrl": "https://www.douyin.com/video/7579679818335175483",
  "inputUrl": "https://www.douyin.com/video/7579679818335175483"
}
```

#### Field reference

| Field | Type | Notes |
|---|---|---|
| `id` | string | Comment ID (Douyin `cid`). Stable across runs. |
| `text` | string | Comment body (评论内容), including emoji codes like `[流泪]` Douyin renders as stickers. |
| `createTime` | integer | Unix seconds. |
| `createDate` | string | ISO date (`YYYY-MM-DD`) derived from `createTime`. |
| `likeCount` | integer | Number of likes on this comment. |
| `replyCount` | integer | Server-reported total replies on this comment. May exceed `replies.length` when a thread is long or rate-shaped by Douyin. |
| `isAuthorLiked` | boolean | True when the video's creator liked this comment. |
| `isPinned` | boolean | True when the creator pinned this comment to the top. |
| `isLiked` | boolean | True when the account currently signed in liked this comment — for a scraper account this is effectively always `false`. |
| `region` | string | null | Chinese province the commenter posted from (when public). Often `null` for non-Mainland users. |
| `user.id` | string | Commenter's numeric Douyin user ID. |
| `user.secUid` | string | Commenter's stable `sec_uid` (use this as the cross-actor key — feeds into the Profile scraper). |
| `user.nickname` | string | Display name. |
| `user.avatarUrl` | string | Signed CDN URL for the commenter's avatar (≈64×64). Short-lived — see FAQ. |
| `replies` | object\[] | Nested array of replies (回复) in exactly the same shape as the parent row. Empty when `includeReplies` is off or the comment has none. |
| `awemeId` | string | Parent video's aweme ID. |
| `awemeUrl` | string | Canonical video URL (`https://www.douyin.com/video/<id>`), or the original URL you supplied if it was already a full one. |
| `inputUrl` | string | The exact string you supplied — useful for joining results back to your source list. |

### Advanced Usage

#### Tracking the conversation under a viral video

```json
{
  "awemeUrls": ["https://www.douyin.com/video/7579679818335175483"],
  "maxCommentsPerAweme": 5000,
  "includeReplies": true,
  "maxRepliesPerComment": 200
}
```

Pulls every top-level comment Douyin will surface plus the full reply tree under each. Use the `isPinned` and `isAuthorLiked` flags to separate creator-endorsed threads from organic discussion. The 3-rule stop policy ensures you don't pay for runaway pagination once Douyin starts repeating itself.

#### Sentiment / topic mining across a creator's catalog

```json
{
  "awemeUrls": [
    "https://www.douyin.com/video/7577614489533680959",
    "https://www.douyin.com/video/7579679818335175483",
    "https://www.douyin.com/video/7584089129034761019",
    "https://www.douyin.com/video/7610711200906065509",
    "..."
  ],
  "maxCommentsPerAweme": 500
}
```

Up to 10 videos run in parallel. Each row carries `awemeId` so you can group by video downstream. Pair with the Profile scraper to enumerate a creator's catalog first.

#### Audience location — who's commenting from where

```json
{
  "awemeUrls": ["https://www.douyin.com/video/7577614489533680959"],
  "maxCommentsPerAweme": 2000
}
```

Group by `region` to see which Chinese provinces engage most with a given video. Non-Mainland commenters surface as `null` — useful in itself as an overseas-engagement signal.

#### Author engagement signal — what does the creator like back?

```json
{
  "awemeUrls": ["https://www.douyin.com/video/7577614489533680959"],
  "maxCommentsPerAweme": 1000,
  "includeReplies": false
}
```

Filter rows where `isAuthorLiked === true` to see which top-level comments the video's creator endorsed. A reliable proxy for which audience reactions resonate.

#### Cross-actor pipeline — comments → commenter profiles

```json
{
  "awemeUrls": ["https://www.douyin.com/video/7577614489533680959"],
  "maxCommentsPerAweme": 500
}
```

Take `user.secUid` from every row and feed it into the **Douyin Profile** scraper to enrich each commenter with follower count, bio, total likes received, gender, IP location, and verified status. The `secUid` is the canonical cross-actor key.

### Pricing — Pay Per Event (PPE)

**$5.99 per 1,000 items.** Each top-level comment counts as one item. Each reply nested under a comment counts as one item too. Failed pages, retries, and unparseable comments are not billed.

| Event | Per call | Per 1,000 |
|-------|----------|-----------|
| `result` (one comment OR one reply) | $0.00599 | $5.99 |

Because replies are delivered **inside** the parent row's `replies[]` array (not as separate dataset rows), your dataset row count will be lower than your billed item count when replies are on. Set a per-run charge cap on your Apify run to control spend.

#### Free tier

10 lifetime runs, capped at 2 pages of comments per video, replies disabled, and up to 3 videos per run. No credit card. Plenty for evaluation; combine 3 videos × ~40 comments = a ~120-row sample per run.

### FAQ

**How many fields are returned per comment?**
15 top-level fields per row, with `user` containing 4 fields nested (`id`, `secUid`, `nickname`, `avatarUrl`). When `includeReplies` is on, the `replies[]` array carries replies in the exact same shape.

**How many comments can I expect per video?**
Most videos surface 200–5,000 unique comments before Douyin's backend stops returning new ones, even on videos with comment counts in the hundreds of thousands. The actor uses a 3-rule stop policy — when Douyin starts returning mostly duplicates or repeats the same window, pagination ends early. You're only billed for unique comments delivered to your dataset.

**Are pinned comments included?**
Yes. Pinned comments are returned alongside all other top-level comments, with `isPinned: true`. They typically come first in the result order because that's how Douyin surfaces them.

**Are likes-on-replies returned?**
Yes. When `includeReplies` is on, each reply carries its own `likeCount`. Replies don't have their own nested `replies[]` (Douyin's comment threads are 2-level deep — top-level comment + flat reply list), so reply rows have `replies: []`.

**Does the order of comments matter?**
Comments are returned in the order Douyin surfaces them — typically a mix of recency, like count, and platform signals (`hot`, pinned, author-liked). The exact algorithm is server-side and not documented; if you need a strict sort, do it client-side after collection using `likeCount` or `createTime`.

**Can I get the full commenter profile (followers, bio, etc.)?**
Not from this actor. Each row carries the commenter's `user.secUid` and `user.id` — feed `secUid` into the **Douyin Profile** scraper to enrich each commenter with 46 author fields. The 5-actor suite is designed for exactly this fan-out.

**How fresh is the data?**
Live — every comment and reply is fetched on demand at run time. No caching.

**Are the avatar URLs permanent?**
No. `user.avatarUrl` is a short-lived signed CDN URL that typically expires within 7–14 days. If you need long-term avatars, copy `user.secUid` and use the Profile scraper, which returns multiple avatar size variants per run — or download the image bytes during your own pipeline.

**Can I scrape direct messages / private comments?**
No. Public top-level comments and their replies only — anything a logged-out web visitor can see on the video page.

**What's the maximum `maxCommentsPerAweme`?**
5,000. In practice most videos cap out below this — Douyin returns increasingly duplicate pages once you exhaust the surfaced pool, and the 3-rule stop policy ends pagination automatically when yield drops.

**Does the actor work for any Douyin video?**
Any public video. Private videos, age-gated content, and region-restricted videos may return zero or partial results depending on what Douyin's public comment endpoint exposes.

### Support

- **Bugs**: Issues tab
- **Features**: Issues tab

### Legal Compliance

Extracts publicly available data from Douyin (抖音). Users must comply with Douyin's terms of service and applicable data protection regulations (GDPR, CCPA).

***

*Structured Douyin video comments — full author profile, region, like count, pinned / author-liked flags, nested replies — one row per comment, in clean JSON.*

# Actor input Schema

## `awemeUrls` (type: `array`):

Add one or more Douyin videos (抖音视频) you want comments for.<br><br>Accepted formats:<ul><li>Browser address bar: <code>https://www.douyin.com/video/7577614489533680959</code></li><li>Legacy share: <code>https://www.iesdouyin.com/share/video/7577614489533680959/</code></li><li>Bare numeric aweme ID: <code>7577614489533680959</code></li></ul><i>Tip: short app share links like <code>v.douyin.com/iAbc123/</code> aren't supported — open them in a browser and paste the full URL.</i>

## `maxCommentsPerAweme` (type: `integer`):

How many top-level comments to fetch per video. Cost scales with the number of unique comments delivered.<br><br><ul><li>Default: <code>100</code>. Maximum: <code>5000</code>.</li><li>Pagination stops early once a video reaches its available comment depth.</li></ul>

## `includeReplies` (type: `boolean`):

When enabled, every top-level comment with replies (回复) is followed by its reply tree. Replies are billed at the same per-row price as top-level comments and are nested inside <code>replies\[]</code> on the parent row.

## `maxRepliesPerComment` (type: `integer`):

Cap on replies to fetch under each top-level comment. Only effective when <b>Include replies</b> is on.<br><br><ul><li>Default: <code>100</code>. Maximum: <code>2000</code>.</li></ul>

## Actor input object example

```json
{
  "awemeUrls": [
    "https://www.douyin.com/video/7577614489533680959"
  ],
  "maxCommentsPerAweme": 100,
  "includeReplies": false,
  "maxRepliesPerComment": 100
}
```

# Actor output Schema

## `comments` (type: `string`):

Link to the dataset containing all scraped Douyin comments and their replies.

# 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 = {
    "awemeUrls": [
        "https://www.douyin.com/video/7577614489533680959"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zen-studio/douyin-comments-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 = { "awemeUrls": ["https://www.douyin.com/video/7577614489533680959"] }

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Douyin 抖音 Comments Scraper - Comments & Replies",
        "description": "Scrape Douyin (抖音) video comments and replies. Each row is one top-level comment with author info, like count, region, and (optionally) all replies nested. Supports any Douyin video URL or aweme ID.",
        "version": "0.0",
        "x-build-id": "Mcii7hJt7opkeudV3"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/zen-studio~douyin-comments-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-zen-studio-douyin-comments-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/zen-studio~douyin-comments-scraper/runs": {
            "post": {
                "operationId": "runs-sync-zen-studio-douyin-comments-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/zen-studio~douyin-comments-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-zen-studio-douyin-comments-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",
                "required": [
                    "awemeUrls"
                ],
                "properties": {
                    "awemeUrls": {
                        "title": "🎬 Video URLs or aweme IDs",
                        "type": "array",
                        "description": "Add one or more Douyin videos (抖音视频) you want comments for.<br><br>Accepted formats:<ul><li>Browser address bar: <code>https://www.douyin.com/video/7577614489533680959</code></li><li>Legacy share: <code>https://www.iesdouyin.com/share/video/7577614489533680959/</code></li><li>Bare numeric aweme ID: <code>7577614489533680959</code></li></ul><i>Tip: short app share links like <code>v.douyin.com/iAbc123/</code> aren't supported — open them in a browser and paste the full URL.</i>",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxCommentsPerAweme": {
                        "title": "💬 Maximum comments per video",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "How many top-level comments to fetch per video. Cost scales with the number of unique comments delivered.<br><br><ul><li>Default: <code>100</code>. Maximum: <code>5000</code>.</li><li>Pagination stops early once a video reaches its available comment depth.</li></ul>",
                        "default": 100
                    },
                    "includeReplies": {
                        "title": "↪️ Include replies",
                        "type": "boolean",
                        "description": "When enabled, every top-level comment with replies (回复) is followed by its reply tree. Replies are billed at the same per-row price as top-level comments and are nested inside <code>replies[]</code> on the parent row.",
                        "default": false
                    },
                    "maxRepliesPerComment": {
                        "title": "↪️ Maximum replies per comment",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Cap on replies to fetch under each top-level comment. Only effective when <b>Include replies</b> is on.<br><br><ul><li>Default: <code>100</code>. Maximum: <code>2000</code>.</li></ul>",
                        "default": 100
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
