# TikTok Profile Scraper – Bios, Counts & Business Data (`scrapingmonkey/tiktok-profile-details-scraper`) Actor

Extract public TikTok profiles by username. Get bios, follower counts, likes, avatars, links, verification, account flags, and available business details in one row per profile.

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

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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?

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

Build a public TikTok account dataset from a list of usernames. **TikTok Profile Scraper** collects bios, audience counts, profile links, avatars, verification, and available business details in one row per account.

Use it to qualify creators, enrich existing records, or compare repeated profile snapshots. No TikTok login or cookies are required, and each result keeps the submitted username with an explicit status.

| At a glance | Details |
| --- | --- |
| 📥 Input | Plain TikTok usernames, without @ or profile URLs |
| 📤 Output | Identity, bio, audience counts, links, avatars, account flags, and business fields |
| 🔐 Login required | No |
| ⚡ Processing | Up to 5 profiles concurrently with automatic retries |
| 💾 Delivery | One dataset row per unique valid username |

### What the TikTok profile scraper extracts 🔎

The Actor reads the public details exposed for a known TikTok account. It returns profile-level information rather than a list of the account's posts or followers.

- User ID, username, display name, profile URL, and avatar sizes
- Bio text, published bio link, and reported region
- Follower, following, total-like, video, friend, and liked-item counts when exposed
- Verification, privacy, business, seller, and other available account flags
- Public business category, website, download link, and cooperation flag
- Available creation and name-update timestamps, account settings, and live-room indicator

Business fields depend on what the account publishes. There are no email or phone-number fields in this output.

### How to scrape TikTok profile details 🚀

1. Prepare the TikTok usernames you want to inspect.
2. Remove any leading @ and profile URL prefix.
3. Add the plain usernames to `inputList` and start the Actor.
4. Check `status`, then export the profile fields needed for your workflow.

```json
{
  "inputList": [
    "scout2015"
  ]
}
```

Usernames may contain letters, digits, periods, and underscores, and must be 1–24 characters long.

### TikTok profile data fields and output 📦

| Field group | Included data |
| --- | --- |
| Identity | ID, username, display name, profile URL, and avatar URLs |
| Audience | Followers, following, total likes, videos, friends, and liked-item count |
| Bio and links | Bio text, bio link, region, and available business website |
| Account and business | Verification, privacy, seller and business flags, category, and settings |
| Dates and live state | Available creation or name-update dates, live flag, and room ID |

Complete illustrative success item; these fictional values show the output structure and are not a live result:

```json
{
  "input": "trailjournal",
  "status": "success",
  "avatar_large": "https://example.com/trail-journal-large.jpg",
  "username": "trailjournal",
  "name": "Trail Journal",
  "profile_url": "https://www.tiktok.com/@trailjournal",
  "id": "7123456789012345678",
  "sec_uid": "",
  "bio": "Weekend walks, quiet places, and practical trail notes.",
  "bio_link.url": "https://example.com/trail-journal",
  "bio_link.risk": 0,
  "region": "US",
  "followers": 18400,
  "following": 126,
  "likes": 286000,
  "videos_count": 94,
  "friends_count": 28,
  "digg_count": 0,
  "is_verified": false,
  "is_private": false,
  "is_business_account": true,
  "is_tiktok_seller": false,
  "is_live": false,
  "room_id": "",
  "created_at": "2023-11-14T22:13:20Z",
  "create_time": 1700000000,
  "username_updated_at": "",
  "username_modify_time": 0,
  "nickname_updated_at": "",
  "nickname_modify_time": 0,
  "avatar_medium": "https://example.com/trail-journal-medium.jpg",
  "avatar_thumb": "https://example.com/trail-journal-thumb.jpg",
  "open_favorite": false,
  "can_exp_playlist": false,
  "comment_setting": 0,
  "duet_setting": 0,
  "stitch_setting": 0,
  "download_setting": 0,
  "following_visibility": 0,
  "profile_embed_permission": 0,
  "is_ad_virtual": false,
  "is_embed_banned": false,
  "business.is_business_account": true,
  "business.category": "Travel",
  "business.category_button": "Travel",
  "business.website": "https://example.com/trail-journal",
  "business.download_link": "",
  "business.is_tiktok_seller": false,
  "business.show_star_atlas_cooperation": false
}
```

One profile is one row. The table and JSON contain the same scalar fields, with literal dotted keys such as `bio_link.url` and `business.category`.

On success, optional strings may be empty and missing numeric or boolean values become `0` or `false`. Empty dates mean no usable timestamp was provided. A live indicator is derived from an exposed room ID and should be treated as a snapshot. Failed rows preserve `input` and `status` and set the profile fields to `null`.

### Input requirements and coverage ⚙️

| Parameter | Type | Required | Rules |
|---|---|---|---|
| `inputList` | array of strings | Yes | At least one plain username; 1–24 letters, digits, periods, or underscores per username; no fixed batch-size maximum |

Leading and trailing spaces are removed before lookup. Do not include @, a profile URL, or a numeric user ID in place of the account's username. A digit-only value is interpreted as a username, not as an ID lookup.

Valid usernames are deduplicated case-insensitively. Invalid items receive individual failed rows. This Actor has no search, feed pagination, or follower-list setting.

### TikTok profile use cases 🎯

#### Creator qualification

Compare public bios, follower counts, verification, and business categories when reviewing a shortlist of creators.

#### Account enrichment

Add canonical profile links, IDs, avatar references, and public website details to records that already contain TikTok usernames.

#### Profile change tracking

Schedule a saved username list and compare exports for changes in bios, names, audience figures, or published links.

#### Brand account research

Review business and seller flags alongside public categories and websites to organize known brand accounts.

### Pricing and billable profile rows 💰

Check the Actor's **Pricing** tab for the current pricing model and rate.

Under dataset-item pricing, each saved success or failed row can be billable. Valid duplicate requests are processed once; invalid entries can each save a failed row. Automatic retries do not independently create extra dataset rows.

The profile's counts, business fields, and links remain in the same row; the Actor does not save posts or followers as additional items.

### TikTok Profile Details Scraper API and integrations 🔌

Use the Actor ID from the **API** tab as `$ACTOR_ID` and your Apify token as `$APIFY_TOKEN`.

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["scout2015"]}'
```

The request starts a run. Retrieve its dataset after completion, or connect an Apify schedule and webhook to repeat collection and trigger downstream work. Export to JSON, CSV, or Excel, or send selected fields to Google Sheets, Make, Zapier, or your own application.

### Reliability and limits ⚠️

Up to five profiles are processed concurrently, with retries for temporary request failures. The returned username must match the requested account. Missing profiles and requests that cannot be resolved produce failed rows.

Public profile access varies by account and location. A visible private-account flag does not grant access to private videos. Some counts, business fields, settings, or timestamps may be omitted by TikTok; their default values should not be interpreted as confirmed account properties. Avatar URLs and live-room indicators can change.

### Frequently asked questions ❓

#### Can I paste a full profile link?

No. Submit the plain username without @ or the TikTok URL prefix.

#### Does it return the account's videos or followers?

It returns available profile counts, not post records, follower identities, or a paginated feed.

#### Can it find an email address or phone number?

No. The output includes published bio and business links, but has no email or phone fields.

#### Are business fields available for every account?

No. Categories, websites, and other business fields depend on what TikTok exposes for that account.

#### Does is\_live guarantee an active broadcast?

It indicates that a room ID was present in the retrieved profile data. Treat it as a snapshot, not a continuous live-status check.

### Support, responsible use, and related actors 🛟

For help with a result, share the run ID and a safe public example input through the Actor's support channel. Keep tokens and other credentials out of support messages.

Use public data and media within the permissions and obligations that apply to your project, including privacy and copyright requirements.

# Actor input Schema

## `inputList` (type: `array`):

Add one TikTok username per item, without @ and without a profile URL.

## Actor input object example

```json
{
  "inputList": [
    "scout2015"
  ]
}
```

# Actor output Schema

## `profiles` (type: `string`):

One dataset row for every submitted TikTok username.

# 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 = {
    "inputList": [
        "scout2015"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/tiktok-profile-details-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 = { "inputList": ["scout2015"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/tiktok-profile-details-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 '{
  "inputList": [
    "scout2015"
  ]
}' |
apify call scrapingmonkey/tiktok-profile-details-scraper --silent --output-dataset

```

## MCP server setup

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