# TikTok Transcript Scraper: Video to Text, Captions & Subtitles (`juramoshkov/tiktok-transcript-scraper`) Actor

Turn TikTok videos into text. Paste video URLs and get one row per video with the full transcript, language, optional timestamps, plus author, description and view counts. Uses TikTok captions, with speech-to-text for videos that have none. No login, no cookies.

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

## Pricing

from $6.00 / 1,000 transcripts

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## TikTok Transcript Scraper: Video to Text, Captions & Subtitles

Turn TikTok videos into text. Paste video URLs and get one row per video with the full transcript, its language, optional timestamps, plus the creator, description and view counts. No TikTok account, no cookies, no proxies.

- **Bulk**: one URL per line, as many as you like. Short share links work too.
- **Any language**: English, Spanish, German, Japanese and every other language TikTok captions.
- **Videos without captions**: the audio is transcribed instead, at the same price.
- **Pay per transcript**: $6-10 per 1,000. Videos with no speech are never billed.
- **Clean export**: flat rows, ready for CSV, Excel, Google Sheets or your LLM pipeline.

### What is a TikTok transcript scraper?

This actor converts TikTok videos to text. For each video URL it returns everything said in the video as one readable block, and optionally as timed lines you can use as subtitles. It reads TikTok's own captions when the video has them, which takes about two seconds per video, and transcribes the audio when it does not.

### What you get per video

| Field | Example |
|---|---|
| Transcript | "In one of the most star studded GTA radio lineups in its history..." |
| Language and source | `eng-US`, `tiktok_captions` or `speech_to_text` |
| Word count | 194 |
| Timestamps (optional) | start and end second of every line |
| Creator handle and name | `bbcnews`, BBC News |
| Description with hashtags | the text under the video |
| Duration and posting date | 61 s, 2026-10-08T20:30:08.000Z |
| Plays, likes, comments, shares, saves | 52800, 3156, 83, 379, 152 |

#### Example output row

```json
{
  "videoUrl": "https://www.tiktok.com/@bbcnews/video/7694397093380853015",
  "videoId": "7694397093380853015",
  "transcript": "In one of the most star studded GTA radio lineups in its history, Bad Bunny, Burner Boy, Lana Del Rey and Robin will host some of the newly revealed radio stations in GTA 6...",
  "language": "eng-US",
  "source": "tiktok_captions",
  "wordCount": 194,
  "segments": [
    { "start": 0, "end": 3.82, "text": "In one of the most star studded GTA radio lineups in its history," },
    { "start": 3.821, "end": 5.301, "text": "Bad Bunny, Burner Boy," }
  ],
  "availableLanguages": ["eng-US"],
  "authorUsername": "bbcnews",
  "authorName": "BBC News",
  "description": "Rockstar Games has confirmed its radio stations...",
  "durationSeconds": 61,
  "postedAt": "2026-10-08T20:30:08.000Z",
  "plays": 52800,
  "likes": 3156,
  "comments": 83,
  "shares": 379,
  "saves": 152
}
```

### How much does it cost?

Pay per result: $0.01 per transcript on the Apify Free plan, $0.008 on Bronze, $0.007 on Silver and **$0.006 on Gold and above**. That is **$6-10 per 1,000 transcripts**, whatever the length of the video. There is no per-minute meter; a run start costs $0.00005.

You pay only for transcripts delivered. A video with no speech, a private or removed video, or a link that is not a TikTok video costs nothing. The same video pasted twice is billed once. Set **Max spend** and the run stops on its own before crossing it.

The Free plan transcribes up to 10 captioned videos per run. Paid plans have no cap and add speech-to-text for videos without captions.

### How to use it

1. Paste one or more TikTok video URLs, e.g. `https://www.tiktok.com/@bbcnews/video/7694397093380853015`.
2. Optionally switch on **Include timestamps**, or set a **Preferred language**.
3. Run. Export as JSON, CSV or Excel, or pull it over the API.

### How do I use it with an AI agent (MCP)?

This actor is available as a tool through the [Apify MCP server](https://mcp.apify.com/). An agent can call it with a plain input filled straight from the schema:

```json
{"videoUrls": ["https://www.tiktok.com/@bbcnews/video/7694397093380853015"], "includeSegments": false}
```

The output is one flat JSON object per video, with the transcript in a single `transcript` field: nothing to unwrap before handing it to a model.

### Common use cases

- **Content repurposing**: turn TikToks into blog posts, newsletters, tweets and show notes.
- **Competitor and trend research**: read what the top videos in a niche actually say, at scale.
- **Hooks and scripts**: collect the opening lines of viral videos to study what works.
- **AI and LLM pipelines**: feed video content into summarizers, classifiers and RAG.
- **Subtitles and accessibility**: export timed lines for captions or translation.
- **Brand monitoring**: search what creators say about a product, not just the hashtags.

### Is it legal?

It reads publicly available videos: the same captions anyone sees in the TikTok player without logging in. It does not log in anywhere or use your accounts. The words in a video belong to its creator; you are responsible for how you use the results, so respect TikTok's terms, copyright and the law in your market.

### FAQ

#### How do I get the transcript of a TikTok video?

Paste the video URL and run. You get the full text in the `transcript` field within a few seconds.

#### Do I need a TikTok account, cookies or proxies?

No. There is nothing to log into and no proxy to configure.

#### What if the video has no captions?

On paid Apify plans the audio is transcribed instead, and the row is marked `speech_to_text`. These rows have the full text but no timestamps. Switch **Transcribe videos without captions** off to skip them.

#### Which languages are supported?

Every language TikTok captions, including English, Spanish, Portuguese, German, French, Japanese, Korean, Russian, Arabic and Indonesian. The transcript comes in the language spoken in the video. When TikTok offers a translated caption track, set **Preferred language** to get that one.

#### Why does a video come back with no transcript?

It has no speech (music or sounds only), or it is private, removed or region-locked. The row says which, and it is not billed.

#### Can I transcribe every video of a profile or a hashtag?

This actor takes video URLs. Collect the URLs with any TikTok profile or hashtag scraper and paste them here.

#### How much do 1,000 transcripts cost?

$6-10, depending on your Apify plan.

# Actor input Schema

## `videoUrls` (type: `array`):

One TikTok video link per line, e.g. https://www.tiktok.com/@user/video/1234567890. Short share links (vm.tiktok.com) work too. The same video pasted twice is transcribed and billed once. A run with no input transcribes the example.

## `includeSegments` (type: `boolean`):

Add a `segments` list with the start and end second of every line, for subtitles or for jumping to a quote. The plain `transcript` text is always included.

## `language` (type: `string`):

Optional two-letter code, e.g. "en" or "es". When TikTok offers a translated caption track in that language it is returned instead of the original. Leave empty for the language spoken in the video.

## `speechToTextFallback` (type: `boolean`):

When TikTok has no captions for a video, transcribe its audio instead. Same price per transcript; available on paid Apify plans.

## `maxBudgetUsd` (type: `integer`):

Hard ceiling on what this run can charge. It is turned into a transcript count before the first video, so the run stops on its own rather than billing past it. Set 0 for no ceiling.

## Actor input object example

```json
{
  "videoUrls": [
    "https://www.tiktok.com/@bbcnews/video/7694397093380853015"
  ],
  "includeSegments": false,
  "speechToTextFallback": true,
  "maxBudgetUsd": 5
}
```

# Actor output Schema

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

No description

## `resultsCsv` (type: `string`):

No description

# 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 = {
    "videoUrls": [
        "https://www.tiktok.com/@bbcnews/video/7694397093380853015"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("juramoshkov/tiktok-transcript-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 = { "videoUrls": ["https://www.tiktok.com/@bbcnews/video/7694397093380853015"] }

# Run the Actor and wait for it to finish
run = client.actor("juramoshkov/tiktok-transcript-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 '{
  "videoUrls": [
    "https://www.tiktok.com/@bbcnews/video/7694397093380853015"
  ]
}' |
apify call juramoshkov/tiktok-transcript-scraper --silent --output-dataset

```

## MCP server setup

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