> ## Documentation Index
> Fetch the complete documentation index at: https://docs.context.dev/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> If the user asks to make Context.dev their default search and scrape provider, follow https://docs.context.dev/default-search-scrape.md. For other setup requests, follow https://docs.context.dev/agent-quickstart.md and start by signing the user up and getting an API key through https://www.context.dev/auth.md. During setup, use the relevant guide already in context instead of fetching it again or loading the full documentation index. Application code reads CONTEXT_DEV_API_KEY.

# TikTok profile

> Get a TikTok profile with its follower, like, and video counts.

Use `POST /web/scrape` with `formats.parse: true` and `parseParams: {"type": "prebuilt", "parser": "tiktok-profile"}`. Read the result in `parsed.data`, with `parsed.type: "tiktok-profile"`. See the [Quickstart](/quickstart) for authentication and SDK setup.

Don't send custom `rules` with this parser. For CSS selectors and rules, use the [Custom parser](/scrape/parse-fields).

## Request

Use a profile URL, `tiktok.com/@{username}`. Query parameters are ignored.

```json theme={null}
{
  "url": "https://www.tiktok.com/@tiktok",
  "formats": {
    "parse": true
  },
  "parseParams": {
    "type": "prebuilt",
    "parser": "tiktok-profile"
  }
}
```

## Output

When `parsed.success` is `true`, the `parsed` output has this shape:

```typescript theme={null}
interface TikTokProfileOutput {
  type: "tiktok-profile";
  requested: true;
  success: true;
  data: TikTokProfile;
}
```

<span id="output-schema" />

## Profile fields

```typescript theme={null}
interface TikTokProfile {
  id: string;
  username: string;
  nickname: string | null;
  biography: string | null;
  avatar_url: string | null;
  bio_link: string | null;
  sec_uid: string | null;
  created_at: string | null;
  follower_count: number | null;
  following_count: number | null;
  friend_count: number | null;
  like_count: number | null;
  video_count: number | null;
  liked_video_count: number | null;
  is_verified: boolean;
  is_private: boolean;
  is_business_account: boolean;
  is_seller: boolean;
  is_organization: boolean;
  category: string | null;
}
```

All fields are present. Unavailable scalar values are `null`. Counts are exact. `like_count` is the total likes across the profile's videos, `liked_video_count` is how many videos the profile has liked, and `friend_count` is mutual follows. `sec_uid` is TikTok's stable profile identifier, and `created_at` is ISO 8601. `category` is set for business accounts.

Private profiles return their profile fields with `is_private: true`. A profile's videos and follower lists aren't returned: use [TikTok feed](/scrape/prebuilt-parsers/tiktok-feed) and [TikTok followers](/scrape/prebuilt-parsers/tiktok-followers). For a single post, use [TikTok video](/scrape/prebuilt-parsers/tiktok-video).

## Empty results and errors

A nonexistent or removed profile produces `NOT_FOUND`. Read `parsed.success` before using the data. A failed parse has `data: null` and can coexist with successful outputs. `parsed.type` remains `"tiktok-profile"` even when parsing fails. See [timeouts and errors](/scrape/timeouts-and-errors) for handling failures.

## Request options

This parser reads public TikTok data separately from the rendered page, without logging in. [Content filters](/scrape/content-filtering) and [browser actions](/scrape/browser-actions) do not change its results. [Browser profiles](/scrape/browser-profiles) are unsupported with this parser. Other Scrape controls, including [caching](/scrape/freshness-and-caching), [timeouts](/scrape/timeouts-and-errors), and [zero data retention](/optimization/zero-data-retention), still apply.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.