# Tiktok Video Scraper (`api-empire/tiktok-video-scraper`)

Scrape TikTok videos effortlessly with the Apify TikTok Video Scraper. Extract video URLs, captions, hashtags, views, likes, comments, and creator info. Perfect for trend analysis, influencer tracking, and content research. Fast, accurate, and easy to integrate into automated workflows.

- **URL**: https://apify.com/api-empire/tiktok-video-scraper.md
- **Developed by:** [API Empire](https://apify.com/api-empire) (community)
- **Categories:** Videos, Social media, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

$19.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.
You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

# README

### What is TikTok Video Scraper?

A TikTok Video Scraper is a powerful tool that allows you to automatically extract data from TikTok videos — without needing to open each video manually. Whether you’re tracking viral trends, collecting influencer stats, or running sentiment analysis, this tool lets you do it at scale. Most modern scrapers, including the Apify TikTok Video Scraper, offer both no-code interfaces and developer-friendly integrations via API, Python, or even GitHub-hosted projects.

Popular variants include:

- TikTok Video Scraper Python scripts for automation workflows

- Free TikTok Video Scraper tools for limited use

- Browser-based options like the TikTok scraper extension

- Code-first solutions on GitHub TikTok Video Scraper repos

These scrapers are typically used for public content, meaning no login or private data access is required

### What TikTok Video Data Can I Extract?

Here’s a breakdown of what a TikTok video data scraper can extract from video URLs:

| Data Type | Description |
| --- | --- |
| Video URL | Direct link to the TikTok video |
| Author Info | Name, username, avatar, bio, account status |
| Engagement Stats | Plays, likes (hearts), comments, shares |
| Captions & Hashtags | Full video text + used hashtags |
| Music Metadata | Music title, original/borrowed, author |
| Timestamp | Date/time of publication |
| Video Status | Paid promotion or organic content |
| Comments (optional) | Pull with a TikTok video comment scraper |

Advanced tools like Clockworks TikTok Video Scraper and Apify TikTok Video Scraper even allow filtering by video types and bulk processing from URLs.

#### Key Features of TikTok Video Scraper

- Scrape data from individual or bulk video URLs

- Export to CSV, JSON, Excel, XML, or HTML

- Option to download TikTok video metadata only (lightweight mode)

- Works as a TikTok video URL scraper or video link scraper

- Handles large-scale scraping with pagination and proxy support

- Integrates with Zapier, Slack, Google Drive, etc.

- Can scrape replies using a TikTok comment scraper

- Some tools come as an installable TikTok Video Scraper app

### How to Use TikTok Video Scraper

Whether you're using an online platform or a Python script, most TikTok Video Scrapers follow a simple setup process. Here's how to get started:

#### 1. Create an Account

Sign up on a scraping platform like Apify to access ready-to-use actors such as the TikTok Video Scraper. Some free TikTok Video Scrapers also offer limited access without sign-up.

#### 2. Open the Scraper Tool

Locate the TikTok Video Scraper in the dashboard or install it locally. Tools may appear as actors (hosted) or CLI tools (self-hosted).

#### 3. Input TikTok Video URLs

Paste one or more video links into the input field. Most scrapers support bulk URLs and accept formats like JSON arrays. Optional settings may include subtitle download, video resolution, and metadata-only mode.

#### 4. Start the Scraper

Click the “Start” or “Run” button. The scraper will begin extracting data for each video.

#### 5. Download the Results

Once the run completes, export your data in formats such as CSV, Excel, JSON, or XML.

#### 🐍 Using a Python Script?

If you’re working with a TikTok Video Scraper GitHub repository, clone the repo, install dependencies (pip install -r requirements.txt), and run the script in your terminal with the correct input.

#### Input

```json
{
    "max_comments": 10,
    "urls": [
        "https://www.tiktok.com/@mrbeast"
    ]
}
```

#### Output

```json
[
  {
    "authorMeta.avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=665b17c9&x-expires=1762502400&x-signature=NxCywJfut6L2KxxTsirfjaoXH0I%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=maliva",
    "authorMeta.name": "mrbeast",
    "text": "Cooking a pizza with powertools! ",
    "diggCount": 883800,
    "shareCount": 114800,
    "playCount": 16900000,
    "commentCount": 58800,
    "videoMeta.duration": 39,
    "musicMeta.musicName": "original sound",
    "musicMeta.musicAuthor": "MrBeast",
    "musicMeta.musicOriginal": true,
    "createTimeISO": "2025-09-23T16:49:52.000Z",
    "webVideoUrl": "https://www.tiktok.com/@mrbeast/video/7553327774983802143"
  },
  {
    "authorMeta.avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=665b17c9&x-expires=1762502400&x-signature=NxCywJfut6L2KxxTsirfjaoXH0I%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=maliva",
    "authorMeta.name": "mrbeast",
    "text": "I just got punched by @Mike Tyson #CaneloCrawford #RiyadhSeason ",
    "diggCount": 997700,
    "shareCount": 78800,
    "playCount": 14800000,
    "commentCount": 37900,
    "videoMeta.duration": 22,
    "musicMeta.musicName": "original sound",
    "musicMeta.musicAuthor": "MrBeast",
    "musicMeta.musicOriginal": true,
    "createTimeISO": "2025-09-14T01:43:24.000Z",
    "webVideoUrl": "https://www.tiktok.com/@mrbeast/video/7549754449489595679"
  },
  {
    "authorMeta.avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=665b17c9&x-expires=1762502400&x-signature=NxCywJfut6L2KxxTsirfjaoXH0I%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=maliva",
    "authorMeta.name": "mrbeast",
    "text": "They wouldn’t let me keep the bike. Check out Tron: Ares in theaters October 10th!",
    "diggCount": 228500,
    "shareCount": 31900,
    "playCount": 5600000,
    "commentCount": 22300,
    "videoMeta.duration": 13,
    "musicMeta.musicName": "original sound",
    "musicMeta.musicAuthor": "MrBeast",
    "musicMeta.musicOriginal": true,
    "createTimeISO": "2025-09-05T04:44:25.000Z",
    "webVideoUrl": "https://www.tiktok.com/@mrbeast/video/7546461281742556447"
  },
  {
    "authorMeta.avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=665b17c9&x-expires=1762502400&x-signature=NxCywJfut6L2KxxTsirfjaoXH0I%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=maliva",
    "authorMeta.name": "mrbeast",
    "text": "I raced @IShowSpeed",
    "diggCount": 890800,
    "shareCount": 33900,
    "playCount": 13800000,
    "commentCount": 20000,
    "videoMeta.duration": 46,
    "musicMeta.musicName": "original sound",
    "musicMeta.musicAuthor": "MrBeast",
    "musicMeta.musicOriginal": true,
    "createTimeISO": "2025-09-03T17:22:55.000Z",
    "webVideoUrl": "https://www.tiktok.com/@mrbeast/video/7545914587384696095"
  },
  {
    "authorMeta.avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=665b17c9&x-expires=1762502400&x-signature=NxCywJfut6L2KxxTsirfjaoXH0I%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=maliva",
    "authorMeta.name": "mrbeast",
    "text": "WE RAISED $40,000,000 FOR #teamwater Couldn’t have done this without each and every one of you :) ",
    "diggCount": 442500,
    "shareCount": 46600,
    "playCount": 6000000,
    "commentCount": 37200,
    "videoMeta.duration": 142,
    "musicMeta.musicName": "original sound",
    "musicMeta.musicAuthor": "MrBeast",
    "musicMeta.musicOriginal": true,
    "createTimeISO": "2025-09-01T00:45:25.000Z",
    "webVideoUrl": "https://www.tiktok.com/@mrbeast/video/7544915396579708190"
  },
  {
    "authorMeta.avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=665b17c9&x-expires=1762502400&x-signature=NxCywJfut6L2KxxTsirfjaoXH0I%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=maliva",
    "authorMeta.name": "mrbeast",
    "text": "We are so close! Donate now to #teamwater to help give 2 million people access to clean water!",
    "diggCount": 343600,
    "shareCount": 41100,
    "playCount": 31600000,
    "commentCount": 41900,
    "videoMeta.duration": 12,
    "musicMeta.musicName": "original sound",
    "musicMeta.musicAuthor": "MrBeast",
    "musicMeta.musicOriginal": true,
    "createTimeISO": "2025-08-19T04:09:20.000Z",
    "webVideoUrl": "https://www.tiktok.com/@mrbeast/video/7540143785636826398"
  },
  {
    "authorMeta.avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=665b17c9&x-expires=1762502400&x-signature=NxCywJfut6L2KxxTsirfjaoXH0I%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=maliva",
    "authorMeta.name": "mrbeast",
    "text": "yo it’s me @Karl, don’t worry jimmy is totally okay and is totally not sitting on my shelf rn. ",
    "diggCount": 2300000,
    "shareCount": 98000,
    "playCount": 41400000,
    "commentCount": 64800,
    "videoMeta.duration": 5,
    "musicMeta.musicName": "original sound",
    "musicMeta.musicAuthor": "Lilz Bullz Official",
    "musicMeta.musicOriginal": true,
    "createTimeISO": "2025-08-11T15:34:46.000Z",
    "webVideoUrl": "https://www.tiktok.com/@mrbeast/video/7537351756468997407"
  },
  {
    "authorMeta.avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=665b17c9&x-expires=1762502400&x-signature=NxCywJfut6L2KxxTsirfjaoXH0I%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=maliva",
    "authorMeta.name": "mrbeast",
    "text": "Help us raise $40,000,000 for #TeamWater. Thanks to our partners at TikTok for helping us get even closer to our goal of giving clean drinking water to 2 million people in need.",
    "diggCount": 1900000,
    "shareCount": 80700,
    "playCount": 223900000,
    "commentCount": 74800,
    "videoMeta.duration": 30,
    "musicMeta.musicName": "original sound",
    "musicMeta.musicAuthor": "MrBeast",
    "musicMeta.musicOriginal": true,
    "createTimeISO": "2025-08-04T16:41:45.000Z",
    "webVideoUrl": "https://www.tiktok.com/@mrbeast/video/7534771415275375902"
  },
  {
    "authorMeta.avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=665b17c9&x-expires=1762502400&x-signature=NxCywJfut6L2KxxTsirfjaoXH0I%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=maliva",
    "authorMeta.name": "mrbeast",
    "text": "Tag your boss to get them on the Jumbotron 😭",
    "diggCount": 816200,
    "shareCount": 38200,
    "playCount": 12300000,
    "commentCount": 172300,
    "videoMeta.duration": 11,
    "musicMeta.musicName": "original sound",
    "musicMeta.musicAuthor": "MrBeast",
    "musicMeta.musicOriginal": true,
    "createTimeISO": "2025-07-18T22:53:44.000Z",
    "webVideoUrl": "https://www.tiktok.com/@mrbeast/video/7528558840904830238"
  },
  {
    "authorMeta.avatar": "https://p16-sign-va.tiktokcdn.com/tos-maliva-avt-0068/1e2348ca19d394037718e3b1d3fc2958~tplv-tiktokx-cropcenter:720:720.jpeg?dr=14579&refresh_token=665b17c9&x-expires=1762502400&x-signature=NxCywJfut6L2KxxTsirfjaoXH0I%3D&t=4d5b0474&ps=13740610&shp=a5d48078&shcp=81f88b70&idc=maliva",
    "authorMeta.name": "mrbeast",
    "text": "@haleyybaylee you owe me a giveaway video",
    "diggCount": 3100000,
    "shareCount": 91500,
    "playCount": 47300000,
    "commentCount": 146800,
    "videoMeta.duration": 17,
    "musicMeta.musicName": "Sing To Me",
    "musicMeta.musicAuthor": "Jhené Aiko",
    "musicMeta.musicOriginal": false,
    "createTimeISO": "2025-06-29T00:39:06.000Z",
    "webVideoUrl": "https://www.tiktok.com/@mrbeast/video/7521164305530703135"
  }
]
```

### 🎯 Use Cases

A TikTok Video Scraper isn’t just for data geeks—it’s a powerful tool across marketing, research, and content creation. Here’s how different users benefit:

#### 🔥 Trend Discovery

Track trending videos across niches and regions. Identify what formats, sounds, and hashtags are going viral to inspire your next content move.

#### 👥 Influencer Analysis

Scrape engagement data (likes, shares, comments) to evaluate influencer performance. Spot rising creators before they go mainstream, and back decisions with hard metrics.

#### 📈 Marketing Intelligence

Monitor competitor campaigns or hashtag challenges. Use scraped TikTok video data to calculate ROI, benchmark performance, and optimize ad spend.

#### 🗣️ Social Listening

Combine a TikTok video comment scraper with metadata to extract customer sentiment, common feedback, or viral moments that impact your brand perception.

#### 🎓 Academic & Behavioral Research

Study how TikTok’s algorithm prioritizes certain content types. Use metadata like timestamps, engagement rates, and music to uncover platform dynamics.

#### ✍️ Content Strategy Development

Use a TikTok video metadata viewer to refine your content calendar. Learn which formats work best, what time to post, and how to frame your captions based on what’s already performing.

### How Many Results Can You Scrape with TikTok Video Scraper?

The number of results you can scrape depends on the tool, configuration, and platform limits. For example, the Apify TikTok Video Scraper supports thousands of video records per run, limited only by your compute units and result count settings. Users on Apify’s free plan can typically scrape a few hundred results per month, while paid plans allow tens of thousands or more.

#### 🚀 Scaling Your Scraping Capacity

To increase scale:

- Use batch input (bulk video URLs or hashtag-based scraping)

- Enable proxy rotation to bypass TikTok rate limits

- Adjust resultsPerPage settings to fetch more items per scroll

With these settings, a single run can yield thousands of data points, including video metadata, author stats, and engagement numbers.

#### 🐍 Self-Hosted Options

If you’re using a TikTok Video Scraper GitHub script or a TikTok Video Scraper Python project, you can theoretically scrape hundreds of thousands of videos, provided you manage rate-limiting and use rotating proxies effectively.

In short, whether you're scraping 10 videos or 100,000, it's all about how well your tool is optimized and how you configure your inputs.

### How Much Will Scraping TikTok Videos Cost?

The cost of scraping TikTok videos depends on the tool and the scale of your data extraction. Some free TikTok Video Scraper tools offer limited access—usually allowing you to scrape around 100–500 items per month, which is ideal for small projects or occasional use.

Platforms like Apify TikTok Video Scraper follow a pay-per-result pricing model, with the following typical breakdown:

- $0.03 per actor start (each time the scraper runs)

- $0.004 per dataset item (each video’s data)

- $0.001 per video if downloading is enabled

With optimized settings and metadata-only mode, costs can be kept low. If you’re working within a smaller scope, our $5 monthly can cover around 1,000 results—making it a solid entry point for individuals and startups.

For larger-scale scraping, consider moving to a higher plan like $49/month, which unlocks more compute credits and can handle 5,000+ results with ease.

Alternatively, using a TikTok Video Scraper GitHub project or a Python-based TikTok scraper lets you self-host and bypass platform fees entirely. Just keep in mind: you’ll need to manage your own proxies, rate limits, and server resources.

### Is It Legal to Scrape TikTok Videos?

Yes—but only if you follow specific guidelines and focus strictly on public data. Here's what you need to know:

#### ✅ Public Data Is Fair Game

You are legally allowed to scrape content that is publicly available on TikTok, such as:\n- Video metadata (likes, views, captions)\n- Public comments\n- Usernames and bios (if public)\n- Hashtags and music metadata

#### ❌ Private or Restricted Data Is Off-Limits

TikTok’s terms strictly prohibit scraping:\n- Private accounts or DMs\n- Login-restricted content\n- Personally identifiable information (email, phone numbers, etc.)

#### 🤖 Ethical Scrapers Follow the Rules

Tools like the Apify TikTok Video Scraper and Clockworks TikTok Video Scraper are built to follow ethical scraping practices, collecting only what’s visible to any public user.

#### 📌 Legal Compliance Reminder

Even if the data is public, how you use it matters:\n- If your project involves storing or analyzing personal data (e.g., comment history, usernames), consult legal counsel.\n- Make sure your usage aligns with privacy laws such as GDPR, CCPA, or other regional regulations.

### What Are Other TikTok Scraping Tools?

If you want to scrape specific TikTok data, you can use any of the dedicated scrapers with fewer settings to configure and faster results. Just enter one or more TikTok URLs and click to scrape.

| 🎥 TikTok Video Scraper | 👤 TikTok Profile Scraper |
| --- | --- |
| 💬 TikTok Comments Scraper | #️⃣ TikTok Hashtag Scraper |
| 🎵 TikTok Sound Scraper | 📢 TikTok Ads Scraper |
| 🔍 TikTok Discover Scraper | 📈 TikTok Trending Videos Scraper |

# Actor input Schema

## `urls` (type: `array`):

List of TikTok profile URLs (e.g., https://www.tiktok.com/@username) or usernames (e.g., username or @username). Supports bulk input.

## `sort_order` (type: `string`):

Sort videos by: 'date\_desc' (newest first), 'date\_asc' (oldest first), 'plays\_desc' (most views), 'likes\_desc' (most likes), 'comments\_desc' (most comments).

## `max_comments` (type: `integer`):

Maximum number of videos to scrape per profile (minimum: 10, maximum: 1000).

## `proxyConfiguration` (type: `object`):

Choose which proxies to use. By default, no proxy is used. If TikTok blocks requests, the actor will automatically fallback to datacenter proxy, then residential proxy.

## Actor input object example

```json
{
  "urls": [
    "https://www.tiktok.com/@mrbeast"
  ],
  "sort_order": "date_desc",
  "max_comments": 50,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.tiktok.com/@mrbeast"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("api-empire/tiktok-video-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": ["https://www.tiktok.com/@mrbeast"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("api-empire/tiktok-video-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.tiktok.com/@mrbeast"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call api-empire/tiktok-video-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=api-empire/tiktok-video-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tiktok Video Scraper",
        "description": "Scrape TikTok videos effortlessly with the Apify TikTok Video Scraper. Extract video URLs, captions, hashtags, views, likes, comments, and creator info. Perfect for trend analysis, influencer tracking, and content research. Fast, accurate, and easy to integrate into automated workflows.",
        "version": "0.1",
        "x-build-id": "tOXbcXRBvgRROBYfc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/api-empire~tiktok-video-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-api-empire-tiktok-video-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-video-scraper/runs": {
            "post": {
                "operationId": "runs-sync-api-empire-tiktok-video-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-video-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-api-empire-tiktok-video-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": [
                    "urls"
                ],
                "properties": {
                    "urls": {
                        "title": "TikTok URLs or Usernames",
                        "type": "array",
                        "description": "List of TikTok profile URLs (e.g., https://www.tiktok.com/@username) or usernames (e.g., username or @username). Supports bulk input.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sort_order": {
                        "title": "Sort Order",
                        "enum": [
                            "date_desc",
                            "date_asc",
                            "plays_desc",
                            "likes_desc",
                            "comments_desc"
                        ],
                        "type": "string",
                        "description": "Sort videos by: 'date_desc' (newest first), 'date_asc' (oldest first), 'plays_desc' (most views), 'likes_desc' (most likes), 'comments_desc' (most comments).",
                        "default": "date_desc"
                    },
                    "max_comments": {
                        "title": "Maximum Comments",
                        "minimum": 10,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of videos to scrape per profile (minimum: 10, maximum: 1000).",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Choose which proxies to use. By default, no proxy is used. If TikTok blocks requests, the actor will automatically fallback to datacenter proxy, then residential proxy."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
