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

Scrape posts from any public TikTok profile. Extracts posts with video/CDN URLs, engagement stats (likes, comments, shares, views), music metadata, hashtags, tagged users, author profile info, and more.

- **URL**: https://apify.com/rigelbytes/tiktok-profile-scraper.md
- **Developed by:** [Rigel Bytes](https://apify.com/rigelbytes) (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

**Extract all posts** from any public TikTok profile. Get video/CDN URLs, engagement stats (likes, comments, shares, views), music metadata, hashtags, tagged users, author profile info, and more — perfect for content analysis, influencer research, or competitive intelligence.

For just **$5 per 1,000 posts**, you can scrape TikTok profiles with ease.

***

### Features

- Extract all posts from any public TikTok profile:
  - Post ID & URL
  - Description / caption
  - Creation date (Unix + ISO 8601)
  - Video URLs (play, download, best quality) + cover images
  - Image/slideshow post support (extracts all images)
  - Engagement stats: likes, comments, shares, views, saves
  - Music metadata: title, artist, duration, play URL, cover art
  - Hashtags with IDs and descriptions
  - Tagged users with positions
  - Effect stickers used
  - Author profile metadata: username, nickname, avatar, bio, verified, follower/following/heart/video counts
  - Item controls: can repost, can duet, can stitch
- Fast two-phase extraction: SSR parsing for instant first batch, stealth browser for complete pagination
- Proxy support for geo-restrictions and rate-limit avoidance
- Reliable with retry mechanisms

### Pricing

- **$5 per 1,000 posts**
- No hidden fees or limits on usage.

***

### Input

The actor accepts the following input:

- `profileUrls` (array, required): TikTok profile URLs. Supports any format (e.g. `https://www.tiktok.com/@fcbarcelona`, `https://m.tiktok.com/@narins.beauty_`, or just a username).
- `maxPosts` (integer, optional): Max posts to scrape per profile. 0 = unlimited. Default: 0.
- `proxy` (object, optional): Proxy configuration. Highly recommended for large-scale scraping.

#### Input Example

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

***

### Output

Each post is saved as a structured JSON object in the dataset. Example:

```json
{
  "id": "7639302892674944278",
  "url": "https://www.tiktok.com/@fcbarcelona/video/7639302892674944278",
  "description": "#fcbarcelona #barçaontiktok 🔵🔴",
  "createdAt": 1778663821,
  "createdAtISO": "2026-05-12T19:57:01+00:00",
  "isImagePost": false,
  "hashtags": [
    {"id": "26656", "title": "fcbarcelona", "description": ""},
    {"id": "12345", "title": "barçaontiktok", "description": ""}
  ],
  "taggedUsers": [],
  "video": {
    "duration": 30,
    "cover": "https://p16-common-sign.tiktokcdn-eu.com/...",
    "dynamicCover": "https://p16-common-sign.tiktokcdn-eu.com/...",
    "playUrl": "https://v16-webapp-prime.tiktok.com/video/tos/...",
    "downloadUrl": "https://v16-webapp-prime.tiktok.com/video/tos/...",
    "bestQualityUrl": "https://v16-webapp-prime.tiktok.com/video/tos/...",
    "width": 1080,
    "height": 1920,
    "ratio": "9:16"
  },
  "stats": {
    "diggCount": 26200,
    "shareCount": 141,
    "commentCount": 364,
    "playCount": 149800,
    "collectCount": 847
  },
  "music": {
    "id": "7420525641043855361",
    "title": "New Skills",
    "authorName": "Prodbyecho",
    "duration": 59,
    "playUrl": "https://sf16-ies-music-sg.tiktokcdn.com/...",
    "coverLarge": "https://p77-sg.tiktokcdn.com/...",
    "isOriginal": false
  },
  "authorMeta": {
    "id": "6594121926820872197",
    "uniqueId": "fcbarcelona",
    "nickname": "FC Barcelona",
    "verified": true,
    "avatar": "https://p16-common-sign.tiktokcdn-eu.com/...",
    "signature": "🏆 Get the OR jersey 🏆",
    "followerCount": 66800000,
    "followingCount": 31,
    "heartCount": 2700000000,
    "videoCount": 5681
  },
  "itemControl": {
    "canRepost": true,
    "canDuet": true,
    "canStitch": true
  }
}
```

***

### Running via Apify Console

Go to the [Apify Console](https://console.apify.com), find the TikTok Profile Scraper actor, enter your profile URLs, and click Run.

#### Running via API (Python)

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run_input = {
    "profileUrls": [
        {"url": "https://www.tiktok.com/@fcbarcelona"}
    ],
    "maxPosts": 100
}

run = client.actor("rigelbytes/tiktok-profile-scraper").call(run_input=run_input)
```

#### Running via API (JavaScript)

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

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const input = {
    profileUrls: [{ url: 'https://www.tiktok.com/@fcbarcelona' }],
    maxPosts: 100,
};

const run = await client.actor('rigelbytes/tiktok-profile-scraper').call(input);
```

#### Running with cURL

```bash
API_TOKEN=<YOUR_API_TOKEN>

cat > input.json <<'EOF'
{
  "profileUrls": [{"url": "https://www.tiktok.com/@fcbarcelona"}],
  "maxPosts": 100
}
EOF

curl "https://api.apify.com/v2/acts/rigelbytes/tiktok-profile-scraper/runs?token=$API_TOKEN" \
  -X POST -d @input.json -H 'Content-Type: application/json'
```

***

### Why Choose This Scraper?

- **Affordable**: Just $10 for 1,000 posts.
- **Comprehensive**: Extracts every post with full metadata, engagement stats, music info, and author profile.
- **Fast**: SSR parsing for instant first batch, optimized browser for pagination.
- **Easy to Use**: Simple input format, runs with one click.
- **Reliable**: Built with retry mechanisms and stealth browser technology.

***

### Recommended Proxy Providers

#### **Shifter**

- Reliable residential proxies worldwide
- Competitive rates
- [Order Shifter Now](https://shifter.io/r/YoBB/order)
- Get 10% Off with coupon `rigelbytes-YoBB`

#### **OxyLabs**

- 100M+ Proxies
- Fastest proxies in the market
- Real profile, human-like Residential IPs
- [Get Proxies](https://oxylabs.go2cloud.org/aff_c?offer_id=7\&aff_id=1366\&url_id=7)

#### **DataImpulse**

- Covers 200+ Countries
- Reliable Residential Proxies for just $1/GB
- [Get Residential Proxies](https://dataimpulse.com/?aff=89421)

### About Rigel Bytes

Rigel Bytes specializes in web scraping, automation, and data analytics. We help businesses extract and leverage valuable data for informed decision-making.

### Contact Us

Ready to unlock the power of data? Reach out to us at (contact@rigelbytes.com) or [book an appointment](https://cal.com/faizanali/appointments).

# 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("rigelbytes/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("rigelbytes/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 rigelbytes/tiktok-profile-scraper --silent --output-dataset

```

## MCP server setup

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