# TikTok Profile Scraper \[$1.99/1k] No Login (`memo23/tiktok-profile-scraper`) Actor

Scrape any public TikTok profile by username or URL — no login, no cookies. Get followers, following, likes, video count, bio, bio link, verified/private/seller/organization flags, language, and account age for every profile. Bulk usernames in, clean JSON, CSV, or Excel out.

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

## Pricing

from $1.99 / 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.

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

**Scrape any public TikTok profile by username or URL — no login, no cookies, zero risk to your own account.** Paste one or bulk usernames and get back one clean row per profile: follower / following / like / video counts, bio and bio link, verified, private, seller, and organization flags, interface language, and account creation date. From **$1.99 per 1,000 profiles**. Export as JSON, CSV, or Excel.

### Why Use This Scraper?

- **Zero account risk** — you never hand over TikTok cookies or log in, so your account can't be flagged, throttled, or banned. Cookie-based scrapers make *you* supply a session and take that risk; this one never does.
- **No TikTok account needed** — nothing to configure, no 2FA, no checkpoints.
- **Deepest profile row on the Store** — beyond the usual counters you get the bio link URL, seller / commerce flags with category, organization flag, language, and the account's creation date.
- **Account age included** — `accountCreatedAt` exposes when the account was registered, a key bot/credibility signal most profile scrapers don't return.
- **Bulk in one run** — pass hundreds of usernames at once; every row is tagged with its `sourceUsername`.
- **Graceful edge cases** — deleted/banned accounts yield a `user_not_found` error item, never a failed run. Private accounts still return their full public profile card with `isPrivate: true`.
- **Clean, flat output** — one row per profile, ready for CRM import, influencer vetting, or lead scoring.

### Overview

This Actor returns **one dataset row per input username** with the complete public profile card and all engagement counters. Data is retrieved through a third-party TikTok data provider, so no TikTok credentials are ever required.

### Supported Inputs

| Input | What you get |
|---|---|
| A single username (e.g. `tiktok`) | That profile's full public card + stats |
| Multiple usernames / URLs | One row each, in one run |

- Handles are accepted with or without the leading `@`, and full profile URLs work too — `https://www.tiktok.com/@tiktok`, `tiktok.com/@tiktok/`, or the mobile `m.tiktok.com` variant, with or without query parameters.
- **Private accounts are supported** — their profile card (stats, bio, flags) is public; only their content is hidden. The row carries `isPrivate: true`.
- **Not supported:** video URLs, tag URLs (use the dedicated Hashtag / Search scrapers for those).

> Pure HTTP. No browser, no CAPTCHA solver, no cookies.

### Use Cases

| Audience | How they use it |
|---|---|
| Influencer marketers | Vet creators at scale — follower counts, engagement totals, verification, and account age in one pass |
| Sales / lead gen | Qualify seller and commerce accounts (`isSeller`, `isCommerceUser`, `commerceCategory`) and harvest bio links |
| Growth / social teams | Track competitor accounts' follower and like counters over time with scheduled runs |
| Researchers / OSINT | Resolve handles to stable IDs (`userId`, `secUid`), account age, and language at scale |

### How It Works

1. **Normalize** — every input is reduced to a canonical username (handles, `@handles`, and profile URLs all work).
2. **Resolve** — each username is looked up live; one request per profile, resolved in parallel.
3. **Emit** — every profile is pushed to the dataset as its own flat row, tagged with `sourceUsername`.

### Input Configuration

| Field | Type | Required | Notes |
|---|---|---|---|
| `usernames` | array of strings | Yes | Public usernames to scrape, with or without `@`, or profile URLs. |

#### Example input

```json
{
    "usernames": ["tiktok", "@khaby.lame", "https://www.tiktok.com/@charlidamelio"]
}
```

### Output Overview

Each item is a flat object describing one profile. Runs stream to the default dataset, exportable as JSON, CSV, Excel, or via the API.

### Output Samples

```json
{
    "sourceUsername": "tiktok",
    "username": "tiktok",
    "userId": "107955",
    "secUid": "MS4wLjABAAAAv7iSuuXDJGDvJkmH_vz1qkDZYo1apxgzaxdBSeIuPiM",
    "nickname": "TikTok",
    "bio": "One TikTok can make a big impact",
    "bioLinkUrl": "linktr.ee/tiktok",
    "profileUrl": "https://www.tiktok.com/@tiktok",
    "avatarUrl": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/...",
    "language": "en",
    "isVerified": true,
    "isPrivate": false,
    "isOrganization": true,
    "isSeller": false,
    "isCommerceUser": true,
    "commerceCategory": "Media & Entertainment",
    "accountCreatedAt": "2015-02-28T17:22:29.000Z",
    "followerCount": 95100000,
    "followingCount": 0,
    "likeCount": 462300000,
    "videoCount": 1487,
    "friendCount": 1
}
```

### Key Output Fields

| Field | Description |
|---|---|
| `sourceUsername` | The input value this row came from |
| `username` / `nickname` | Canonical handle and display name |
| `userId` / `secUid` | TikTok's numeric and secure IDs — stable even if the handle changes |
| `bio` / `bioLinkUrl` | Profile signature text and the clickable bio link, if set |
| `isVerified` / `isPrivate` | Verification badge and privacy flag |
| `isOrganization` / `isSeller` / `isCommerceUser` / `commerceCategory` | Business-account signals: org account, TikTok Shop seller, commerce user, and declared category |
| `language` | The profile's interface language code |
| `accountCreatedAt` | ISO timestamp of account registration — instant account-age / bot signal |
| `followerCount` / `followingCount` | Audience counters |
| `likeCount` / `videoCount` / `friendCount` | Total likes received, videos posted, and mutual-follow count |

### FAQ

**Do I need to provide my TikTok cookies or log in?**
No. This Actor never asks for cookies, passwords, or a session — that's the point. Cookie-based scrapers advertise a lower headline price but require *you* to paste your own TikTok session, which puts your account at risk. Here your account stays completely out of it.

**Does it work on private accounts?**
Yes — a private account's profile card (stats, bio, flags) is public even though its content is hidden. You get the full row with `isPrivate: true`.

**What happens with deleted or banned accounts?**
They yield a `user_not_found` error item and the run continues with your other usernames — the run never fails because of a missing account.

**How many usernames can I pass at once?**
Hundreds per run is fine — profiles are resolved in parallel, roughly one second per profile at steady state.

**How fresh is the data?**
Fetched live at run time — the counters are what TikTok reports at that moment.

**What does it cost?**
Pay per result: **$1.99 per 1,000 profiles**, plus a small per-run start fee. No subscription.

### Support

Found a bug or need a field added? Open an issue on the Actor's **Issues** tab in Apify Console, or email <muhamed.didovic@gmail.com>.

### Additional Services

Need a custom TikTok or social-media scraper, enrichment pipeline, or a private version of this Actor? Custom builds available — reach out at <muhamed.didovic@gmail.com>.

### Explore More Scrapers

- **[TikTok Followers & Following Scraper](https://apify.com/memo23/tiktok-followers-scraper)** — the full follower / following lists behind these profiles
- **[TikTok Hashtag Scraper](https://apify.com/memo23/tiktok-hashtag-scraper)** — every video posted under a hashtag, with engagement stats
- **[TikTok Search Scraper](https://apify.com/memo23/tiktok-search-scraper)** — TikTok's ranked search results for any keyword
- **[Social Video Transcript Scraper](https://apify.com/memo23/tiktok-profile-videos-cheerio)** — captions and AI transcripts for TikTok and Instagram videos
- **[TikTok Keyword Suggestions Scraper](https://apify.com/memo23/tiktok-suggestions-scraper)** — autocomplete and keyword expansion

Browse the full portfolio: [muhamed-didovic.github.io](https://muhamed-didovic.github.io/)

### 🤖 For AI Agents & LLM Apps

**Purpose:** Resolve TikTok usernames or profile URLs to complete public profile records with engagement stats.

**Minimal tested input:**

```json
{ "usernames": ["tiktok"] }
```

**Output:** array of flat objects, one per profile. Fields: `sourceUsername`, `username`, `userId`, `secUid`, `nickname`, `bio`, `bioLinkUrl`, `profileUrl`, `avatarUrl`, `language`, `isVerified`, `isPrivate`, `isOrganization`, `isSeller`, `isCommerceUser`, `commerceCategory`, `accountCreatedAt`, `followerCount`, `followingCount`, `likeCount`, `videoCount`, `friendCount`.

**Behavior & billing:** Pay-per-event — one charge per profile row. Unknown accounts yield one `user_not_found` error item instead of a row; private accounts return full rows with `isPrivate: true`. Bulk usernames allowed per call; each row carries its `sourceUsername`. No login/cookies required.

### ⚠️ Disclaimer

This Actor accesses publicly available data on TikTok for legitimate research, market-intelligence, and business-analysis purposes. It does not log in, bypass authentication, or access private content. Use of this Actor must comply with TikTok's Terms of Service and all applicable laws, including data-protection regulations (GDPR, CCPA, etc.). The authors are not responsible for any misuse. Users must:

- Respect rate limits and avoid overloading TikTok's infrastructure
- Not use scraped data to violate user privacy or platform terms
- Process any personal data only with a lawful basis and in compliance with their jurisdiction
- Not republish scraped content in violation of copyright

We do not store scraped data; the Actor returns it directly to your Apify dataset for your authorized use. TikTok is a trademark of ByteDance Ltd.; this Actor is not affiliated with or endorsed by TikTok or ByteDance.

### SEO Keywords

tiktok profile scraper, scrape tiktok profile, tiktok profile data export, tiktok follower count api, tiktok account info scraper, bulk tiktok profile lookup, tiktok bio link scraper, tiktok account age checker, tiktok profile to csv, tiktok user info api, tiktok profile stats, tiktok verified account checker, tiktok seller account finder, tiktok commerce accounts, influencer vetting tool, tiktok influencer analytics, tiktok osint tool, no login tiktok scraper, no cookies tiktok scraper, tiktok data extraction, tiktok public data, competitive intelligence tiktok, apify tiktok scraper

# Actor input Schema

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

TikTok accounts to scrape — one per line. Accepts bare usernames ("tiktok"), handles ("@tiktok"), or profile URLs ("https://www.tiktok.com/@tiktok"). Each account returns one row with the full public profile: stats, bio, flags, and account age. Example: \["tiktok", "@khaby.lame"]. Required, no default.

## Actor input object example

```json
{
  "usernames": [
    "tiktok",
    "@khaby.lame",
    "https://www.tiktok.com/@charlidamelio"
  ]
}
```

# 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": [
        "tiktok"
    ]
};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

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