{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Search Scraper: Keywords, Hashtags & Creators (Fast)",
    "description": "Scrape TikTok search results by keyword or hashtag and discover creators in 256MB RAM. Extracts views, likes, comments, shares, bookmarks, channel stats, music, subtitles, full transcripts, and direct video URLs. No login or proxy required. API & MCP ready.",
    "version": "1.0",
    "x-build-id": "2Rfvc8T1iJhSfVm6C"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/church_of_loujess~tiktok-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-church_of_loujess-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/church_of_loujess~tiktok-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-church_of_loujess-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/church_of_loujess~tiktok-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-church_of_loujess-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",
        "properties": {
          "keywords": {
            "title": "Search Keywords",
            "type": "array",
            "description": "Search terms, typed as you would in the TikTok search bar (e.g. <code>artificial intelligence</code>, <code>ai tools</code>, <code>skincare routine</code>). Each keyword is searched separately and all results land in one deduplicated dataset.",
            "default": [
              "artificial intelligence"
            ],
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Maximum number of items on output",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum total number of videos on output, across all keywords and expansion pools.",
            "default": 20
          },
          "sortType": {
            "title": "Sort Type",
            "enum": [
              "RELEVANCE",
              "MOST_LIKED",
              "DATE_POSTED"
            ],
            "type": "string",
            "description": "Sort order for search results (`RELEVANCE`, `MOST_LIKED`, `DATE_POSTED`).",
            "default": "RELEVANCE"
          },
          "uniqueAuthors": {
            "title": "Unique Authors Only",
            "type": "boolean",
            "description": "Creator discovery: emit at most one video per creator (<code>channel.id</code>), so every item is a different creator. Combine with <code>expansion</code> to discover up to 10x more creators per keyword.",
            "default": false
          },
          "expansion": {
            "title": "Expansion Pools",
            "type": "array",
            "description": "Opt-in harvest pools that multiply creator and video discovery per keyword. Harvests TikTok's search suggestions (<code>suggest</code>), hashtag feeds (<code>hashtag</code>), and sound feeds (<code>music</code>) seeded from the keyword's own search results.",
            "items": {
              "type": "string",
              "enum": [
                "suggest",
                "hashtag",
                "music"
              ],
              "enumTitles": [
                "Search suggestions",
                "Hashtag feeds",
                "Sound/music feeds"
              ]
            },
            "default": []
          },
          "relevanceThreshold": {
            "title": "Relevance Threshold (music pool)",
            "minimum": 0,
            "maximum": 1,
            "type": "number",
            "description": "Topicality gate for the sound/music pool: fraction of a sound's first page of captions that must match the seed keyword or its hashtags before that sound is crawled.",
            "default": 0.3
          },
          "commentsPerPost": {
            "title": "Comments per video",
            "minimum": 0,
            "maximum": 200,
            "type": "integer",
            "description": "Attach up to this many top comments to each video as <code>commentList</code> (0 = off, max 200).",
            "default": 0
          },
          "maxRepliesPerComment": {
            "title": "Replies per comment",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "Attach up to this many replies to each comment in <code>commentList</code> (0 = no replies, max 10).",
            "default": 0
          },
          "includeAuthorProfile": {
            "title": "Include creator profile",
            "type": "boolean",
            "description": "Attach the creator's full profile page details as <code>authorProfile</code> (bio, bio link, account creation time, language, friends, business and seller flags, live status), fetched once per unique creator.",
            "default": false
          },
          "includeTranscriptText": {
            "title": "Decode Full Spoken Transcript Text (RAG / LLM Ready)",
            "type": "boolean",
            "description": "When a video has WebVTT captions/subtitles, automatically download and parse the spoken transcript into plain text (<code>transcriptText</code>) alongside <code>subtitleInformation</code>.",
            "default": true
          },
          "maxItemsPerKeyword": {
            "title": "Maximum items per keyword",
            "minimum": 1,
            "type": "integer",
            "description": "Optional cap of results per single keyword."
          },
          "maxPostsPerAuthor": {
            "title": "Maximum posts per author",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on items per creator in the classic search results (leave empty for no cap)."
          },
          "includeSearchKeywords": {
            "title": "Include Search Keywords",
            "type": "boolean",
            "description": "If enabled, each result includes the <code>keyword</code> and <code>inputSource</code> fields with the search keyword that found it.",
            "default": true
          },
          "location": {
            "title": "Location / Region",
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code passed to TikTok as the <code>region</code> parameter (e.g. <code>US</code>, <code>GB</code>, <code>DE</code>).",
            "default": "US"
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration (optional)",
            "type": "object",
            "description": "Optional proxy settings. Works out-of-the-box with zero proxy configuration required.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}