# TikTok Scraper (Video, Profile, Hashtag, Keyword, Sound & More) (`lurkapi/tiktok-scraper-all-in-one`) Actor

Scrape TikTok videos, profiles, hashtags, keyword search, sound pages, and creator search. Returns engagement stats, music, location, hashtags, ad flags, and more. Optional add-ons: transcripts, no-watermark video download, comments, full author enrichment.

- **URL**: https://apify.com/lurkapi/tiktok-scraper-all-in-one.md
- **Developed by:** [LurkAPI](https://apify.com/lurkapi) (community)
- **Categories:** Automation, Social media, Videos
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 item scrapeds

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

Scrape TikTok data the easy way. Paste a video link, a creator's handle, a hashtag, a search term, or a sound URL and this tool returns clean, structured data ready to use in your spreadsheet, CRM, or report.

### 🎬 What it does

Pick any combination of these inputs:

- **Video links:** One video at a time, in any format. Copy from your browser, the mobile share button, or a short link. They all work.
- **Profiles:** Use the `@username` or paste the profile URL. You get the creator's info plus their latest videos.
- **Hashtags:** Get recent videos posted under any tag.
- **Keyword search:** Type words like "cooking" or "taylor swift" and get videos that match.
- **Sound URLs:** Find every video that uses a specific song or sound.
- **Creator search:** Search for creators by name or topic.

For every video result you get:

- View count, likes, comments, shares, saves
- Caption text with hashtags and mentions
- Creator handle, display name, verified status
- Music or sound info
- Location tag (when the creator added one)
- Sponsored content flags
- Cover image link

### 📋 How to use it

#### Step 1: Configure input

Paste one or more of:
- Video URLs in the Video URLs box
- Usernames or profile URLs in the Profiles box
- Hashtag names in the Hashtags box (with or without #)
- Search terms in the Keyword search box
- Music URLs in the Sound URLs box
- Creator search queries in the User Search box

Set **Max results** to control how many rows each input returns (default 20, max 1000).

#### Step 2: (Optional) Filter your results

- **Media type:** videos only, photo posts only, or both
- **Exclude pinned:** skip pinned posts when scraping a profile
- **Date range:** limit by post date (YYYY-MM-DD)
- **Strict keyword match:** drop keyword results whose caption doesn't actually contain your term
- **Sort:** relevance / recent / most liked
- **Region:** the country TikTok uses to decide what content to show (defaults to US)

#### Step 3: (Optional) Add-ons

All extras are off by default. You only pay for what actually comes back:
- **Transcripts:** TikTok's native captions (no AI transcription). Cheap, fast.
- **Video / slideshow download:** saves the no-watermark MP4 (or each slideshow image)
- **Comments + replies:** top-level comments and first-level replies
- **Full author profile:** bio, follower count, links. Deduped per creator across the run

#### Step 4: Run

Results show up in the Output tab as each input finishes. You don't have to wait for everything to be done.

### 🌐 Proxy

This tool handles all the network setup for you. No configuration needed.

### 💰 Pricing

Pay per event. You're charged for what the actor actually delivers.

| Event | Price | Per 1k |
|---|---|---|
| Item scraped | $0.0015 | $1.50 |
| Transcript extracted (when available) | $0.001 | $1.00 |
| Video downloaded (per second of duration) | $0.001 | $1.00 |
| Slideshow downloaded (flat per post) | $0.001 | $1.00 |
| Comment scraped | $0.0003 | $0.30 |
| Full creator profile enriched | $0.002 | $2.00 |
| Date filter applied (per row) | $0.001 | $1.00 |
| Region targeting applied (per row, when not All) | $0.001 | $1.00 |
| Sort order applied (per row, when not default) | $0.001 | $1.00 |
| Strict keyword match (per row) | $0.001 | $1.00 |
| Exclude pinned posts (per row) | $0.001 | $1.00 |
| Exclude reposts (per row) | $0.001 | $1.00 |

If something goes wrong (the video is private, the URL is invalid, the post was deleted), you don't pay for that result. You still get a row in your output explaining what happened, so nothing fails silently.

### 💡 Good to know

- **Every row has a status field.** If the scrape worked, you'll see "Success". If something went wrong, you'll see a plain-English explanation like "This video is private" or "This account doesn't exist".
- **Three separate sponsored flags.** We split ads, sponsored posts, and paid partnerships into three different fields. Most other tools mix them together. Ours keeps them apart so you can tell exactly which is which.
- **Trim your output.** Turn off any output field you don't need. Off means the field doesn't appear in your data at all, keeping rows lean.
- **Videos download with no watermark.** You get the clean copy.
- **Region setting.** Defaults to US. TikTok uses your region to decide what content to show, but treat it as a preference, not a strict filter.
- **Where your downloads live.** Saved videos and photos go into your Apify storage. How long they're kept depends on your Apify plan.

### ❓ FAQ

**Why did one of my video URLs return "Video unavailable"?**

The video has been removed by the creator or the account is private. The actor returns one status row with the error message; no charge fires for that row.

**Can I scrape private accounts or videos?**

No. The actor scrapes only publicly available content.

**How do I get the no-watermark video file?**

Enable the **Video / slideshow download** add-on. Each video result gets a `savedVideoKey` field, that's the key in your Apify key-value store where the MP4 is saved.

**Which proxy should I use?**

You don't need to configure one. The actor handles proxy routing internally.

**How long are downloaded files stored?**

In your Apify storage. How long they're kept depends on your Apify plan.

### 🔗 Other tools you might like

- [TikTok Shop Scraper](https://apify.com/lurkapi/tiktok-shop-scraper): product details, reviews, and shop discovery for TikTok Shop.
- [TikTok Video Downloader](https://apify.com/lurkapi/tiktok-video-downloader): single-video no-watermark MP4 downloader.

### ⚖️ Disclaimer

This tool is for personal, research, and educational use. You're responsible for following TikTok's Terms of Service and the laws that apply where you are. What data is available can change at any time based on TikTok's own systems.

# Actor input Schema

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

Direct TikTok video URLs. Any form works: www.tiktok.com/@user/video/123, vm.tiktok.com/abc, tiktok.com/t/abc, share-links from mobile, /photo/ URLs for slideshow posts.
## `profiles` (type: `array`):

TikTok usernames or profile URLs. With or without @. One per line.
## `hashtags` (type: `array`):

Hashtag names or URLs. Omit the leading #. One per line.
## `keywords` (type: `array`):

Search terms. One per line. Optional 'Strict keyword match' below filters out off-topic results.
## `sounds` (type: `array`):

TikTok music URLs (e.g. https://www.tiktok.com/music/Original-Sound-7556815852168759313). One per line.
## `userSearchQueries` (type: `array`):

Search for creators by query (e.g. 'cooking influencer'). Returns one row per creator found.
## `maxResults` (type: `integer`):

Cap on rows returned for each video URL, profile, hashtag, search query, or sound. Each video URL always returns 1. For profiles, this caps the number of videos returned (the profile metadata row is always included on top).
## `mediaType` (type: `string`):

Filter videos vs photo/slideshow posts. Applies to hashtag, keyword, profile, and sound results.
## `dateFrom` (type: `string`):

Only include posts created on or after this date. Leave blank for no lower bound. Billed at $0.001/row when set.
## `dateTo` (type: `string`):

Only include posts created on or before this date. Leave blank for no upper bound. Billed at $0.001/row when set.
## `region` (type: `string`):

Region TikTok uses for algorithmic ranking and content visibility. Leave on ALL unless you need region-specific results (e.g. only UK TikTok). Non-ALL selections billed at $0.001/row.
## `sortBy` (type: `string`):

Sort order for keyword search. Profile, video URL, and sound inputs ignore this. Non-default selections billed at $0.001/row.
## `strictKeywordMatch` (type: `boolean`):

For keyword search: drop results whose caption / hashtags don't contain the term as a substring (case-insensitive). TikTok's own results are loose; turn this on to enforce. Billed at $0.001/row when on.
## `includeAuthorEnrichment` (type: `boolean`):

Adds the author's full profile (bio, follower count, links) to each row. Deduped per unique author across the run, so you only pay once per creator. Billed at $0.002/unique creator.
## `excludePinned` (type: `boolean`):

Drop pinned posts when scraping a profile. Billed at $0.001/row when on.
## `excludeReposts` (type: `boolean`):

Drop reposts when scraping a profile, keeping only the creator's original posts. Billed at $0.001/row when on.
## `includeComments` (type: `boolean`):

Fetches top-level comments for each video. Billed at $0.0003 per comment returned.
## `maxCommentsPerVideo` (type: `integer`):

Cap on comments per video when Include comments is on.
## `includeReplies` (type: `boolean`):

Include first-level replies under each top-level comment. Turn off to fetch only top-level comments (faster, fewer comments charged).
## `includeTranscripts` (type: `boolean`):

Adds a 'transcript' field from TikTok's native captions when available. We pull TikTok's own caption files. Billed at $0.001 per transcript returned.
## `includeVideoDownload` (type: `boolean`):

Saves the no-watermark MP4 to your Apify key-value store. Adds savedVideoKey to the row. Billed per second of video duration.
## `includeSlideshowDownload` (type: `boolean`):

Saves each image of a slideshow post to your Apify key-value store. Adds savedImageKeys to the row. Flat rate per slideshow post.
## `outputTitle` (type: `boolean`):

Video caption / post title.
## `outputDescription` (type: `boolean`):

Parsed hashtags and @-mentions from the caption.
## `outputStats` (type: `boolean`):

Views, likes, comments, shares, saves.
## `outputMusic` (type: `boolean`):

Music title, author, ID, and whether it's an original sound.
## `outputAuthor` (type: `boolean`):

Author handle, display name, ID, verified flag, avatar.
## `outputPoi` (type: `boolean`):

POI name, ID, lat/lng, and direct link to TikTok's place page.
## `outputAdFlags` (type: `boolean`):

Three booleans: isAd, isSponsored, isPaidPartnership. Kept separate so you can tell ad-manager ads apart from paid partnerships.
## `outputDuration` (type: `boolean`):

Duration, width, height.
## `outputCovers` (type: `boolean`):

Static and dynamic cover URLs.

## Actor input object example

```json
{
  "videoUrls": [],
  "profiles": [
    "@tiktok"
  ],
  "hashtags": [],
  "keywords": [],
  "sounds": [],
  "userSearchQueries": [],
  "maxResults": 3,
  "mediaType": "both",
  "dateFrom": "",
  "dateTo": "",
  "region": "ALL",
  "sortBy": "relevance",
  "strictKeywordMatch": false,
  "includeAuthorEnrichment": false,
  "excludePinned": false,
  "excludeReposts": false,
  "includeComments": false,
  "maxCommentsPerVideo": 50,
  "includeReplies": true,
  "includeTranscripts": false,
  "includeVideoDownload": false,
  "includeSlideshowDownload": false,
  "outputTitle": true,
  "outputDescription": true,
  "outputStats": true,
  "outputMusic": true,
  "outputAuthor": true,
  "outputPoi": true,
  "outputAdFlags": true,
  "outputDuration": true,
  "outputCovers": true
}
````

# Actor output Schema

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

Quick scan: status, author, title, top metric.

## `posts` (type: `string`):

Full per-post details: caption, hashtags, engagement, ad flags.

## `authors` (type: `string`):

Creator-focused view: handle, bio, follower stats.

## `music` (type: `string`):

Sound / music metadata.

## `downloads` (type: `string`):

Saved media keys and CDN URLs (when download add-on is on).

## `keyValueStore` (type: `string`):

Saved MP4s and slideshow images (when the Download add-on is enabled).

# 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": [],
    "profiles": [
        "@tiktok"
    ],
    "hashtags": [],
    "keywords": [],
    "sounds": [],
    "userSearchQueries": [],
    "maxResults": 3,
    "mediaType": "both",
    "region": "ALL",
    "sortBy": "relevance"
};

// Run the Actor and wait for it to finish
const run = await client.actor("lurkapi/tiktok-scraper-all-in-one").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": [],
    "profiles": ["@tiktok"],
    "hashtags": [],
    "keywords": [],
    "sounds": [],
    "userSearchQueries": [],
    "maxResults": 3,
    "mediaType": "both",
    "region": "ALL",
    "sortBy": "relevance",
}

# Run the Actor and wait for it to finish
run = client.actor("lurkapi/tiktok-scraper-all-in-one").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": [],
  "profiles": [
    "@tiktok"
  ],
  "hashtags": [],
  "keywords": [],
  "sounds": [],
  "userSearchQueries": [],
  "maxResults": 3,
  "mediaType": "both",
  "region": "ALL",
  "sortBy": "relevance"
}' |
apify call lurkapi/tiktok-scraper-all-in-one --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Scraper (Video, Profile, Hashtag, Keyword, Sound & More)",
        "description": "Scrape TikTok videos, profiles, hashtags, keyword search, sound pages, and creator search. Returns engagement stats, music, location, hashtags, ad flags, and more. Optional add-ons: transcripts, no-watermark video download, comments, full author enrichment.",
        "version": "0.0",
        "x-build-id": "qCcxJwaoi7OK1kYPI"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/lurkapi~tiktok-scraper-all-in-one/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-lurkapi-tiktok-scraper-all-in-one",
                "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/lurkapi~tiktok-scraper-all-in-one/runs": {
            "post": {
                "operationId": "runs-sync-lurkapi-tiktok-scraper-all-in-one",
                "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/lurkapi~tiktok-scraper-all-in-one/run-sync": {
            "post": {
                "operationId": "run-sync-lurkapi-tiktok-scraper-all-in-one",
                "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": {
                    "videoUrls": {
                        "title": "Video URLs",
                        "type": "array",
                        "description": "Direct TikTok video URLs. Any form works: www.tiktok.com/@user/video/123, vm.tiktok.com/abc, tiktok.com/t/abc, share-links from mobile, /photo/ URLs for slideshow posts.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "profiles": {
                        "title": "Profiles (username or URL)",
                        "type": "array",
                        "description": "TikTok usernames or profile URLs. With or without @. One per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "hashtags": {
                        "title": "Hashtags",
                        "type": "array",
                        "description": "Hashtag names or URLs. Omit the leading #. One per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "keywords": {
                        "title": "Keyword search",
                        "type": "array",
                        "description": "Search terms. One per line. Optional 'Strict keyword match' below filters out off-topic results.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sounds": {
                        "title": "Sound / music URLs",
                        "type": "array",
                        "description": "TikTok music URLs (e.g. https://www.tiktok.com/music/Original-Sound-7556815852168759313). One per line.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "userSearchQueries": {
                        "title": "User search queries",
                        "type": "array",
                        "description": "Search for creators by query (e.g. 'cooking influencer'). Returns one row per creator found.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on rows returned for each video URL, profile, hashtag, search query, or sound. Each video URL always returns 1. For profiles, this caps the number of videos returned (the profile metadata row is always included on top).",
                        "default": 20
                    },
                    "mediaType": {
                        "title": "Media type",
                        "enum": [
                            "both",
                            "video",
                            "photo"
                        ],
                        "type": "string",
                        "description": "Filter videos vs photo/slideshow posts. Applies to hashtag, keyword, profile, and sound results.",
                        "default": "both"
                    },
                    "dateFrom": {
                        "title": "From date ($)",
                        "type": "string",
                        "description": "Only include posts created on or after this date. Leave blank for no lower bound. Billed at $0.001/row when set.",
                        "default": ""
                    },
                    "dateTo": {
                        "title": "To date ($)",
                        "type": "string",
                        "description": "Only include posts created on or before this date. Leave blank for no upper bound. Billed at $0.001/row when set.",
                        "default": ""
                    },
                    "region": {
                        "title": "Region",
                        "enum": [
                            "ALL",
                            "US",
                            "GB",
                            "CA",
                            "AU",
                            "DE",
                            "FR",
                            "ES",
                            "IT",
                            "BR",
                            "MX",
                            "JP",
                            "KR",
                            "ID",
                            "MY",
                            "PH",
                            "SG",
                            "TH",
                            "VN"
                        ],
                        "type": "string",
                        "description": "Region TikTok uses for algorithmic ranking and content visibility. Leave on ALL unless you need region-specific results (e.g. only UK TikTok). Non-ALL selections billed at $0.001/row.",
                        "default": "ALL"
                    },
                    "sortBy": {
                        "title": "Sort (when supported) ($)",
                        "enum": [
                            "relevance",
                            "recent",
                            "likes"
                        ],
                        "type": "string",
                        "description": "Sort order for keyword search. Profile, video URL, and sound inputs ignore this. Non-default selections billed at $0.001/row.",
                        "default": "relevance"
                    },
                    "strictKeywordMatch": {
                        "title": "Strict keyword match ($)",
                        "type": "boolean",
                        "description": "For keyword search: drop results whose caption / hashtags don't contain the term as a substring (case-insensitive). TikTok's own results are loose; turn this on to enforce. Billed at $0.001/row when on.",
                        "default": false
                    },
                    "includeAuthorEnrichment": {
                        "title": "Full creator profile ($)",
                        "type": "boolean",
                        "description": "Adds the author's full profile (bio, follower count, links) to each row. Deduped per unique author across the run, so you only pay once per creator. Billed at $0.002/unique creator.",
                        "default": false
                    },
                    "excludePinned": {
                        "title": "Exclude pinned posts ($)",
                        "type": "boolean",
                        "description": "Drop pinned posts when scraping a profile. Billed at $0.001/row when on.",
                        "default": false
                    },
                    "excludeReposts": {
                        "title": "Exclude reposts ($)",
                        "type": "boolean",
                        "description": "Drop reposts when scraping a profile, keeping only the creator's original posts. Billed at $0.001/row when on.",
                        "default": false
                    },
                    "includeComments": {
                        "title": "Include comments ($)",
                        "type": "boolean",
                        "description": "Fetches top-level comments for each video. Billed at $0.0003 per comment returned.",
                        "default": false
                    },
                    "maxCommentsPerVideo": {
                        "title": "Max comments per video",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on comments per video when Include comments is on.",
                        "default": 50
                    },
                    "includeReplies": {
                        "title": "Include replies",
                        "type": "boolean",
                        "description": "Include first-level replies under each top-level comment. Turn off to fetch only top-level comments (faster, fewer comments charged).",
                        "default": true
                    },
                    "includeTranscripts": {
                        "title": "Download captions ($)",
                        "type": "boolean",
                        "description": "Adds a 'transcript' field from TikTok's native captions when available. We pull TikTok's own caption files. Billed at $0.001 per transcript returned.",
                        "default": false
                    },
                    "includeVideoDownload": {
                        "title": "Video download ($)",
                        "type": "boolean",
                        "description": "Saves the no-watermark MP4 to your Apify key-value store. Adds savedVideoKey to the row. Billed per second of video duration.",
                        "default": false
                    },
                    "includeSlideshowDownload": {
                        "title": "Slideshow download ($)",
                        "type": "boolean",
                        "description": "Saves each image of a slideshow post to your Apify key-value store. Adds savedImageKeys to the row. Flat rate per slideshow post.",
                        "default": false
                    },
                    "outputTitle": {
                        "title": "Output: title",
                        "type": "boolean",
                        "description": "Video caption / post title.",
                        "default": true
                    },
                    "outputDescription": {
                        "title": "Output: hashtags and mentions",
                        "type": "boolean",
                        "description": "Parsed hashtags and @-mentions from the caption.",
                        "default": true
                    },
                    "outputStats": {
                        "title": "Output: engagement stats",
                        "type": "boolean",
                        "description": "Views, likes, comments, shares, saves.",
                        "default": true
                    },
                    "outputMusic": {
                        "title": "Output: music / sound info",
                        "type": "boolean",
                        "description": "Music title, author, ID, and whether it's an original sound.",
                        "default": true
                    },
                    "outputAuthor": {
                        "title": "Output: author basics",
                        "type": "boolean",
                        "description": "Author handle, display name, ID, verified flag, avatar.",
                        "default": true
                    },
                    "outputPoi": {
                        "title": "Output: place / POI",
                        "type": "boolean",
                        "description": "POI name, ID, lat/lng, and direct link to TikTok's place page.",
                        "default": true
                    },
                    "outputAdFlags": {
                        "title": "Output: ad / sponsored flags",
                        "type": "boolean",
                        "description": "Three booleans: isAd, isSponsored, isPaidPartnership. Kept separate so you can tell ad-manager ads apart from paid partnerships.",
                        "default": true
                    },
                    "outputDuration": {
                        "title": "Output: duration and dimensions",
                        "type": "boolean",
                        "description": "Duration, width, height.",
                        "default": true
                    },
                    "outputCovers": {
                        "title": "Output: cover images",
                        "type": "boolean",
                        "description": "Static and dynamic cover URLs.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
