# Tiktok Profile Scraper (`mcdowell/tiktok-profile-scraper`) Actor

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

## Pricing

from $4.00 / 1,000 profile scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Profile Scraper

Scrape TikTok profiles and extract detailed video, creator, engagement, hashtag, and music data in a structured JSON format.

**TikTok Profile Scraper** is designed for extracting public TikTok profile content at scale. Provide a TikTok profile URL or username and receive structured data for the profile's videos, including engagement metrics, author information, captions, hashtags, music, and more.

### 🚀 Actor Features

- **Profile scraping** — Extract videos from public TikTok profiles.
- **Video metadata** — Get video IDs, captions, URLs, creation dates, and other metadata.
- **Engagement metrics** — Collect views, likes, shares, comments, and saves.
- **Creator information** — Extract follower counts, following counts, total likes, video counts, bio, avatar, and other profile information.
- **Music data** — Get music names, artists, IDs, cover images, and audio URLs.
- **Hashtags & mentions** — Extract hashtags and mentioned users from video captions.
- **Content classification** — Identify ads, pinned videos, slideshows, and muted videos.
- **Structured output** — Results are returned as clean JSON objects, ready for APIs, databases, spreadsheets, or data pipelines.
- **Scalable scraping** — Designed for processing profiles and collecting large amounts of TikTok content.

### 📥 Input

Provide the TikTok profile you want to scrape.

Example:

```
{
  "profiles": ["tiktok"]
}
```

You can use a TikTok profile as the input.

#### Example profiles

```
{
    "profiles": [
        "tiktok",
        "nike",
        "cristiano"
    ]
}
```

> **Note:** Only publicly accessible TikTok information can be collected. The amount of data available may vary depending on the profile and TikTok's current availability of public information.

### 📤 Output

The Actor returns an array containing one object for each scraped TikTok video.

Each result can contain:

#### Video information

- Video ID
- Caption
- Caption language
- Creation timestamp
- ISO-formatted creation date
- TikTok video URL
- Media URL
- Location
- Advertisement status
- Muted status
- Slideshow status
- Pinned status

#### Engagement metrics

- Views
- Likes
- Shares
- Comments
- Saves/collects

#### Creator information

- User ID
- Username
- Display name
- Profile URL
- Verification status
- Profile avatar
- Bio/signature
- Bio link
- Region
- Followers
- Following
- Total likes
- Video count
- Friends
- Account creation time
- TikTok Shop seller status
- Other publicly available profile metadata

#### Music information

- Music name
- Music artist
- Music ID
- Original sound status
- Music playback URL
- Music cover image

#### Content metadata

- Mentions
- Hashtags
- Effects and stickers

### Example Output

```
[
  {
    "id": "7123456789012345678",
    "text": "Check out this video!",
    "textLanguage": "en",
    "createTime": 1660000000,
    "createTimeISO": "2022-08-08T23:06:40.000Z",
    "isMuted": false,
    "webVideoUrl": "https://www.tiktok.com/@example/video/7123456789012345678",
    "locationCreated": "US",
    "isAd": false,
    "authorMeta": {
      "id": "123456789",
      "name": "example",
      "profileUrl": "https://www.tiktok.com/@example",
      "verified": "true",
      "privateAccount": false,
      "nickName": "Example User",
      "avatar": "https://example.com/avatar.jpg",
      "signature": "Creator | Travel | Lifestyle",
      "bioLink": "https://example.com",
      "region": "US",
      "following": 120,
      "followers": 250000,
      "videos": 350,
      "heart": 5200000,
      "digg": 800,
      "friends": 75,
      "isUnder18": false,
      "roomId": "",
      "ttSeller": false,
      "createTime": 1600000000
    },
    "musicMeta": {
      "musicName": "Original Sound",
      "musicAuthor": "Example User",
      "musicOriginal": true,
      "playUrl": "https://example.com/audio.mp3",
      "coverMediumUrl": "https://example.com/cover.jpg",
      "musicId": "123456789"
    },
    "mediaUrls": "https://example.com/video.mp4",
    "diggCount": 12500,
    "shareCount": 340,
    "playCount": 150000,
    "collectCount": 1200,
    "commentCount": 450,
    "mentions": [
      "creator"
    ],
    "hashtags": [
      {
        "name": "fyp"
      },
      {
        "name": "travel"
      }
    ],
    "effectStickers": [],
    "isSlideshow": false,
    "isPinned": true,
    "input": "https://www.tiktok.com/@example"
  }
]
```

### 💰 Pricing

The Actor uses Apify's standard usage-based billing.

Your total cost depends on the resources consumed during a run, including compute and other Apify platform resources.

For the current price, check the **Pricing** section on this Actor's Apify Store page.

There are no separate charges for individual output fields.

### 🔌 API Usage

Once an Actor run is started, the resulting dataset can be accessed through the Apify API.

#### Retrieve Dataset Results

After the Actor run completes, retrieve the resulting dataset through the Apify API.

```
curl \
  "https://api.apify.com/v2/datasets/DATASET_ID/items?clean=true" \
  -H "Authorization: Bearer YOUR_APIFY_TOKEN"
```

The dataset contains the scraped TikTok video objects in JSON format.

> The exact Actor ID and API endpoints may differ depending on how the Actor is published on Apify.

### 📊 Use Cases

TikTok Profile Scraper can be used for a variety of data collection and research workflows:

- **Creator research** — Analyze TikTok creators and their published content.
- **Competitor analysis** — Monitor publicly available competitor content and engagement.
- **Social media analytics** — Build datasets containing TikTok performance metrics.
- **Content research** — Discover videos, captions, hashtags, and trending content.
- **Influencer research** — Collect creator profiles and audience metrics.
- **Hashtag research** — Analyze hashtags used across a creator's content.
- **Music research** — Discover sounds and music used in TikTok videos.
- **Lead generation** — Build creator datasets from publicly available information.
- **Data enrichment** — Combine TikTok data with other business or marketing datasets.
- **Historical analysis** — Store recurring scrape results to track changes over time.

### ⚡ Why Use TikTok Profile Scraper?

Instead of manually visiting profiles and collecting information, this Actor converts TikTok profile content into structured data that can be consumed automatically.

You can export the results to:

- JSON
- CSV
- Excel
- XML

You can also connect the Actor to other Apify tools and external applications to build automated data pipelines.

### 🛠️ Automation

Schedule the Actor to run automatically using Apify's scheduling features.

For example, you can run the scraper:

- Daily
- Weekly
- Monthly
- On a custom schedule

This makes it possible to continuously collect updated TikTok profile data without manually starting each scrape.

### 📋 Data Quality

The scraper extracts publicly available information exposed by TikTok at the time of the run.

Some fields may be empty or unavailable depending on the video, account, region, or TikTok's current page structure.

Engagement metrics such as views, likes, comments, shares, and saves can change over time.

Private accounts and content that is not publicly accessible may return limited or no data.

### ⚠️ Limitations

- Only publicly accessible TikTok data can be scraped.
- TikTok may change its website structure or public data availability.
- Some videos may have incomplete music or metadata.
- Engagement numbers are point-in-time values and can change after the scrape.
- Private profiles may not provide the same information as public profiles.
- Availability of certain fields may vary between videos.

### 🔒 Responsible Use

Use the Actor responsibly and comply with TikTok's applicable terms, policies, and laws governing the collection and use of publicly available data.

You are responsible for ensuring that your use of the scraped data complies with applicable privacy, copyright, and data protection requirements.

### 📦 Output Dataset

Each successful Actor run produces an Apify Dataset containing the scraped TikTok videos.

The dataset can be:

- Viewed directly in the Apify Console
- Downloaded as JSON or CSV
- Accessed through the Apify API
- Connected to other Apify Actors and integrations
- Used in automated data-processing workflows

### ❓ Frequently Asked Questions

#### What can I scrape?

You can scrape publicly accessible videos from a TikTok profile, along with available video, creator, engagement, hashtag, mention, and music metadata.

#### Does it scrape private accounts?

No. The Actor is intended for publicly accessible TikTok content.

#### Does it download TikTok videos?

The output can include available media URLs. Whether a media URL remains accessible depends on TikTok and the underlying media availability.

#### Can I scrape multiple profiles?

The Actor can be run multiple times or integrated into an automated workflow to process multiple profiles, subject to the Actor's input configuration and available resources.

#### Can I access the data through an API?

Yes. Apify provides API access to Actor runs and their resulting datasets.

#### Can I schedule scraping?

Yes. Apify scheduling can be used to run the Actor automatically at recurring intervals.

### 🚀 Get Started

Enter a public TikTok profile URL, start the Actor, and receive structured TikTok data in your Apify Dataset.

**Input a profile → Run the Actor → Get structured TikTok data.**

# Actor input Schema

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

Profile name(s) for users to be scraped

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

Profile name(s) for users to be scraped

## `maxVideosPerPage` (type: `integer`):

The number of results that will be scraped from every hashtag and profile.

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

Oldest possible date for video

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

Oldest possible date for video

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

Oldest possible date for video

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

Oldest possible date for video

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

Oldest possible date for video

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

Oldest possible date for video

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

Exclude pinned posts from being scraped in the results

## `proxyConfig` (type: `object`):

Configure proxies to localize results and prevent limiting

## Actor input object example

```json
{
  "profiles": [
    "apifytech"
  ],
  "profileSorting": "latest",
  "maxVideosPerPage": 35,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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": [
        "apifytech"
    ],
    "profileSorting": "latest",
    "maxVideosPerPage": 35,
    "proxyConfig": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("mcdowell/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": ["apifytech"],
    "profileSorting": "latest",
    "maxVideosPerPage": 35,
    "proxyConfig": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("mcdowell/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": [
    "apifytech"
  ],
  "profileSorting": "latest",
  "maxVideosPerPage": 35,
  "proxyConfig": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call mcdowell/tiktok-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mcdowell/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/cOGt9TYBVAvN9D8zP/builds/dPIhvqziVJhvf5wBB/openapi.json
