# TikTok Scraper - Video Search, Hashtags, Profiles & Sounds (`clover_folktale/tiktok-scraper`) Actor

Scrape TikTok videos by keyword, hashtag, profile or sound, and find creator profiles by keyword. Get views, likes, comments, shares, captions, hashtags, music, country code and author ID, bio and followers. No login or cookies needed. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/clover_folktale/tiktok-scraper.md
- **Developed by:** [Silkline](https://apify.com/clover_folktale) (community)
- **Categories:** Social media, Videos
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 videos

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

TikTok Scraper extracts public TikTok data as clean, flat JSON. You can search videos by keyword, collect the videos of a hashtag, read the latest videos of any public profile, find creator profiles by keyword, or list the videos that use a sound. Every video comes with views, likes, comments, shares, saves, caption, hashtags, music, duration, publish time, the country code TikTok attaches to the video, and the author's name, handle, ID, profile picture, bio, follower count and verified flag. It works as a TikTok API alternative for marketers, researchers and developers, and no TikTok account, API keys, proxies or cookies are needed.

### What data can you get?

The Actor has five modes. The four video modes share one flat output, so one pipeline handles them. Profile search returns profile records.

#### Modes

| Mode | Give it | You get |
|---|---|---|
| `search` | keywords, optional `sortType`, `publishTime`, `region` | the videos TikTok finds for each keyword, up to 1,000 per keyword |
| `hashtag` | hashtags | the videos listed under each hashtag, up to 1,000 per hashtag |
| `userPosts` | profiles | the latest videos of each public profile, pinned videos first (marked `isPinned`), then newest first, up to 1,000 per profile |
| `userSearch` | keywords | the profiles TikTok finds for each keyword: handle, name, ID, follower, following, video and total like counts, verified flag, profile picture, up to 1,000 per keyword |
| `music` | sound IDs or `tiktok.com/music/...` links | the videos that use each sound, up to 1,000 per sound |

#### Video fields (modes `search`, `hashtag`, `userPosts`, `music`)

| Field | What it is |
|---|---|
| `playCount` | Views |
| `likeCount` | Likes |
| `commentCount` | Comments |
| `shareCount` | Shares |
| `collectCount` | Times saved to favorites |
| `downloadCount` | Downloads, when shown |
| `description` | Caption of the video |
| `hashtags` | Hashtags of the video, without # |
| `createdAt` | Publish time, ISO 8601 UTC |
| `url` | Link to the video |
| `videoId` | TikTok video ID |
| `authorHandle` | Public @handle of the author, without @ |
| `authorName` | Display name of the author |
| `authorId` | Numeric TikTok ID of the author |
| `authorSecUid` | Secure user ID (secUid) of the author, used in TikTok profile links |
| `authorFollowerCount` | Followers of the author |
| `authorFollowingCount` | Accounts the author follows |
| `authorVerified` | True for a verified account |
| `authorBio` | Author's profile bio as published; null when empty |
| `authorAvatarUrl` | Link to the author's profile picture (temporary link; download soon after the run) |
| `authorRegion` | Country code TikTok attaches to the video, e.g. US |
| `musicTitle` | Title of the sound |
| `musicAuthor` | Author of the sound |
| `musicId` | ID of the sound |
| `musicOriginal` | True when the sound is the author's original sound |
| `durationSeconds` | Length of the video in seconds |
| `width`, `height` | Video width and height in pixels |
| `textLanguage` | Language code of the caption as detected by TikTok (en, es; un when unknown) |
| `mentions` | Names mentioned with @ in the caption (display text, no user IDs) |
| `isPinned` | True when the video is pinned to the top of the author's profile |
| `isSlideshow` | True for a photo slideshow post |
| `isPaidContent` | True for paid (subscriber-only) content |
| `isAd` | True when the video is an ad, when shown |
| `coverUrl` | Cover image link (temporary; download soon after the run) |
| `videoUrl` | Video file link (temporary; may be empty) |
| `type` | Record type: `video` |
| `keyword` | The keyword that found the video (search mode) |
| `hashtag` | The hashtag the video was read from (hashtag mode) |
| `sourceProfile` | The profile the video was read from (userPosts mode) |
| `sourceMusicId` | The sound the video was read from (music mode) |

`mentions` lists the names written after @ in the caption as TikTok displays them, which can be a display name rather than the @handle. `isSlideshow` is true for photo posts. Most fields TikTok does not send are `null`; lists such as `hashtags` and `mentions` are empty `[]`, and `isSlideshow` and `authorVerified` are always true or false.

Search items carry `keyword`, hashtag items `hashtag`, profile items `sourceProfile` and sound items `sourceMusicId`. A video found by several keywords or hashtags in one run is delivered once.

#### Profile fields (mode `userSearch`)

| Field | What it is |
|---|---|
| `handle` | Public @handle, without @ |
| `name` | Display name |
| `userId` | Numeric TikTok ID of the profile |
| `url` | Link to the profile |
| `followerCount` | Followers |
| `followingCount` | Accounts the profile follows |
| `videoCount` | Videos posted |
| `totalLikeCount` | Likes all the profile's videos received |
| `verified` | True for a verified account |
| `isPrivate` | True for a private account |
| `secUid` | Secure user ID (secUid) of the profile |
| `avatarUrl` | Profile picture link (temporary) |
| `bio` | Profile bio as published; often empty in profile search results |
| `keyword` | The keyword that found the profile |
| `type` | Record type: `user` |

### How to use TikTok Scraper

1. Open TikTok Scraper in Apify Console.
2. Choose a **Mode**: search videos by keyword, videos of a hashtag, videos of a profile, search profiles by keyword, or videos using a sound.
3. Fill in the list that belongs to that mode: `keywords`, `hashtags`, `profiles`, `userKeywords` or `musics`. For video search you can also set `sortType`, `publishTime` and `region`.
4. Set `maxResults`, the limit for each keyword, hashtag, profile or sound.
5. Start the run and wait for it to finish.
6. Open the dataset and export the results as JSON, CSV or Excel, or read them through the API.

### Input

| Field | Type | Required | What it does | Default |
|---|---|---|---|---|
| `mode` | string | required | `search`, `hashtag`, `userPosts`, `userSearch` or `music` | `search` |
| `keywords` | array of strings | optional | Search keywords for `search`; each keyword is a separate search. Falls back to "skincare" when empty. | prefilled with `skincare` |
| `hashtags` | array of strings | optional | Hashtags for `hashtag`, as `skincare`, `#skincare` or a link (`https://www.tiktok.com/tag/skincare`). Falls back to "skincare" when empty. | prefilled with `skincare` |
| `profiles` | array of strings | optional | Public profiles for `userPosts`, as `khaby.lame`, `@khaby.lame`, or a link to the profile or to one of its videos. Falls back to "khaby.lame" when empty. | prefilled with `khaby.lame` |
| `userKeywords` | array of strings | optional | Search keywords for `userSearch`; each keyword is a separate profile search. Falls back to "skincare" when empty. | prefilled with `skincare` |
| `musics` | array of strings | optional | Sound IDs (`7016547803243022337`) or links such as `https://www.tiktok.com/music/Face-Off-7016547803243022337`. Falls back to a sample sound when empty. | prefilled with `7016547803243022337` |
| `sortType` | string | optional | Order of the search results: `relevance`, `most-liked` or `latest` (search only) | `relevance` |
| `publishTime` | string | optional | Only videos published in this period: `all`, `day`, `week`, `month`, `3months` or `6months` (search only) | `all` |
| `region` | string | optional | Two-letter country code sent with the search, such as US, GB or DE (search only). TikTok treats it as a hint. | `US` |
| `maxResults` | integer | optional | Maximum items for each keyword, hashtag, profile or sound, from 1 to 1,000 | `20` |

The Actor accepts any common way of writing an input: `khaby.lame`, `@khaby.lame`, a profile link or a link to one of the creator's videos; `skincare`, `#skincare` or a `tiktok.com/tag/skincare` link. An empty input `{}` searches "skincare" and returns 20 videos, so you can test it in seconds.

At most 50 keywords, hashtags, profiles or sounds are used per run; any extra ones are ignored without a warning. Split longer lists into several runs.

#### Search videos by keyword

```json
{
  "mode": "search",
  "keywords": ["skincare", "glass skin"],
  "sortType": "most-liked",
  "publishTime": "month",
  "maxResults": 100
}
```

#### Videos of a hashtag

```json
{
  "mode": "hashtag",
  "hashtags": ["skincare", "https://www.tiktok.com/tag/glowup"],
  "maxResults": 100
}
```

#### Videos of a profile

```json
{
  "mode": "userPosts",
  "profiles": ["khaby.lame", "https://www.tiktok.com/@charlidamelio"],
  "maxResults": 50
}
```

#### Search profiles by keyword

```json
{
  "mode": "userSearch",
  "userKeywords": ["skincare"],
  "maxResults": 50
}
```

#### Videos using a sound

```json
{
  "mode": "music",
  "musics": ["https://www.tiktok.com/music/Face-Off-7016547803243022337"],
  "maxResults": 50
}
```

### Output example

#### Video item (mode `userPosts`)

Values are illustrative.

```json
{
  "type": "video",
  "videoId": "7400000000000000001",
  "url": "https://www.tiktok.com/@sample.creator/video/7400000000000000001",
  "description": "My morning routine in 60 seconds #skincare #glassskin",
  "hashtags": ["skincare", "glassskin"],
  "createdAt": "2026-10-08T16:31:16Z",
  "durationSeconds": 58.4,
  "playCount": 182400,
  "likeCount": 15230,
  "commentCount": 412,
  "shareCount": 960,
  "collectCount": 2105,
  "downloadCount": 88,
  "authorHandle": "sample.creator",
  "authorName": "Sample Creator",
  "authorFollowerCount": 245000,
  "authorVerified": false,
  "authorId": "6800000000000000000",
  "authorSecUid": "MS4wLjABAAAA...",
  "authorAvatarUrl": "https://p16-sign.tiktokcdn-us.com/.../avatar.jpeg",
  "authorBio": "Skincare tips every week",
  "authorRegion": "US",
  "musicTitle": "original sound - sample.creator",
  "musicAuthor": "Sample Creator",
  "coverUrl": "https://...",
  "videoUrl": "https://...",
  "textLanguage": "en",
  "isPinned": false,
  "isSlideshow": false,
  "mentions": [],
  "width": 576,
  "height": 1024,
  "musicId": "7400000000000000999",
  "musicOriginal": true,
  "authorFollowingCount": 180,
  "isPaidContent": false,
  "isAd": false,
  "sourceProfile": "sample.creator"
}
```

In the other video modes the last field is `keyword` (search), `hashtag` (hashtag) or `sourceMusicId` (music) instead of `sourceProfile`.

#### Profile item (mode `userSearch`)

```json
{
  "type": "user",
  "userId": "6800000000000000000",
  "handle": "sample.creator",
  "url": "https://www.tiktok.com/@sample.creator",
  "name": "Sample Creator",
  "secUid": "MS4wLjABAAAA...",
  "avatarUrl": "https://p16-sign.tiktokcdn-us.com/.../avatar.jpeg",
  "bio": null,
  "followerCount": 245000,
  "followingCount": 180,
  "videoCount": 312,
  "totalLikeCount": 4870000,
  "verified": false,
  "isPrivate": false,
  "keyword": "skincare"
}
```

### How much does it cost?

The Actor uses pay-per-event pricing. You pay for two events:

| Event | Price | When it is charged |
|---|---|---|
| Start fee (`run-start`) | $0.005 | For each keyword, hashtag, profile or sound you give it. The first one is charged when the first request to the data source succeeds, even if that request returns nothing. Each further one is charged before that input's first request and is kept even if that input then fails or returns nothing. |
| Result (`result`) | $0.003 | For each video or profile returned. Profile-search results are $0.003 each too. |

The start fee is not charged when the data source fails from the start or rejects the inputs, or when your spending limit cannot cover it.

Worked examples:

- 100 videos for one keyword cost $0.005 + 100 x $0.003 = **$0.305**.
- 3 hashtags with 100 videos each cost 3 x $0.005 + 300 x $0.003 = **$0.915**.
- 20 videos from one profile cost $0.005 + 20 x $0.003 = **$0.065**.

On the free Apify plan, a run returns at most 20 results in total; any paid Apify plan removes the limit. On the free Apify plan each account can run this Actor up to 3 times per 24 hours and 10 times per 7 days, within a small lifetime free allowance shared across all our Actors, and all free accounts share a daily free budget. When any of these limits is reached, the run stops before fetching anything and nothing is charged.

The search filters (sort by relevance, most liked or latest, and limit to the last day, week, month, 3 or 6 months) cost nothing extra per video. You never pay for more than `maxResults` items per keyword, hashtag, profile or sound, and the run stops by itself if your spending limit is reached. The price of each event is also shown on the Actor page.

A keyword with no matches, a hashtag or sound that does not exist, or a profile with no public videos returns nothing but still costs its start fee, because the request was made. You are never charged for items the Actor did not deliver. If the data source is down for the whole run, nothing is charged; start fees already paid for inputs that were started are not refunded.

### Use cases

- **Trend and hashtag research**: see which videos and sounds carry a hashtag right now, and how far they reach in views, likes and shares.
- **Influencer and competitor tracking**: pull a creator's recent posts with views, likes and comments to calculate engagement rates and posting frequency.
- **Influencer discovery**: search profiles by keyword and compare `followerCount`, `videoCount`, `totalLikeCount` and `verified` before outreach.
- **Sound and music research**: list the videos that use a sound and see who uses it and how those videos perform.
- **Product and brand monitoring**: find videos that mention a product, a brand or a campaign keyword, filtered by date and sorted by likes.
- **AI and data projects**: use TikTok captions, caption language and metrics as clean rows for classification, trend models and dashboards.

### Integrations and API

You can start runs through the Apify API, schedule them in Apify Console (for example a daily hashtag check), and connect the results to Apify integrations and your own tools. Results are stored in an Apify dataset that you can download as JSON, CSV or Excel or read page by page.

Example with the Python `apify-client` package:

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("clover_folktale/tiktok-scraper").call(run_input={
    "mode": "search",
    "keywords": ["skincare", "glass skin"],
    "sortType": "most-liked",
    "publishTime": "month",
    "maxResults": 100
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

### Tips and limits

- **Profiles come 10 videos per page.** A profile with `maxResults` 100 takes ten requests; this is how the data source delivers them. Videos come newest first, after any pinned videos.
- **Search can return fewer videos than you ask for.** Search pages overlap, and each video is delivered once, so a keyword can run out of new videos before `maxResults`. Very large limits on a narrow keyword often end early.
- **`region` is a hint.** Search results can still include videos from other countries; check `authorRegion` on each video.
- **At most 50 inputs per run.** Only the first 50 keywords, hashtags, profiles or sounds are used; extra ones are ignored without a warning.
- **Empty inputs still pay their start fee.** Check the spelling of hashtags and handles.
- **Hashtag names must match exactly** (any case). If TikTok has no hashtag with exactly that name, the hashtag returns nothing; it still uses its start fee because the lookup was made.
- **Short links (vm.tiktok.com, tiktok.com/t/) are not supported.** Use the full profile, video or tag link.
- **Numbers are a snapshot.** Views, likes and follower counts are what TikTok shows at the time of the run.
- **Links are temporary.** Cover, video file and profile picture links expire; download what you need soon after the run.
- **Profile search order moves.** TikTok ranks profile results itself and the order can differ between runs; pages overlap and each profile is delivered once, so a keyword can run out before `maxResults`.
- **Sounds come about 12 videos per page.**
- **No comments.** This Actor returns comment counts (`commentCount`), not comment texts or commenters.
- **Often-empty fields:** in search, `authorBio` is empty because search results don't carry it; user-post results include it. In `userSearch`, `bio` is usually empty and there is no country code; use `userPosts` on a handle for the bio. `videoUrl` may be empty, and `downloadCount` and `isAd` are filled only when TikTok shows them.
- **If the data source goes down mid-run.** If the data source becomes unavailable after results were delivered, the run stops cleanly and keeps them; you are never charged for items it did not deliver. Other data-source errors during a run end it with an error status.
- **Free plan:** a run returns at most 20 results in total; any paid Apify plan removes the limit.

### FAQ

#### Do I need a TikTok account or login?

No. No TikTok account, API keys, proxies or cookies are needed.

#### Is it legal to scrape TikTok?

The Actor returns only public content: the video, its numbers and the author's public profile (@handle, display name, ID, profile picture, bio, country code of the video, follower count). It does not return private messages, commenters or IP locations. The bio is returned as published, including any business contact info the creator put there. You are responsible for how you use the data and for following the laws that apply to you.

#### How fresh is the data?

The data is read live during the run. Views, likes and follower counts are what TikTok shows at that moment.

#### Why are some fields empty?

Most fields TikTok does not send are `null`; lists such as `hashtags` and `mentions` are empty `[]`. Search results don't carry the author's bio, and profile search results usually have no bio and no country code. Run `userPosts` on a handle to get the bio.

#### How many results can I get?

Up to 1,000 items per keyword, hashtag, profile or sound, set with `maxResults`, for up to 50 inputs per run. Search and profile search can end earlier when TikTok runs out of new results. On the free Apify plan a run returns at most 20 results in total.

#### Does it scrape TikTok comments?

No. You get the number of comments for each video (`commentCount`), but not the comments themselves.

#### Can I schedule runs and export the data?

Yes. You can schedule runs in Apify Console or start them through the Apify API, and export each dataset as JSON, CSV or Excel.

#### What if a hashtag, profile or sound does not exist?

It returns no items and still costs its $0.005 start fee, because the request was made. If the data source is down for the whole run, nothing is charged; start fees already paid for inputs that were started are not refunded. Missing a field or a mode? Open an issue from the Actor page and it will be looked at.

### More tools from the same developer

- [TikTok Shop Scraper - Products, SKUs, Reviews & Reviewer IDs](https://apify.com/clover_folktale/tiktok-shop-scraper)
- [Douyin 抖音 Scraper - Videos, Comments, User IDs & IP Location](https://apify.com/clover_folktale/douyin-scraper)
- [YouTube Scraper - Shorts, Channel Videos & Video Search](https://apify.com/clover_folktale/youtube-scraper)
- [Threads Scraper - Posts, Replies & User Profiles, No Login](https://apify.com/clover_folktale/threads-scraper)
- [Reddit Scraper - Posts, Comments & User IDs, No Login](https://apify.com/clover_folktale/reddit-scraper)
- [Xiaohongshu 小红书 RedNote Scraper - Notes, Comments & User IP](https://apify.com/clover_folktale/xiaohongshu-scraper)

# Actor input Schema

## `mode` (type: `string`):

What to scrape: videos found by keyword search, the videos of hashtags, the latest videos of profiles, profiles found by keyword, or the videos that use a sound.

## `keywords` (type: `array`):

Search keywords; each keyword is a separate search. Falls back to "skincare" when empty.

## `hashtags` (type: `array`):

Hashtags as skincare, #skincare, or a link (https://www.tiktok.com/tag/skincare). Falls back to "skincare" when empty.

## `profiles` (type: `array`):

Public profiles as khaby.lame, @khaby.lame, or a link to the profile or to one of its videos. Falls back to "khaby.lame" when empty.

## `userKeywords` (type: `array`):

Search keywords; each keyword is a separate profile search. Falls back to "skincare" when empty.

## `musics` (type: `array`):

Sound IDs (7016547803243022337) or links such as https://www.tiktok.com/music/Face-Off-7016547803243022337. Falls back to a sample sound when empty.

## `sortType` (type: `string`):

Order of the search results.

## `publishTime` (type: `string`):

Only videos published in this period.

## `region` (type: `string`):

Two-letter country code sent with the search, such as US, GB or DE. TikTok treats it as a hint: results can still include videos labelled with other countries (see the region field of each video).

## `maxResults` (type: `integer`):

Maximum items for each keyword, hashtag, profile or sound (up to 1000). You are charged $0.003 per item returned, plus a $0.005 start fee for each keyword, hashtag, profile or sound. On the free Apify plan a run returns at most 20 results in total; any paid Apify plan removes the limit.

## Actor input object example

```json
{
  "mode": "search",
  "keywords": [
    "skincare"
  ],
  "hashtags": [
    "skincare"
  ],
  "profiles": [
    "khaby.lame"
  ],
  "userKeywords": [
    "skincare"
  ],
  "musics": [
    "7016547803243022337"
  ],
  "sortType": "relevance",
  "publishTime": "all",
  "region": "US",
  "maxResults": 20
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped items (JSON, CSV, Excel via the dataset API).

# 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 = {
    "keywords": [
        "skincare"
    ],
    "hashtags": [
        "skincare"
    ],
    "profiles": [
        "khaby.lame"
    ],
    "userKeywords": [
        "skincare"
    ],
    "musics": [
        "7016547803243022337"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("clover_folktale/tiktok-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 = {
    "keywords": ["skincare"],
    "hashtags": ["skincare"],
    "profiles": ["khaby.lame"],
    "userKeywords": ["skincare"],
    "musics": ["7016547803243022337"],
}

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

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "skincare"
  ],
  "hashtags": [
    "skincare"
  ],
  "profiles": [
    "khaby.lame"
  ],
  "userKeywords": [
    "skincare"
  ],
  "musics": [
    "7016547803243022337"
  ]
}' |
apify call clover_folktale/tiktok-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,clover_folktale/tiktok-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/amCLC2Og3LuMN1xdJ/builds/mQSjkW1SV84acYns4/openapi.json
