# TikTok Profile Videos API (`truefetch/tiktok-profile-videos-api`) Actor

Collect a requested ceiling of Videos or Reposts from one TikTok username/profile, with one fixed 83-field source row per resolved post, optional bounded comments, and KVS image copies.

- **URL**: https://apify.com/truefetch/tiktok-profile-videos-api.md
- **Developed by:** [TrueFetch](https://apify.com/truefetch) (community)
- **Categories:** Social media, Videos, Automation
- **Stats:** 26 total users, 1 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.10 / 1,000 videos

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/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 Video collects source-available posts from one creator's Videos or Reposts tab. Each resolved post becomes a fixed 83-field Dataset row with engagement snapshots, media and music metadata, creator context, optional comments, and best-effort image copies. Despite the product name, it is not a direct single-video lookup.

- Request one TikTok username/profile and one content tab per run.
- Receive up to `max_videos` rows; private, blocked, or unavailable sources can return fewer or none.
- Bound comments plus replies with one total `max_comments` ceiling per video row.
- Treat counts, labels, flags, URLs, comments, and tab availability as changing source observations.

[Open the Actor](https://console.apify.com/actors/KdZEBj7bgFgCh2Mg1/input), then use the [Apify API](https://docs.apify.com/api/v2) or [MCP integration](https://docs.apify.com/integrations/mcp). Review sensitive comments and all rights-related fields before reuse.

### What does TikTok Profile Video do?

The Actor accepts a username, `@username`, or TikTok profile URL and requests either the Videos or Reposts tab. Every candidate is resolved into a post-level row. A successful row contains 83 top-level keys covering provenance, post identity and timing, text, engagement counters, media properties, audio metadata, creator values, source labels, SEO fields, and a bounded comments array.

The input is normalized to a creator username. Supplying a URL that includes `/video/{id}` or `/photo/{id}` does not preserve that exact post target; the trailing path is removed and the selected creator tab is processed. Use TikTok Video Downloader when the goal is one exact post file or URL.

This Actor does not promise a complete account archive, permanent ordering, every repost, all comments, follower rosters, contacts, recommendation-system explanations, or media rights. A run can terminate cleanly with no rows when the profile is private, the tab is unavailable, source requests fail, no candidate is usable, or post-level processing cannot finish.

### How do I run TikTok Profile Video?

Provide all four required inputs. Start small with one video and zero comments to verify the creator route and basic row before adding comment work.

```json
{
  "tiktok_url": "https://www.tiktok.com/@tiktok",
  "content_type": "Videos",
  "max_videos": 1,
  "max_comments": 1
}
```

Wait for a terminal status and inspect the default Dataset. A one-row baseline for `@tiktok` produced exactly 83 top-level keys, one comment object, and three stored image files. That proves one execution path only; it does not guarantee identical fields are non-empty, the same post remains first, comments stay available, or image downloads succeed later.

Keep the run ID, normalized creator, tab, requested ceilings, Dataset ID, KVS ID, actual row/comment counts, and `processed_at`. Compare Videos and Reposts separately because their routes and availability differ. Retry transient failures with a limit and backoff instead of polling continuously.

### What data does TikTok Profile Video return?

The fixed row begins with `processor`, `processed_at`, post `id`, resolved `url`, Unix `created_time`, and ISO `created_at`. Post text and state include description, language, review/comment/share/repost controls, advertisement/original/official/private/secret/e-commerce/pinned flags, and duet/stitch settings.

Engagement fields are `play_count`, `like_count`, `comment_count`, `share_count`, `collect_count`, and `repost_count`. Media fields include byte size, format, bitrate, codec, cover, duration, height, width, quality, caption state, original-audio flag, and photo-post images. Hashtags, mentions, anchors, location text, music details, creator profile values, SEO strings/arrays, and nested comments complete the 83-key envelope.

```json
{
  "processor": "https://apify.com/truefetch/tiktok-profile-video?fpr=aiagentapi",
  "processed_at": "2026-07-24T01:49:05+00:00",
  "id": "7665823355194363167",
  "url": "https://www.tiktok.com/@tiktok/video/7665823355194363167",
  "description": "Source post caption",
  "play_count": 314900,
  "like_count": 2205,
  "comment_count": 185,
  "author_name": "tiktok",
  "quality_score": "71.77",
  "comments": [
    {
      "id": "example-comment-id",
      "father_id": "0",
      "name": "viewer",
      "text": "Source comment text",
      "language": "en",
      "created_at": "2026-07-23T23:30:51+00:00",
      "like_count": 1,
      "reply_count": 1,
      "score": "0.001617",
      "is_pinned": false,
      "is_author_liked": false,
      "status": "visible"
    }
  ]
}
```

All 83 keys exist in a written row, but values can be empty, zero-like, null, or empty arrays. `quality_score` is raw source text. `category` and `recommend_type` are local labels mapped from numeric source values and can fall back to `other` or `unknown`. They are not verified rankings or official algorithm explanations.

### What inputs does TikTok Profile Video accept?

`tiktok_url` identifies one creator. `content_type` is exactly `Videos` or `Reposts`. `max_videos` is an integer from 1 to 10,000 in the schema, and `max_comments` is an integer from 0 to 10,000. Non-paying users are silently limited by runtime to 10 for each ceiling.

Both limits are maxima, not guarantees. `max_comments` covers the combined deduplicated comments and replies retained within each row. It is not a limit per thread and it does not change the source's `comment_count`. Set it to zero when comments are unnecessary or when testing whether tab/post collection works independently.

The selected tab follows source-returned order. Pinned items, page changes, account changes, unavailable pagination, and route behavior can alter composition. Do not describe Videos as guaranteed original-only or permanently newest-first data.

### What platforms or markets does TikTok Profile Video support?

The contract targets public TikTok creator profiles accessible through TikTok's web surfaces. There is no country selector, locale selector, login input, cookie input, hashtag search, keyword discovery, or multi-profile array.

Public does not mean continuously available. Regional behavior, consent pages, anti-bot responses, account privacy, deleted posts, unavailable Reposts, experiments, and markup/API changes can reduce data or produce zero rows. Country and residence are not inferred from tagged locations, language fields, or creator biography text.

### Why use TikTok Profile Video?

The fixed 83-key envelope simplifies ingestion compared with raw pages. Each row keeps a source URL and observation time, and media/creator context travels with the post. The bounded comment option lets a workflow choose between post-only collection and a small sample of user discussion.

The contract also prevents easy analytical mistakes. `comment_count` is a changing source total while `comments.length` is the fetched sample. `author_videos` is a creator counter repeated on every row, not this run's row count. Stored KVS images are temporary workflow artifacts, not proof of ownership. Music commerce, copyright, original, official, and verified flags are source values rather than TrueFetch certifications.

### Who is TikTok Profile Video for?

Social analysts can observe post-level engagement for a known creator. Editorial teams can review captions, mentions, hashtags, and audio context. Data engineers can normalize creator tabs into a repeatable schema. Researchers can build their own time series from timestamped observations. AI agents can request a small, bounded sample and cite the source post URLs.

It is not suitable as the sole basis for employment, credit, safety, identity, moderation, eligibility, or licensing decisions. Comments can contain inaccurate, offensive, disputed, or personal information. Human review and independent evidence are required for consequential conclusions.

### How do I use TikTok Profile Video via API or MCP?

Use public name `truefetch/tiktok-profile-video` or Actor ID `KdZEBj7bgFgCh2Mg1`. Fetch current details, start the run, wait for completion, then retrieve items using the returned default Dataset ID.

```json
{
  "actor": "truefetch/tiktok-profile-video",
  "input": {
    "tiktok_url": "@tiktok",
    "content_type": "Videos",
    "max_videos": 1,
    "max_comments": 0
  },
  "runOptions": {
    "memoryMbytes": 256,
    "timeoutSecs": 180,
    "maxTotalChargeUsd": 0.1
  }
}
```

Some MCP account plans can read Actor details and run storage but cannot directly start public Actors. In that case, start the same Build through an authorized API account and use MCP to read the run and Dataset. Do not report that fallback as direct MCP execution.

The KVS can contain `INPUT`, cover, music-cover, author-avatar, and photo-post image files named from the post ID. These are best-effort artifacts. Missing keys do not invalidate an otherwise written row, and a KVS URL does not grant republication rights.

### How much does TikTok Profile Video cost?

Repository pricing is pay per event. Actor Usage is `$0.00001`, Actor Start is `$0.01`, Video is charged once per written Dataset row, and Comment is charged once per written row whose returned comments array is non-empty.

| Tier | Video | Comment |
|---|---:|---:|
| Free | $0.00350 | $0.00100 |
| Bronze | $0.00338 | $0.00097 |
| Silver | $0.00327 | $0.00093 |
| Gold | $0.00315 | $0.00090 |
| Platinum | $0.00315 | $0.00090 |
| Diamond | $0.00315 | $0.00090 |

At Free-tier event prices, one row with at least one comment has `$0.01450` in Start, Video, and Comment events before usage. One row with no returned comments has `$0.01350`. Ten nested comments in one row still create one Comment event, not ten. A no-row run can still incur Start and resource usage.

Check live Apify pricing before production use. Metadata can synchronize at a different time from a new Build, and resource usage varies with limits, source latency, comments, and image downloads.

### How does TikTok Profile Video compare with alternatives?

Manual profile review preserves page presentation but is difficult to reproduce and compare. A general browser scraper provides control but requires tab navigation, pagination, parsing, media storage, comment sampling, and schema maintenance. A dedicated downloader is better for one known post file. A transcript Actor is better when speech text is the primary output.

Choose this Actor when the input is one known creator and the desired output is a bounded set of structured post observations. Choose discovery tools for keyword or hashtag search, and keep different source contracts separate until identity matching has been reviewed.

### What are the limits and troubleshooting steps?

If validation fails, provide a non-empty username/profile, exact `Videos` or `Reposts`, `max_videos >= 1`, and `max_comments >= 0`. A direct post URL is reduced to its creator, so switch tools when exact-post behavior is required.

For zero rows, check profile privacy, selected tab, terminal status, logs, Dataset count, and source availability. Try `Videos`, one row, and zero comments to isolate basic collection. If that succeeds, add comments or test Reposts separately. For missing KVS images, inspect the original source media URLs and KVS keys without assuming media failure changed the Dataset row.

Preserve dynamic counters and empty values. Do not replace a missing source response with zero, treat a locally mapped label as official, or infer deletion from a single unavailable run.

### FAQ

#### Can I target one exact TikTok video?

No. The input is normalized to a creator username. Use TikTok Video Downloader for an exact post target.

#### Are the returned posts complete and newest first?

No guarantee is made. The result is bounded by the request and source route, and pinned or unavailable items can affect order and coverage.

#### Why is `comment_count` larger than the comments array?

The first is a source counter. The array is a requested and source-available sample, including replies, up to `max_comments` total.

#### Does a non-empty comments array charge per comment?

No. The runtime creates one Comment event for that video row, regardless of array length.

#### Can I rely on music or verification flags?

Only as source observations. They are not rights clearance, ownership proof, or independent identity verification.

### Related TrueFetch Actors

- [TikTok Video Downloader](https://apify.com/truefetch/tiktok-video-downloader?fpr=aiagentapi) handles a known individual post when media delivery is required.
- [Video To Text](https://apify.com/truefetch/video-to-text?fpr=aiagentapi) converts supported media into text under a separate contract.
- [TikTok Live Recorder](https://apify.com/truefetch/tiktok-live-recorder?fpr=aiagentapi) targets live-stream capture rather than profile-tab post rows.

These Actors have different inputs, outputs, prices, and rights considerations. Shared usernames or URLs do not make their results interchangeable.

### Support and last updated

For support, share the run ID, redacted creator username, selected tab, requested and returned video/comment counts, terminal status, Dataset ID, KVS key count, and affected fields. Never share Apify tokens or unnecessary personal data. Contact the [TrueFetch group](https://t.me/TrueFetch) or [API support](https://t.me/AiAgentApi).

Last reviewed: July 24, 2026. The verified contract is one creator tab, up to the requested ceiling, fixed 83-key rows, optional 12-key comment objects, best-effort stored images, and explicit zero-row/source variability. Recheck live pricing and availability before production use.

# Actor input Schema

## `tiktok_url` (type: `string`):

TikTok username or profile URL; any trailing video/photo path is reduced to the creator username, so this is not a direct single-video lookup

## `content_type` (type: `string`):

Profile tab to request: Videos or Reposts; rows follow source availability and returned tab order, and Reposts can be unavailable

## `max_videos` (type: `integer`):

Requested maximum rows from the selected tab; fewer or zero can be returned, and non-paying users are limited by runtime to 10

## `max_comments` (type: `integer`):

Requested maximum total comments plus replies nested in each returned video row; fewer can be available, 0 skips comments, and non-paying users are limited to 10

## Actor input object example

```json
{
  "tiktok_url": "https://www.tiktok.com/@mrbeast",
  "content_type": "Videos",
  "max_videos": 1,
  "max_comments": 1
}
```

# Actor output Schema

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

Resolved TikTok post rows written to the 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 = {
    "tiktok_url": "https://www.tiktok.com/@mrbeast",
    "content_type": "Videos",
    "max_videos": 1,
    "max_comments": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("truefetch/tiktok-profile-videos-api").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 = {
    "tiktok_url": "https://www.tiktok.com/@mrbeast",
    "content_type": "Videos",
    "max_videos": 1,
    "max_comments": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("truefetch/tiktok-profile-videos-api").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 '{
  "tiktok_url": "https://www.tiktok.com/@mrbeast",
  "content_type": "Videos",
  "max_videos": 1,
  "max_comments": 1
}' |
apify call truefetch/tiktok-profile-videos-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,truefetch/tiktok-profile-videos-api"
        }
    }
}

```

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/KdZEBj7bgFgCh2Mg1/builds/MlC1XLyqcXIa9ALE7/openapi.json
