# TikTok Profile Scraper – Extract Posts, Stats, Videos & Music (`scraptivo/tiktok-profile-scraper`) Actor

Collect public TikTok posts from any profile as structured data: captions, engagement stats, video and image URLs, music metadata, hashtags, tagged users, and author profile info. Ideal for influencer analytics, content research, and social monitoring.

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

## Pricing

from $5.00 / 1,000 posts

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?

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 Profile Scraper** collects public TikTok posts from any public profile and turns them into structured data for content analysis, influencer research, and competitor monitoring. Provide one or more profile URLs — or just @usernames — run the Actor, and export captions, engagement stats, video and music metadata, hashtags, and author profile details to JSON, CSV, Excel, or your preferred integration. Use it to build creator databases, track content performance, and monitor competitors on a schedule. Pricing starts from $0.005 per post, with no fixed subscription cost.

### What can you automate with TikTok Profile Scraper?

- **Build creator and influencer databases** — collect every public post from target profiles with author metadata, so you can qualify accounts by follower count, verified status, and posting volume.
- **Track content performance over time** — capture likes, comments, shares, views, and saves per post to measure what resonates with an audience.
- **Monitor competitors** — watch rival brands and creators, and surface the posts, hashtags, and music they rely on.
- **Enrich content research** — pull captions, hashtags, tagged users, and music metadata to feed trend and creative briefs.
- **Schedule recurring collection** — re-run the Actor automatically so your dataset stays current without manual exports.

### Who is this scraper for?

| Team | Workflow |
|---|---|
| Influencer marketing agencies | Qualify creators by follower count, engagement, and posting cadence before outreach. |
| Market researchers | Track a niche's top profiles and trending hashtags to identify audience interests. |
| Content and growth teams | Benchmark competitor posting patterns and reuse proven hashtags and sounds. |
| Social monitoring tools | Feed structured post and author data into dashboards, CRMs, or analytics pipelines. |
| E-commerce brands | Study how competitor products are presented and which content drives engagement. |

### What data can you collect from TikTok?

| Data group | Example fields | How it helps |
|---|---|---|
| Post identity | `id`, `url`, `description`, `createdAtISO`, `isImagePost` | A stable way to reference and deduplicate each post. |
| Engagement | `stats` — likes (`diggCount`), comments, shares, views, saves | Measure reach and audience reaction per post. |
| Media | `video` (play/download URL, cover, duration, dimensions), `images` | Access the actual video or slideshow assets for review or reuse. |
| Audio | `music` (title, artist, duration, play URL, cover) | Identify the sounds a creator relies on. |
| Context | `hashtags`, `taggedUsers`, `effectStickers` | Understand tagging strategy and trending topics. |
| Author | `authorMeta` (username, nickname, verified, avatar, follower/following counts, bio) | Profile and qualify the account behind the content. |
| Permissions | `itemControl` (repost, duet, stitch) | See whether a post can legally be re-shared or remixed. |

Some fields are conditional — for example, `taggedUsers`, `images`, and `effectStickers` are empty when a post has none.

### How to use TikTok Profile Scraper

1. Open the Actor in the Apify Console.
2. Enter one or more TikTok profile URLs in `profileUrls` (full `www`/`m` links or just `@username` work).
3. Set `maxPosts` to limit the number of posts collected per profile, or leave `0` for unlimited.
4. Run the Actor (the residential Apify proxy is on by default for reliable collection).
5. Export the dataset to JSON, CSV, or Excel, or connect it to an integration.

```json
{
  "profileUrls": [
    "https://www.tiktok.com/@fcbarcelona",
    "@narins.beauty_"
  ],
  "maxPosts": 100
}
```

### Example workflow

#### Build a weekly report of competitor post performance

1. Run the Actor every Monday on three competitor profiles with `maxPosts` set to 100.
2. In your spreadsheet or CRM, filter posts by `createdAtISO` for the past week.
3. Sort by `stats` (views or likes) to identify each brand's top-performing content.
4. Deduplicate rows using the stable post `id` or `url` so repeat runs don't create copies.
5. Send the highest-engagement posts to Slack for your content team to review.

The Actor collects and structures the posts; the filtering, sorting, and delivery steps above happen on your side in the tools you already use.

### Automate and integrate your results

- **Schedules** — set the Actor to run daily or weekly so your dataset tracks new posts automatically.
- **Webhooks** — trigger a notification after each successful run to start your downstream pipeline.
- **Integrations** — export directly to Google Sheets, or connect Make, Zapier, Slack, a CRM, a database, or cloud storage.
- **API** — call the Actor from your own code for recurring pipelines and pass `profileUrls` and `maxPosts` programmatically.
- **Deduplication** — use the stable post `id` (or full `url`) as your unique key when merging runs.

### Input reference

| Field | Type | Required | Default | What it controls |
|---|---|---|---:|---|
| `profileUrls` | array | Yes | — | One or more TikTok profile URLs or `@usernames` to collect from. |
| `maxPosts` | integer | No | `0` (unlimited) | Stop after this many posts per profile. |
| `proxy` | object | No | Apify residential | Proxy configuration used to avoid rate limiting and geo-restrictions. |

#### What formats does `profileUrls` accept?

Any profile link format works — `https://www.tiktok.com/@fcbarcelona`, `https://m.tiktok.com/@narins.beauty_`, or a bare `@username`. Pass entries as plain strings or as objects with a `url` key.

### Output example

Each post is saved as one structured JSON object in the dataset:

```json
{
  "id": "7678696633919524118",
  "url": "https://www.tiktok.com/@fcbarcelona/video/7678696633919524118",
  "description": "Hours before his home debut #fcbarcelona #barçaontiktok #rodrigo",
  "createdAtISO": "2026-08-27T14:55:00+00:00",
  "isImagePost": false,
  "hashtags": [
    { "id": "26656", "title": "fcbarcelona" },
    { "id": "7051527303028801541", "title": "barçaontiktok" }
  ],
  "stats": {
    "diggCount": 112500,
    "shareCount": 507,
    "commentCount": 876,
    "playCount": 384000,
    "collectCount": 4948
  },
  "music": {
    "id": "7678696648914799382",
    "title": "sonido original - fcbarcelona",
    "authorName": "fcbarcelona",
    "duration": 10,
    "playUrl": "https://v45.tiktokcdn-eu.com/...",
    "isOriginal": true
  },
  "authorMeta": {
    "id": "6594121926820872197",
    "uniqueId": "fcbarcelona",
    "nickname": "fcbarcelona",
    "verified": true,
    "avatar": "https://p19-common-sign.tiktokcdn-eu.com/...",
    "signature": "One club. One rhythm.",
    "followerCount": 71500000,
    "followingCount": 35,
    "videoCount": 6001
  }
}
```

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

TikTok Profile Scraper uses Apify's pay-per-event model. The primary event is **posts**, charged at **$0.005 per post**, plus a one-time **$0.00005** Actor start charge. There is no subscription fee.

For example, collecting 100 posts costs about **$0.50**, while a larger run of 10,000 posts costs about **$50**. Apify platform usage and residential proxy traffic are billed separately based on your plan and the data transferred. Check the Actor's pricing tab on Apify for your account's current rates.

### Reliability and responsible use

- **Proxy** — a residential Apify proxy is enabled by default; keep it on for reliable, geo-aware collection, especially at larger volumes.
- **Retries and concurrency** — the Actor retries failed requests and continues to the next profile if one can't be reached.
- **Conditional fields** — `taggedUsers`, `images`, `effectStickers`, and some media URLs are present only when a post actually has them.
- **Public data** — the Actor collects only content that is publicly visible on TikTok profiles; it does not bypass privacy settings.
- **Your responsibility** — use the exported data lawfully and in line with TikTok's terms and any applicable data-protection rules.

### Frequently asked questions

#### Can I scrape posts from any TikTok profile?

Yes — any public profile. The Actor follows the profile's publicly visible posts. Private accounts and content hidden by privacy settings are not accessible.

#### Can I schedule TikTok Profile Scraper to run automatically?

Yes. Configure a schedule in the Apify Console to run the Actor daily, weekly, or on a custom interval, so new posts are collected without manual runs.

#### What counts as one result?

One result equals one collected post. The pay-per-event charge is $0.005 per post, so the cost scales with how many posts you collect.

#### Why are some fields empty?

Fields such as `taggedUsers`, `images`, and `effectStickers` are only populated when a post actually contains them. A post with no tagged users will simply have an empty array.

#### How do I avoid duplicate records?

Use the post `id` (or the full `url`) as a stable unique key. Both stay the same across runs, so deduplicate on either when merging datasets.

#### Do I need a proxy?

A residential Apify proxy is enabled by default and recommended. It reduces rate limiting and lets you collect reliably at higher volumes.

### Related Scraptivo automations

- [Instagram Comment Scraper](https://apify.com/scraptivo/instagram-comment-scraper) — collect comments and commenters from Instagram posts.
- [Twitter/X Profile Scraper](https://apify.com/scraptivo/twitter-x-profile-scraper) — extract posts and profile data from X.
- [YouTube Channel Scraper](https://apify.com/scraptivo/youtube-channel-scraper) — pull videos and channel metadata from YouTube.
- [YouTube Comment Scraper](https://apify.com/scraptivo/youtube-comment-scraper) — collect comments from YouTube videos.
- [Reddit Scraper](https://apify.com/scraptivo/reddit-scraper) — gather posts and discussions from Reddit.

### Support and custom workflows

Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, a sample profile URL, the fields you need, and your expected volume so we can assess the request.

# Actor input Schema

## `profileUrls` (type: `array`):

One or more TikTok profile URLs. Supports any profile link format (e.g. https://www.tiktok.com/@fcbarcelona, https://m.tiktok.com/@narins.beauty\_, or just @username).

## `maxPosts` (type: `integer`):

Stop after collecting this many posts per profile. Leave 0 for unlimited.

## `proxy` (type: `object`):

Proxy settings for scraping. Apify residential proxy is recommended to avoid rate limiting and geo-restrictions.

## Actor input object example

```json
{
  "profileUrls": [
    {
      "url": "https://www.tiktok.com/@fcbarcelona"
    },
    {
      "url": "https://www.tiktok.com/@narins.beauty_"
    }
  ],
  "maxPosts": 100,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `posts` (type: `string`):

All scraped TikTok posts with full metadata, video URLs, stats, music info, and author details.

## `runStats` (type: `string`):

Aggregate run statistics (record count, timestamps).

## `run` (type: `string`):

Apify Console link to inspect this run

# 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 = {
    "profileUrls": [
        {
            "url": "https://www.tiktok.com/@fcbarcelona"
        },
        {
            "url": "https://www.tiktok.com/@narins.beauty_"
        }
    ],
    "maxPosts": 100,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraptivo/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 = {
    "profileUrls": [
        { "url": "https://www.tiktok.com/@fcbarcelona" },
        { "url": "https://www.tiktok.com/@narins.beauty_" },
    ],
    "maxPosts": 100,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scraptivo/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 '{
  "profileUrls": [
    {
      "url": "https://www.tiktok.com/@fcbarcelona"
    },
    {
      "url": "https://www.tiktok.com/@narins.beauty_"
    }
  ],
  "maxPosts": 100,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scraptivo/tiktok-profile-scraper --silent --output-dataset

```

## MCP server setup

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