{
  "openapi": "3.0.1",
  "info": {
    "title": "Douyin 抖音 Search Scraper - Keyword + Filters & 60+ Fields",
    "description": "Extract Douyin (抖音) search results by keyword. One row per video with full creator profile, music, hashtags, video tags, and engagement stats. Filter by sort, publish window, and duration. 60+ fields per video, 46 per creator. Free tier - 10 runs.",
    "version": "0.0",
    "x-build-id": "acaerytaQKpZv4RUm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/zen-studio~douyin-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-zen-studio-douyin-search-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/zen-studio~douyin-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-zen-studio-douyin-search-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/zen-studio~douyin-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-zen-studio-douyin-search-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": [
          "keywords"
        ],
        "properties": {
          "keywords": {
            "title": "🔎 Search keywords",
            "type": "array",
            "description": "Add one or more keywords. Chinese, English, hashtags, brand names, and emoji all work.<br><br>Each keyword is searched independently; cross-keyword duplicates are removed automatically. A single keyword typically returns 100–300 unique videos before Douyin stops returning new results — combine multiple keywords to get more.",
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerQuery": {
            "title": "📺 Maximum results per keyword",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many results to fetch for each keyword. Set this based on what you actually need — cost scales linearly.<br><br><ul><li>Default: <code>100</code>. Maximum: <code>1000</code>.</li><li>Douyin caps a single keyword at roughly 100–300 unique items, so values above 300 may not fully fill.</li></ul>",
            "default": 100
          },
          "sort": {
            "title": "📊 Sort order",
            "enum": [
              "general",
              "most_liked",
              "latest"
            ],
            "type": "string",
            "description": "How Douyin orders results. Leave on <b>Relevance</b> for the standard search ranking.",
            "default": "general"
          },
          "publishTime": {
            "title": "📅 Published in",
            "enum": [
              "unlimited",
              "one_day",
              "one_week",
              "half_year"
            ],
            "type": "string",
            "description": "Limit results to videos published within this window.",
            "default": "unlimited"
          },
          "duration": {
            "title": "⏱️ Video duration",
            "enum": [
              "unlimited",
              "under_1m",
              "one_to_five",
              "over_5m"
            ],
            "type": "string",
            "description": "Limit results to videos in this duration range.",
            "default": "unlimited"
          },
          "shouldDownloadVideos": {
            "title": "📥 Download MP4 videos",
            "type": "boolean",
            "description": "Save each result's MP4 file to your key-value store. Adds <b>$0.99 per 1,000 successful downloads</b>. Image-text posts have no MP4 — use <b>Download slideshow images</b> instead.<br><br>A small share of downloads can fail when a video's CDN URL ages out before it's reached. Failed downloads leave <code>videoFile</code> as <code>null</code> on the affected row; the metadata row still ships and is not charged the download fee.",
            "default": false
          },
          "shouldDownloadCovers": {
            "title": "🖼️ Download cover images",
            "type": "boolean",
            "description": "Save each result's cover image (JPEG) to your key-value store. <b>Free.</b>",
            "default": false
          },
          "shouldDownloadSlideshowImages": {
            "title": "🎴 Download slideshow images",
            "type": "boolean",
            "description": "For image-text posts, save every slide image to your key-value store. <b>Free.</b> Has no effect on plain video posts.",
            "default": false
          },
          "videoKvStoreName": {
            "title": "Custom key-value store name",
            "type": "string",
            "description": "Save downloaded MP4s, covers, and slideshow images to a <b>named, persistent</b> key-value store instead of the run's default one. Useful for archiving (the named store survives forever, the default one is cleaned up with the run) and for combining downloads from many runs into one bucket you can reuse later.<br><br><b>Naming rules:</b> lowercase letters, digits, and dashes only.<br><br><b>Common patterns:</b><ul><li><code>douyin-search-videos</code> — single shared archive</li><li><code>douyin-search-2026-q2</code> — partition by quarter</li><li><code>douyin-search-cooking</code> — partition by topic / niche</li></ul>Browse and re-download anything you've saved at <a href=\"https://console.apify.com/storage/key-value\" target=\"_blank\">console.apify.com/storage/key-value</a>.<br><br>Leave empty to use this run's default store.",
            "default": ""
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}