# TikTok Transcript Scraper: Videos to Text by Hashtag or Link (`zaiq/tiktok-transcript-scraper`) Actor

Turn TikTok videos into text: what is said in the videos of any hashtag, or in any video by its link, with plays, likes, comments, shares, saves, caption and music. Any language, no login. Optional comments. Pay per video and per transcribed minute.

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

## Pricing

from $2.40 / 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/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: videos to text, by hashtag or link

![TikTok Transcript Scraper: Videos to Text by Hashtag or Link](https://api.apify.com/v2/key-value-stores/4VJNANhwKgqPpXtAi/records/hero-tiktok-transcript-scraper.jpg)

Turn **TikTok videos into text**. Give it hashtags or video links and get back **what is said in every video**, word for word and in the language spoken, with each video's **plays, likes, comments, shares, saves, caption, hashtags, music and author**. Add a video's **comments** too. No TikTok account, no cookies, no login.

Made for marketers, creators, researchers and AI pipelines that need the spoken content of TikTok videos, not only their numbers.

### What you get

| Field | What it holds |
|---|---|
| `transcript` | Everything said in the video, word for word (empty for music-only videos) |
| `hook`, `hookStartSeconds` | The opening line: what is said in the first 3 seconds of speech, run on to the end of its sentence, and the second it starts |
| `segments`, `srt` (Timestamps on) | Each sentence with its start and end in seconds, and an SRT subtitle file |
| `translation` (optional) | The transcript in the language you pick, with `transcriptLanguage` and `translationLanguage` |
| `caption`, `hashtags`, `mentions` | The video's own text |
| `plays`, `likes`, `comments`, `shares`, `saves` | Engagement as shown publicly |
| `createdAt`, `durationSeconds` | When it was posted and how long it is |
| `author`, `authorName` | Who posted it |
| `music` | The sound: title, author, original or not |
| `url`, `coverUrl` | Links to the video and its cover |
| Hashtag row | The hashtag's total views and video count |
| `commentList` (video links) | Comments with text, date, likes and replies |

### What people use it for

- **Trend research:** read what the top videos of a hashtag actually say, then make your own
- **Hooks and scripts:** collect the first lines of winning videos in your niche
- **Brand and product mentions:** find what creators say about a product on camera
- **UGC and ads:** turn product videos into scripts for your own ads
- **Content repurposing:** turn TikTok videos into captions, blog posts and threads
- **AI and research datasets:** feed video transcripts and comments to an AI model or a dashboard

### How to use it

1. Add **hashtags** (without or with #) and/or **video links**.
2. Choose how many videos per hashtag, keep **Transcripts** on, and for video links choose how many **comments**.
3. Click **Start**. A hashtag's videos take about half a minute to list; each transcript a few seconds.
4. Download the results as JSON, CSV or Excel, or send them to Sheets, Make, Zapier or your app.

### Input

| Field | Example | Notes |
|---|---|---|
| Hashtags | `cooking` | TikTok's popular and recent videos for it |
| Video links | `https://www.tiktok.com/@user/video/...` | Any public video; vm.tiktok.com links work |
| Videos per hashtag | `20` | Up to 300 |
| Transcripts | on | Speech written down, any language |
| Timestamps and subtitles | on | Segments and an SRT file; no extra charge |
| Translate transcripts to | English | Optional, 19 languages; no extra charge from this Actor |
| Comments per video link | `0` | Up to 2,000 |

### Output

Each result is one row in the run's dataset (download it as JSON, CSV, Excel, XML or HTML, or read it through the API). An example row (values shortened):

```json
{
  "kind": "video",
  "type": "video",
  "url": "https://www.tiktok.com/@example.creator/video/6718335390845095173",
  "author": "example.creator",
  "createdAt": "2019-07-27T13:32:38Z",
  "durationSeconds": 10,
  "caption": "Scramble up ur name & I’ll try to guess it😍❤️ #foryoupage #petsoftiktok #aesthetic",
  "hashtags": [
    "foryoupage",
    "PetsOfTikTok",
    "aesthetic"
  ],
  "plays": 159600,
  "likes": 35200,
  "comments": 5714,
  "shares": 1516,
  "saves": 649,
  "music": {
    "title": "original sound",
    "original": true
  },
  "transcript": "La la la la la la",
  "transcriptLanguage": "en",
  "hook": "La la la la la la",
  "hookStartSeconds": 0.0,
  "segments": [
    {
      "start": 0.0,
      "end": 6.8,
      "text": "La la la la la la"
    }
  ],
  "srt": "1\n00:00:00,000 --> 00:00:06,800\nLa la la la la la\n"
}
```

A record named `SUMMARY` in the run's key-value store says what each hashtag or link returned, with notes (for example a video with no speech, which is free), what was charged and how much traffic the run used. The example row is from a run on 17 October 2026 (creator name removed): a 10-second video whose speech is a sung line; 1 video and 1 transcript minute were charged.

### Pricing

- **$0.003 per video** (each video or hashtag row returned)
- **$0.15 per video list opened** (once per hashtag: the list is read in a real browser)
- **$0.01 per started minute of speech** written down, with timestamps, SRT, the opening line and the translation (only with Transcripts on)
- **$0.004 per 20 comments** (video links, only when asked for)
- Music-only videos and hashtags TikTok shows nothing for are free
- The AI model that writes the speech down (Google's Gemini Flash) is billed by Apify at its exact cost: about $0.004 a minute with timestamps on paid Apify plans (measured 17 October 2026); Apify charges free-plan accounts 10 times that

What typical jobs cost at the list price:

| Job | Cost |
|---|---|
| 20 videos of a hashtag, no transcripts | about $0.21 |
| 20 videos of a hashtag with 1-minute transcripts | about $0.41 |
| 10 video links of 30-60 seconds with transcripts | about $0.13 |

On Apify's Scale and Business plans the per-event prices are lower (Store discounts). Set **Maximum cost per run** and the Actor stops cleanly when it is reached: you never pay more than that.

### Tips

- Run a hashtag without transcripts first, then send the best videos' links back in with transcripts on.
- Several related hashtags in one run give a broader picture of a niche.
- Schedule it daily on a few hashtags to catch rising videos early.
- Comments are often more useful than the video: ask for 100 on the videos you study.

### Use it through the API

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("zaiq/tiktok-transcript-scraper").call(run_input={"hashtags": ["cooking"], "maxVideos": 10, "transcripts": true})
for row in client.dataset(run.default_dataset_id).iterate_items():
    print(row)
```

**JavaScript**

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('zaiq/tiktok-transcript-scraper').call({"hashtags": ["cooking"], "maxVideos": 10, "transcripts": true});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

**HTTP (one call, results back)**

```bash
curl -X POST 'https://api.apify.com/v2/acts/zaiq~tiktok-transcript-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>' \
  -H 'Content-Type: application/json' \
  -d '{"hashtags": ["cooking"], "maxVideos": 10, "transcripts": true}'
```

### Integrations and schedules

- **Schedules:** run it every hour, day or week from the Apify Console (Schedules) and keep a history of results.
- **Make, Zapier, n8n, Google Sheets, Slack, Airtable:** connect it through Apify's integrations, or send each finished run to a **webhook**.
- **Datasets:** results stay in the run's dataset; export them or read them by API whenever you need them.

### Use it with AI agents (MCP)

Add Apify's MCP server (`https://mcp.apify.com`) to Claude, ChatGPT, Cursor, VS Code or any MCP client. The agent can find this Actor and run it for you: ask it for "the transcripts of the top 10 #cooking TikToks". AI agents can also pay for runs directly through Apify's agentic payments.

### Limits

- Public videos only, signed out. TikTok does not show signed-out visitors a profile's video list, so give video links for a creator's videos.
- A hashtag lists TikTok's popular and recent videos for it (about 30 a scroll), not every video ever posted.
- Videos up to 30 minutes are written down in full: long speech goes to the AI in 2-minute pieces, so it is not cut off.
- Public data only: you are responsible for how you use it under TikTok's terms and the privacy laws that apply to you.

### FAQ

**Do I need a TikTok account?**

No. It reads public pages signed out.

**Which languages work?**

Any: the speech is written down in the language spoken.

**How accurate are the transcripts?**

Written by Google's newest Gemini Flash model from the video's own audio, word for word. Loud music can drop words.

**Why is a transcript empty?**

The video has no speech, only music or sounds. You are not charged for it.

**Can I get all videos of a creator?**

Give their video links. TikTok no longer shows a profile's video list to signed-out visitors.

**How many comments can I get?**

Up to 2,000 per video link.

### Related Actors from Zaiq

- [instagram-transcript-scraper](https://apify.com/zaiq/instagram-transcript-scraper): the same for Instagram reels
- [youtube-transcript-scraper](https://apify.com/zaiq/youtube-transcript-scraper): YouTube transcripts and subtitles
- [x-video-transcript-scraper](https://apify.com/zaiq/x-video-transcript-scraper): X posts and what is said in their videos
- [google-trends-scraper](https://apify.com/zaiq/google-trends-scraper): whether a topic is rising on Google and YouTube

### Support

Questions, a site that changed, or a field you need? Open an issue on this Actor's **Issues** tab: we answer there, usually within a day.

***

Also found as: tiktok transcript, tiktok video to text, tiktok transcription, tiktok hashtag scraper, tiktok comments scraper, tiktok scraper api.

# Actor input Schema

## `hashtags` (type: `array`):

Hashtags without or with #, one per line. The videos TikTok lists for each are returned.

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

TikTok video links (or vm.tiktok.com short links), one per line.

## `maxVideos` (type: `integer`):

How many videos TikTok lists for each hashtag (popular and recent).

## `transcripts` (type: `boolean`):

Write down what is said in each video, with its opening line ($0.01 per started minute of speech; music-only videos are free).

## `timestamps` (type: `boolean`):

Split each transcript into timed segments (start and end in seconds) and add an SRT subtitle file. No extra charge.

## `translateTo` (type: `string`):

Also give each transcript in this language (skipped when it is already in it). No extra charge from this Actor; the AI model's own cost is billed by Apify, a fraction of a cent a transcript.

## `maxComments` (type: `integer`):

For video links only: how many comments to include ($0.004 per 20).

## Actor input object example

```json
{
  "hashtags": [
    "cooking"
  ],
  "maxVideos": 5,
  "transcripts": true,
  "timestamps": true,
  "translateTo": "",
  "maxComments": 0
}
```

# Actor output Schema

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

Dataset: the results.

## `summary` (type: `string`):

What each input returned, and notes.

# 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 = {
    "hashtags": [
        "cooking"
    ],
    "maxVideos": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("zaiq/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 = {
    "hashtags": ["cooking"],
    "maxVideos": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("zaiq/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 '{
  "hashtags": [
    "cooking"
  ],
  "maxVideos": 5
}' |
apify call zaiq/tiktok-transcript-scraper --silent --output-dataset

```

## MCP server setup

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