# TikTok Scraper Pro (`scrape-lads/tiktok-scraper-pro`) Actor

Scrape TikTok videos from hashtags, profiles, keyword search and video URLs, plus comments and followers. Returns views, likes, shares, saves, captions, authors, sounds and dates. Same input and output format as the most popular TikTok scraper. No login. $2.60 per 1,000 results.

- **URL**: https://apify.com/scrape-lads/tiktok-scraper-pro.md
- **Developed by:** [Scrape Lads](https://apify.com/scrape-lads) (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 $1.20 / 1,000 results

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/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 Pro

Scrape TikTok videos, profiles, hashtags, search results, comments and followers, and export them as JSON, CSV or Excel or through the API. You pay per result at prices well below other TikTok scrapers.

**Switching from another TikTok scraper?** Input fields (`hashtags`, `profiles`, `searchQueries`, `postURLs`, `resultsPerPage`, `commentsPerPost`, `maxFollowersPerProfile`, ...) and output fields (`authorMeta`, `musicMeta`, `videoMeta`, `diggCount`, `playCount`, `createTimeISO`, `webVideoUrl`, ...) follow the format most TikTok pipelines already use. Change the Actor ID and keep your code.

### What can this TikTok scraper do?

- **Hashtag scraper**: videos posted under any hashtag, e.g. `#skincare`.
- **Profile scraper**: a creator's videos, newest first, plus their follower and following lists.
- **TikTok search**: the Top, Videos or Profiles tab for any keyword, with sorting by likes or date and a date range (applied to the results TikTok returns, at no extra cost).
- **Video scraper**: full data for specific video URLs, including `vm.tiktok.com` short links.
- **Comments scraper**: comments and replies for every scraped video, saved to a linked dataset.
- **Followers scraper**: followers and following of any public profile, saved to a linked dataset.
- **Subtitles**: links to TikTok's own caption files (auto-generated and creator captions).
- **Filters**: posted after or before a date, minimum or maximum likes, skip pinned videos.

### What data do you get?

| 🎬 Video URL | 📝 Caption | 📅 Publish time |
|---|---|---|
| 👀 Views | ❤️ Likes | 💬 Comments |
| 🔁 Shares | ⭐ Saves | ⏱️ Duration |
| #️⃣ Hashtags | 🏷️ Mentions | 🎵 Sound name and author |
| 👤 Author profile and bio | 👥 Followers and following | ✅ Verified |
| 🖼️ Cover image | 📌 Pinned, slideshow and ad flags | 🗨️ Comments and followers |

Comments include the text, likes, author, time, reply count and whether the creator liked or pinned it. Follower records include the full profile (`authorMeta`) and which account they are connected to.

#### Output example

```json
{
    "id": "7689447084436573472",
    "text": "Morning routine before uni #SkinCare #glowyskin",
    "createTimeISO": "2026-09-25T12:22:00.000Z",
    "webVideoUrl": "https://www.tiktok.com/@example.creator/video/7689447084436573472",
    "playCount": 996900,
    "diggCount": 218100,
    "commentCount": 808,
    "shareCount": 3918,
    "collectCount": 22915,
    "authorMeta": {
        "name": "example.creator",
        "nickName": "Example Creator",
        "verified": false,
        "fans": 412000,
        "heart": 9800000,
        "video": 640
    },
    "musicMeta": { "musicName": "original sound", "musicOriginal": true },
    "videoMeta": { "duration": 58, "width": 576, "height": 1024 },
    "hashtags": [{ "name": "skincare" }, { "name": "glowyskin" }],
    "input": "skincare"
}
```

You can download the dataset as JSON, CSV, Excel, XML or HTML.

When an input can't be scraped (private profile, deleted video, unknown hashtag), you get an item with an `errorCode` such as `PROFILE_PRIVATE`, `NOT_FOUND`, `POST_NOT_FOUND_OR_PRIVATE` or `FILTER_NO_PASS`, instead of a silent gap.

### How to scrape TikTok

1. Add hashtags, profiles, search queries or video URLs.
2. Set **Videos per hashtag, profile or search**.
3. Optionally turn on comments, followers, subtitles or filters.
4. Click **Start** and download the dataset as JSON, CSV, Excel or HTML, or read it through the API.

#### Example input

```json
{
    "hashtags": ["skincare"],
    "profiles": ["khaby.lame"],
    "searchQueries": ["iphone review"],
    "searchSection": "/video",
    "resultsPerPage": 100,
    "commentsPerPost": 20
}
```

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

You pay per result and nothing for the platform usage. See the **Pricing** tab for current prices. Add-ons (comments, followers, date and likes filters) are only charged when you turn them on.

### Good to know

- Only public data is collected. No login and no TikTok account needed.
- TikTok shows a limited number of hashtag and search results to each visitor. The scraper combines results from several countries to reach larger numbers, so very large hashtag or search requests may include videos popular in other English-speaking countries.
- The **Country** option sets which country's TikTok you see for search and hashtag results.

### Run it on a schedule

Save your input as a task, then open **Schedules** in Apify Console and pick how often it runs. Daily suits hashtag and competitor tracking. Weekly is enough for follower snapshots. Each run creates a new dataset, so you can compare runs over time.

To send results somewhere automatically, use the **Integrations** tab: Google Sheets, Slack, Make, Zapier, n8n and webhooks are built in. AI agents such as Claude or ChatGPT can run it as a tool through the [Apify MCP server](https://mcp.apify.com).

### Related actors

| Actor | What it does |
| --- | --- |
| [TikTok Profile Scraper & Influencer Email Finder](https://apify.com/scrape-lads/tiktok-profile-scraper) | TikTok creators by keyword with follower counts and contact emails. |
| [Video Transcript Scraper](https://apify.com/scrape-lads/video-transcript-scraper) | Transcripts from TikTok, Instagram, YouTube and X videos. |
| [YouTube Shorts Scraper & Channel Email Finder](https://apify.com/scrape-lads/youtube-scraper) | YouTube Shorts, channel videos and creator contact emails. |
| [Instagram Scraper](https://apify.com/apify/instagram-scraper) | Instagram posts, profiles, hashtags and comments. |
| [Reddit Scraper](https://apify.com/scrape-lads/reddit-scraper) | Reddit posts, comments, search results and users. |

### FAQ

**Does TikTok have an official API? Why use this instead?** TikTok's Research API is only for approved academic researchers, and its Display API only covers accounts that log in to your app. Neither gives businesses open access to public videos, comments or followers. This Actor reads public TikTok data with no application and no account.

**What are the alternatives to this Actor?** You can copy data by hand, pay for a social listening tool, or apply for the Research API. Listening tools charge monthly and limit exports. This Actor charges per result and you keep the raw data.

### Is it legal to scrape TikTok?

This scraper only collects publicly visible data. Personal data is protected by laws such as the GDPR. Only scrape personal data if you have a legitimate reason, and check with a lawyer if you are unsure.

### Privacy

To see which searches are useful, this Actor sends anonymous run inputs (such as keywords, hashtags and usernames) and a hashed account ID to the developer. Tokens, cookies and proxy settings are never sent. Nothing from your results is collected.

# Actor input Schema

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

Hashtags to scrape videos from, with or without the #. Provide at least one of: hashtags, profiles, search queries or video URLs.

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

TikTok usernames or profile URLs.

## `profileScrapeSections` (type: `array`):

Which parts of each profile to scrape.

## `profileSorting` (type: `string`):

Order of profile videos.

## `excludePinnedPosts` (type: `boolean`):

Leave out videos pinned to the top of a profile.

## `searchQueries` (type: `array`):

Keywords to search on TikTok.

## `searchSection` (type: `string`):

Which search results tab to scrape.

## `maxProfilesPerQuery` (type: `integer`):

Used with the Profiles search tab.

## `videoSearchSorting` (type: `string`):

Order of results in the Videos search tab. Applied to all results TikTok returns for the query (up to about 300). No extra charge.

## `videoSearchDateFilter` (type: `string`):

Only for the Videos search tab. Keeps results from this period out of all results TikTok returns for the query (up to about 300). No extra charge.

## `postURLs` (type: `array`):

Specific TikTok video links, including vm.tiktok.com short links.

## `resultsPerPage` (type: `integer`):

Maximum videos for each hashtag, profile and search query.

## `oldestPostDateUnified` (type: `string`):

Only videos published on or after this date. Accepts a date or a relative value like "30 days".

## `newestPostDate` (type: `string`):

Only videos published on or before this date.

## `leastDiggs` (type: `integer`):

Only videos with at least this many likes.

## `mostDiggs` (type: `integer`):

Only videos with fewer than this many likes.

## `commentsPerPost` (type: `integer`):

Comments to collect for every scraped video (stored in a linked comments dataset).

## `topLevelCommentsPerPost` (type: `integer`):

Cap on top-level comments; 0 means the comments limit applies.

## `maxRepliesPerComment` (type: `integer`):

Replies to collect under each comment.

## `maxFollowersPerProfile` (type: `integer`):

Follower profiles to collect for each input profile (stored in a linked dataset).

## `maxFollowingPerProfile` (type: `integer`):

Accounts each input profile follows (stored in a linked dataset).

## `downloadSubtitlesOptions` (type: `string`):

Add links to TikTok subtitle files (auto-generated and creator captions) to each video.

## `proxyCountryCode` (type: `string`):

See TikTok as a visitor from this country (affects search and hashtag results). Default: United States.

## Actor input object example

```json
{
  "hashtags": [
    "fyp"
  ],
  "profileScrapeSections": [
    "videos"
  ],
  "profileSorting": "latest",
  "excludePinnedPosts": false,
  "searchSection": "",
  "maxProfilesPerQuery": 10,
  "videoSearchSorting": "MOST_RELEVANT",
  "videoSearchDateFilter": "ALL_TIME",
  "resultsPerPage": 10,
  "commentsPerPost": 0,
  "topLevelCommentsPerPost": 0,
  "maxRepliesPerComment": 0,
  "maxFollowersPerProfile": 0,
  "maxFollowingPerProfile": 0,
  "downloadSubtitlesOptions": "NEVER_DOWNLOAD_SUBTITLES",
  "proxyCountryCode": "None"
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "hashtags": [
        "fyp"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrape-lads/tiktok-scraper-pro").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 = { "hashtags": ["fyp"] }

# Run the Actor and wait for it to finish
run = client.actor("scrape-lads/tiktok-scraper-pro").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 '{
  "hashtags": [
    "fyp"
  ]
}' |
apify call scrape-lads/tiktok-scraper-pro --silent --output-dataset

```

## MCP server setup

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

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/gefDc7PNf3Pv5JNPH/builds/YMQolQvVwLaYYZbub/openapi.json
