# TikTok Creator & Competitor Intelligence (`scrape-lads/tiktok-scraper`) Actor

Compare TikTok creators with engagement rates, median views, viral outliers, content patterns, posting consistency, comments, and change tracking. Export clean data through API, schedules, JSON, CSV, or Excel.

- **URL**: https://apify.com/scrape-lads/tiktok-scraper.md
- **Developed by:** [Scrape Lads](https://apify.com/scrape-lads) (community)
- **Categories:** Social media
- **Stats:** 3 total users, 1 monthly users, 55.4% runs succeeded, 3 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.00 / 1,000 profile results

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Scraper API for Creator & Competitor Analysis

**Search TikTok videos by keyword, compare creators, find viral content patterns, and track performance changes in one run.**

Use this **TikTok scraper and analytics API** to compare public creators, rank performance, analyze videos and comments, and export normalized TikTok profile data. The Actor returns creator rankings, engagement rates, viral outlier scores, content patterns, historical changes, and an optional executive report alongside raw records.

![Creator comparison output](https://api.apify.com/v2/key-value-stores/UiqpRX3w3XFOFAbEw/records/creator-comparison-output-v2.png)

[Watch the 60-second demo](https://api.apify.com/v2/key-value-stores/UiqpRX3w3XFOFAbEw/records/creator-intelligence-60s-demo.mp4) · [Open the sample report](https://api.apify.com/v2/key-value-stores/UiqpRX3w3XFOFAbEw/records/sample-report.md) · [Inspect the generated JSON](https://api.apify.com/v2/key-value-stores/UiqpRX3w3XFOFAbEw/records/sample-output.json)

### TikTok scraper features

- **Compare TikTok creators:** rank public accounts by engagement, reach, posting frequency, and consistency.
- **Search videos by keyword:** collect public TikTok videos for topics, products, trends, and phrases.
- **Analyze competitor content:** find recurring hashtags, sounds, video lengths, posting days, and posting times.
- **Detect viral TikTok videos:** score every sampled post against the creator's median performance.
- **Research TikTok audiences:** extract public comments, replies, engagement signals, and author metadata.
- **Track creator growth:** compare followers, median views, engagement, and cadence with a previous scheduled run.
- **Export TikTok data:** download structured results as JSON, CSV, Excel, XML, RSS, or HTML, or use them through an API.

### Quick navigation

- [How to scrape and compare TikTok creators](#how-to-scrape-and-compare-tiktok-creators)
- [How to search TikTok videos by keyword](#how-to-search-tiktok-videos-by-keyword)
- [TikTok scraper input example](#tiktok-scraper-input-example)
- [TikTok analytics output](#tiktok-analytics-output)
- [TikTok data extraction modes](#tiktok-data-extraction-modes)
- [TikTok scraper API example](#tiktok-scraper-api-example)
- [TikTok scraper pricing](#tiktok-scraper-pricing)
- [Frequently asked questions](#frequently-asked-questions)

### What can this TikTok scraper analyze?

| Question                                 | Derived result                                                                                 |
| ---------------------------------------- | ---------------------------------------------------------------------------------------------- |
| Who performs best?                       | Comparative creator ranking and weighted score                                                 |
| What is normal performance?              | Median views and average views                                                                 |
| Is the audience reacting?                | View-weighted engagement rate                                                                  |
| Does reach exceed audience size?         | Median views-to-followers ratio                                                                |
| How often and consistently do they post? | Posts per week and consistency score                                                           |
| Which patterns repeat?                   | Top hashtags, sounds, video-length formats, posting days, and UTC hours                        |
| Which posts broke out?                   | Per-video outlier multiple and viral flag                                                      |
| What changed?                            | Followers, median views, engagement, and cadence deltas versus the previous scheduled snapshot |

Raw videos can stay in the same dataset, and a readable Markdown report can be saved beside them.

### How to scrape and compare TikTok creators

1. Select **Compare creators**.
2. Paste two or more handles such as `@tiktok` and `@nba`.
3. Choose **Videos per creator**.
4. Set the **Maximum provider spend**. The form shows the complete maximum-price formula.
5. Click **Start**. The populated **Results** view opens first, with specialized views for comments, profiles, followers, videos, rankings, and creator insights.

No TikTok login or cookies are required for public data.

### How to search TikTok videos by keyword

1. Select **Search videos by keyword**.
2. Enter one or more keywords or phrases, such as `small business tips` or `summer fashion`.
3. Choose the **Maximum raw results** and **Maximum provider spend**.
4. Click **Start** to receive matching videos with captions, creators, hashtags, views, likes, comments, shares, duration, sound, and publication time.

Each record keeps the originating search phrase in `sourceInput`, making multi-keyword exports easy to filter and compare. Keyword search uses public TikTok data and does not require a TikTok account.

### One-click presets

| Preset                        | Best for                                          | Public example                                                                                 |
| ----------------------------- | ------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
| **Compare creators**          | Rankings, content strategy, influencer shortlists | [Open preset](https://apify.com/scrape-lads/tiktok-scraper/examples/compare-creators)          |
| **Search videos by keyword**  | Trend research, social listening, content ideas   | [Open preset](https://apify.com/scrape-lads/tiktok-scraper/examples/search-keyword-videos)     |
| **Analyze competitor videos** | Raw competitor catalogs and post metrics          | [Open preset](https://apify.com/scrape-lads/tiktok-scraper/examples/analyze-competitor-videos) |
| **Research comments**         | Audience language, objections, and sentiment      | [Open preset](https://apify.com/scrape-lads/tiktok-scraper/examples/research-comments)         |

These presets are live public Actor Tasks. Open any preset to review its input or run a copy in your own Apify account.

### TikTok scraper input example

```json
{
    "mode": "creatorIntelligence",
    "handles": ["@creator_one", "@creator_two"],
    "videosPerProfile": 50,
    "includeRawResults": true,
    "includeReport": true,
    "historyDatasetName": "tiktok-creator-intelligence-history",
    "maxProviderSpendUsd": 5
}
```

For that example, the maximum is shown before starting as:

```text
$0.005 start + (2 creators × 50 videos × $0.0005) + $5.00 provider cap
= $5.055 maximum
```

The provider amount is a hard ceiling, not an estimate of what the provider will necessarily charge. The calculated breakdown is saved as `COST_ESTIMATE.json` on every run.

### TikTok analytics output

The default dataset opens on a universal **Results** view that works for every mode. Dedicated views expose comments, profiles, followers, videos and viral scores, creator rankings, creator insights, and compact raw records.

#### Creator summary

```json
{
    "resultType": "creatorSummary",
    "username": "creator_one",
    "sampleSize": 50,
    "followers": 184000,
    "medianViews": 126400,
    "averageViews": 241820,
    "engagementRatePct": 8.7312,
    "viewsToFollowersRatio": 0.687,
    "postsPerWeek": 3.21,
    "postingConsistencyScore": 82.4,
    "topHashtags": [{ "value": "creatortips", "count": 14 }],
    "topSounds": [{ "value": "original sound", "count": 9 }],
    "topFormats": [{ "value": "medium (16-60s)", "count": 31 }],
    "topPostingDays": [{ "value": "Tuesday", "count": 12 }],
    "topPostingHoursUtc": [{ "value": "18:00", "count": 10 }],
    "viralThresholdViews": 316000,
    "viralPostCount": 4,
    "historyDelta": {
        "followers": 4200,
        "medianViews": 11800,
        "engagementRatePct": 0.42,
        "postsPerWeek": 0.3
    }
}
```

#### Scored video

Every sampled video keeps its raw metrics and adds:

```json
{
    "engagementRatePct": 11.2483,
    "outlierScore": 3.84,
    "isViral": true
}
```

The viral flag means views are at least `2.5 ×` that creator's sampled median. It is a transparent statistical outlier rule, not a claim about future virality.

#### Creator ranking

The comparative score weights:

- engagement rate: 35%;
- median views: 25%;
- views-to-followers ratio: 20%;
- posting frequency: 10%;
- posting consistency: 10%.

Each metric is normalized inside the creators in the current run. Use the rank to compare that cohort, not as an absolute creator-quality score.

### How to track TikTok creator growth

Default Apify datasets are unique to each run, so comparison history is written to the named dataset in `historyDatasetName`. Create a weekly or daily schedule with the same handles. Each new run finds the most recent summary per creator and calculates deltas automatically.

Set `historyDatasetName` to an empty string to disable persistent snapshots.

### TikTok data extraction modes

| Mode            | Input      | Result                                                     |
| --------------- | ---------- | ---------------------------------------------------------- |
| `keywordVideos` | Keywords   | Matching public videos, creators, captions, and metrics    |
| `profileVideos` | Handles    | Normalized video catalog and metrics                       |
| `comments`      | Video URLs | Comment text, author, likes, replies, and flags            |
| `profile`       | Handles    | Followers, following, likes, post count, bio, verification |
| `video`         | Video URLs | Metrics and metadata for specific posts                    |
| `followers`     | Handles    | Normalized public follower profiles                        |

Keyword search, comments, followers, profile videos, and creator intelligence delegate signed-access collection to maintained provider Actors. Their spend is separately capped by `maxProviderSpendUsd`.

### TikTok scraper API example

Search TikTok videos by keyword:

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('scrape-lads/tiktok-scraper').call({
    mode: 'keywordVideos',
    keywords: ['small business tips', 'summer fashion'],
    maxResults: 100,
    maxProviderSpendUsd: 5,
});
```

Compare TikTok creators:

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('scrape-lads/tiktok-scraper').call({
    mode: 'creatorIntelligence',
    handles: ['@creator_one', '@creator_two'],
    videosPerProfile: 50,
    maxProviderSpendUsd: 5,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
const rankings = items.filter((item) => item.resultType === 'creatorRanking');
console.log(rankings);
```

### TikTok scraper pricing

| Event                                      |                  Actor fee |
| ------------------------------------------ | -------------------------: |
| Run start                                  |                $0.005 once |
| Creator/profile/keyword video              | $0.0005 per returned video |
| Profile, specific video, comment, follower | $0.001 per returned record |

Provider-backed modes also incur the provider Actor's charge, up to the exact cap you choose. The publisher currently absorbs Apify platform usage for this pay-per-event Actor, so users pay the listed Actor events plus any separately disclosed provider charge-not this Actor's compute and storage usage.

See [benchmark evidence and methodology](https://api.apify.com/v2/key-value-stores/UiqpRX3w3XFOFAbEw/records/BENCHMARKS.md). The current cloud baseline contains five runs and is clearly labeled as a small pre-release sample.

### Frequently asked questions

#### How can I compare TikTok creators?

Run `creatorIntelligence` with two or more public handles. The output ranks the creators using engagement rate, median views, views-to-followers ratio, posting frequency, and posting consistency, then returns the underlying metrics used for every score.

#### Can I search TikTok videos by keyword?

Yes. Run `keywordVideos` with one or more phrases in `keywords`. The Actor returns matching public videos with creator details, captions, hashtags, engagement metrics, sounds, duration, cover images, and posting time. Use `sourceInput` to identify which keyword produced each result.

#### How is TikTok engagement rate calculated?

The Actor calculates view-weighted engagement from the sampled public videos. It reports the calculation beside median views and sample size so the result can be interpreted in context rather than treated as an isolated percentage.

#### Can I analyze a competitor's viral TikTok posts?

Yes. Each sampled video receives an outlier score relative to that creator's median views. A viral outlier flag is applied when views reach at least 2.5 times the sampled median; it describes past performance and does not predict future virality.

#### Can I extract TikTok comments for audience research?

Yes. Comments mode returns comment text, author, likes, reply count, reply status, pinned status, creator-like status, posting time, and source video URL. The dedicated Comments dataset view is ready for audience-language and sentiment workflows.

#### Can I use the results through an API or automation?

Yes. Run the Actor through the Apify API, JavaScript or Python clients, schedules, webhooks, integrations, or MCP. Results can be downloaded from the default dataset as JSON, CSV, Excel, XML, RSS, or HTML.

#### Does this Actor require a TikTok login?

No TikTok login or cookies are required for public data. Availability and completeness can still change when TikTok pages or upstream provider schemas change.

### TikTok scraping reliability and responsible use

- Global result limits prevent accidental over-collection. Multi-URL comments and multi-profile followers split the requested ceiling across inputs.
- Provider calls receive the remaining USD ceiling via `maxTotalChargeUsd`.
- Output records include `resultType` and `sourceInput` for mixed-run traceability.
- Public TikTok pages and provider schemas can change. Schedule canaries and monitor completeness, not only run status.
- Only collect public data and follow TikTok's terms, applicable privacy laws, and Apify's platform rules.

### Store release

The intelligence build, schemas, presets, demo assets, benchmark documentation, public listing, and publisher-paid platform usage are maintained together. Public example runs are refreshed after output-schema releases and checked for populated datasets and required key-value-store records.

# Actor input Schema

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

Search public videos by keyword, compare creators, or return normalized TikTok profiles, videos, comments, and followers.

## `handles` (type: `array`):

Creators to compare. Accepts @username, username, or full TikTok profile URLs.

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

Keywords or phrases used by Search videos by keyword. Results include matching public TikTok videos and their engagement metrics.

## `videosPerProfile` (type: `integer`):

Sample size for Creator comparison. Actor fee is $0.0005 per returned video, plus the $0.005 run start and provider charges up to your cap.

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

Used by Specific video metrics and Research comments.

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

Global result ceiling for raw-data modes. Creator comparison uses Videos per creator instead.

## `maxProviderSpendUsd` (type: `number`):

Hard USD ceiling passed to third-party provider calls. Apify requires at least $2 to start a provider run; $5 is recommended for multi-creator comparisons. Your complete maximum is this amount + $0.005 start + the per-result Actor fee.

## `includeRawResults` (type: `boolean`):

Return every sampled video alongside summaries and rankings.

## `includeReport` (type: `boolean`):

Save a readable executive report alongside the dataset.

## `historyDatasetName` (type: `string`):

Named dataset used across scheduled runs. Leave blank to disable history. The default preserves snapshots and calculates deltas automatically.

## `maxConcurrency` (type: `integer`):

Parallel requests for native modes. Keep at 1 for TikTok reliability.

## Actor input object example

```json
{
  "mode": "creatorIntelligence",
  "handles": [
    "@tiktok",
    "@nba"
  ],
  "keywords": [
    "small business tips",
    "summer fashion"
  ],
  "videosPerProfile": 50,
  "videoUrls": [
    "https://www.tiktok.com/@tiktok/video/7106594312292453675"
  ],
  "maxResults": 100,
  "maxProviderSpendUsd": 5,
  "includeRawResults": true,
  "includeReport": true,
  "historyDatasetName": "tiktok-creator-intelligence-history",
  "maxConcurrency": 1
}
```

# Actor output Schema

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

No description

## `report` (type: `string`):

No description

## `costEstimate` (type: `string`):

No description

## `runSummary` (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 = {
    "handles": [
        "@tiktok",
        "@nba"
    ],
    "keywords": [
        "small business tips",
        "summer fashion"
    ],
    "videoUrls": [
        "https://www.tiktok.com/@tiktok/video/7106594312292453675"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrape-lads/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 = {
    "handles": [
        "@tiktok",
        "@nba",
    ],
    "keywords": [
        "small business tips",
        "summer fashion",
    ],
    "videoUrls": ["https://www.tiktok.com/@tiktok/video/7106594312292453675"],
}

# Run the Actor and wait for it to finish
run = client.actor("scrape-lads/tiktok-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 '{
  "handles": [
    "@tiktok",
    "@nba"
  ],
  "keywords": [
    "small business tips",
    "summer fashion"
  ],
  "videoUrls": [
    "https://www.tiktok.com/@tiktok/video/7106594312292453675"
  ]
}' |
apify call scrape-lads/tiktok-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/YQdABWbKBTqkigZWs/builds/4EHY51pf8NvaXh0mA/openapi.json
