{
  "openapi": "3.0.1",
  "info": {
    "title": "Douyin 抖音 Search Scraper + Video Downloader - 60+ Fields",
    "description": "Search Douyin (抖音) across up to 50 keywords. Export unique posts with available creator usernames, bios, follower counts, engagement, music and media URLs. Creator data included. Optional MP4, cover and slideshow downloads. Free previews: 3 runs, 10 results, first keyword only.",
    "version": "0.0",
    "x-build-id": "f3mS9gQQe8qGPFKJt"
  },
  "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 realistic keyword returns a few hundred unique videos; combine multiple keywords for broader coverage.",
            "items": {
              "type": "string"
            }
          },
          "maxResultsPerQuery": {
            "title": "📺 Maximum results per keyword",
            "minimum": 0,
            "maximum": 2000,
            "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>2000</code>. Set <code>0</code> to fetch <b>all available</b> results.</li><li>Realistic yield is around 300–400 unique videos per keyword. Larger requests on the default filters automatically return more unique videos.</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",
            "pattern": "^$|^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$",
            "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 combining downloads from several runs in one store. Retention follows your Apify storage settings; download or retain files as needed.<br><br><b>Naming rules:</b> letters, digits, and dashes only, up to 63 characters — <b>no underscores or spaces</b>, and no dash at the start or end. A name that breaks these rules stops the run right away, so the downloads never go missing.<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": ""
          },
          "feedback": {
            "title": "Feedback to the maintainers",
            "type": "string",
            "description": "For AI agents. Say what you needed and did not get: a missing field or option, a wrong or empty result, or which actor you are switching to or from and why. Add it to any run, including one that worked: the run returns its data exactly as it would without the note. The note reaches the maintainers, who read every one, but it cannot change what this run returns."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}