# Best TikTok AI Transcript Extractor (`scraper-engine/best-tiktok-ai-transcript-extractor`) Actor

Best TikTok AI Transcript Extractor converts public TikTok videos into accurate text transcripts using AI. Extract spoken content for content research, SEO, repurposing, subtitles, keyword analysis, and audience insights without manually transcribing videos.

- **URL**: https://apify.com/scraper-engine/best-tiktok-ai-transcript-extractor.md
- **Developed by:** [Scraper Engine](https://apify.com/scraper-engine) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

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

### TikTok Transcript Extractor — AI Transcripts, Subtitles and Metadata

Best TikTok AI Transcript Extractor turns any public TikTok video URL into a structured JSON record: a full AI-generated transcript, word-level timestamped segments, ready-to-use SRT/VTT subtitle files, and 40+ creator and engagement fields — views, likes, follower counts, hashtags, music and more. Transcription runs locally with Whisper speech-to-text, so no third-party captioning API or account login is needed. Paste a URL, or a batch of them, and start a run to see it in action.

### 🎬 What is Best TikTok AI Transcript Extractor?

Best TikTok AI Transcript Extractor is an Apify Actor that takes TikTok video URLs and returns each video's spoken content as a clean AI transcript, alongside SRT/VTT subtitles, timestamped segments, and creator/engagement metadata — all as one structured JSON record per video. No TikTok account or login is required; it reads the same server-rendered page data any visitor's browser already receives. It's built for content researchers, social-media and localization teams, and developers or AI engineers who want TikTok speech turned into searchable, structured text without touching a browser.

### 🔓 What TikTok video data is publicly available to scrape?

Anyone who opens a public TikTok video in a browser, logged out, can see its caption, engagement counts, creator profile and spoken content — nothing about a public video is hidden behind an account wall.

| Data Category | Publicly Available (no login) | Restricted |
| --- | --- | --- |
| Caption, hashtags & spoken audio content | ✅ visible to any visitor; spoken audio is transcribed by this Actor via local Whisper | — |
| Engagement counts (views, likes, comments, shares, saves) | ✅ | — |
| Creator profile (username, display name, bio, verified badge, follower/heart/video counts) | ✅ | Full private-account details |
| Video technical specs, no-watermark playback URL & music/audio track metadata | ✅ | — |
| Location tag / point of interest (when the creator adds one) | ✅ when present | — |
| Public comments (pinned & creator's own) | ✅ best-effort | TikTok's anonymous comment endpoint occasionally rejects the request |
| Private, removed or region-locked videos | ❌ not accessible to any visitor | Owner or permitted region only |
| Full follower/following lists, direct messages | — | Login required |

Best TikTok AI Transcript Extractor only returns publicly visible data — what any visitor sees. Nothing behind a login wall.

### 📊 What data can I extract with Best TikTok AI Transcript Extractor?

Every processed video returns identity fields, quantitative engagement/creator stats, and the AI transcript, subtitles and media links themselves — 51 keys in total on a successful row.

#### 🪪 Video & creator identity

| Field Name | Description |
| --- | --- |
| `tiktokUrl` | The input URL, as submitted |
| `videoId` | TikTok's numeric video ID |
| `shareUrl` | Canonical `https://www.tiktok.com/@user/video/id` share link |
| `authorUsername` | Creator's `@handle` |
| `authorDisplayName` | Creator's display name |
| `authorId` | Creator's numeric TikTok user ID |
| `videoDescription` | Video caption text |
| `hashtags` | Comma-separated hashtags pulled from the caption |
| `textLanguage` | Detected original spoken/caption language |
| `createTime` | When the video was posted (UTC) |
| `locationCreated` | Country the video was created in, when TikTok reports one |
| `poiName` | Point-of-interest name, when tagged |
| `poiAddress` | Point-of-interest address, when tagged |
| `diversificationLabels` | TikTok's own content-category labels |
| `isAd` | Whether TikTok flags the video as paid/branded content |

#### 📈 Engagement & creator stats

| Field Name | Description |
| --- | --- |
| `viewsCount` | Play count |
| `likesCount` | Like count |
| `commentsCount` | Comment count |
| `sharesCount` | Share count |
| `collectCount` | Bookmark/save count (returned by TikTok as a string) |
| `followerCount` | Creator's follower count |
| `authorHeartCount` | Creator's total likes across all videos |
| `authorVideoCount` | Creator's total posted video count |
| `authorVerified` | Whether the creator has TikTok's verified badge |
| `authorBio` | Creator's profile bio text |
| `isOriginalSound` | Whether the audio track is an original sound |
| `videoHeight` / `videoWidth` | Video resolution in pixels |
| `videoDuration` | Video length in seconds |
| `fileSize` | Downloaded video file size in bytes |

#### 🤖 AI transcript, subtitles & media

| Field Name | Description |
| --- | --- |
| `transcript` | Full AI-generated transcript text |
| `segments` | Timestamped segments with per-word timestamps, confidence scores and speaker labels |
| `srtSubtitles` | Full SRT subtitle file, inline |
| `vttSubtitles` | Full WebVTT subtitle file, inline |
| `srtUrl` / `vttUrl` / `segmentsUrl` | Public key-value-store download links for the same SRT/VTT/segments content |
| `coverImageUrl` | Video thumbnail/cover image |
| `downloadUrl` / `downloadUrlNoWatermark` / `playUrl` | Direct video playback/download URLs |
| `musicTitle` / `musicAuthor` / `musicUrl` | The video's audio track title, artist and URL |
| `comments` | Video comments, pinned first (only populated when comment extraction is enabled) |
| `pinnedComments` | Just the pinned comments |
| `creatorComments` | Just the creator's own comments on their video |
| `status` | `success` or `error` |
| `errorMessage` | Why a video failed, when `status` is `error` |
| `scrapingDate` / `processedAt` | When the row was scraped / finished processing |
| `metadata` | Run metadata: run ID, Actor ID, origin, and this URL's position in the run |

#### 🤖 Add-on: Need additional TikTok data?

If you need TikTok posts scraped by profile, hashtag or search term rather than by direct link, pair this Actor with **TikTok Posts Scraper**. Chasing content by keyword instead of a URL you already have? **TikTok Keyword Search Scraper** covers that. Working across platforms too — **Instagram Transcript API & Profile Scraper - AI Video to Text** applies the same local-Whisper transcription approach to Instagram Reels.

### 🛠️ Why not build this yourself?

TikTok's own developer platform doesn't offer a public endpoint for pulling an arbitrary video's transcript, engagement counts or creator profile by URL — its official APIs are scoped to a connected user's own account or to vetted research partners, not to any public video you paste in. Building this in-house means reverse-engineering TikTok's server-rendered rehydration JSON, solving the SlardarWAF proof-of-work challenge TikTok's edge serves in place of the real page (a puzzle that can change shape without notice), standing up and maintaining a local Whisper speech-to-text pipeline, and rotating through no-proxy → datacenter → residential IPs the moment TikTok starts blocking — all before a single transcript is stored. Best TikTok AI Transcript Extractor already does all of that: it solves the WAF challenge in pure Python, escalates proxy tiers automatically with every escalation logged, and transcribes locally so there's no per-minute third-party captioning bill. You get a stable JSON schema and skip the ongoing burden of tracking TikTok's page-layout and anti-bot changes yourself.

### 🚀 How to use Best TikTok AI Transcript Extractor

No signup flow beyond an Apify account is required — open the Actor and run it from the Console.

1. Open **Best TikTok AI Transcript Extractor** on the Apify Store (or find it under Actors in your Apify Console) and click **Try for free** / **Start**.
2. Provide input — paste one link into `tiktokUrl` for a quick test, or add a list of links to `bulkUrls` to process several videos in one run. Neither field is schema-required, but the run needs at least one URL to do anything; without one it logs a warning and exits with no rows.
3. Optionally toggle `translateToEnglish` for cross-language transcripts and `includeComments` for pinned/creator comments, and tune `concurrency`, `requestDelay`, `maxRetries` or `proxyConfiguration` under Networking, Proxy & Retries.
4. Click **Start** and watch the run log — each video is transcribed and pushed to the dataset the moment it finishes, not just at the end of the run.
5. Open the **Output** tab and browse the Overview, Transcript & Subtitles, Segments, Creator Profile, Media & Music or Comments view, or download the full dataset as JSON or CSV.

#### How to scale to bulk TikTok video transcript extraction

`bulkUrls` accepts an array of TikTok video URLs — paste as many as you like, one per entry; duplicates are removed automatically so you're never charged twice for the same video. `concurrency` (1–10, default 4) controls how many of those videos are fetched and transcribed in parallel within that single run. There's no separate pagination or search step to configure — every URL in `tiktokUrl` and `bulkUrls` is queued and processed the same way.

### 💡 What can you do with TikTok video transcript data?

- A content researcher building a searchable video archive uses `transcript` and `hashtags` to index viral TikToks by topic without watching every clip.
- A social media manager tracking competitors uses `viewsCount`, `likesCount` and `authorUsername` to see which creators' hooks are actually landing, run over run.
- A localization team studying international creators uses `translateToEnglish` and `textLanguage` to fold non-English creators into one searchable English transcript dataset.
- A video editor repurposing content uses `srtSubtitles`/`vttSubtitles` and `downloadUrlNoWatermark` to auto-caption a clip and re-cut it for another platform without carrying over TikTok's watermark.
- An AI engineer building a RAG pipeline over TikTok content uses `segments` (with per-word timestamps) and `transcript` as chunked, citeable context an LLM agent can search and quote from directly.

Because every field returns as typed JSON, this dataset is also callable directly from an agent framework through the Apify MCP server — see Integrations below.

### 🛡️ How does Best TikTok AI Transcript Extractor handle rate limits and blocking?

By default every request goes out with no proxy at all, for maximum speed. If TikTok's edge rejects or blocks a request (HTTP 403/429, or serves its SlardarWAF "Please wait…" anti-bot challenge instead of the real page), the Actor automatically escalates: no proxy → Apify Proxy datacenter → Apify Proxy residential, retrying up to 3 extra times on residential with a fresh IP session per attempt. Once escalated to residential, the run stays there for every remaining video rather than dropping back down. The WAF challenge — a client-side proof-of-work puzzle — is solved in pure Python, no headless browser required, and each retry uses a brand-new cookie session up to `maxRetries` (1–10, default 3) attempts. If a video is permanently unavailable (private, removed or region-locked), the Actor reads that from TikTok's own status code and stops retrying it immediately rather than wasting attempts. If several videos in a row fail to even fetch, the run treats that as a connectivity/proxy issue and stops queuing new videos early — everything already collected stays safely in the dataset.

### ⬇️ Input

At least one of `tiktokUrl` or `bulkUrls` needs a value for a run to produce any rows; the schema itself marks no field as required.

| Parameter | Required | Type | Description | Example Value |
| --- | --- | --- | --- | --- |
| `tiktokUrl` | No | string | Single public TikTok video URL — full link, `vm.tiktok.com`/`vt.tiktok.com` short link, or mobile URL. | `"https://www.tiktok.com/@thatdudecancook/video/7649086431641521421"` |
| `bulkUrls` | No | array | One or more public TikTok video URLs to process in one run, one per entry; duplicates are removed automatically. | `["https://www.tiktok.com/@motivation_everyday80/video/7565659068153531669"]` |
| `translateToEnglish` | No | boolean | Translates `transcript`, `segments` and SRT/VTT subtitles to English regardless of the spoken language; caption/hashtags/music metadata stay in their original language. Default `false`. | `false` |
| `includeComments` | No | boolean | Also returns the video's `comments` (pinned first), plus `pinnedComments` and `creatorComments` shortlists. ⚠️ Best-effort — TikTok's public comment feed occasionally rejects anonymous requests; when that happens the video still succeeds, just with empty comment lists. Default `false`. | `true` |
| `proxyConfiguration` | No | object | Apify Proxy configuration. Defaults to no proxy (`useApifyProxy: false`); the Actor auto-escalates to datacenter, then residential, if TikTok blocks a request. A forced tier or custom proxy URLs are honored as-is. | `{ "useApifyProxy": false }` |
| `concurrency` | No | integer | How many videos to fetch and transcribe in parallel. Minimum `1`, maximum `10`, default `4`. | `4` |
| `requestDelay` | No | number | Delay in seconds (plus jitter) before every page fetch. Minimum `0`, maximum `10`, default `0.5`. | `0.5` |
| `maxRetries` | No | integer | How many times to retry a blocked/failed video, with a fresh session, before giving up. Minimum `1`, maximum `10`, default `3`. | `3` |

#### Example input

```json
{
  "tiktokUrl": "https://www.tiktok.com/@thatdudecancook/video/7649086431641521421",
  "bulkUrls": [
    "https://www.tiktok.com/@motivation_everyday80/video/7565659068153531669",
    "https://vm.tiktok.com/ZM6abc123/"
  ],
  "translateToEnglish": false,
  "includeComments": true,
  "proxyConfiguration": { "useApifyProxy": false },
  "concurrency": 4,
  "requestDelay": 0.5,
  "maxRetries": 3
}
```

### ⬆️ Output

Each run pushes one typed JSON record per video, with a stable field set and order across runs. Results are available as JSON or CSV from the Output tab or API, or as one of six focused dataset views (Overview, Transcript & Subtitles, Segments, Creator Profile, Media & Music, Comments) plus a Full record view with every field unfiltered. The generated SRT/VTT/segments files are also stored individually in the key-value store, linked from `srtUrl`, `vttUrl` and `segmentsUrl`.

#### Example output

```json
{
  "transcript": "If you wake up every day and obsess over one specific dream and put everything into achieving it, chances are you'll actually get there.",
  "segments": [
    {
      "id": 0,
      "text": "If you wake up every day and obsess over one specific dream",
      "start": 0.0,
      "end": 3.36,
      "language": "en",
      "speaker": "SPEAKER_00",
      "words": [
        { "word": "If", "start": 0.0, "end": 0.24, "score": 0.91, "speaker": "SPEAKER_00" }
      ]
    }
  ],
  "srtSubtitles": "1\n00:00:00,000 --> 00:00:03,360\nIf you wake up every day and obsess over one specific dream",
  "vttSubtitles": "WEBVTT\n\n1\n00:00:00.000 --> 00:00:03.360\nIf you wake up every day and obsess over one specific dream",
  "tiktokUrl": "https://www.tiktok.com/@thatdudecancook/video/7649086431641521421",
  "videoId": "7649086431641521421",
  "shareUrl": "https://www.tiktok.com/@thatdudecancook/video/7649086431641521421",
  "authorUsername": "thatdudecancook",
  "authorDisplayName": "That Dude Can Cook",
  "authorId": "6812345678901234567",
  "videoDescription": "5-minute garlic butter shrimp pasta #cooking #recipe #shrimp",
  "hashtags": "#cooking, #recipe, #shrimp",
  "coverImageUrl": "https://p16-sign-va.tiktokcdn.com/obj/tos-maliva-p-0068/cover.jpeg",
  "downloadUrl": "https://www.tiktok.com/aweme/v1/play/?video_id=7649086431641521421",
  "downloadUrlNoWatermark": "https://www.tiktok.com/aweme/v1/play/?video_id=7649086431641521421",
  "playUrl": "https://www.tiktok.com/aweme/v1/play/?video_id=7649086431641521421",
  "videoHeight": 1024,
  "videoWidth": 576,
  "videoDuration": 42.5,
  "fileSize": 3821904,
  "likesCount": 284100,
  "commentsCount": 1893,
  "sharesCount": 5602,
  "viewsCount": 4271900,
  "collectCount": "61200",
  "musicTitle": "original sound - That Dude Can Cook",
  "musicAuthor": "That Dude Can Cook",
  "musicUrl": "https://www.tiktok.com/music/original-sound-7649086431641521421",
  "isOriginalSound": true,
  "followerCount": 3200000,
  "authorHeartCount": 78500000,
  "authorVideoCount": 612,
  "authorBio": "Simple recipes anyone can cook. New video every day.",
  "authorVerified": true,
  "diversificationLabels": "Food, Cooking",
  "locationCreated": "US",
  "poiName": "",
  "poiAddress": "",
  "isAd": false,
  "textLanguage": "en",
  "comments": [
    { "text": "Pinning this recipe!", "author": "foodie_fan22", "likes": 412, "isPinned": true, "isCreator": false }
  ],
  "pinnedComments": [
    { "text": "Pinning this recipe!", "author": "foodie_fan22", "likes": 412, "isPinned": true, "isCreator": false }
  ],
  "creatorComments": [
    { "text": "Thanks for watching everyone!", "author": "thatdudecancook", "likes": 892, "isPinned": false, "isCreator": true }
  ],
  "srtUrl": "https://api.apify.com/v2/key-value-stores/AbC123XyZ/records/srt-7649086431641521421",
  "vttUrl": "https://api.apify.com/v2/key-value-stores/AbC123XyZ/records/vtt-7649086431641521421",
  "segmentsUrl": "https://api.apify.com/v2/key-value-stores/AbC123XyZ/records/segments-7649086431641521421",
  "scrapingDate": "2026-09-03",
  "createTime": "2026-08-30 14:22",
  "processedAt": "2026-09-03T09:55:54.645Z",
  "status": "success",
  "errorMessage": "",
  "metadata": {
    "runId": "aB3dE5fG7hI9kL",
    "actorId": "best-tiktok-ai-transcript-extractor",
    "origin": "APIFY_PLATFORM",
    "processingType": "tiktok-processing",
    "urlIndex": 1,
    "totalUrls": 2
  }
}
```

### ⚙️ How does it work?

Each request goes out through a Chrome-impersonated HTTP client, so no headless browser needs to launch. The video page's own server-rendered rehydration JSON is parsed directly out of the HTML — the same data TikTok sends any visitor's browser, with nothing signed or session-specific to reverse-engineer. If TikTok's edge answers with its SlardarWAF "Please wait…" challenge instead of the real page, the Actor solves the embedded proof-of-work puzzle in pure Python and retries in the same session. The downloaded video (or its original-sound audio, as a fallback) is then transcribed locally with faster-whisper. ⚠️ Transcription runs CPU-only (no GPU) on a fixed "base" model size — that's a deliberate speed/memory tradeoff, not something the input controls. Only data that's already publicly visible is ever returned, and output field names stay the same run to run regardless of how TikTok reshuffles its page layout.

### 🔌 Integrations

Best TikTok AI Transcript Extractor runs on the Apify platform, so it works with anything that can call Apify: a direct API call, an MCP-enabled agent, or a no-code automation tool.

#### 🐍 Calling Best TikTok AI Transcript Extractor programmatically

```python
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("<your-username>/best-tiktok-ai-transcript-extractor").call(
    run_input={
        "bulkUrls": ["https://www.tiktok.com/@thatdudecancook/video/7649086431641521421"],
        "translateToEnglish": False,
    }
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["transcript"])
```

Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.

#### 🤖 MCP integration for AI agents

Best TikTok AI Transcript Extractor is callable through the [Apify MCP server](https://mcp.apify.com), which exposes any Apify Actor as an MCP tool an agent can call directly — no custom wrapper needed. Point an MCP-enabled client such as Claude, Cursor, or Windsurf at that server and select this Actor to run it and pull the resulting dataset back into an agent's tool calls.

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

In n8n, use the HTTP Request node pointed at the Actor's `run-sync-get-dataset-items` endpoint to pull transcripts straight into a workflow. In Make, the equivalent HTTP module works the same way. In LangChain, load results with an Apify dataset loader (or `apify-client` directly) to turn each transcript row into a `Document` for a retrieval chain.

### ⚖️ Is it legal to scrape TikTok video transcripts?

Scraping publicly available TikTok video data for research, analytics or archival purposes is generally lawful — the data involved here is public and non-authenticated, exactly what Best TikTok AI Transcript Extractor returns: nothing behind a login, no private accounts, no authenticated endpoints. Because the output also includes creator and commenter identifiers — `authorUsername`, `authorDisplayName`, `authorBio`, comment author handles — it can qualify as personal data under GDPR and CCPA even though it's publicly posted. That doesn't make storing or reusing it automatically unlawful, but you do need a lawful basis for how you store and use it, and you remain responsible for complying with TikTok's own Terms of Service. Consult legal counsel if your use case involves bulk storage of personal data.

### ❓ Frequently asked questions

#### What TikTok video transcript fields does Best TikTok AI Transcript Extractor return?

The top fields are `transcript`, `segments`, `srtSubtitles`/`vttSubtitles`, `viewsCount`/`likesCount`, and `authorUsername`. See [What data can I extract](#-what-data-can-i-extract-with-best-tiktok-ai-transcript-extractor) above for the full 51-field breakdown.

#### Does Best TikTok AI Transcript Extractor require a TikTok account or login?

No. It reads TikTok's own server-rendered page data — the same thing a logged-out visitor's browser receives — so no TikTok account, cookie, or session token is ever needed.

#### How many TikTok videos can I extract in one run?

There's no fixed cap in the input schema — `bulkUrls` accepts as many URLs as you paste in, deduplicated automatically. `concurrency` (1–10, default 4) controls how many of them run in parallel at once.

#### What happens if a video is private, removed, or region-locked?

The row still appears in the dataset with `status: "error"` and a specific `errorMessage` describing TikTok's own status code, so every URL you submit is accounted for. The Actor detects this from TikTok's response and doesn't waste retries or proxy escalations on it, since no proxy tier can unlock a genuinely unavailable video.

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

Yes — add as many links as you want to the `bulkUrls` array (or combine it with a single `tiktokUrl`); every URL is queued and processed in the same run.

#### Does Best TikTok AI Transcript Extractor work with Claude, ChatGPT, and other AI agent tools?

Yes. It's reachable through the [Apify MCP server](https://mcp.apify.com) for MCP-enabled clients, and callable as a plain HTTP endpoint (via `apify-client` or `run-sync-get-dataset-items`) from any agent framework.

#### Does Best TikTok AI Transcript Extractor return data in a format LLMs can use directly?

Yes. Typed, normalized JSON with consistent field names across runs — no HTML parsing, no selectors. Pass `transcript` and `segments` straight to an LLM, index them into a vector store, or feed them to an agent tool.

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

The Actor's parsing and WAF-challenge handling are actively maintained, and the output schema is designed to stay stable across TikTok's page and anti-bot changes. No specific update turnaround is promised.

#### Can I use Best TikTok AI Transcript Extractor without managing proxies or browser infrastructure?

Yes. There's no headless browser to run or maintain, and proxy tiers (no proxy → datacenter → residential) are selected and escalated automatically — you only need to touch `proxyConfiguration` if you want to force a specific tier.

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

For RAG, index `transcript` and `segments` (word-level timestamps make them citeable and clippable). For consistently structured training data across records, `videoId`, `viewsCount`, `likesCount` and `authorVerified` return as stable typed primitives on every row.

### 🔗 Related scrapers

| Scraper Name | What it extracts |
| --- | --- |
| TikTok Posts Scraper | TikTok posts, video metadata and engagement from profiles, hashtags, keyword search or pasted URLs |
| TikTok Keyword Search Scraper | TikTok videos found by keyword search, with date/sort filters and region targeting |
| Instagram Transcript API & Profile Scraper - AI Video to Text | Instagram Reels/video transcripts via local Whisper, plus public profile posts |

### 💬 Your feedback

Found a bug or missing a field? Let us know — reach out at **scrapier.io@gmail.com** and we'll take a look. Reports like this directly shape what gets fixed and added next.

# Actor input Schema

## `tiktokUrl` (type: `string`):

⚡ Paste any public TikTok video link — full link, <code>vm.tiktok.com</code>/<code>vt.tiktok.com</code> short link, or mobile URL. Handy for a quick one-off test alongside (or instead of) the bulk list below.

## `bulkUrls` (type: `array`):

🎞️ One or more public TikTok video URLs to transcribe in one run — paste as many as you like, one per line. Duplicates are removed automatically so you're never charged twice for the same video. All URL formats work: full links, short links, mobile URLs.

## `translateToEnglish` (type: `boolean`):

🈯 Works with any spoken language — Spanish, German, Japanese, Arabic and 90+ more. When ON, the <code>transcript</code>, <code>segments</code> and SRT/VTT subtitles come back in English, no matter what's spoken. Video metadata (caption, hashtags, music info) always stays in its original language, and the detected original language is still reported in <code>textLanguage</code>.

## `includeComments` (type: `boolean`):

📌 Some creators put the full recipe, links or key details only in a <b>pinned comment</b> — not the caption or the spoken video. Turn this ON to also return the video's <code>comments</code> (pinned first), plus ready-made <code>pinnedComments</code> and <code>creatorComments</code> shortlists. ⚠️ Best-effort: TikTok's public comment feed occasionally rejects anonymous requests — when that happens the run still succeeds, just with empty comment lists (never fails the video). Free while this feature is in beta.

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

🌐 By default the Actor connects with <b>NO proxy</b> for maximum speed. If TikTok rejects or blocks a request, it automatically escalates: ⚡ No proxy → 🏢 Datacenter proxy → 🏠 Residential proxy (retried up to 3× with a fresh IP) — then sticks with Residential for the rest of the run. Every escalation is logged clearly. You can also force a tier yourself here.

## `concurrency` (type: `integer`):

🏎️ How many TikTok videos to fetch and transcribe at the same time. Higher = faster, but more likely to trigger TikTok rate limits and uses more memory (each video briefly loads the AI model).

## `requestDelay` (type: `number`):

🐢 A polite pause (plus random jitter) before every page fetch. Raise this if you're seeing blocks; lower it for small, fast runs.

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

💪 How many times to retry a blocked/failed video (with a brand-new session) before giving up. Each retry may also trigger a proxy tier escalation — see Proxy configuration above.

## Actor input object example

```json
{
  "tiktokUrl": "https://www.tiktok.com/@thatdudecancook/video/7649086431641521421",
  "bulkUrls": [
    "https://www.tiktok.com/@motivation_everyday80/video/7565659068153531669"
  ],
  "translateToEnglish": false,
  "includeComments": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "concurrency": 4,
  "requestDelay": 0.5,
  "maxRetries": 3
}
```

# Actor output Schema

## `overview` (type: `string`):

All processed videos with the most important columns.

## `transcriptAndSubtitles` (type: `string`):

Full transcript text plus SRT/VTT subtitle files for every video.

## `segments` (type: `string`):

One row per timestamped transcript segment — ready for subtitles and clipping.

## `creatorProfile` (type: `string`):

Creator handle, bio, verification and follower/like/video stats.

## `mediaAndMusic` (type: `string`):

Watermark-free download links, technical specs and the audio track used.

## `comments` (type: `string`):

One row per comment (pinned first) — only populated when comment extraction is enabled.

## `fullRecord` (type: `string`):

Every field, unfiltered, exactly as pushed to the dataset.

## `csv` (type: `string`):

The full result set as a CSV file.

## `srtFiles` (type: `string`):

Every generated .srt subtitle file, stored in the key-value store.

## `vttFiles` (type: `string`):

Every generated .vtt subtitle file, stored in the key-value store.

# 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 = {
    "tiktokUrl": "https://www.tiktok.com/@thatdudecancook/video/7649086431641521421",
    "bulkUrls": [
        "https://www.tiktok.com/@motivation_everyday80/video/7565659068153531669"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraper-engine/best-tiktok-ai-transcript-extractor").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 = {
    "tiktokUrl": "https://www.tiktok.com/@thatdudecancook/video/7649086431641521421",
    "bulkUrls": ["https://www.tiktok.com/@motivation_everyday80/video/7565659068153531669"],
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("scraper-engine/best-tiktok-ai-transcript-extractor").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 '{
  "tiktokUrl": "https://www.tiktok.com/@thatdudecancook/video/7649086431641521421",
  "bulkUrls": [
    "https://www.tiktok.com/@motivation_everyday80/video/7565659068153531669"
  ],
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call scraper-engine/best-tiktok-ai-transcript-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraper-engine/best-tiktok-ai-transcript-extractor"
        }
    }
}

```

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/WTduMin6hmN10EuxN/builds/8OWHgEPdkF1GMLklR/openapi.json
