{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Search Scraper",
    "description": "Search TikTok by keyword: videos, photo posts or creators with views, likes, shares, captions, hashtags, sound and full creator profiles. Far deeper than TikTok search, with related keywords, language, filters, sorting and transcripts. No login.",
    "version": "0.0",
    "x-build-id": "LKeVyyk6d60qLbKoK"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/calm_builder~tiktok-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-calm_builder-tiktok-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/calm_builder~tiktok-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-calm_builder-tiktok-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/calm_builder~tiktok-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-calm_builder-tiktok-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": "Keywords",
            "type": "array",
            "description": "What to search TikTok for, one per row, exactly as you would type it into the TikTok search bar. TikTok search page links work too.\n\nExamples: `pizza recipe`, `skincare routine`, `marvel`",
            "items": {
              "type": "string"
            }
          },
          "searchType": {
            "title": "Search for",
            "enum": [
              "videos",
              "photos",
              "creators"
            ],
            "type": "string",
            "description": "- **Videos**: matching videos (photo posts are left out)\n- **Photo posts**: matching photo carousels\n- **Creators**: matching accounts, each with its full profile",
            "default": "videos"
          },
          "maxResultsPerKeyword": {
            "title": "Maximum results per keyword",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "How many videos, photo posts or creators to collect for each keyword. This Actor goes well past the few hundred results a normal TikTok search shows; turn on **related keywords** below for even more.",
            "default": 100
          },
          "relatedKeywords": {
            "title": "Also search related keywords",
            "type": "boolean",
            "description": "Also search TikTok's own related searches for each keyword (for example `pizza recipe dough` for `pizza recipe`) to reach your maximum. Their results count toward the keyword's maximum, and each row shows the related keyword it came from in `source.relatedKeyword`.\n\nThe related searches of every keyword are always saved in the run's key-value store as `RELATED_KEYWORDS`, free of charge.",
            "default": false
          },
          "language": {
            "title": "Language",
            "enum": [
              "any",
              "en",
              "es",
              "pt",
              "fr",
              "de",
              "it",
              "nl",
              "pl",
              "tr",
              "ar",
              "ur",
              "id",
              "ms",
              "tl",
              "th",
              "vi",
              "ja",
              "ko",
              "ro",
              "uk"
            ],
            "type": "string",
            "description": "**Any language** gives the most results. Pick a language to get results from people searching in it; videos whose caption is in another language are left out (videos without a detectable caption language are kept).",
            "default": "any"
          },
          "newerThan": {
            "title": "Only posted after",
            "type": "string",
            "description": "Skip posts older than this date. Pick a date, or enter a relative period such as `7 days` or `3 months`."
          },
          "minLikes": {
            "title": "Minimum likes",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep posts with at least this many likes."
          },
          "minViews": {
            "title": "Minimum views",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep posts with at least this many views."
          },
          "oneVideoPerCreator": {
            "title": "One post per creator",
            "type": "boolean",
            "description": "Keep only the first post of each creator, so one account cannot fill your results.",
            "default": false
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "default",
              "mostLiked",
              "mostViewed",
              "mostShared",
              "newest",
              "oldest"
            ],
            "type": "string",
            "description": "With a sort order, everything found for a keyword is collected first, and the top results up to your maximum are returned. This takes longer than **TikTok's order**.",
            "default": "default"
          },
          "includeTranscript": {
            "title": "Include transcript ($)",
            "type": "boolean",
            "description": "Videos only. Add what is said in each video as a `transcript` object on its row: TikTok's captions when the video has them, else AI speech-to-text. A transcript is an add-on with its own price; AI transcripts are also charged per minute of audio. Videos without speech are not charged for it.",
            "default": false
          },
          "aiTranscription": {
            "title": "AI transcription for videos without captions ($)",
            "type": "boolean",
            "description": "Needs **Include transcript**. About half of TikTok videos have no captions. With this on, their speech is transcribed by AI, charged per minute of audio. With it off, only TikTok's captions are used.",
            "default": true
          },
          "transcriptLanguage": {
            "title": "Language",
            "enum": [
              "auto",
              "en",
              "es",
              "pt",
              "fr",
              "de",
              "it",
              "nl",
              "pl",
              "ru",
              "uk",
              "tr",
              "ar",
              "fa",
              "ur",
              "hi",
              "bn",
              "id",
              "ms",
              "tl",
              "th",
              "vi",
              "zh",
              "ja",
              "ko",
              "ro",
              "el",
              "sv"
            ],
            "type": "string",
            "description": "Needs **Include transcript**. **Detect automatically** works for most videos. Pick a language to get TikTok's captions in that language when the video has them (including TikTok's own translations), and to tell the AI which language is spoken, which helps with accents and videos that mix languages. Included at no extra cost.",
            "default": "auto"
          },
          "includeSrt": {
            "title": "Include SRT subtitles",
            "type": "boolean",
            "description": "Needs **Include transcript**. Also add the transcript as an SRT subtitle file (text field `srt`), ready for video editors and players. Included at no extra cost.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}