{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Profile & Video Stats Scraper — Account Lookup, Bio",
    "description": "Look up TikTok accounts and videos by handle or URL — follower count, likes, video count, bio, verification, account age, business category; per-video play, like, comment, share and save counts. Creator and user stats for influencer research. No login, no cookies. Charged only for results returned.",
    "version": "1.0",
    "x-build-id": "UgU4s1DzORFTe24p2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nick.cheng~tiktok-profile-stats-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nick.cheng-tiktok-profile-stats-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/nick.cheng~tiktok-profile-stats-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nick.cheng-tiktok-profile-stats-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/nick.cheng~tiktok-profile-stats-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nick.cheng-tiktok-profile-stats-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": {
          "handles": {
            "title": "TikTok handles",
            "type": "array",
            "description": "Accounts to look up. Accepts @name or plain name. Pass as many as you like — they are all resolved in one run.",
            "default": [
              "nasa",
              "duolingo",
              "netflix"
            ],
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Profile URLs",
            "type": "array",
            "description": "TikTok profile URLs, for example https://www.tiktok.com/@nasa. Handles are read out of the URL, so links copied from a browser work as-is.",
            "items": {
              "type": "string"
            }
          },
          "recentVideos": {
            "title": "Recent videos per account (creator vetting)",
            "minimum": 0,
            "maximum": 12,
            "type": "integer",
            "description": "For each account, also read its latest videos (up to 12) and return their play, like, comment and share counts plus averages: average and median plays, engagement rate (by plays and by followers) and posts per week. Uses the videos TikTok lists on the creator's public embed, which can include pinned videos. Included in the per-profile price; makes each profile take a few seconds longer. 0 = off.",
            "default": 0
          },
          "videoUrls": {
            "title": "Video URLs or IDs",
            "type": "array",
            "description": "Videos to look up, one row each: play, like, comment, share and save counts plus description, hashtags, music and author. Accepts full links (https://www.tiktok.com/@name/video/123…), share links (vm.tiktok.com/…, tiktok.com/t/…), or bare numeric video IDs. Photo-post links (/photo/…) are accepted and read from the same page data.",
            "default": [
              "https://www.tiktok.com/@nasa/video/7676868860749827342",
              "https://www.tiktok.com/@nasa/video/7667244788046892319",
              "https://www.tiktok.com/@duolingo/video/7673613020710456590"
            ],
            "items": {
              "type": "string"
            }
          },
          "includeSubtitles": {
            "title": "Include subtitles / transcript",
            "type": "boolean",
            "description": "For each video, also return what is said in it: the transcript (TikTok's own auto-generated captions in the spoken language) plus every subtitle track TikTok has for the video, with timestamps. Included in the per-video price — no extra charge. Many videos have no captions (music-only clips, videos without speech, some short clips); those rows say so and the transcript is empty. We do not run our own speech recognition.",
            "default": false
          },
          "listUrl": {
            "title": "List file or Google Sheet",
            "type": "string",
            "description": "Link to a long list of targets: a public .csv or .txt file, or a Google Sheet shared as \"Anyone with the link\". Read in addition to the fields above and de-duplicated with them. With one value per row, plain names, @handles, profile URLs, video URLs and numeric video IDs are all read. With several columns, only TikTok links and @handles are read — other cells (names, follower counts, emails) are ignored, so no unintended account is ever looked up or charged."
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many pages are fetched at the same time. Higher is faster on long lists; if TikTok starts throttling, the Actor pauses on its own and retries the throttled targets slowly at the end, so they are not lost or charged as failures.",
            "default": 3
          },
          "maxItems": {
            "title": "Max items",
            "minimum": 0,
            "type": "integer",
            "description": "Hard ceiling on rows for the whole run, counting profiles and videos together. Leave at 0 for no limit.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}