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

TikTok transcript and transcription tool: turn any TikTok video into text. Get subtitles and captions as plain text, with timestamps, or as SRT and VTT files, plus an English translation, views, likes and creator. Paste links, short links or IDs. No login.

- **URL**: https://apify.com/quillstone-labs/tiktok-transcript-scraper.md
- **Developed by:** [Quillstone Labs](https://apify.com/quillstone-labs) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 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

Turn TikTok videos into text. This TikTok transcript scraper gets everything that's said in a video, as plain text or as subtitles with timestamps. Paste video links, short share links or video IDs, and each video comes back as one row with the transcript, its language, a word count, and the video's views, likes, creator and description. Videos in other languages also get TikTok's own English translation when it has one.

You don't need a TikTok account, an API key or a login. The transcripts come from TikTok's own captions, so a video is ready in about a second, with no waiting for audio to be processed.

### What you get

| | |
|---|---|
| Transcripts | The spoken words of each video as one block of plain text, in the video's own language |
| English translation | For Spanish, Portuguese, French and other videos, TikTok's English translation alongside the original, when TikTok has made one |
| Timestamps and subtitle files | Optional: the captions line by line with start and end times, plus ready-made SRT and WebVTT subtitle files for video editors and players |
| Video details | Creator, views, likes, comments, shares, saves, length, post date, description, hashtags and sound |
| Plain answers | A one-line summary per video, like *@garyvee's 50-second video from 28 Jan 2026 (530,500 views): English transcript, 169 words.* |
| Clear "no transcript" rows | Videos without speech, deleted or private videos, and mistyped links each get a row saying why, and cost little or nothing |
| One text file | Every transcript in a single `transcripts.txt`, ready to paste into a document or a chat |
| Excel report | A Videos sheet with transcripts and stats side by side, plus Timed captions when timestamps are on |

### Example inputs

The transcript of one video:

```json
{ "videos": ["https://www.tiktok.com/@garyvee/video/7600242046464576799"] }
```

A batch of videos, links and IDs mixed (short links from the Share button, like `https://vm.tiktok.com/...`, work too):

```json
{ "videos": ["7600242046464576799", "https://www.tiktok.com/@tips.viny.y.juan/video/7688691782447615262", "https://www.tiktok.com/@garyvee/video/7566367706379783438"] }
```

Transcripts with timestamps and SRT/VTT subtitles, without the English translations:

```json
{ "videos": ["7566367706379783438"], "includeTimestamps": true, "includeEnglish": false }
```

### Who uses it

- **Content creators and marketers** studying what top videos in their niche actually say, and turning their own videos into blog posts, captions or newsletters.
- **Researchers and analysts** reading what's said across hundreds of videos on a topic, brand or product.
- **Brand and agency teams** checking what influencers said about a product, word for word.
- **Automated tools and assistants** that are handed a TikTok link and need to know what's in the video, as text.

### How to use it

1. On the **Input** tab, paste your videos under **TikTok videos**, one per line. Full links, short links from the Share button, and plain video IDs all work.
2. Turn on **Include timestamps** if you want the captions line by line with times.
3. Click **Start**.
4. Open the **Output** tab. **Results** shows each video with its transcript. **All transcripts** is one text file with every transcript in order. **Excel report** downloads it all as a spreadsheet.

**Tip:** to get the transcripts of a creator's latest videos or of a hashtag, collect the video links first with any TikTok profile or hashtag scraper, then paste them here.

### Getting your results into Excel, Google Sheets or Word

- **Excel report:** every run saves `transcripts-report.xlsx`, linked as **Excel report** on the Output tab. It opens in Excel, Google Sheets, LibreOffice and Numbers.
- **Word or Google Docs:** open **All transcripts** on the Output tab and paste it in, or copy the Transcript column from the Excel report.
- **Other formats:** the **Export** button on the Output tab downloads the results as CSV, JSON, XML or HTML.
- **Google Sheets automatically:** add Apify's Google Sheets integration to a saved task and every run lands in a sheet.

### Using it from your own code

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('quillstone-labs/tiktok-transcript-scraper').call({
    videos: ['https://www.tiktok.com/@garyvee/video/7600242046464576799'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].transcript);
```

Or in one request, which waits for the run and returns the rows:

```bash
curl -X POST "https://api.apify.com/v2/acts/quillstone-labs~tiktok-transcript-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"videos": ["7600242046464576799"]}'
```

### Use it from an AI assistant

Claude, Cursor, VS Code and other assistants that support MCP can run this Actor for you. Add this server to your assistant's MCP settings:

```
https://mcp.apify.com?tools=quillstone-labs/tiktok-transcript-scraper
```

The first time it connects, a browser window opens so you can sign in to Apify. Then just ask, for example *"What does this TikTok say? https://www.tiktok.com/@garyvee/video/7600242046464576799"* Each result includes a plain-English `explanation` the assistant can pass straight on, and every output field is described, so it knows what each one means. To set up several Actors at once, use Apify's [MCP configurator](https://mcp.apify.com/).

### What a result looks like

```json
{
    "input": "https://www.tiktok.com/@tips.viny.y.juan/video/7688691782447615262?is_from_webapp=1",
    "videoId": "7688691782447615262",
    "url": "https://www.tiktok.com/@tips.viny.y.juan/video/7688691782447615262",
    "found": true,
    "hasTranscript": true,
    "transcript": "rellena el rallador con carne de res y mantequilla cocina el vapor veinte minutos...",
    "transcriptLanguage": "es",
    "transcriptSource": "auto-generated",
    "wordCount": 156,
    "englishTranscript": "stuff the grater with beef and butter steam for twenty minutes...",
    "captionLanguages": "en, es",
    "noTranscriptReason": "",
    "explanation": "@tips.viny.y.juan's 2 min 7 s video from 23 Sep 2026 (7,700,000 views): Spanish transcript, 156 words. TikTok's English translation is included.",
    "author": "tips.viny.y.juan",
    "authorName": "Tips Viny y Juan",
    "authorVerified": false,
    "description": "Ternera con mantequilla preparada con un truco sencillo que lo cambia todo...",
    "hashtags": [],
    "createdAt": "2026-09-23T12:00:00.000Z",
    "durationSeconds": 127,
    "views": 7700000,
    "likes": 142200,
    "comments": 1059,
    "shares": 16500,
    "saves": 35299,
    "music": "sonido original - Tips Viny y Juan",
    "photoPost": false,
    "isAd": false
}
```

With **Include timestamps and subtitle files** on, each row also has `segments`, a list of `{ "start": 0, "end": 3.3, "text": "..." }` with times in seconds, and `srt` and `vtt`: the same captions as SRT and WebVTT subtitle files, ready to save as `.srt` or `.vtt`.

A video that can't be transcribed still gets a row, so you always know what happened to each link:

```json
{
    "input": "https://www.tiktok.com/@billieeilish/video/7050551461734042926",
    "found": true,
    "hasTranscript": false,
    "noTranscriptReason": "TikTok has no captions for this video, which usually means nobody speaks in it.",
    "explanation": "@billieeilish's 29-second video from 7 Jan 2022 (204,800,000 views): no transcript. TikTok has no captions for this video, which usually means nobody speaks in it."
}
```

### How much does it cost?

You pay per video, not for run time, and Apify's platform costs are included. A video with a transcript is one charge; a video TikTok has no captions for costs less; links that are deleted, private or not TikTok videos are free. English translations, timestamps, the text file and the Excel report cost nothing extra. Exact prices are on the **Pricing** tab, and they're lower on Apify's paid plans. To cap what a run can cost, set **Max total charge** in the run options before you start.

### FAQ

**How do I get the transcript of a TikTok video?**
Copy the video's link (the Share button, then Copy link), paste it under **TikTok videos** and click **Start**. The transcript is in the Results a few seconds later, and in the **All transcripts** text file.

**Can I get TikTok subtitles or captions with timestamps, or as an SRT file?**
Yes. Turn on **Include timestamps and subtitle files** and each video also gets its captions line by line with start and end times in seconds, plus `srt` and `vtt` fields holding SRT and WebVTT subtitle files. The Excel report gets a Timed captions sheet.

**Can I pass in results from another TikTok scraper?**
Yes. Through the API, `videos` also takes objects like `{ "url": "..." }`, or the rows a TikTok profile, hashtag or search scraper returned (their `webVideoUrl` field is used), so you can feed one run straight into the next. Input written for other TikTok Actors works too: `postURLs`, `urls` and `startUrls` are read as well as `videos`.

**Which videos have transcripts?**
Most videos where someone speaks. TikTok captions spoken videos automatically. Videos with only music or sounds, and photo slideshows, have no speech to transcribe, and you'll get a row saying so.

**How accurate are the transcripts?**
They are TikTok's own captions, the same ones viewers can turn on in the app. Most are generated automatically from the audio, so names and slang are sometimes misheard. `transcriptSource` says whether TikTok generated the captions or the creator uploaded them.

**Which languages work?**
Any language TikTok captions, which covers the major languages. The transcript is always in the language spoken in the video. When TikTok also has an English translation, it's in `englishTranscript`.

**Can I give it a profile or a hashtag?**
No. This Actor takes video links and IDs. Collect the links with a TikTok profile or hashtag scraper first, then paste them here.

**Why does a video say it doesn't exist?**
The video was deleted, the link has a typo, or the account was removed. Videos set to "only me" or "friends" can't be read without signing in, and are reported as private. Old short links can expire; those are reported too. None of these are charged.

**How many videos can I run at once?**
As many as you like. Each takes about a second, and a few are read at the same time, so a few hundred links finish in a couple of minutes.

### More from Quillstone Labs

- **[USPTO Trademark Search & Monitor](https://apify.com/quillstone-labs/uspto-trademark-search)**: is a brand name or slogan already taken in the US, sound-alikes included, plus what a company owns, renewal dates and new filings.
- **[YouTube Transcript Scraper](https://apify.com/quillstone-labs/youtube-transcript-scraper)**: the same for YouTube videos, Shorts, playlists and channels, with SRT subtitles.
- **[App Store & Google Play Reviews Scraper](https://apify.com/quillstone-labs/app-store-google-play-reviews-scraper)**: reviews from both app stores in one run, with the top complaint words and rating trends by week and app version.

### Support

Found a bug, or need a field that isn't there? Open an issue on the **Issues** tab and include the input you used. For anything else, like a custom version or a bulk data job, email QuillStoneLabs@yahoo.com.

### Data and fair use

The transcripts and details come from public TikTok videos, as shown to any visitor who isn't signed in. Creators own their content: use transcripts for research, analysis and quoting, and don't republish someone else's video content as your own. Output includes creators' handles and names, so treat it as personal data where your local law does. This Actor is an independent tool and isn't affiliated with, endorsed by or sponsored by TikTok or ByteDance. TikTok is a trademark of ByteDance Ltd.

# Actor input Schema

## `videos` (type: `array`):

One video per line. Paste a video link (<code>https://www.tiktok.com/@user/video/7600242046464576799</code>), a short share link (<code>https://vm.tiktok.com/...</code>) or just the video ID. Through the API you can also pass objects like <code>{ "url": "..." }</code>, or the rows another TikTok scraper returned (their <code>webVideoUrl</code> is used). Calls written for other TikTok Actors also work: <code>postURLs</code>, <code>urls</code> and <code>startUrls</code> are read too.

## `includeEnglish` (type: `boolean`):

For videos in another language, also return TikTok's own English translation of the captions when it has one. Free.

## `includeTimestamps` (type: `boolean`):

Also return the captions line by line with start and end times in seconds, plus the same as ready-made SRT and WebVTT subtitle files (<code>srt</code> and <code>vtt</code>). Off by default to keep results short.

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

TikTok limits how many requests come from one address. Apify Proxy keeps big runs going.

## Actor input object example

```json
{
  "videos": [
    "https://www.tiktok.com/@garyvee/video/7600242046464576799"
  ],
  "includeEnglish": true,
  "includeTimestamps": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `text` (type: `string`):

No description

## `report` (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 = {
    "videos": [
        "https://www.tiktok.com/@garyvee/video/7600242046464576799"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("quillstone-labs/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 = {
    "videos": ["https://www.tiktok.com/@garyvee/video/7600242046464576799"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("quillstone-labs/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 '{
  "videos": [
    "https://www.tiktok.com/@garyvee/video/7600242046464576799"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call quillstone-labs/tiktok-transcript-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,quillstone-labs/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/LFIqoCTl9MyT2orTl/builds/NqYczF6Vw8ohXaNXe/openapi.json
