# Douyin Scraper - Hot Topics, Videos, Comments & Creator Leads (`scrapesage/douyin-scraper`) Actor

Scrape Douyin (抖音) without a login: the live hot board, videos with EXACT engagement counts (not rounded), comments with the commenter's province, Douyin's own content categories, and ranked creator/KOL leads with exact followers. No browser. Export CSV/JSON.

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

## Pricing

from $4.00 / 1,000 video 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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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 Scraper - Hot Topics, Videos, Comments & Creator Leads

Scrape **Douyin (抖音)** - China's TikTok, 700M+ daily users - without a login, a browser or a Chinese phone number.

Get **what is trending in China right now**, the videos driving it, **exact** engagement numbers, the comments underneath (with the commenter's province), and a ranked list of the creators behind it all.

> **Demand receipt (why this exists).** 54 Douyin scrapers on the Apify Store share **5,289 users / 1,110 in the last 30 days**, yet no one owns the category: the market leader holds 1,734 users and a **2.7-star rating from 8 reviews**. The gap is not reliability - it is that every incumbent is a single-purpose tool (search, or profile, or comments, or a downloader) that returns Douyin's **rounded** numbers. This actor covers the whole funnel in one run and returns the **exact integers**.

---

### What makes this different

| | Typical Douyin actor | This actor |
|---|---|---|
| Engagement numbers | `"22.4万"` - Douyin's rounded display value | **`224405`** - the exact integer |
| Content category | not offered | **Douyin's own two-level taxonomy** (`健身,健身知识`) |
| Comments | text + author | text, exact likes, **commenter's province**, reply threading, comment IDs |
| Trending | a separate paid actor | **built in** - the live hot board with real heat scores |
| Creator data | follower count, rounded | **exact** followers + lifetime likes + measured engagement + lead score |
| Transport | headless browser farms | **plain HTTP** - no browser, so runs are seconds, not minutes |

**Why the exact numbers matter:** Douyin's page shows `22.4万`. Everyone scraping the rendered page ships `224,000`. The real figure is `224,405`. If you are tracking a campaign day over day, a number rounded to 3 significant figures cannot show you movement until it moves by ~1%.

---

### What you can pull

#### 1. Hot board - what China is watching right now (`mode: hot`)
The live 抖音热榜: rank, the trending phrase, Douyin's **exact heat score**, its badge code, and a link into each topic. Refreshes continuously - run it on a schedule to build a trend time-series nobody else has.

#### 2. Topic videos (`mode: topic`)
Every video filed under the trending topics, or under any topic URL you supply.

#### 3. Video detail (`mode: video`)
Paste video URLs or IDs. Accepts `/video/`, `/note/`, `/light/` links, `modal_id=` URLs, or bare IDs.

#### 4. Creator / KOL leads (`mode: creators`)
A deduplicated, ranked creator list built from whoever is currently trending - exact followers, lifetime likes, the categories they post in, average engagement across the videos sampled, and a 0-100 lead score.

#### 5. Discover (`mode: discover`)
Start from a seed video and crawl outward through Douyin's own related-video rails.

---

### Output

#### Video record (abridged)

```json
{
  "type": "video",
  "videoId": "7664908168602158446",
  "url": "https://www.douyin.com/video/7664908168602158446",
  "caption": "广州早茶的厨师是完全沉浸在自己的艺术里面，实物比图片更震撼",
  "category": "美食,美食展示",
  "categoryPrimary": "美食",
  "categorySecondary": "美食展示",
  "hashtags": ["广州早茶"],
  "durationSeconds": 14,
  "publishedAt": "2026-07-21 17:18",
  "uploadDate": "2026-07-21T17:18:23+08:00",
  "likeCount": 397872,
  "commentCount": 21872,
  "collectCount": 15323,
  "repostCount": 622680,
  "statsAreExact": true,
  "likesPerFollower": 380.37,
  "authorNickname": "清纯佳人",
  "authorSecUid": "MS4wLjABAAAAFzId...",
  "authorFollowers": 1046,
  "authorTotalLikes": 411927,
  "coverImage": "https://p3-pc-sign.douyinpic.com/...",
  "embedUrl": "https://www.douyin.com/light/7664908168602158446",
  "comments": [
    {
      "commentId": "7665004744398504761",
      "text": "有钱人就是不一样，629元一个[泣不成声]",
      "likeCount": 72587,
      "likeCountIsExact": true,
      "replyCount": 3429,
      "isReply": false,
      "authorNickname": "路过",
      "region": "广东",
      "postedRelative": "15小时前"
    }
  ],
  "relatedVideoIds": ["7663729471992537769", "..."]
}
````

`likesPerFollower` above is **380** - that video reached ~380x its creator's follower count. On Douyin the recommendation feed routinely pushes content far beyond a creator's followers, so this reading is real signal, not an error. It is deliberately **not** called "engagement rate".

#### Creator lead record

```json
{
  "type": "creator",
  "nickname": "人民网",
  "profileUrl": "https://www.douyin.com/user/MS4wLjABAAAA-Hb...",
  "followers": 72526125,
  "totalLikes": 4266954195,
  "likesPerFollower": 0.00165,
  "categoryPrimary": "时政社会",
  "avgLikesSampled": 119684,
  "videosSampled": 3,
  "leadScore": 61
}
```

#### Hot topic record

```json
{
  "type": "hotTopic",
  "rank": 1,
  "word": "最后一位长征女红军王全英逝世",
  "hotValue": 11850879,
  "badgeCode": 3,
  "sentenceId": "2580391",
  "topicUrl": "https://www.douyin.com/hot/2580391/..."
}
```

`badgeCode` is Douyin's own label integer. Douyin publishes no mapping for it, so the raw value is passed through rather than guessed at.

***

### Who buys this

- **Brand & agency teams** running China campaigns - track a hashtag or product mention, see which provinces are talking (comments carry the commenter's province).
- **KOL / influencer platforms** - build and refresh creator databases with exact reach and measured engagement.
- **Trend and consumer researchers** - schedule the hot board and own a Douyin trend time-series.
- **Cross-border e-commerce sellers** - find which product content is breaking out before it reaches Western platforms.
- **Media monitoring** - what is trending in China, in near real time, with heat scores.

***

### Honest limitations

Stated up front, because a scraper that overpromises wastes your credits:

- **No keyword search.** Douyin returns an empty body for `/search/` on this source. Discovery is via the hot board, topic pages and related-video rails. This actor does not pretend otherwise.
- **No profile-by-URL.** Creator profile pages also return an empty body. Creator records are built from the creator data embedded in video and topic pages - which is where the **exact** follower and lifetime-like totals live, so the lead records are complete.
- **~10-12 comments per video.** That is what Douyin's public page exposes; it is the top comments plus visible replies, not the full thread.
- **The exact counters and the category need the proxy.** Douyin serves the page carrying them to residential IPs only. It is on by default and costs **one request per video**. Switch it off and the run still succeeds - you get rounded engagement numbers, `statsAreExact: false`, and no category. Everything else is unaffected.
- **Chinese-language content.** Captions, categories, comments and topics come back in Chinese, as published.

`robots.txt` is honoured: Douyin names Googlebot and Bingbot with their own rule group, and every path this actor requests is checked against that group's `Disallow` list at request time. Disallowed paths are skipped, not fetched.

***

### Input

| Field | Type | Default | Notes |
|---|---|---|---|
| `mode` | string | `hot` | `hot`, `topic`, `video`, `creators`, `discover` |
| `videoUrls` | array | - | URLs or bare IDs; used by `video` / `discover` |
| `topicUrls` | array | - | Hot-topic URLs; leave empty to use what is trending now |
| `maxItems` | integer | `50` | `0` = no limit (the run-time budget still applies) |
| `hotTopicLimit` | integer | `25` | Topics to read from the hot board (max 60) |
| `videosPerTopic` | integer | `6` | Videos taken per topic |
| `includeComments` | boolean | `true` | Nests comments in the video record |
| `maxCommentsPerVideo` | integer | `20` | Douyin exposes ~10-12 |
| `discoverDepth` | integer | `1` | Hops through related-video rails |
| `proxyConfiguration` | object | RESIDENTIAL | One request per video; see limitations |

Run it with **no input at all** and it returns the live hot board.

***

### Use with AI assistants (MCP)

This actor works as a tool for LLM agents through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) - ask your assistant for "what is trending on Douyin right now" or "the top Douyin creators in 美食 this week" and it can call this actor directly.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

***

### Pricing

Pay per event - you pay for records, never for a run that returns nothing.

| Event | Price |
|---|---|
| Hot topic | $0.002 |
| Video | $0.004 |
| Comment | $0.0005 |
| Creator / KOL lead | $0.004 |

No start fee, no charge for pagination.

***

### Legal

Scrapes only data Douyin publishes without a login, on the surface it serves to search-engine crawlers, and honours the `Disallow` rules for those crawlers. No accounts are created, no login is used, no rate limits are evaded. You are responsible for how you use the output, including GDPR/PIPL obligations where personal data is involved.

# Actor input Schema

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

hot = the live Douyin hot-topic board (fastest, no seeds needed). topic = every video under the hot topics. video = full detail for the video URLs you supply. creators = creator / KOL lead list. discover = crawl outwards from seed videos through Douyin's related-video rails.

## `videoUrls` (type: `array`):

Video links such as https://www.douyin.com/video/7665177181298937122, or bare video IDs. Used by the video and discover modes. Leave empty to seed from the live hot board instead.

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

Hot topic links such as https://www.douyin.com/hot/2580433/... . Leave empty to use whatever is trending right now.

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

Stop after this many records. Set to 0 for no limit (the run-time budget still applies).

## `hotTopicLimit` (type: `integer`):

How many trending topics to read from the hot board (max 60).

## `videosPerTopic` (type: `integer`):

How many videos to take from each hot topic in topic / creators mode.

## `includeComments` (type: `boolean`):

Nest the top comments inside each video record, with the commenter's province, exact like count and reply threading. Charged per comment.

## `maxCommentsPerVideo` (type: `integer`):

Douyin's public page exposes roughly 10-12 comments per video (top comments plus visible replies). Values above that simply return what exists.

## `discoverDepth` (type: `integer`):

How many hops to follow through the related-video rails in discover mode.

## `concurrency` (type: `integer`):

Parallel requests. The default is deliberately polite; raising it does not usually make a run faster.

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

Used for ONE request per video only. Douyin serves the page carrying the exact engagement counts and its own content category to residential IPs only - everything else (hot board, video pages, comments, creators) is fetched directly and needs no proxy. Turn this off and the run still succeeds, just with rounded engagement numbers and no category.

## Actor input object example

```json
{
  "mode": "hot",
  "videoUrls": [
    "https://www.douyin.com/video/7665177181298937122"
  ],
  "maxItems": 50,
  "hotTopicLimit": 25,
  "videosPerTopic": 6,
  "includeComments": true,
  "maxCommentsPerVideo": 20,
  "discoverDepth": 1,
  "concurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped Douyin records (hot topics, videos with nested comments, creator leads) as JSON items in the default dataset.

# 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": "hot",
    "videoUrls": [
        "https://www.douyin.com/video/7665177181298937122"
    ],
    "maxItems": 50,
    "hotTopicLimit": 25,
    "videosPerTopic": 6,
    "includeComments": true,
    "maxCommentsPerVideo": 20,
    "discoverDepth": 1,
    "concurrency": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/douyin-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": "hot",
    "videoUrls": ["https://www.douyin.com/video/7665177181298937122"],
    "maxItems": 50,
    "hotTopicLimit": 25,
    "videosPerTopic": 6,
    "includeComments": True,
    "maxCommentsPerVideo": 20,
    "discoverDepth": 1,
    "concurrency": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/douyin-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": "hot",
  "videoUrls": [
    "https://www.douyin.com/video/7665177181298937122"
  ],
  "maxItems": 50,
  "hotTopicLimit": 25,
  "videosPerTopic": 6,
  "includeComments": true,
  "maxCommentsPerVideo": 20,
  "discoverDepth": 1,
  "concurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scrapesage/douyin-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Douyin Scraper - Hot Topics, Videos, Comments & Creator Leads",
        "description": "Scrape Douyin (抖音) without a login: the live hot board, videos with EXACT engagement counts (not rounded), comments with the commenter's province, Douyin's own content categories, and ranked creator/KOL leads with exact followers. No browser. Export CSV/JSON.",
        "version": "0.1",
        "x-build-id": "5GlLz4RhX2LyonHYM"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapesage~douyin-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapesage-douyin-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/scrapesage~douyin-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapesage-douyin-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/scrapesage~douyin-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapesage-douyin-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": "What to scrape",
                        "enum": [
                            "hot",
                            "topic",
                            "video",
                            "creators",
                            "discover"
                        ],
                        "type": "string",
                        "description": "hot = the live Douyin hot-topic board (fastest, no seeds needed). topic = every video under the hot topics. video = full detail for the video URLs you supply. creators = creator / KOL lead list. discover = crawl outwards from seed videos through Douyin's related-video rails.",
                        "default": "hot"
                    },
                    "videoUrls": {
                        "title": "Douyin video URLs or IDs",
                        "type": "array",
                        "description": "Video links such as https://www.douyin.com/video/7665177181298937122, or bare video IDs. Used by the video and discover modes. Leave empty to seed from the live hot board instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "topicUrls": {
                        "title": "Douyin hot-topic URLs",
                        "type": "array",
                        "description": "Hot topic links such as https://www.douyin.com/hot/2580433/... . Leave empty to use whatever is trending right now.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Maximum items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Stop after this many records. Set to 0 for no limit (the run-time budget still applies).",
                        "default": 50
                    },
                    "hotTopicLimit": {
                        "title": "Hot topics to use",
                        "minimum": 1,
                        "maximum": 60,
                        "type": "integer",
                        "description": "How many trending topics to read from the hot board (max 60).",
                        "default": 25
                    },
                    "videosPerTopic": {
                        "title": "Videos per topic",
                        "minimum": 1,
                        "maximum": 40,
                        "type": "integer",
                        "description": "How many videos to take from each hot topic in topic / creators mode.",
                        "default": 6
                    },
                    "includeComments": {
                        "title": "Include comments",
                        "type": "boolean",
                        "description": "Nest the top comments inside each video record, with the commenter's province, exact like count and reply threading. Charged per comment.",
                        "default": true
                    },
                    "maxCommentsPerVideo": {
                        "title": "Max comments per video",
                        "minimum": 0,
                        "maximum": 60,
                        "type": "integer",
                        "description": "Douyin's public page exposes roughly 10-12 comments per video (top comments plus visible replies). Values above that simply return what exists.",
                        "default": 20
                    },
                    "discoverDepth": {
                        "title": "Discover depth",
                        "minimum": 0,
                        "maximum": 3,
                        "type": "integer",
                        "description": "How many hops to follow through the related-video rails in discover mode.",
                        "default": 1
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Parallel requests. The default is deliberately polite; raising it does not usually make a run faster.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Used for ONE request per video only. Douyin serves the page carrying the exact engagement counts and its own content category to residential IPs only - everything else (hot board, video pages, comments, creators) is fetched directly and needs no proxy. Turn this off and the run still succeeds, just with rounded engagement numbers and no category.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
