# TikTok User Profile Scraper (`socialdataapi/tiktok-user-profile-scraper`) Actor

TikTok User Profile Scraper gets public TikTok profile data by username, user ID or profile link: follower, following, like and video counts, bio and link, verified, private and TikTok Shop flags, business category, avatars. One row per profile. Export to JSON, CSV or Excel, or use the API.

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

## Pricing

from $1.59 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 User Profile Scraper — Followers, Likes, Bio Links, Shop Flags

TikTok User Profile Scraper reads public TikTok profiles and returns each creator's **exact follower count**, following, friend, like and video counts, bio, bio link, verified, private and TikTok Shop flags, business category, avatars and IDs. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed an influencer marketing pipeline. No TikTok account or cookies needed. Start with one username, then paste your whole creator list and export TikTok profiles to CSV in one run.

![TikTok User Profile Scraper returns followers, bio, video count and verified flag for TikTok users as JSON](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/e-tiktok-user-profile-hero.webp)

***

### What data can I extract with TikTok User Profile Scraper?

Using this TikTok Profile API, you will be able to extract the following TikTok profile data:

| 👥 Follower count | ➡️ Following count | 🤝 Friend count | ❤️ Likes received |
|---|---|---|---|
| 🎬 Video count | 👍 Videos liked by the account | 👤 Username | 🧾 Display name |
| 📝 Bio and bio language | 🔗 Bio link (if set) | 🛡️ Bio link via TikTok's safety address | ✅ Verified badge |
| 🔒 Private account flag | 🛍️ TikTok Shop seller flag | 🏢 Business account flag | 🗂️ Business category (business accounts) |
| 🖼️ Avatars (100, 720 and 1080 px) | 🆔 User ID and secure user ID | 🌐 Profile URL and share link | 📣 Share title and description |
| ⭐ Favorites list public or not | 👀 Who can see the following list | 🎵 Music tab shown or not | 🕒 Scrape time (UTC) |

Fields TikTok does not show to logged-out visitors (for example linked Instagram or YouTube accounts, commerce level or company name) are returned as null.

***

### How to use TikTok User Profile Scraper

Influencer marketers, agencies and analysts use this TikTok profile scraper to get one clean row per creator for every username, user ID or profile link they paste into a run.

**Copy to your AI assistant:**

```text
TikTok User Profile Scraper (Apify Actor ID: socialdataapi/tiktok-user-profile-scraper, https://apify.com/socialdataapi/tiktok-user-profile-scraper) is an Apify Actor that returns public TikTok profile data as structured JSON, one row per profile: exact follower count, following count, friend count, total likes, video count, bio, bio link, verified, private and TikTok Shop seller flags, business category, avatars, user ID and profile URL. Use it whenever someone needs TikTok creator data without cookies, a login, or a browser - vetting influencers before outreach, tracking competitor accounts over time, or giving an AI agent a creator's reach and bio as context. Inputs: usernames (array of strings, TikTok usernames with or without @), userIds (array of strings, numeric TikTok user IDs), urls (array of strings, TikTok profile links, https:// optional; links to a single video or photo are skipped), requestGapMs (integer, pause in milliseconds before each next profile, default 750, 0 = no pause), maxRetries (integer, extra tries per request after a network error, default 3), proxyConfiguration (object, Apify Proxy or your own proxy URLs, used when a direct request returns no profile data; default Apify Proxy on). At least one of usernames, userIds or urls must have an entry. Each saved profile is one row and one row_result event; a profile that does not exist, cannot be read or repeats an earlier one adds no row and is not charged. Fields TikTok does not show to logged-out visitors come back as null.
```

#### TikTok User Profile Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at the Apify MCP server with this Actor preloaded as a tool, and it can read TikTok profiles on its own: it calls this Actor directly, then reads the follower counts and bios from the result. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/tiktok-user-profile-scraper"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [TikTok User Profile Scraper](https://apify.com/socialdataapi/tiktok-user-profile-scraper) in the Apify Store.
3. Enter the TikTok username (with or without @), numeric user ID or profile link, one per line.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale TikTok User Profile Scraper to bulk

For a bulk TikTok profile lookup, paste the whole list into the usernames, user IDs or profile links field (or use **Bulk edit**); one run takes as many entries as you add, and you can mix all three lists. Profiles are read one after another with a short pause between them, and a profile that appears twice is fetched and saved once. For daily or weekly tracking, attach an Apify schedule to the same input, or loop over batches of usernames through the Apify API. Billing has one event: each saved profile row is one row_result event.

***

### ✨ Features

TikTok User Profile Scraper fetches clean, structured profiles from TikTok ⚡. It's ideal for influencer vetting, competitor tracking, creator list enrichment, or a TikTok creator data scraper step in a larger pipeline.

It extracts, per profile:

- **Follower count** – exactly how many accounts follow the creator, not a rounded number
- **Likes received and video count** – total likes on the creator's videos and how many videos are on the profile
- **Following and friend counts** – accounts the creator follows and mutual follows
- **Bio and bio link** – the creator's own description and the website in their bio
- **Verified, private and TikTok Shop flags** – badge, account privacy and whether the account sells on TikTok Shop
- **Business category** – the category a business account picked, such as Shopping & Retail

⚡ No login is used: it reads only what a logged-out visitor sees, and profiles that don't exist or repeat are skipped without a charge.

***

### Use cases 💡

- **Influencer marketer** — check follower count, likes and verified badge before sending an offer.
- **Agency analyst** — compare reach and video counts across a creator shortlist in one table.
- **Brand team** — track competitors' follower counts weekly with a scheduled run.
- **E-commerce scout** — find TikTok Shop sellers and their business category in a creator list.
- **AI agent builder** — feed creator bios and counts into a RAG index as profile context.

Building an AI agent? [Connect TikTok User Profile Scraper over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

- **Six creators, one run, no login.** A recorded run read 6 profiles from usernames, a user ID and profile links and saved 6 rows in 8.4 seconds on a direct connection, with the default 0.75-second pause between profiles.
- **The real numbers behind each creator.** A recorded row for Sephora came back with 2,481,566 followers, 470 following, 323 friends, 40,112,374 likes, 2,790 videos, the TikTok Shop seller flag and the Shopping & Retail category.
- **Three ways to list creators, 73 fields per row.** Usernames, numeric user IDs and profile links can be mixed in one run, and every row keeps the same 73-field layout.

***

### ⬇️ Input

![TikTok User Profile Scraper input: usernames, user IDs and profile URLs](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/e-tiktok-user-profile-input.webp)

The Actor accepts TikTok usernames, numeric user IDs and profile links, each as a list; no single field is required, but at least one entry in one of the three lists is needed or the run stops with an input error. Pacing, retries and proxy settings are optional.

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `usernames` | No (one of the three lists needed) | array of strings | TikTok usernames, with or without @, one per entry. Prefilled with `nike`. | `["nike", "sephora", "@khaby.lame"]` |
| `userIds` | No | array of strings | Numeric TikTok user IDs (digits only). An ID that belongs to no account returns no row. Prefilled with `208464585232822272`. | `["6614519312189947909"]` |
| `urls` | No | array of strings | TikTok profile links, https:// optional. Links to a single video or photo are skipped. Prefilled with `https://www.tiktok.com/@nickiminaj`. | `["https://www.tiktok.com/@zachking"]` |
| `requestGapMs` | No | integer | Pause in milliseconds before each next profile, plus a small random extra. Minimum 0, default 750. | `750` |
| `maxRetries` | No | integer | Extra tries for one request after a network error. Minimum 0, default 3. | `3` |
| `proxyConfiguration` | No | object | Apify Proxy (groups and country) or your own proxy URLs, used when a direct request returns no profile data; residential proxies are tried after that. Turn it off to use direct requests only. Prefilled with Apify Proxy on. | `{"useApifyProxy": true}` |

#### Free plan limits

Users on the Apify free plan can fetch up to 20 profiles per run (all usernames, user IDs and URLs together) and 200 profiles per month. When the limit is reached, the run finishes successfully with a status message explaining the limit. Upgrade to any paid Apify plan to remove these limits.

#### Example input

This is the exact input of the recorded run (6 profiles → 6 rows in 8.4 seconds):

```json
{
  "usernames": ["nike", "sephora", "@khaby.lame"],
  "userIds": ["6614519312189947909"],
  "urls": [
    "https://www.tiktok.com/@nickiminaj",
    "https://www.tiktok.com/@zachking"
  ],
  "requestGapMs": 750,
  "maxRetries": 3,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

***

### ⬆️ Output

![TikTok User Profile Scraper output: one JSON row per profile with follower_count, signature, aweme_count and verified](https://api.apify.com/v2/key-value-stores/WYkyEfqs10huyXYxr/records/e-tiktok-user-profile-output.webp)

Every profile is one typed, normalized JSON item with the same 73 keys on every run, and you can export the dataset as JSON (default), CSV or Excel. There are no summary or error rows: a profile that can't be read simply adds no row.

#### Example output

An excerpt of a recorded row (avatar link shortened; values as returned):

```json
{
  "account_type": 3,
  "ad_virtual": false,
  "avatar_168x168": null,
  "avatar_300x300": null,
  "avatar_larger": {
    "uri": "tos-alisg-avt-0068/smg71630d66b7a573be2525c01e74f615fe",
    "url_list": ["https://p16-common-sign.tiktokcdn.com/tos-alisg-avt-0068/smg71630d66b7a573be2525c01e74f615fe~tplv-tiktokx-cropcenter:1080:1080.jpeg"],
    "url_prefix": "https://p16-common-sign.tiktokcdn.com/"
  },
  "aweme_count": 2790,
  "bio_secure_url": "https://www.tiktoklinksafety.eu/link/v2?aid=1233&lang=en&scene=bio_url&target=https%3A%2F%2Fwww.sephorasquad.com",
  "bio_url": "https://www.sephorasquad.com",
  "biz_account_info": {
    "added_contact_and_link_list": null,
    "android_download_app_link": null,
    "coupon_list": null,
    "ios_download_app_link": null,
    "leads_gen": { "action_name": null, "business_data": null, "has_leads_gen": null, "page_id": null, "schema_url": null },
    "permission_list": null,
    "rba_user_info": { "company_name": null }
  },
  "category": "Shopping & Retail",
  "favoriting_count": 0,
  "follower_count": 2481566,
  "following_count": 470,
  "friend_count": 323,
  "is_private": false,
  "nickname": "Sephora",
  "privacy_setting": { "following_visibility": 1 },
  "profile_url": "https://www.tiktok.com/@sephora",
  "sec_uid": "MS4wLjABAAAAdxmNUHgThYKTEjbjcDdCoDOx_4n9BF8v1RMSLr3_jML_op7ckplmU-72dpUoF-J0",
  "signature": "We belong to something beautiful.",
  "signature_language": "en",
  "total_favorited": 40112374,
  "tt_seller": true,
  "uid": "279484737629323264",
  "unique_id": "sephora",
  "verified": true,
  "visible_videos_count": 2790,
  "with_commerce_entry": true,
  "scrapedAt": "2026-10-03T05:15:14.090573+00:00"
}
```

The full row also carries the medium and thumbnail avatars, share info, tab settings and the fields TikTok keeps from visitors (those are null).

***

### How does it work?

You don't need a TikTok account. For each profile, the Actor reads the public data any logged-out visitor can see, with plain HTTP requests and no browser. Profiles are read one after another with a short pause, because TikTok shows a verification page when profiles are requested too quickly; when that happens the Actor waits and tries once more.

If a direct request still returns no profile data, the run retries through your proxy and then through up to 3 residential proxy IPs, and keeps using residential proxies for the rest of the run once they work. A profile that doesn't exist is reported right away without proxy retries. It returns only publicly visible data and does not solve CAPTCHAs. Every row follows one fixed schema, and values TikTok does not show to visitors are null instead of guessed.

***

### How do you integrate TikTok User Profile Scraper into your stack?

It works with what you already use: the Apify REST API from any language, the Apify MCP server for AI agents, and no-code tools.

#### MCP integration for AI agents

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/tiktok-user-profile-scraper"
```

This connects your agent to the Apify MCP server with this Actor already registered as a tool your agent can call directly, no search or add-actor step needed. Sign in with your Apify account when asked. The command is for Claude Code; Cursor and Windsurf connect to the same URL in their MCP settings.

#### No-code tools (n8n, Make, LangChain)

**n8n:** add the Apify node, choose **Run an Actor** and pick this Actor with your list of usernames. Its dataset items flow into the next node, such as Google Sheets or a CRM.

**Make:** add the Apify app's **Run an Actor** module with this Actor and your input, then **Get Dataset Items** to pass the profiles on. Map the username and follower count into any later module.

**LangChain:** install `langchain-apify` and load a finished run's dataset with `ApifyDatasetLoader`. Map the bio to the document content and the username and follower count to metadata.

***

### Is it legal to scrape TikTok data?

Scraping publicly available TikTok data is generally legal. TikTok User Profile Scraper returns only publicly available data: the profile details any visitor sees without logging in. Names, bios, avatars and follower numbers of individual creators are personal data under the GDPR, so while scraping public data is generally permissible, storing and using it must comply with local data-protection law. This is not legal advice. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does TikTok User Profile Scraper return?

The top five are the follower count, total likes, video count, bio and verified badge. See [the data fields section](#what-data-can-i-extract-with-tiktok-user-profile-scraper) for the full list.

#### Does TikTok User Profile Scraper require a TikTok account or login?

No. Only public profile data is extracted, and the input has no login, cookie or API-key field. No credentials needed.

#### How fast does TikTok User Profile Scraper run?

A recorded run read 6 profiles in 8.4 seconds on a direct connection with the default 0.75-second pause; each profile itself took about half a second. Data is fetched live on every run, not cached.

#### What happens if a profile is private or doesn't exist?

A private profile still returns a row with its counts, bio and badge, and the private flag set to true. A username or ID that doesn't exist, was removed or is banned adds no row, is not charged and is logged as a failure; links to a single video or photo and repeated profiles are skipped. In your code, compare the usernames you sent with the usernames in the dataset to find the ones that failed.

#### Can I scrape multiple TikTok profiles at once?

Yes. Put as many usernames, user IDs or profile links as you need in one run; they are read one after another, and the same creator listed twice is saved once.

#### Does TikTok User Profile Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — this Actor is available as an MCP tool through the Apify MCP server. Register the server in Claude Code with the command below (Cursor and Windsurf use the same URL), with this Actor preloaded as a tool the agent can call directly.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/tiktok-user-profile-scraper"
```

Any agent that can call an HTTP endpoint can also use the Apify REST API directly, so it doubles as a TikTok user info API for your own code.

#### Does TikTok User Profile Scraper return data in a format LLMs can use directly?

Yes. Every row is typed, normalized JSON with consistent field names. No HTML parsing, no selectors: pass it straight to an LLM, index it into a vector store, or feed it to an agent tool with no transformation step.

#### What happens when TikTok changes its layout or updates its anti-bot system?

The Actor is maintained, and when TikTok changes, your calls keep returning the same JSON schema with no changes on your end. It also recognises TikTok's verification page and a missing profile instead of returning an empty row, retries the verification page, and falls back to your proxy and residential proxies when a direct request returns nothing. A profile that still can't be read is logged and skipped, and the run keeps the rows it already has.

#### Can I use TikTok User Profile Scraper without managing proxies or browser infrastructure?

Yes. Proxy fallback and retries run on the Actor's side, and no browser is needed because it works over plain HTTP. You send one request and get structured JSON back; it does not solve CAPTCHAs.

#### Which TikTok profile fields work best for AI training data and RAG indexing?

For RAG: the bio, display name, business category and bio link, with the username and profile URL as metadata. For training data: the follower, following, friend, like and video counts and the verified, private and TikTok Shop flags. All fields are typed primitives (strings, integers, booleans), with null only where TikTok sends nothing; no normalization needed. That makes it a handy TikTok profile data extractor, and a way to scrape TikTok profiles for a TikTok influencer scraper or TikTok follower count scraper dataset.

***

### Your feedback

Found a bug or missing a field? Let us know. Include the input you used and the run's log so the problem can be reproduced.

# Actor input Schema

## `usernames` (type: `array`):

One username per line (examples: nike, @nike). Leave empty if you use user IDs or links instead. Free plan: up to 20 profiles per run (all usernames, user IDs and URLs together) and 200 per month; paid plans have no limit.

## `userIds` (type: `array`):

Numeric TikTok user IDs, one per line (digits only). An ID that belongs to no account returns no row and is not charged.

## `urls` (type: `array`):

TikTok profile links such as https://www.tiktok.com/@nike. Links to a single video or photo are skipped because they are not profiles.

## `requestGapMs` (type: `integer`):

Milliseconds to wait before each next profile (a small random extra is added). 750 = about 0.75 s. Set 0 for no pause; TikTok may show a verification page when profiles are fetched too quickly.

## `maxRetries` (type: `integer`):

How many extra times one request is retried after a network error (timeout, dropped connection) before the next connection option is tried. 0 = no extra tries. Default 3.

## `proxyConfiguration` (type: `object`):

Apify Proxy (pick groups and country) or your own proxy URLs, used when a direct request returns no profile data. Turn the proxy off to use direct requests only.

## Actor input object example

```json
{
  "usernames": [
    "nike"
  ],
  "userIds": [
    "208464585232822272"
  ],
  "urls": [
    "https://www.tiktok.com/@nickiminaj"
  ],
  "requestGapMs": 750,
  "maxRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

All scraped items in the Actor's default dataset.

# 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 = {
    "usernames": [
        "nike"
    ],
    "userIds": [
        "208464585232822272"
    ],
    "urls": [
        "https://www.tiktok.com/@nickiminaj"
    ],
    "requestGapMs": 750,
    "maxRetries": 3,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialdataapi/tiktok-user-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 = {
    "usernames": ["nike"],
    "userIds": ["208464585232822272"],
    "urls": ["https://www.tiktok.com/@nickiminaj"],
    "requestGapMs": 750,
    "maxRetries": 3,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("socialdataapi/tiktok-user-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 '{
  "usernames": [
    "nike"
  ],
  "userIds": [
    "208464585232822272"
  ],
  "urls": [
    "https://www.tiktok.com/@nickiminaj"
  ],
  "requestGapMs": 750,
  "maxRetries": 3,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call socialdataapi/tiktok-user-profile-scraper --silent --output-dataset

```

## MCP server setup

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