{
  "openapi": "3.0.1",
  "info": {
    "title": "Douyin Scraper 抖音 [Only $3] Search, Videos, Comments & Profiles",
    "description": "[Only $3 per 1000 results] Scrape Douyin (抖音, China's TikTok) with no login or browser: keyword search, full video detail (likes, shares, collects, comments, author, music, hashtags, download URLs), image posts, creator profiles and comments. Clean JSON.",
    "version": "0.0",
    "x-build-id": "nbSKzvWLRqLm9RcNS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~douyin-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-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/memo23~douyin-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-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/memo23~douyin-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-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": {
          "startUrls": {
            "title": "Douyin URLs",
            "type": "array",
            "description": "Douyin video URLs, user-profile URLs, short v.douyin.com links, or bare IDs. Video URLs return full post detail; user URLs return the profile.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "includeComments": {
            "title": "Include comments",
            "type": "boolean",
            "description": "For each video URL, also scrape its comments (each comment becomes its own row).",
            "default": false
          },
          "maxComments": {
            "title": "Max comments per video",
            "minimum": 1,
            "type": "integer",
            "description": "Upper bound on comments collected per video when 'Include comments' is on.",
            "default": 50
          },
          "includeReplies": {
            "title": "Include replies",
            "type": "boolean",
            "description": "With comments on, also return the replies under each comment as `reply` rows linked by `parentCommentId`. Replies do not count toward 'Max comments per video'.",
            "default": false
          },
          "maxRepliesPerComment": {
            "title": "Max replies per comment",
            "minimum": 1,
            "type": "integer",
            "description": "Upper bound on replies collected under one comment.",
            "default": 20
          },
          "includeUserPosts": {
            "title": "Include user's videos",
            "type": "boolean",
            "description": "For each user-profile URL, also scrape the creator's posted videos, newest first. No cookie needed.",
            "default": false
          },
          "maxUserPosts": {
            "title": "Max videos per user",
            "minimum": 1,
            "type": "integer",
            "description": "Upper bound on videos collected per creator when 'Include user's videos' is on.",
            "default": 30
          },
          "searchKeywords": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keyword search, no cookie needed. Chinese, English, hashtags (`#美食`) and brand names all work. Each keyword is searched on its own and a video found by two keywords is returned once.",
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerSearch": {
            "title": "Max results per keyword",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "Upper bound on videos collected per search keyword. A keyword usually has a few hundred results. Set 0 for as many as the search returns.",
            "default": 30
          },
          "searchSort": {
            "title": "Sort search results by",
            "enum": [
              "general",
              "most_liked",
              "latest"
            ],
            "type": "string",
            "description": "How search results are ordered.",
            "default": "general"
          },
          "searchPublishTime": {
            "title": "Published within",
            "enum": [
              "unlimited",
              "one_day",
              "one_week",
              "half_year"
            ],
            "type": "string",
            "description": "Keep only search results published in this window.",
            "default": "unlimited"
          },
          "searchDuration": {
            "title": "Video length",
            "enum": [
              "unlimited",
              "under_1m",
              "one_to_five",
              "over_5m"
            ],
            "type": "string",
            "description": "Keep only search results in this length range.",
            "default": "unlimited"
          },
          "hashtags": {
            "title": "Hashtags",
            "type": "array",
            "description": "Hashtag names (`咖啡` or `#咖啡`) or hashtag ids. Returns the hashtag's videos; each row carries `hashtag`, `hashtagId` and the hashtag's total view count.",
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerHashtag": {
            "title": "Max videos per hashtag",
            "minimum": 1,
            "type": "integer",
            "description": "Upper bound on videos collected per hashtag.",
            "default": 30
          },
          "creatorKeywords": {
            "title": "Creator search keywords",
            "type": "array",
            "description": "Find creators by name or topic. Each result is a `user` row with the profile link, followers, total likes and post count.",
            "items": {
              "type": "string"
            }
          },
          "maxCreatorsPerKeyword": {
            "title": "Max creators per keyword",
            "minimum": 1,
            "type": "integer",
            "description": "Upper bound on creators collected per creator-search keyword.",
            "default": 30
          },
          "includeHotSearch": {
            "title": "Hot search board",
            "type": "boolean",
            "description": "Return Douyin's live hot search board (抖音热榜): about 50 ranked terms plus the rising ones, each with its heat value and video count.",
            "default": false
          },
          "includePlayCounts": {
            "title": "Real play counts",
            "type": "boolean",
            "description": "Douyin no longer shows play counts in its video data. Turn this on to fill `plays` and `statistics.playCount` (plus `downloadCount`) with the real numbers on every video row. No extra charge per row.",
            "default": false
          },
          "includeDanmaku": {
            "title": "Bullet comments (弹幕)",
            "type": "boolean",
            "description": "For each video given by link, return its bullet comments as rows: text, the moment in the video, likes.",
            "default": false
          },
          "maxDanmakuPerVideo": {
            "title": "Max bullet comments per video",
            "minimum": 1,
            "type": "integer",
            "description": "How many bullet comments to return per video, from the start of the video.",
            "default": 100
          },
          "includeRelatedVideos": {
            "title": "Related videos",
            "type": "boolean",
            "description": "For each video given by link, return the videos Douyin recommends next to it.",
            "default": false
          },
          "maxRelatedPerVideo": {
            "title": "Max related videos per video",
            "minimum": 1,
            "type": "integer",
            "description": "How many recommended videos to return per video. A batch holds about 10.",
            "default": 10
          },
          "musicKeywords": {
            "title": "Music search keywords",
            "type": "array",
            "description": "Find songs and sounds by keyword. Returns title, author, duration and the number of videos using each.",
            "items": {
              "type": "string"
            }
          },
          "maxMusicPerKeyword": {
            "title": "Max songs per keyword",
            "minimum": 5,
            "type": "integer",
            "description": "Songs to return per keyword (minimum 5). A page holds 10.",
            "default": 10
          },
          "musicUrls": {
            "title": "Music links or IDs",
            "type": "array",
            "description": "Douyin music links (douyin.com/music/…) or music IDs. Each returns the song, then videos that use it. Video rows carry `musicMeta.musicId`.",
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerMusic": {
            "title": "Max videos per song",
            "minimum": 0,
            "type": "integer",
            "description": "Videos to return for each song. 0 returns the song only.",
            "default": 20
          },
          "collectionUrls": {
            "title": "Collection links or IDs",
            "type": "array",
            "description": "Douyin collection links (douyin.com/collection/…) or collection IDs. Each returns the collection with its total plays and episode count, then its videos in order.",
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerCollection": {
            "title": "Max videos per collection",
            "minimum": 0,
            "type": "integer",
            "description": "Videos to return for each collection. 0 returns the collection only.",
            "default": 30
          },
          "imageKeywords": {
            "title": "Image-post search keywords",
            "type": "array",
            "description": "Search image posts (图文) by keyword. Uses 'Max results per keyword'.",
            "items": {
              "type": "string"
            }
          },
          "feeds": {
            "title": "Category feeds",
            "type": "array",
            "description": "Return videos from Douyin's category channels. Each call brings a fresh batch of 20.",
            "items": {
              "type": "string",
              "enum": [
                "food",
                "knowledge",
                "game",
                "cartoon",
                "music"
              ],
              "enumTitles": [
                "Food 美食",
                "Knowledge 知识",
                "Gaming 游戏",
                "Anime 二次元",
                "Music 音乐"
              ]
            }
          },
          "maxResultsPerFeed": {
            "title": "Max videos per feed",
            "minimum": 1,
            "type": "integer",
            "description": "Videos to return for each category feed.",
            "default": 20
          },
          "trendLists": {
            "title": "Charts",
            "type": "array",
            "description": "Music charts (about 30 songs with heat), creator-centre charts of the last day (about 20 entries with play, like and publish counts) and the promoted-video ranking (about 40 videos with new plays and completion rate).",
            "items": {
              "type": "string",
              "enum": [
                "musicHot",
                "musicTrending",
                "musicOriginal",
                "creatorHotVideos",
                "creatorHotTopics",
                "creatorHotMusic",
                "creatorHotProps",
                "promotedVideos"
              ],
              "enumTitles": [
                "Music: hot chart",
                "Music: rising chart",
                "Music: original chart",
                "Creator centre: hot videos",
                "Creator centre: hot topics",
                "Creator centre: hot sounds",
                "Creator centre: hot effects",
                "Promoted videos ranking"
              ]
            }
          },
          "brandRankings": {
            "title": "Brand rankings",
            "type": "array",
            "description": "The weekly brand ranking (品牌热榜) of each chosen category: 30 brands with heat and rank change.",
            "items": {
              "type": "string",
              "enum": [
                "cars",
                "phones",
                "beauty",
                "luxury",
                "foodAndDrinks",
                "homeAppliances",
                "fashion",
                "motherAndBaby",
                "personalCare",
                "games",
                "health",
                "restaurants",
                "travel"
              ],
              "enumTitles": [
                "Cars 汽车",
                "Phones 手机",
                "Beauty 美妆",
                "Luxury 奢侈品",
                "Food & drinks 食品饮料",
                "Home appliances 家用电器",
                "Fashion 服饰鞋帽",
                "Mother & baby 母婴",
                "Personal care 日化",
                "Games 游戏",
                "Health 大健康",
                "Restaurants 餐饮",
                "Travel 酒旅"
              ]
            }
          },
          "talentCategories": {
            "title": "Top creators by category",
            "type": "array",
            "description": "The top creators of each chosen content category, largest first: name, Douyin ID, followers and bio.",
            "items": {
              "type": "string",
              "enum": [
                "剧情",
                "音乐",
                "二次元",
                "游戏",
                "公益",
                "随拍",
                "舞蹈",
                "动物",
                "三农",
                "科技",
                "财经",
                "母婴",
                "亲子",
                "法律",
                "科普",
                "情感",
                "文化",
                "职场",
                "教育校园",
                "摄影摄像",
                "美食",
                "旅行",
                "时尚",
                "艺术",
                "休闲娱乐",
                "明星",
                "综艺",
                "电影",
                "电视剧",
                "生活家居",
                "汽车",
                "体育",
                "医疗健康",
                "生活记录"
              ],
              "enumTitles": [
                "Drama 剧情",
                "Music 音乐",
                "Anime 二次元",
                "Gaming 游戏",
                "Public welfare 公益",
                "Casual 随拍",
                "Dance 舞蹈",
                "Animals 动物",
                "Agriculture 三农",
                "Technology 科技",
                "Finance 财经",
                "Mother & baby 母婴",
                "Parenting 亲子",
                "Law 法律",
                "Science 科普",
                "Relationships 情感",
                "Culture 文化",
                "Career 职场",
                "Education 教育校园",
                "Photography 摄影摄像",
                "Food 美食",
                "Travel 旅行",
                "Fashion 时尚",
                "Art 艺术",
                "Leisure 休闲娱乐",
                "Celebrities 明星",
                "Variety shows 综艺",
                "Film 电影",
                "TV series 电视剧",
                "Home 生活家居",
                "Cars 汽车",
                "Sports 体育",
                "Health 医疗健康",
                "Daily life 生活记录"
              ]
            }
          },
          "maxTalentsPerCategory": {
            "title": "Max creators per category",
            "minimum": 1,
            "type": "integer",
            "description": "Creators to return for each category. A page holds 20.",
            "default": 20
          },
          "downloadVideos": {
            "title": "Download videos (MP4)",
            "type": "boolean",
            "description": "Save each video's MP4 to a key-value store and add its link to the row as `videoFile`. Billed per saved file (`video-download`); a failed download is not charged. Image posts have no MP4. The file is the best quality under 25 MB; the row's `videoMeta.bitRates` lists every quality with a direct link.",
            "default": false
          },
          "downloadCovers": {
            "title": "Download cover images",
            "type": "boolean",
            "description": "Save each video's cover image and add its link as `coverFile`. No extra charge.",
            "default": false
          },
          "downloadSlideshowImages": {
            "title": "Download slideshow images",
            "type": "boolean",
            "description": "For image posts, save every slide at full size as JPEG, without Douyin's watermark, and add the links as `slideshowFiles`. The image links in the row expire after about four weeks; these copies do not. No extra charge.",
            "default": false
          },
          "mediaKvStoreName": {
            "title": "Key-value store for files",
            "pattern": "^[a-zA-Z0-9-]{0,63}$",
            "type": "string",
            "description": "Name of a key-value store to keep the files in across runs (letters, digits and dashes). Empty: the run's default store."
          },
          "maxVideoSizeMb": {
            "title": "Largest video to download",
            "minimum": 1,
            "maximum": 40,
            "type": "integer",
            "description": "Videos above this size are skipped and not charged. The best quality under 25 MB is saved; longer videos get the smallest available variant.",
            "default": 40
          },
          "douyinCookie": {
            "title": "Douyin cookie (optional)",
            "type": "string",
            "description": "Optional. Search and creator videos work without it. If you paste a logged-in douyin.com cookie string, they run on your own session instead; the sort, date and duration filters do not apply in that mode."
          },
          "maxItems": {
            "title": "Max items (total)",
            "minimum": 1,
            "type": "integer",
            "description": "Global cap on the number of dataset items across the entire run. Leave empty for no cap."
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional proxy. Douyin's web API works direct from most regions; enable residential proxy only if you hit blocks.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}