# TikTok Video Scraper (`automation-lab/tiktok-video-scraper`) Actor

Extract metadata from TikTok videos by URL. Get views, likes, shares, comments, hashtags, music info, and author details. No login required.

- **URL**: https://apify.com/automation-lab/tiktok-video-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## TikTok Video Scraper

Extract full metadata from TikTok videos by URL. Get **views, likes, shares, comments, hashtags, music info, and author details** for any list of TikTok video links. No login or API key required.

### What does TikTok Video Scraper do?

**TikTok Video Scraper** takes a list of TikTok video URLs and returns rich structured data for each video — engagement stats, author metadata, music track info, hashtags, and more. Simply paste your video links and get back a clean JSON/CSV dataset ready to export.

Supports full video URLs (`tiktok.com/@user/video/ID`) and short links (`vm.tiktok.com/...`). Perfect for competitive research, influencer analysis, content auditing, and social monitoring workflows.

**No TikTok API key required.** No account, no login, no rate limits.

### Who is TikTok Video Scraper for?

🎯 **Social media marketers**
- Track performance of competitor videos (views, engagement rate, shares)
- Monitor trending content in your niche
- Compare hashtag and music strategy across accounts

📊 **Data analysts & researchers**
- Build datasets of TikTok video metadata for academic or market research
- Analyze engagement patterns across content categories
- Export to Google Sheets, BigQuery, or your data warehouse

🤝 **Influencer marketing teams**
- Audit video performance before signing creator partnerships
- Verify claimed view counts and engagement rates
- Track campaigns: collect all video URLs, run the scraper, get engagement stats

🛠️ **Developers & automation builders**
- Enrich webhook events with full video metadata
- Trigger workflows when a tracked video passes a view threshold
- Build monitoring dashboards for brand-owned or competitor TikTok accounts

### Why use TikTok Video Scraper?

- ✅ **No API key needed** — works without TikTok developer credentials
- ✅ **Batch processing** — scrape hundreds of videos in a single run
- ✅ **Rich metadata** — 25+ fields per video including author stats, music info, hashtags
- ✅ **Pay per video** — only pay for what you scrape, no monthly subscription
- ✅ **Short link support** — resolves vm.tiktok.com and vt.tiktok.com links automatically
- ✅ **Export-ready** — JSON, CSV, Excel, and XML formats out of the box
- ✅ **API access** — integrate with your apps via REST API or Apify SDK
- ✅ **Scheduled runs** — set up recurring jobs to monitor videos over time

### What data can you extract?

#### 📹 Video Details

| Field | Description | Example |
|-------|-------------|---------|
| `id` | TikTok video ID | `7618942237535194390` |
| `webVideoUrl` | Full canonical URL | `https://www.tiktok.com/@user/video/...` |
| `text` | Caption / description | `"Easy recipe 🍝 #cooking #recipe"` |
| `textLanguage` | Detected language code | `en` |
| `createTimeISO` | Post timestamp (ISO 8601) | `2026-03-19T12:27:12.000Z` |
| `locationCreated` | Country code where posted | `US` |
| `isPinned` | Pinned to profile? | `false` |
| `isSlideshow` | Photo slideshow (not video)? | `false` |

#### 📈 Engagement Stats

| Field | Description | Example |
|-------|-------------|---------|
| `playCount` | Total views | `9,800,000` |
| `diggCount` | Likes | `719,600` |
| `commentCount` | Comments | `1,173` |
| `shareCount` | Shares | `89,200` |
| `collectCount` | Saves / bookmarks | `335,955` |
| `repostCount` | Reposts | `0` |

#### 👤 Author Metadata

| Field | Description |
|-------|-------------|
| `authorUsername` | @handle |
| `authorNickname` | Display name |
| `authorVerified` | Verified badge status |
| `authorMeta.followersCount` | Follower count |
| `authorMeta.followingCount` | Following count |
| `authorMeta.likesCount` | Total likes on account |
| `authorMeta.videoCount` | Number of videos |
| `authorMeta.signature` | Bio / signature |
| `authorMeta.avatar` | Profile picture URL |

#### 🎵 Music / Sound Info

| Field | Description |
|-------|-------------|
| `musicMeta.musicName` | Track title |
| `musicMeta.musicAuthor` | Artist name |
| `musicMeta.musicOriginal` | Original sound vs licensed |
| `musicMeta.musicAlbum` | Album name |
| `musicMeta.musicId` | TikTok music ID |
| `musicMeta.playUrl` | Audio stream URL |
| `musicMeta.coverUrl` | Album art URL |

#### 🏷️ Tags & Metadata

| Field | Description | Example |
|-------|-------------|---------|
| `hashtags` | Array of hashtag names | `["recipe","cooking","easyrecipes"]` |
| `mentions` | @mentioned usernames | `["gordon_ramsay"]` |
| `videoMeta.duration` | Video length in seconds | `61` |
| `videoMeta.width` / `height` | Pixel dimensions | `576 × 1024` |
| `videoMeta.definition` | Resolution label | `540p` |
| `coverUrl` | Thumbnail image URL | `https://p16-...` |

### How much does it cost to scrape TikTok video data?

TikTok Video Scraper uses **Pay-Per-Event (PPE) pricing** — you pay per video scraped, not a flat subscription.

| Tier | Price per Video | 100 videos | 1,000 videos |
|------|----------------|-----------|-------------|
| Free | $0.0115 | $1.15 | $11.50 |
| Bronze | $0.010 | $1.00 | $10.00 |
| Silver | $0.0078 | $0.78 | $7.80 |
| Gold | $0.006 | $0.60 | $6.00 |
| Platinum | $0.004 | $0.40 | $4.00 |
| Diamond | $0.0028 | $0.28 | $2.80 |

Plus a one-time start fee of **$0.005 per run** (covers proxy initialization and processing).

**Free plan**: Apify gives new users $5 in credits. That gets you approximately **430 videos** on the free tier.

> **vs. the competition**: The main TikTok scraper competitor charges a flat **$45/month** — that's expensive if you need occasional video lookups. With PPE, you pay only for what you actually scrape. At BRONZE tier, we're cheaper per video than competitor pricing.

### How to scrape TikTok videos

1. **Go to [TikTok Video Scraper](https://apify.com/automation-lab/tiktok-video-scraper)** on the Apify Store
2. **Click "Try for free"** to open the actor in Apify Console
3. **Paste your TikTok video URLs** — one URL per line (supports full URLs and vm.tiktok.com short links)
4. **Click "Start"** to begin scraping
5. **Wait for completion** — each video takes about 15-20 seconds
6. **Download results** in JSON, CSV, or Excel format

Or use the JSON input for bulk automation:

```json
{
  "videoUrls": [
    "https://www.tiktok.com/@on_todays_bake/video/7618942237535194390",
    "https://www.tiktok.com/@hescooks/video/7522563578969214216",
    "https://vm.tiktok.com/ZMhXXYZAbc/"
  ]
}
````

Multiple input formats accepted:

```json
{
  "videoUrls": [
    "https://www.tiktok.com/@username/video/1234567890123456789",
    "https://vm.tiktok.com/ZMShortCode/",
    "https://vt.tiktok.com/ZSShortCode/"
  ]
}
```

### Input parameters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `videoUrls` | string\[] | — | **Required.** TikTok video URLs to scrape. Supports full URLs and short links. |
| `maxRetries` | integer | 3 | Number of retry attempts if a video fails to load (1–5). Higher values improve success rate on flaky connections. |
| `proxyConfiguration` | object | RESIDENTIAL | Proxy settings. Residential proxy is recommended for best results. |

### Output examples

```json
{
  "id": "7618942237535194390",
  "webVideoUrl": "https://www.tiktok.com/@on_todays_bake/video/7618942237535194390",
  "inputUrl": "https://www.tiktok.com/@on_todays_bake/video/7618942237535194390",
  "text": "Hassle back potatoes with creamy Cajun chicken and airfried brocollini #dinnerideas #recipe",
  "textLanguage": "en",
  "createTime": 1773923232,
  "createTimeISO": "2026-03-19T12:27:12.000Z",
  "authorUsername": "on_todays_bake",
  "authorNickname": "Ontodaysbake",
  "authorVerified": false,
  "authorId": "7354879811318268961",
  "authorMeta": {
    "id": "7354879811318268961",
    "username": "on_todays_bake",
    "nickname": "Ontodaysbake",
    "profileUrl": "https://www.tiktok.com/@on_todays_bake",
    "verified": false,
    "signature": "Amateur baker, food lover",
    "privateAccount": false,
    "followersCount": 178300,
    "followingCount": 117,
    "likesCount": 6300000,
    "videoCount": 375
  },
  "musicMeta": {
    "musicId": "7042120868645832705",
    "musicName": "Boom Boom Pow",
    "musicAuthor": "The Black Eyed Peas",
    "musicOriginal": false,
    "musicAlbum": "THE E.N.D. (THE ENERGY NEVER DIES)",
    "playUrl": "https://sf16.tiktokcdn-us.com/...",
    "coverUrl": "https://p16-common.tiktokcdn-us.com/..."
  },
  "videoMeta": {
    "height": 1024,
    "width": 576,
    "duration": 61,
    "coverUrl": "https://p16-common-sign.tiktokcdn-us.com/...",
    "definition": "540p",
    "format": "mp4"
  },
  "playCount": 9800000,
  "diggCount": 719600,
  "commentCount": 1173,
  "shareCount": 89200,
  "collectCount": 335955,
  "repostCount": 0,
  "hashtags": ["DinnerIdeas", "Recipe", "EasyRecipes", "cooking", "airfryerrecipe"],
  "mentions": [],
  "isAd": false,
  "isPinned": false,
  "isSlideshow": false,
  "locationCreated": "GB",
  "coverUrl": "https://p16-common-sign.tiktokcdn-us.com/...",
  "scrapedAt": "2026-04-04T06:46:04.450Z"
}
```

### Tips for best results

- 🎯 **Start with a small batch** (5-10 videos) to verify your URLs work before running large jobs
- 🔗 **Mix URL formats freely** — the scraper handles full URLs, vm.tiktok.com, and vt.tiktok.com
- 🗓️ **Schedule recurring runs** to track video performance over time (daily or weekly snapshots)
- ⚡ **Increase concurrency via proxy** — the default is 1 concurrent request; for bulk runs the platform handles queueing automatically
- 🧹 **Filter your list first** — remove duplicate URLs before running to avoid double charges
- 📊 **Export to Google Sheets** using the Apify → Google Sheets integration for easy analysis

### Integrations

#### 🔗 TikTok Video Scraper → Google Sheets

Run the scraper on a list of competitor video URLs, then use the Apify→Sheets integration to build a live dashboard tracking views and engagement rates. Great for weekly competitive benchmarking.

#### 📬 TikTok Video Scraper → Slack

Combine with Apify webhooks to alert your Slack channel when a video you're monitoring surpasses a view threshold. Useful for PR teams tracking viral campaign content.

#### 🔄 TikTok Video Scraper → Make / Zapier

Trigger the scraper from a Make scenario or Zapier zap whenever a new video URL is added to a Google Sheet, Airtable base, or CRM. Automate creator outreach workflows.

#### 📅 Scheduled monitoring

Set up a daily run with a fixed list of brand or competitor video URLs to get a time-series dataset of view/like growth. Export to BigQuery or Postgres for trend analysis.

#### 🧩 Webhook + real-time processing

Use Apify webhooks to POST the scraped dataset to your API endpoint immediately after each run completes. Process video metadata in real time for your analytics pipeline.

### Using the Apify API

Run TikTok Video Scraper programmatically via the Apify API:

#### Node.js

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('automation-lab/tiktok-video-scraper').call({
    videoUrls: [
        'https://www.tiktok.com/@on_todays_bake/video/7618942237535194390',
        'https://www.tiktok.com/@hescooks/video/7522563578969214216',
    ],
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')

run = client.actor('automation-lab/tiktok-video-scraper').call(run_input={
    'videoUrls': [
        'https://www.tiktok.com/@on_todays_bake/video/7618942237535194390',
        'https://www.tiktok.com/@hescooks/video/7522563578969214216',
    ],
})

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['authorUsername'], item['playCount'])
```

#### cURL

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/automation-lab~tiktok-video-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "videoUrls": [
      "https://www.tiktok.com/@on_todays_bake/video/7618942237535194390"
    ]
  }'
```

### Use with AI agents via MCP

TikTok Video Scraper is available as a tool for AI assistants that support the [Model Context Protocol (MCP)](https://docs.apify.com/platform/integrations/mcp).

Add the Apify MCP server to your AI client — this gives you access to all Apify actors, including this one:

#### Setup for Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/tiktok-video-scraper"
```

#### Setup for Claude Desktop, Cursor, or VS Code

Add this to your MCP config file:

```json
{
    "mcpServers": {
        "apify": {
            "url": "https://mcp.apify.com?tools=automation-lab/tiktok-video-scraper"
        }
    }
}
```

Your AI assistant will use OAuth to authenticate with your Apify account on first use.

#### Example prompts

Once connected, try asking your AI assistant:

- "Use automation-lab/tiktok-video-scraper to get the engagement stats for these 5 TikTok videos: \[paste URLs]"
- "Scrape TikTok video metadata for all videos in this list and tell me which one has the highest engagement rate"
- "Compare the view counts, likes, and comments on my last 10 TikTok posts"

Learn more in the [Apify MCP documentation](https://docs.apify.com/platform/integrations/mcp).

### Is it legal to scrape TikTok videos?

TikTok Video Scraper only collects **publicly available data** — the same information visible to anyone browsing TikTok without logging in. This includes video stats, captions, hashtags, author profiles, and music metadata displayed on public video pages.

We follow Apify's [Responsible Web Scraping guidelines](https://apify.com/legal/responsible-data-collection):

- Only public data is collected (no private accounts, no logged-in-only content)
- No personal data is processed beyond what appears on public TikTok pages
- Data is collected for analytics and research purposes
- Rate limiting and polite crawling practices are followed

Always ensure your use case complies with TikTok's [Terms of Service](https://www.tiktok.com/legal/page/us/terms-of-service/en), your local data protection laws (GDPR, CCPA), and Apify's [terms of service](https://apify.com/terms-of-service). This scraper is intended for lawful purposes such as competitive analysis, academic research, and content monitoring.

### FAQ

**How fast is TikTok Video Scraper?**
Each video takes approximately 15-20 seconds to scrape (including browser startup and page load). A batch of 50 videos runs in about 15-20 minutes. The scraper runs one video at a time to respect TikTok's rate limits and avoid detection.

**How much does it cost to scrape 1,000 TikTok videos?**
On the Free plan: $0.0115/video × 1,000 = $11.50 + $0.005 start fee. On the Bronze plan: $0.010/video × 1,000 = $10.00. Diamond plan: $0.0028/video × 1,000 = $2.80.

**Is this different from the TikTok Scraper?**
Yes. [TikTok Scraper](https://apify.com/automation-lab/tiktok-scraper) works from profiles (scrapes all videos from an account). TikTok Video Scraper works from individual video URLs — useful when you have a specific list of links to analyze rather than a whole account.

**Why are some videos returning no data?**
Deleted or unavailable videos return no data — the scraper will skip them gracefully and continue with remaining URLs. Private videos (from private accounts) will also be skipped since the data isn't publicly accessible.

**Why are views/likes showing as 0 for some videos?**
Very new videos (posted in the last few minutes) may not have engagement data indexed yet. Older deleted videos may have cached but incomplete data. Retry after a few minutes for brand-new content.

**Does this work with short TikTok links (vm.tiktok.com)?**
Yes. The scraper automatically follows vm.tiktok.com and vt.tiktok.com redirects to get the canonical video URL before scraping.

**Can I schedule this scraper to run automatically?**
Yes. Use Apify's scheduling feature to run the scraper on a cron schedule (e.g., daily). Keep a fixed list of video URLs in your input to track engagement over time.

### Other TikTok scrapers

Explore our full TikTok scraper suite on Apify Store:

- 🔍 [TikTok Search Scraper](https://apify.com/automation-lab/tiktok-search-scraper) — search TikTok by keyword, extract video results
- 👤 [TikTok Profile Scraper](https://apify.com/automation-lab/tiktok-profile-scraper) — extract follower counts, bio, stats from any profile
- \#️⃣ [TikTok Hashtag Scraper](https://apify.com/automation-lab/tiktok-hashtag-scraper) — get all videos under a hashtag
- 💬 [TikTok Comments Scraper](https://apify.com/automation-lab/tiktok-comments-scraper) — extract comments and replies from any video
- 🎵 [TikTok Sound Scraper](https://apify.com/automation-lab/tiktok-sound-scraper) — find videos using a specific sound or music track
- 🌐 [TikTok Scraper](https://apify.com/automation-lab/tiktok-scraper) — multi-mode scraper for profiles, posts, and video URLs

Other social media scrapers:

- [Instagram Reels Scraper](https://apify.com/automation-lab/instagram-reels-scraper)
- [YouTube Comments Scraper](https://apify.com/automation-lab/youtube-comments-scraper)

# Actor input Schema

## `videoUrls` (type: `array`):

Enter TikTok video URLs to scrape. Supports full URLs (tiktok.com/@user/video/ID) and short links (vm.tiktok.com/...).

## `maxRetries` (type: `integer`):

Number of retry attempts if a video fails to load. Higher values improve success rate on flaky connections.

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

Configure proxy settings. Residential proxy is recommended for best results.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.tiktok.com/@bellapoarch/video/6862153058223197445"
  ],
  "maxRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "videoUrls": [
        "https://www.tiktok.com/@bellapoarch/video/6862153058223197445"
    ],
    "maxRetries": 3,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/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 = {
    "videoUrls": ["https://www.tiktok.com/@bellapoarch/video/6862153058223197445"],
    "maxRetries": 3,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/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 '{
  "videoUrls": [
    "https://www.tiktok.com/@bellapoarch/video/6862153058223197445"
  ],
  "maxRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call automation-lab/tiktok-video-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Video Scraper",
        "description": "Extract metadata from TikTok videos by URL. Get views, likes, shares, comments, hashtags, music info, and author details. No login required.",
        "version": "0.1",
        "x-build-id": "Fyy952hNw8UfIASGk"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~tiktok-video-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-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/automation-lab~tiktok-video-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-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/automation-lab~tiktok-video-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-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": [
                    "videoUrls"
                ],
                "properties": {
                    "videoUrls": {
                        "title": "🎬 TikTok Video URLs",
                        "type": "array",
                        "description": "Enter TikTok video URLs to scrape. Supports full URLs (tiktok.com/@user/video/ID) and short links (vm.tiktok.com/...).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxRetries": {
                        "title": "Max Retries per Video",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Number of retry attempts if a video fails to load. Higher values improve success rate on flaky connections.",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Configure proxy settings. Residential proxy is recommended for best results."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
