{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Scraper: Hashtags, Search, Sounds, Places, Profiles",
    "description": "TikTok scraper for hashtag feeds, keyword search, account search, sounds (music), places (locations) and profile videos or reposts. Video URL, caption, views, likes, comments, shares, date, creator, music, place, subtitles, optional MP4 download and transcript. No login.",
    "version": "0.2",
    "x-build-id": "XvsHeMEtqOQFqCMdj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/transparent_meteorite~tiktok-hashtag-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-transparent_meteorite-tiktok-hashtag-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/transparent_meteorite~tiktok-hashtag-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-transparent_meteorite-tiktok-hashtag-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/transparent_meteorite~tiktok-hashtag-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-transparent_meteorite-tiktok-hashtag-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": {
          "hashtags": {
            "title": "Hashtags",
            "type": "array",
            "description": "Hashtags without spaces, with or without #, or tiktok.com/tag/... URLs. Each returns the videos of that hashtag feed. Leave every source empty to run a #cooking test.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Keywords or phrases to search TikTok videos for, like typing in the TikTok search box.",
            "items": {
              "type": "string"
            }
          },
          "searchSection": {
            "title": "Search for",
            "enum": [
              "videos",
              "users"
            ],
            "type": "string",
            "description": "Videos returns matching videos. Accounts returns matching TikTok profiles (username, name, bio, followers, likes, verified) as rows of type user.",
            "default": "videos"
          },
          "musics": {
            "title": "Sounds (music)",
            "type": "array",
            "description": "tiktok.com/music/... URLs or numeric sound IDs. Returns the videos that use each sound.",
            "items": {
              "type": "string"
            }
          },
          "places": {
            "title": "Places (locations)",
            "type": "array",
            "description": "tiktok.com/place/... URLs or numeric place IDs. Returns the videos tagged at each place, with the place name, address, city and category.",
            "items": {
              "type": "string"
            }
          },
          "profiles": {
            "title": "Profiles",
            "type": "array",
            "description": "Usernames (with or without @) or profile URLs. Returns each profile's videos and/or reposts through TikTok's own feed.",
            "items": {
              "type": "string"
            }
          },
          "profileScrapeSections": {
            "title": "Profile sections",
            "type": "array",
            "description": "Which profile feeds to read.",
            "items": {
              "type": "string",
              "enum": [
                "videos",
                "reposts"
              ],
              "enumTitles": [
                "Videos",
                "Reposts"
              ]
            },
            "default": [
              "videos"
            ]
          },
          "resultsPerPage": {
            "title": "Results per source",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum videos (or accounts) for each hashtag, keyword, sound, place and profile section.",
            "default": 30
          },
          "oldestPostDate": {
            "title": "Only videos newer than",
            "type": "string",
            "description": "A date (2026-10-01) or a period (7 days, 2 weeks, 3 months). Older videos are skipped and not charged."
          },
          "newestPostDate": {
            "title": "Only videos older than",
            "type": "string",
            "description": "A date (2026-10-01, the whole day included) or a period. Newer videos are skipped and not charged."
          },
          "leastDiggs": {
            "title": "Minimum likes",
            "minimum": 0,
            "type": "integer",
            "description": "Only videos with at least this many likes."
          },
          "mostDiggs": {
            "title": "Maximum likes",
            "minimum": 0,
            "type": "integer",
            "description": "Only videos with at most this many likes (find small creators)."
          },
          "minPlayCount": {
            "title": "Minimum views",
            "minimum": 0,
            "type": "integer",
            "description": "Only videos with at least this many views."
          },
          "maxItems": {
            "title": "Max videos in total",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many videos across all hashtags and keywords."
          },
          "shouldDownloadVideos": {
            "title": "Download videos (MP4)",
            "type": "boolean",
            "description": "Saves each video as an MP4 (no watermark, best H.264 quality under the size limit) in the run's key-value store and puts the link in mediaUrls and videoMeta.downloadAddr. Charged per downloaded video.",
            "default": false
          },
          "maxVideoSizeMB": {
            "title": "Max video size (MB)",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Videos larger than this in every quality are skipped (videoMeta.downloadError says why).",
            "default": 60
          },
          "shouldDownloadCovers": {
            "title": "Download cover images",
            "type": "boolean",
            "description": "Saves each cover image in the key-value store; videoMeta.coverUrl then points to the stored copy, which does not expire.",
            "default": false
          },
          "shouldDownloadSubtitles": {
            "title": "Download subtitles (VTT)",
            "type": "boolean",
            "description": "Saves TikTok's subtitle file (English first) as WebVTT. Subtitle links in every language are always in videoMeta.subtitleLinks.",
            "default": false
          },
          "includeTranscriptText": {
            "title": "Add transcript text",
            "type": "boolean",
            "description": "Adds the spoken text of the video (from TikTok's own captions) as a transcript field. Videos without captions get none.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitor mode: only new videos",
            "type": "boolean",
            "description": "Remembers the video IDs it delivered (in a named key-value store) and next time returns only videos it has not seen. Use with a schedule.",
            "default": false
          },
          "monitorStoreName": {
            "title": "Monitor store name",
            "type": "string",
            "description": "Named key-value store that keeps the monitor state.",
            "default": "tiktok-hashtag-monitor"
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Residential US is required: TikTok returns empty hashtag feeds to datacenter IPs. Images, video streams and scripts do not go through the proxy, so traffic stays small.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "RESIDENTIAL"
              ],
              "apifyProxyCountry": "US"
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}