{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Scraper: Videos, Profiles, Hashtags & Music Data",
    "description": "Scrape TikTok by hashtag, profile, search query, or direct video URL. Returns plays, likes, shares, saves, comments, follower counts, hearts, music title, and captions. Optional video file and subtitle downloads. JSON output. Pay per video.",
    "version": "0.1",
    "x-build-id": "qJQXqNBbJnjrMlhSb"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapemint~tiktok-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapemint-tiktok-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/scrapemint~tiktok-scraper/runs": {
      "post": {
        "operationId": "runs-sync-scrapemint-tiktok-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/scrapemint~tiktok-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-scrapemint-tiktok-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": {
          "hashtags": {
            "title": "Videos with this hashtag",
            "type": "array",
            "description": "TikTok hashtags to scrape. Enter without the # symbol. TikTok is restricting anonymous hashtag browsing, so hashtag runs may return 0 videos without a logged session. Profile and direct video URL inputs are the most reliable.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "resultsPerPage": {
            "title": "Number of videos per hashtag, profile or search",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Cap on how many videos are returned per source. Larger numbers take longer and cost more.",
            "default": 100
          },
          "profiles": {
            "title": "TikTok profiles data",
            "type": "array",
            "description": "TikTok usernames or profile URLs. Returns profile stats plus recent videos. Enter with or without @.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "profileScrapeSections": {
            "title": "Profile sections",
            "enum": [
              "videos",
              "reposts",
              "liked",
              "favorites"
            ],
            "type": "string",
            "description": "Which profile tab to scrape when a profile is supplied.",
            "default": "videos"
          },
          "searchQueries": {
            "title": "Search",
            "type": "array",
            "description": "Keyword searches to run on TikTok. TikTok redirects anonymous searches to the For You feed, so search runs may return 0 videos without a logged session. Profile and direct video URL inputs are the most reliable.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "searchSection": {
            "title": "Search section",
            "enum": [
              "top",
              "videos",
              "users",
              "live"
            ],
            "type": "string",
            "description": "Which search tab to scrape.",
            "default": "videos"
          },
          "videoUrls": {
            "title": "Video URLs",
            "type": "array",
            "description": "Direct TikTok video URLs to scrape without running a search. Example: https://www.tiktok.com/@user/video/1234567890.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "downloadVideos": {
            "title": "Download TikTok videos",
            "type": "boolean",
            "description": "Save each video as an MP4 file to the key value store and include a public link in the output row. Adds storage cost.",
            "default": false
          },
          "downloadSubtitles": {
            "title": "Download TikTok subtitles or transcription ($)",
            "type": "boolean",
            "description": "Extract auto generated captions or transcribe audio when captions are missing. Paid feature.",
            "default": false
          },
          "subtitleLanguages": {
            "title": "Subtitle languages",
            "type": "array",
            "description": "Preferred subtitle language codes. First match wins. Example: en, es, fr.",
            "default": [
              "en"
            ],
            "items": {
              "type": "string"
            }
          },
          "scrapeComments": {
            "title": "TikTok comments ($)",
            "type": "boolean",
            "description": "Open each video and collect the top comments. Paid feature.",
            "default": false
          },
          "maxCommentsPerVideo": {
            "title": "Max comments per video",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on comments returned per video. 0 disables.",
            "default": 0
          },
          "countryCode": {
            "title": "Scrape as in a country filter ($)",
            "type": "string",
            "description": "Return results as they appear to a viewer in this country. Two letter ISO code. Leave blank for default. Paid feature when set.",
            "default": ""
          },
          "dedupe": {
            "title": "Deduplicate across runs",
            "type": "boolean",
            "description": "Skip video IDs already pushed in previous runs. Turn off to track changes to the same video over time.",
            "default": true
          },
          "maxVideosTotal": {
            "title": "Max videos per run",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Hard cap across all sources. Controls total cost.",
            "default": 500
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify proxy. Residential strongly recommended. TikTok blocks datacenter IPs.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}