# TikTok Profile Scraper (`invideoiq/tiktok-profile-scraper`) Actor

Scrape all videos from any public TikTok profile: views, likes, comments, shares, captions, hashtags, sounds and cover images. Filter by date and likes, track creators on a schedule. $0.20 per 1,000 videos, no login or cookies needed.

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

## Pricing

$0.20 / 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

### 👤 What is TikTok Profile Scraper?

**TikTok Profile Scraper** extracts every video posted by any public TikTok account: **views, likes, comments, shares, engagement rate, caption, hashtags, sound, publish date and cover image**.

Paste profile URLs or usernames, choose how many videos you want per profile, and download the data as **JSON, CSV or Excel**. No TikTok login, cookies or proxies needed.

**💰 $0.20 per 1,000 videos · 📅 Date and likes filters · ⚡ Full video history, newest first**

***

### ✨ What can TikTok Profile Scraper do?

- 👤 **Scrape many TikTok profiles in one run**: paste URLs, `@handles` or plain usernames
- 🎬 **Get the full video list** of each creator, newest first, up to their complete history
- 📊 **Engagement stats for every video**: views, likes, comments, shares, plus a computed **engagement rate**
- 📅 **Date filters that save money**: with a start date, scraping stops as soon as older videos are reached
- 🔥 **Like filters**: keep only a creator's top-performing (or lowest-performing) videos
- 🏷️ **Hashtags extracted** from every caption, ready for analysis
- 💸 **Pay only for results**: you are charged per video returned
- 🔌 **Apify platform included**: API, scheduling, webhooks, Zapier, Make and Google Sheets integrations

***

### 📊 What data can you scrape from a TikTok profile?

| Field | Description |
|-------|-------------|
| `profile_username` / `profile_url` | The creator's handle and profile link |
| `position` | Position of the video in the profile, 1 = newest |
| `video_url` | Direct link to the TikTok video |
| `description` | Full video caption |
| `hashtags` | Hashtags extracted from the caption |
| `views` / `likes` / `comments` / `shares` | Engagement counters at scrape time |
| `engagement_rate` | (likes + comments + shares) / views, as a percentage |
| `published_at` | Publication date and time (UTC, ISO 8601) |
| `duration_seconds` | Video length |
| `sound_title` / `sound_artists` | Sound used in the video |
| `cover_image_url` | Video cover image |

***

### 💡 Example: scrape the latest NASA TikTok videos

#### Input

```json
{
  "profiles": ["https://www.tiktok.com/@nasa", "@natgeo"],
  "max_videos_per_profile": 30,
  "published_after": "2026-09-01"
}
```

#### Output (one item per video)

```json
{
  "profile_username": "nasa",
  "profile_display_name": "nasa",
  "profile_url": "https://www.tiktok.com/@nasa",
  "position": 1,
  "video_id": "7689547576265149710",
  "video_url": "https://www.tiktok.com/@nasa/video/7689547576265149710",
  "description": "There's plenty happening across NASA as September comes to a close! 🇺🇸 NASA's Inspiration Tour heads to Arizona 🧑‍🚀 Crew-13 prepares to launch on 10/1 ... Here's your NASA Minute!",
  "hashtags": [],
  "published_at": "2026-09-25T18:52:22Z",
  "duration_seconds": 121,
  "views": 60700,
  "likes": 3379,
  "comments": 167,
  "shares": 67,
  "engagement_rate": 5.95,
  "sound_title": "original sound - NASA",
  "sound_artists": ["NASA"],
  "cover_image_url": "https://p16-common-sign.tiktokcdn-us.com/...",
  "scraped_at": "2026-09-27T14:25:55Z"
}
```

You can download the dataset extracted by TikTok Profile Scraper in **JSON, CSV, Excel, XML or HTML**, or read it through the Apify API.

***

### 👥 Who uses TikTok Profile Scraper?

#### Influencer marketing teams

Vet creators before you sign them: real average views, engagement rate, posting frequency and content style, all in one spreadsheet.

#### Brands and competitive intelligence

Track what competitors post on TikTok, how often, and which videos perform best.

#### Agencies

Build monthly performance reports for the creators and brand accounts you manage, fully automated with scheduled runs.

#### Creators

Analyze your own account or the accounts you admire: find the formats, hooks, hashtags and sounds that drive the most engagement.

#### Researchers and data teams

Build longitudinal datasets of creator activity, or feed profile data into dashboards, databases and AI pipelines.

***

### 📈 Use cases for TikTok profile data

- **Influencer vetting**: check average views and engagement across a creator's last 30 videos before a campaign
- **Campaign reporting**: scrape a creator's videos after a campaign to report views, likes and shares
- **Competitor monitoring**: schedule a daily run on competitor accounts with `published_after` set to yesterday
- **Top content analysis**: use `min_likes` to extract only a creator's best-performing videos
- **Content strategy**: compare posting frequency, video length and sounds across leading accounts in your niche
- **Archiving**: keep a record of a brand's TikTok content over time

***

### 🛠️ How to scrape a TikTok profile

1. Open [TikTok Profile Scraper](https://apify.com/invideoiq/tiktok-profile-scraper) and click **Try for free**.
2. Add one or more **profiles**: `https://www.tiktok.com/@nasa`, `@nasa` or `nasa` all work.
3. Set **Max videos per profile**. You only pay for the videos you receive.
4. Optional: add a **date range** or **like filters**.
5. Click **Start** and wait for the run to finish.
6. Download your TikTok profile data as **JSON, CSV or Excel**, or connect it to your tools.

#### Run it your way

Because this is an Apify Actor, you also get:

- **API access**: start runs and fetch results from Python, JavaScript, cURL or any language. See the [API tab](https://apify.com/invideoiq/tiktok-profile-scraper/api) for ready-made code
- **Scheduling**: re-scrape creators every day or week to track growth and new posts
- **Integrations**: send results to Google Sheets, Slack, Zapier, Make, Airbyte or your own webhook
- **Monitoring**: run history, logs and cost tracking in the Apify Console

***

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

TikTok Profile Scraper uses **pay-per-result pricing**. You pay for the videos you receive, nothing else.

```
$0.20 per 1,000 videos  ($0.0002 per video)
```

| Videos | Price |
|--------|-------|
| A creator's last 50 videos | $0.01 |
| 50 videos from 20 creators (1,000 videos) | $0.20 |
| Full history of 100 creators (100,000 videos) | $20.00 |

The Apify free plan includes **$5 of monthly credits**, enough to scrape about **25,000 TikTok videos for free** every month. No start fees, no subscription, and no charge for proxies or compute: the price per video is all you pay.

**Cost control tips**

- Use **Published on or after** for monitoring runs: only new videos are returned and billed
- Set **Max videos per profile** to what you actually need
- Set a **Maximum cost per run** in the run options: the scraper stops as soon as it is reached

***

### ⚙️ Input options explained

| Option | What it does |
|--------|--------------|
| **TikTok profiles** | Profile URLs, `@handles` or usernames, one per line. |
| **Max videos per profile** | Upper limit of videos per profile, newest first. Default 50. |
| **Published on or after** | Only videos published on or after this date. Scraping stops early once older videos are reached. |
| **Published on or before** | Only videos published on or before this date. |
| **Minimum / maximum likes** | Keep only videos inside a like range. |

***

### ❓ FAQ

#### Is it legal to scrape TikTok profiles?

TikTok Profile Scraper only collects **publicly available** data from **public** profiles: content creators chose to publish. It does not access private accounts, direct messages, or personal data such as emails or phone numbers. However, results may contain personal data such as usernames. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you are unsure whether your reason is legitimate, consult your lawyers. You can also read the Apify blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

#### Can I scrape private TikTok accounts?

No. Only public profiles can be scraped. Private or non-existent profiles are skipped, logged, and not billed.

#### Do I need a TikTok account, cookies or proxies?

No. The scraper handles access for you. Just paste the profiles and run it.

#### Can I get all videos from a TikTok profile?

Yes. Set **Max videos per profile** to a high number (for example `5000`) and the scraper will page through the whole video history.

#### How do I only get new videos since my last run?

Schedule the Actor and set **Published on or after** to the date of your previous run. Only newer videos are returned, so you only pay for new content.

#### What happens if a profile fails?

The run continues with the other profiles. Failed profiles are listed in the log and in the `FAILED_PROFILES` record of the run's key-value store, and you are not charged for them.

#### Can I scrape TikTok profiles with Python?

Yes. Use the [Apify Python client](https://docs.apify.com/api/client/python) to start the Actor and read results in a few lines of code. Ready-made snippets are in the [API tab](https://apify.com/invideoiq/tiktok-profile-scraper/api).

***

### 🔗 Related Actors

- [TikTok Search Scraper](https://apify.com/invideoiq/tiktok-keyword-search-scraper): find TikTok videos and creators by keyword, with date, views and likes filters.
- [Video Transcript Scraper](https://apify.com/invideoiq/video-transcript-scraper): get transcripts and metadata from TikTok, YouTube, X and more.
- [Video Transcriber](https://apify.com/invideoiq/video-transcriber): speech-to-text for videos without subtitles.
- [Tweet Claim Analyzer](https://apify.com/invideoiq/tweet-claim-analyzer): understand what any tweet is really claiming, including its video and images.

#### Workflow ideas

- **Profile → Transcript**: scrape a creator's latest videos, then send the `video_url` list to Video Transcript Scraper to get everything they said.
- **Profile → Speech-to-text**: for videos without captions, send them to Video Transcriber.
- **Search → Profile**: discover creators with TikTok Search Scraper, then scrape their full history here.

***

### 💬 Support

Found a bug or need a new field or filter? [Open an issue](https://apify.com/invideoiq/tiktok-profile-scraper/issues/open) and we'll get back to you quickly.

Need a custom TikTok monitoring pipeline or a higher volume plan? Reach out through the Issues tab, we're happy to help.

# Actor input Schema

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

TikTok profiles to scrape. Paste profile URLs (https://www.tiktok.com/@nasa), @handles (@nasa) or plain usernames (nasa), one per line. Only public profiles can be scraped.

## `max_videos_per_profile` (type: `integer`):

Maximum number of videos to return for each profile, newest first. You only pay for the videos you receive. Set a high number (for example 5000) to get the full video history.

## `published_after` (type: `string`):

Only return videos published on or after this date (YYYY-MM-DD). The scraper stops as soon as it reaches older videos, which makes 'last 30 days' style runs fast and cheap.

## `published_before` (type: `string`):

Only return videos published on or before this date (YYYY-MM-DD).

## `min_likes` (type: `integer`):

Only return videos with at least this many likes. Useful to keep only a creator's top-performing content.

## `max_likes` (type: `integer`):

Only return videos with at most this many likes.

## Actor input object example

```json
{
  "profiles": [
    "https://www.tiktok.com/@nasa",
    "@natgeo",
    "khaby.lame"
  ],
  "max_videos_per_profile": 30
}
```

# Actor output Schema

## `results` (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 = {
    "profiles": [
        "https://www.tiktok.com/@nasa",
        "@natgeo"
    ],
    "max_videos_per_profile": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("invideoiq/tiktok-profile-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 = {
    "profiles": [
        "https://www.tiktok.com/@nasa",
        "@natgeo",
    ],
    "max_videos_per_profile": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("invideoiq/tiktok-profile-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 '{
  "profiles": [
    "https://www.tiktok.com/@nasa",
    "@natgeo"
  ],
  "max_videos_per_profile": 30
}' |
apify call invideoiq/tiktok-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,invideoiq/tiktok-profile-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/swVdOXmCgljwRU885/builds/6bamhyDV9DeAiijwY/openapi.json
