# TikTok Profile Scraper — Identity & Stats (`herus13/tiktok-profile-scraper`) Actor

Scrape any public TikTok profile: identity, bio, avatar, verified/private, region, and follower/following/like/video counts. Fast HTTP, no login.

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

## Pricing

from $4.00 / 1,000 profile scrapeds

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/platform/actors/running/actors-in-store#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

The TikTok Profile Scraper is an Apify actor that extracts **public** [TikTok](https://www.tiktok.com) profile identity and stats by **handle** or **profile URL** — no login, no account, no cookies. It returns one structured record per profile: nickname, bio, avatar, verified/private flags, region, `secUid`, `userId`, and follower/following/heart/video counts.

Use it for creator research, influencer discovery, competitor tracking, or social-media analytics at scale — exported to JSON, CSV, or Excel.

> **This actor returns profile identity and stats only.** TikTok's logged-out profile pages do not reliably embed recent videos — verified live against top creators (@mrbeast at 129M followers and @khaby.lame at 162M both return zero embedded videos). For video listings, see [TikTok Video Scraper](https://apify.com/herus13/tiktok-video-scraper).

### Table of contents

- [What the TikTok profile scraper does](#what-the-tiktok-profile-scraper-does)
- [Use cases](#use-cases)
- [How to scrape TikTok profiles](#how-to-scrape-tiktok-profiles)
- [TikTok profile scraper input](#tiktok-profile-scraper-input)
- [TikTok profile data output](#tiktok-profile-data-output)
- [How much it costs](#how-much-it-costs)
- [Recommended proxies for TikTok profiles](#recommended-proxies-for-tiktok-profiles)
- [Why this TikTok profile scraper](#why-this-tiktok-profile-scraper)
- [FAQ](#faq)
- [Rate this actor](#rate-this-actor-)
- [Related actors](#related-actors)

### What the TikTok profile scraper does

- 🔎 **Handle or URL input** — accepts `duolingo`, `@duolingo`, or `https://www.tiktok.com/@duolingo`.
- 🆔 **Identity + stats in one pass** — nickname, bio, avatar, verified/private, region, `secUid`, `userId`.
- 📊 **Full public counts** — follower, following, heart (total likes), and video counts per profile.
- ⚡ **HTTP-first, no browser** — anonymous extraction with no TikTok account, password, or session cookie, so it's cheap and fast per profile.
- 💸 **Pay only for delivered profiles** — $0.004 per profile; not-found, blocked, and errored profiles are never charged.
- 🌍 **Export-ready** — one flat row per profile, ready for JSON, CSV, or Excel.

### Use cases

**Influencer discovery at scale** — One structured record per profile — nickname, bio, avatar, verified and private flags, region, and follower/following/heart/video counts — makes it practical to filter a large candidate list down to a shortlist before any manual review.

**Creator vetting before a partnership** — Heart and video counts alongside follower count show whether an account's engagement is proportionate to its audience, which is the check that catches an inflated media kit.

**Competitor and brand tracking** — Run the same handle set on a schedule to watch follower growth, and bio or link changes that typically precede a campaign.

**Pipeline keys for deeper scrapes** — `secUid` and `userId` come back with every profile, which are the identifiers other TikTok endpoints need — so this actor is the natural first step feeding the TikTok Video Scraper. No login, account, or cookies required.

### How to scrape TikTok profiles

1. Click **Try for free** and open the actor.
2. Add one or more `targets` — handles (`duolingo`), `@handles`, or full profile URLs.
3. Leave **Proxy provider** on **Default** — a US residential proxy is included.
4. Optional: cap the run with `max_profiles`.
5. Click **Start** and watch results stream into the dataset.
6. Export as **JSON, CSV, or Excel**, or pull it from the [Apify API](https://docs.apify.com/api/v2).

Scrape profiles by handle or URL:

```json
{
  "targets": ["duolingo", "@netflix", "https://www.tiktok.com/@duolingo"],
  "max_profiles": 100,
  "proxyProvider": "default",
  "proxy": {"useApifyProxy": true, "apifyProxyCountry": "US"}
}
```

### TikTok profile scraper input

| Field | Description |
|---|---|
| `targets` | Handles or profile URLs (`duolingo`, `@duolingo`, or `https://www.tiktok.com/@duolingo`). Required. |
| `max_profiles` | Optional cap on how many profiles from `targets` to scrape. |
| `proxyProvider` | `default` (residential proxy **included**), `dataimpulse`, `apify`, `custom` (uses `proxyUrls`), or `disabled`. |
| `proxyUrls` | Your own gateway URLs, one per entry. Only read when `proxyProvider` is `custom`. |
| `proxy` | Apify Proxy group + country, read when `proxyProvider` is `apify`. Its country also sets the exit country for the built-in providers. |

### TikTok profile data output

Each profile is one flat dataset row. Sample:

```json
{
  "row_type": "profile",
  "unique_id": "duolingo",
  "nickname": "Duolingo",
  "sec_uid": "MS4wLjABAAAA...",
  "user_id": "6746481551163982342",
  "avatar_url": "https://p16-sign-va.tiktokcdn.com/...",
  "signature": "keeping it green 🦉",
  "verified": true,
  "private": false,
  "region": "US",
  "follower_count": 17300000,
  "following_count": 42,
  "heart_count": 380000000,
  "video_count": 1137,
  "profile_url": "https://www.tiktok.com/@duolingo",
  "scraped_at": "2026-07-07T00:00:00Z",
  "error": null
}
```

| Field | Description |
|---|---|
| `unique_id` | The TikTok handle (without `@`). |
| `nickname` | Display name. |
| `sec_uid`, `user_id` | Stable identifiers for cross-run joins. |
| `avatar_url` | Profile picture URL. |
| `signature` | Bio text. |
| `verified`, `private` | Account status flags. |
| `region` | Account region code (e.g. `US`). |
| `follower_count`, `following_count`, `heart_count`, `video_count` | Public stats (`heart_count` = total likes across all videos). |
| `profile_url` | Canonical profile URL. |
| `scraped_at` | ISO timestamp of the run. |
| `error` | `null` on success, or `not_found` / `blocked` / `error` on failure (unbilled). |

Every profile emits exactly one `profile` row. Logged-out profile pages carry no video data at all — verified live in August 2026 against accounts from 51 to 162M followers, none of which exposed a video scope — so there is no video-row output to configure. For a creator's actual videos and their view/like/comment counts, use [TikTok Video Scraper](https://apify.com/herus13/tiktok-video-scraper).

### How much it costs

This actor uses **pay-per-event** pricing — you pay for delivered profiles, not for time.

| Event | USD |
|---|---|
| Actor start (per GB memory) | $0.0001 |
| Profile scraped | $0.004 |

| Use case | Profiles | Est. cost |
|---|---|---|
| Single profile | 1 | ~$0.0041 |
| 100 creators | 100 | ~$0.40 |
| 1,000 profiles | 1,000 | ~$4.00 |

You only pay for profiles actually delivered (`error` is `null`). Not-found, blocked, and errored profiles are **not** charged.

### Recommended proxies for TikTok profiles

A US residential proxy is **included** — leave **Proxy provider** on **Default**. Pick **Custom** and paste your own gateway URLs.

👉 **[Get DataImpulse residential proxies](https://dataimpulse.com/?aff=404588\&utm_source=apify)** (referral link)

### Why this TikTok profile scraper

- **No login required** — anonymous HTTP extraction; no account, password, or session cookie.
- **HTTP-first, browser-free** — cheap and fast per profile, no CAPTCHA-solving overhead.
- **Live data** — follower/heart/video counts reflect the moment of the run.
- **Pay only for results** — not-found, blocked, and errored profiles are never billed.
- **Open source** — the underlying `tiktok-scraper` Python package ships a Typer CLI and a FastAPI server; the Apify wrapper is a thin layer.

### FAQ

**Do I need a TikTok account or login?** No. The actor extracts only publicly visible profile data anonymously over HTTP — no account, password, or session cookie. Private accounts return whatever public metadata is visible.

**Which proxies work best for TikTok profiles?** Residential — included by default. For your own scrapers we use [DataImpulse](https://dataimpulse.com/?aff=404588\&utm_source=apify) (referral link).

**Can I get a creator's recent videos or full video history?** Not with this actor. TikTok's logged-out profile pages don't reliably embed video data — verified live against top creators returning zero embedded videos. Video listing needs a request-signer and lives in the separate [TikTok Video Scraper](https://apify.com/herus13/tiktok-video-scraper). Use this actor for profile identity and stats.

**Am I charged for profiles that don't exist or are blocked?** No. Not-found, blocked, and errored profiles are never charged — you pay only for profiles with delivered data.

**How fresh is the data?** The actor scrapes TikTok live at run time, so follower/following/heart/video counts reflect the moment of the run.

**Is scraping TikTok profiles legal?** This actor collects only publicly available profile data. You are responsible for complying with TikTok's terms and applicable laws. Do not collect personal data without a lawful basis.

### Rate this actor ⭐

If the TikTok Profile Scraper saved you time, please **leave a review on its Apify Store page** — ratings help other people find it and tell us what to build next. Hit a bug or missing field? Open an issue or contact us through the actor's **Issues** tab and we'll fix it fast — recency and reliability are what keep this actor ranking.

### Related actors

Building a broader social or lead pipeline? These actors use the same proxy config format and Pydantic-validated output, all open source.

- **[TikTok Shop Product Scraper](https://apify.com/herus13/tiktok-shop-scraper)** — scrape TikTok Shop products across 10 regions — variants, prices, seller info, ratings, sold counts, with a built-in CAPTCHA solver.
- **[TikTok Video Scraper](https://apify.com/herus13/tiktok-video-scraper)** — scrape a creator's videos by handle — descriptions, play/like/comment/share counts, and cover images.
- **[Instagram Profile Scraper](https://apify.com/herus13/instagram-profile-scraper)** — public Instagram profiles — bio, followers, recent posts. No login.
- **[LinkedIn Profile Scraper](https://apify.com/herus13/linkedin-profile-scraper)** — scrape LinkedIn profiles via your `li_at` cookie — structured fields, full experience history, optional contact enrichment.

# Actor input Schema

## `targets` (type: `array`):

@handles, bare handles, or full profile URLs (https://www.tiktok.com/@duolingo).

## `max_profiles` (type: `integer`):

Optional cap on how many profiles to scrape.

## `proxyProvider` (type: `string`):

<b>Default</b> routes the run through DataImpulse residential IPs (falling back to Apify Proxy) and is <b>included in the price of the run</b> — leave it alone unless you have a reason. <b>Custom</b> uses the proxy URLs you enter below; <b>Apify Proxy</b> uses the proxy configuration below; <b>No proxy</b> is refused on this actor, because the site blocks direct connections. Leave this empty to keep the behaviour this actor already had.

## `proxyUrls` (type: `array`):

Only read when <b>Proxy provider</b> is <b>Custom</b>. One gateway URL per entry, e.g. <code>http://user:pass@host:port</code> — works with any provider that issues URLs (BrightData, Oxylabs, SmartProxy, your own). Leave empty for any other Proxy provider.

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

<p>Read when <b>Proxy provider</b> is <b>Apify Proxy</b> (group + country). Its country also sets the exit country for the built-in providers — TikTok needs a <b>US</b> exit, which is prefilled.</p>

## Actor input object example

```json
{
  "targets": [
    "duolingo"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

TikTok profile identity + public stats (one row per profile).

# 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 = {
    "targets": [
        "duolingo"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("herus13/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 = {
    "targets": ["duolingo"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("herus13/tiktok-profile-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "targets": [
    "duolingo"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call herus13/tiktok-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=herus13/tiktok-profile-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/FLZEiJMD2FYxcKo9g/builds/aGdniFzU0tyRjbSxY/openapi.json
