{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Profile Videos API Scraper With Playlist Details",
    "description": "Tiktok Profile Videos Api Scraper extracts videos from any public TikTok profile through stable API-style scraping. Capture captions, video URLs, views, likes, comments, shares, and metadata. Ideal for research, content tracking, trend analysis, and automated TikTok workflows.",
    "version": "0.1",
    "x-build-id": "fO51eeSB8JKxaGdNX"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/api-empire~tiktok-profile-videos-api-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-api-empire-tiktok-profile-videos-api-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/api-empire~tiktok-profile-videos-api-scraper/runs": {
      "post": {
        "operationId": "runs-sync-api-empire-tiktok-profile-videos-api-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/api-empire~tiktok-profile-videos-api-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-api-empire-tiktok-profile-videos-api-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": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "🎞️ Creator profiles to map",
            "type": "array",
            "description": "TikTok profile URLs (https://www.tiktok.com/@username) or bare usernames (mrbeast). One per line. Each profile is checked for playlists first, then its uploads are collected.",
            "items": {
              "type": "string"
            }
          },
          "includePlaylistDetails": {
            "title": "🗂️ Read the playlist inventory",
            "type": "boolean",
            "description": "Call TikTok's playlist endpoint once per profile and attach the full playlist list (id, name, declared video count, cover, owner) to every row. Turn off and all playlist columns are null.",
            "default": true
          },
          "includePlaylistVideos": {
            "title": "▶️ Walk each playlist in order",
            "type": "boolean",
            "description": "Fetch the videos inside every playlist. Rows come back in playlist order, so each row carries a 0-based playlist_position (episode ordering) plus the playlist it belongs to.",
            "default": true
          },
          "maxPlaylists": {
            "title": "🔢 Playlists per profile",
            "minimum": 0,
            "type": "integer",
            "description": "Cap how many playlists to walk per profile. 0 = every playlist the profile has.",
            "default": 0
          },
          "maxVideosPerPlaylist": {
            "title": "🎬 Videos per playlist",
            "minimum": 0,
            "type": "integer",
            "description": "Cap how many videos to pull out of each playlist. 0 = the whole playlist.",
            "default": 5
          },
          "playlistNameFilter": {
            "title": "🔎 Only playlists whose name contains",
            "type": "string",
            "description": "Case-insensitive substring match on the playlist name (e.g. 'beast games'). Leave empty to keep every playlist.",
            "default": ""
          },
          "includeProfileFeed": {
            "title": "📥 Also collect the normal profile uploads",
            "type": "boolean",
            "description": "Emit the creator's regular upload feed as well. Videos already returned by a playlist walk in the same run are not emitted twice.",
            "default": true
          },
          "checkPlaylistMembership": {
            "title": "🧭 Reverse-check membership on feed videos",
            "type": "boolean",
            "description": "For each profile-feed video, open its video page and read the playlist it belongs to. One extra request (~400 KB) per video. Measured hit rate is low: 3 of 40 sampled videos (7.5%) carry a playlist id. Off by default.",
            "default": false
          },
          "sortOrder": {
            "title": "🕒 Row order for feed videos",
            "enum": [
              "newest",
              "oldest"
            ],
            "type": "string",
            "description": "Order of the profile-feed rows collected in this run: newest first, or oldest first. Playlist rows always keep playlist order so playlist_position stays meaningful.",
            "default": "newest"
          },
          "maxVideos": {
            "title": "📹 Max feed videos per profile",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on the profile-feed videos per profile. 0 = no cap. Playlist videos are capped separately above.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy",
            "type": "object",
            "description": "TikTok answers unwarmed clients with a WAF challenge, so a headless browser mints the session first and the API calls replay it. No proxy is used unless you enable one here; if the session is still challenged the run escalates datacenter → 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}