{
  "openapi": "3.0.1",
  "info": {
    "title": "Douyin 抖音 Scraper - Videos, Comments, Profiles & Hot Search",
    "description": "Scrape Douyin (抖音, the Chinese TikTok): video search, creator (博主) videos and profiles, comments, followers, hashtag and sound feeds, and the hot search board (热榜). Video authors and commenters come with user ID, sec_uid and IP location. No login or cookies needed. Export to JSON, CSV or Excel.",
    "version": "0.1",
    "x-build-id": "DzlE57sCixnNbgbJl"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/clover_folktale~douyin-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-clover_folktale-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/clover_folktale~douyin-scraper/runs": {
      "post": {
        "operationId": "runs-sync-clover_folktale-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/clover_folktale~douyin-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-clover_folktale-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Mode",
            "enum": [
              "hot",
              "search",
              "creator",
              "video",
              "profile",
              "hashtag",
              "comments",
              "followers",
              "following",
              "users",
              "music",
              "board",
              "danmaku",
              "feed",
              "hashtagSearch",
              "musicSearch",
              "mix",
              "series",
              "related",
              "homeFeed",
              "experienceSearch"
            ],
            "type": "string",
            "description": "What to scrape: the hot search board, videos (or image posts) by keyword, a creator's videos, details of videos, creator profiles, comments (optionally with replies) of videos, danmaku of videos, the videos of a hashtag or sound (or their details), a creator's followers or following list, creator search, hashtag search, sound search, video collections (mixes), short-drama series, recommendation feeds, videos related to a video, the home recommendation feed, experience search by keyword, or the extended boards (including the creator-center and DOU+ boards).",
            "default": "hot"
          },
          "keyword": {
            "title": "Keyword (modes: search, users, hashtagSearch, musicSearch, experienceSearch, board)",
            "type": "string",
            "description": "Search keyword. Chinese keywords work best, e.g. \"美食\". In mode board it is an optional filter on the board (leave empty for the full board).",
            "default": "美食"
          },
          "creators": {
            "title": "Creators (modes: creator, profile, followers, following, series)",
            "type": "array",
            "description": "Douyin profile URLs (https://www.douyin.com/user/MS4w...), v.douyin.com share links or sec_uid values. Many creators hide their followers or following list: those return nothing. In mode series (without seriesIds) the short dramas of these creators are listed. Mode profile also accepts uids and douyinIds.",
            "items": {
              "type": "string"
            }
          },
          "creatorUids": {
            "title": "Creator uids (modes: creator, followers, following, series)",
            "type": "array",
            "description": "Numeric Douyin uids (digits only, at least 9, e.g. 98639145193) of creators, as an alternative to creators. Not the short numeric Douyin ID shown on a profile. Each uid is looked up first (an extra request that is not charged to you separately).",
            "items": {
              "type": "string"
            }
          },
          "videos": {
            "title": "Videos (modes: video, comments, danmaku, related)",
            "type": "array",
            "description": "Douyin video URLs (https://www.douyin.com/video/...), v.douyin.com share links or numeric video IDs.",
            "items": {
              "type": "string"
            }
          },
          "hashtags": {
            "title": "Hashtags (mode: hashtag)",
            "type": "array",
            "description": "Hashtag IDs or URLs (https://www.douyin.com/hashtag/1767587367821390). The ID of a hashtag is in its page URL.",
            "items": {
              "type": "string"
            }
          },
          "musics": {
            "title": "Sounds (mode: music)",
            "type": "array",
            "description": "Douyin sound URLs (https://www.douyin.com/music/7482371896877665043) or numeric sound IDs. Every video lists its sound as musicId.",
            "items": {
              "type": "string"
            }
          },
          "board": {
            "title": "Board (mode: board)",
            "enum": [
              "videos",
              "topics",
              "risingTopics",
              "rising",
              "city",
              "challenges",
              "hotTotal",
              "lowFanHits",
              "highCompletion",
              "highLikes",
              "followerGrowth",
              "searchRanking",
              "risingSearches",
              "hotWords",
              "hotAccounts",
              "events",
              "musicChart",
              "brandChart",
              "creatorHotSpots",
              "creatorTopics",
              "creatorMusic",
              "creatorProps",
              "creatorVideos",
              "douplusVideos",
              "douplusTalents",
              "eventDetail",
              "hotWordDetail"
            ],
            "type": "string",
            "description": "Which board to read. Videos: hot videos, low-fan hits, high completion, high likes, follower growth. Topics: hot and rising topics, challenges. Hot spots: rising, city, overall (needs dateFrom/dateTo, default the last two days). Words and accounts: search ranking, rising searches, hot content words, hot accounts. Others: events calendar, sound chart, brand chart. Details by ID: eventDetail (one calendar activity per entry of eventIds) and hotWordDetail (one hot content word per entry of wordIds, with its related videos and related words). Creator center (hot spots, topics, sounds, props, videos) and DOU+ (video ranking, creators by category) boards read one list of 10 to 100 entries; they ignore keyword and time window.",
            "default": "videos"
          },
          "timeWindowHours": {
            "title": "Time window (mode: board; video, topic, search, word and account boards)",
            "minimum": 1,
            "maximum": 168,
            "type": "integer",
            "description": "How far back the boards look, in hours. Allowed values: 1, 24, 72 or 168.",
            "default": 24
          },
          "city": {
            "title": "City (mode: board; boards: city, creatorHotSpots with hotSpotRanking local)",
            "type": "string",
            "description": "Chinese city name (e.g. 杭州) or numeric city code. Board city: empty reads the hot spots of all cities. Board creatorHotSpots with hotSpotRanking local: required."
          },
          "contentType": {
            "title": "Content type (mode: search)",
            "enum": [
              "videos",
              "images"
            ],
            "type": "string",
            "description": "Search videos (default) or image posts.",
            "default": "videos"
          },
          "listing": {
            "title": "Listing (modes: hashtag, music)",
            "enum": [
              "videos",
              "detail"
            ],
            "type": "string",
            "description": "videos: the videos of each hashtag or sound (default). detail: one record per hashtag or sound with its statistics (charged as a detail).",
            "default": "videos"
          },
          "includeReplies": {
            "title": "Include replies (mode: comments)",
            "type": "boolean",
            "description": "Also fetch the replies of comments that have at least 2 replies. Replies are returned as comments with parentCommentId set and count toward Max results.",
            "default": false
          },
          "maxRepliesPerComment": {
            "title": "Max replies per comment (mode: comments)",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Upper bound of replies fetched for one comment when includeReplies is on.",
            "default": 20
          },
          "withPlayCount": {
            "title": "Real play count (mode: video)",
            "type": "boolean",
            "description": "Look up the real play count of each video (the public detail always says 0). Off by default. Each count that is found costs one extra run-start fee on top of the detail price; when the count cannot be read, playCount is null and nothing extra is charged.",
            "default": false
          },
          "channel": {
            "title": "Feed channel (mode: feed)",
            "enum": [
              "knowledge",
              "food",
              "game",
              "anime",
              "music",
              "series"
            ],
            "type": "string",
            "description": "Which recommendation feed to read. series lists recommended short-drama series.",
            "default": "knowledge"
          },
          "channelTagId": {
            "title": "Channel tag ID (mode: feed)",
            "minimum": 1,
            "type": "integer",
            "description": "Optional numeric Douyin channel tag; when set it replaces the channel above."
          },
          "mixes": {
            "title": "Collections (mode: mix)",
            "type": "array",
            "description": "Collection URLs (https://www.douyin.com/collection/7302011174286002217) or numeric collection IDs. Returns the collection detail and its videos.",
            "items": {
              "type": "string"
            }
          },
          "seriesIds": {
            "title": "Series IDs (mode: series)",
            "type": "array",
            "description": "Numeric short-drama series IDs. Returns the series detail and its episodes. Leave empty to list the series of the creators instead.",
            "items": {
              "type": "string"
            }
          },
          "uids": {
            "title": "Numeric user IDs (mode: profile)",
            "type": "array",
            "description": "Numeric Douyin user IDs (uid); each is resolved to its profile.",
            "items": {
              "type": "string"
            }
          },
          "douyinIds": {
            "title": "Douyin IDs (mode: profile)",
            "type": "array",
            "description": "Custom Douyin IDs (the account name shown on a profile); each is resolved to its profile.",
            "items": {
              "type": "string"
            }
          },
          "eventIds": {
            "title": "Calendar event IDs (mode: board, board: eventDetail)",
            "type": "array",
            "description": "IDs of events of the events calendar (the eventId of a boardEvent row). Each event is one record. Every event after the first also pays one run-start fee.",
            "items": {
              "type": "string"
            }
          },
          "wordIds": {
            "title": "Hot word IDs (mode: board, board: hotWordDetail)",
            "type": "array",
            "description": "IDs of hot content words (the wordId of a boardWord row from board hotWords). Each word returns its own record, up to 30 related videos and up to 9 related words. A word ID is only valid for about a day after its board entry: use a fresh one. Every word after the first also pays one run-start fee.",
            "items": {
              "type": "string"
            }
          },
          "dateFrom": {
            "title": "From date (mode: board; hotTotal, events)",
            "type": "string",
            "description": "First day, e.g. 2026-10-19. Default: two days ago for hotTotal, today for events."
          },
          "dateTo": {
            "title": "To date (mode: board; hotTotal, events)",
            "type": "string",
            "description": "Last day, e.g. 2026-10-20. Default: yesterday for hotTotal, in two weeks for events."
          },
          "contentTag": {
            "title": "Content vertical (mode: board; videos, lowFanHits, highCompletion, highLikes, followerGrowth, topics, risingTopics)",
            "enum": [
              "all",
              "美食",
              "旅行",
              "休闲娱乐",
              "文化",
              "舞蹈",
              "教育校园",
              "公益",
              "艺术",
              "时尚",
              "二次元",
              "三农",
              "体育",
              "汽车",
              "电影",
              "电视剧",
              "动物",
              "科技",
              "音乐",
              "医疗健康",
              "摄影摄像",
              "生活家居",
              "明星",
              "颜值",
              "随拍",
              "情感",
              "人文社科",
              "科普",
              "财经",
              "职场",
              "综艺",
              "生活记录",
              "母婴",
              "亲子",
              "特效&小游戏",
              "法律",
              "剧情",
              "AI原生影像",
              "游戏"
            ],
            "type": "string",
            "description": "Only entries of this content vertical (38 verticals, sub-verticals included). Default: all verticals. Ignored by the other boards.",
            "default": "all"
          },
          "hotCategory": {
            "title": "Hot topic category (mode: board; hotTotal, events)",
            "enum": [
              "all",
              "美食",
              "旅行",
              "站内玩法",
              "话题互动",
              "娱乐",
              "社会",
              "二次元",
              "交通",
              "亲子",
              "体育",
              "军事",
              "剧情",
              "动物萌宠",
              "天气",
              "才艺",
              "文化教育",
              "时尚",
              "时政",
              "校园",
              "汽车",
              "游戏",
              "科技",
              "财经"
            ],
            "type": "string",
            "description": "Only hot topics (hotTotal) or calendar events (events) of this category (23 categories). Default: all categories. Ignored by the other boards.",
            "default": "all"
          },
          "brandCategory": {
            "title": "Brand category (mode: board, board: brandChart)",
            "type": "integer",
            "description": "Category ID: 10 cars, 11 phones, 12 beauty, 34 luxury, 14 food and drink, 28 home appliances, 16 clothing, 20 mother and baby, 13 daily chemicals, 999 games, 27 health, 32 restaurants, 21 hotels and travel.",
            "default": 10
          },
          "creatorCategory": {
            "title": "Category (mode: board; boards: creatorTopics, creatorMusic, creatorProps, creatorVideos)",
            "enum": [
              "0",
              "333",
              "334",
              "299",
              "335",
              "336",
              "302",
              "296",
              "337",
              "311",
              "298",
              "300",
              "301",
              "297",
              "305",
              "306",
              "669",
              "314",
              "307",
              "309",
              "308",
              "315",
              "718",
              "310",
              "312",
              "926"
            ],
            "type": "string",
            "description": "Creator-center category of the list. 0 reads all categories.",
            "default": "0"
          },
          "rankingPeriod": {
            "title": "Period (mode: board; creator-center boards except creatorHotSpots, and douplusVideos)",
            "enum": [
              "1",
              "2",
              "3"
            ],
            "type": "string",
            "description": "How far back the ranking looks: 1 = 24 hours, 2 = 7 days, 3 = 30 days. Default: 24 hours for the creator-center boards, 7 days for douplusVideos."
          },
          "hotSpotRanking": {
            "title": "Hot spot ranking (mode: board, board: creatorHotSpots)",
            "enum": [
              "overall",
              "local",
              "rising"
            ],
            "type": "string",
            "description": "overall: all hot spots; local: hot spots of one city (needs city); rising: fastest-rising hot spots.",
            "default": "overall"
          },
          "douplusDimension": {
            "title": "Ranking (mode: board, board: douplusVideos)",
            "enum": [
              "popularity",
              "lowFan",
              "completion",
              "likeRate",
              "followRate"
            ],
            "type": "string",
            "description": "What the DOU+ video ranking sorts by.",
            "default": "popularity"
          },
          "douplusCategory": {
            "title": "Category (mode: board, board: douplusVideos)",
            "enum": [
              "601",
              "602",
              "606",
              "607",
              "608",
              "609",
              "612",
              "614",
              "615",
              "616",
              "617",
              "619",
              "621",
              "623",
              "624",
              "625",
              "626",
              "627",
              "628",
              "629",
              "631",
              "633",
              "634",
              "635"
            ],
            "type": "string",
            "description": "Vertical of the DOU+ video ranking.",
            "default": "634"
          },
          "talentCategory": {
            "title": "Creator category (mode: board, board: douplusTalents)",
            "enum": [
              "剧情",
              "音乐",
              "二次元",
              "游戏",
              "公益",
              "随拍",
              "舞蹈",
              "动物",
              "三农",
              "科技",
              "财经",
              "母婴",
              "亲子",
              "法律",
              "科普",
              "情感",
              "文化",
              "职场",
              "教育校园",
              "摄影摄像",
              "美食",
              "旅行",
              "时尚",
              "艺术",
              "休闲娱乐",
              "明星",
              "综艺",
              "电影",
              "电视剧",
              "生活家居",
              "汽车",
              "体育",
              "医疗健康",
              "生活记录"
            ],
            "type": "string",
            "description": "DOU+ creator category. Up to maxResults creators (at most 100) come back in one list.",
            "default": "音乐"
          },
          "maxResults": {
            "title": "Max results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of items to return in total for this run. You are charged per item returned.",
            "default": 20
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}