# TikTok Video Transcript Scraper (`piotrv1001/tiktok-video-transcript-scraper`) Actor

The TikTok Video Transcript Scraper turns TikTok videos into searchable text, capturing full transcripts with timestamps and spoken language, plus caption, hashtags, author, follower count, publish date, length, sound and engagement counts — ideal for content research and AI pipelines.

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

## Pricing

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

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 Video Transcript Scraper

Turn TikTok videos into searchable text. The **TikTok Video Transcript Scraper** returns the spoken words of a video — full transcript plus timestamped cues — alongside the whole post record: caption, hashtags, author, follower count, publish date, length, sound, and play, like, comment, share and save counts.

Give it a **username** and it pulls that account's recent videos on every run, which makes it a monitor rather than a one-off lookup. Paste **video URLs** instead when you already know exactly which ones you want.

### ✨ Features

- 🗣️ **Transcript with timestamps** — the full text plus cue-level `start`/`end` seconds, ready to search, quote or feed to an LLM.
- 👤 **Track accounts, not just links** — enter usernames and get their latest videos each run. Add a date filter and a scheduled run only ever returns what's new.
- 🌍 **Any language** — transcripts come back in whatever was spoken. English, Japanese, Russian, Spanish, Arabic and more, detected automatically.
- 🤖 **AI transcription for the rest** — most videos with speech already carry a transcript. Switch on AI transcription and the ones that don't get transcribed too, taking coverage to roughly **9 in 10**.
- 📊 **The whole post, not just the words** — caption, hashtags, publish date, length, cover image, verified status, follower count, sound name, and five engagement counts.
- 🎯 **Never pays for empty rows** — photo posts and unavailable videos are skipped, and a video with no speech is charged as a video, not as a transcript.
- ⚡ **No account needed** — no login, no cookies, nothing to configure.

### 🛠️ How to Use the TikTok Video Transcript Scraper

1. **Enter usernames** – add one or more TikTok accounts (`nasa`, `@bbc`, or a profile URL).
2. **Or paste video URLs** – use these instead when you have specific videos in mind.
3. **Set a date filter** *(optional)* – `7 days` or `2026-08-01` keeps a scheduled run to fresh posts only.
4. **Run it** – transcripts and post data arrive in the dataset, ready to export as JSON, CSV or Excel.

### 🔧 Input

| Field                | Type    | Description                                                                   |
| -------------------- | ------- | ----------------------------------------------------------------------------- |
| `usernames`          | array   | TikTok accounts to pull recent videos from. Username, @handle or profile URL. |
| `videoUrls`          | array   | Specific video URLs to transcribe. Use instead of, or alongside, usernames.   |
| `onlyPostsNewerThan` | string  | Skip anything older. Accepts `2026-08-01` or `7 days`. Empty means no filter. |
| `transcribeWithAI`   | boolean | Also transcribe videos that have no transcript of their own. Off by default.  |
| `language`           | string  | Spoken language for AI transcription. Automatic by default.                   |
| `maxResults`         | integer | Stop after this many videos. Default `50`.                                    |
| `proxyConfiguration` | object  | Used only if TikTok rate-limits the run. Residential recommended.             |

### 📊 Sample Output Data

```json
[
    {
        "id": "7665075736742530317",
        "url": "https://www.tiktok.com/@nasa/video/7665075736742530317",
        "handle": "nasa",
        "description": "Something big just landed on TikTok.",
        "hashtags": [],
        "createdAt": "2026-07-21T20:09:02.000Z",
        "durationSeconds": 25,
        "coverImage": "https://p16-common-sign.tiktokcdn-eu.com/tos-useast5-p-0068-tx/oAUhkWfCZC7g6A...",
        "authorId": "7664638705177150477",
        "authorName": "NASA",
        "authorVerified": true,
        "authorFollowers": 1200000,
        "authorBio": "Making the seemingly impossible, possible.✨",
        "playCount": 939200,
        "likeCount": 71000,
        "commentCount": 2038,
        "shareCount": 2717,
        "saveCount": 5430,
        "musicTitle": "original sound",
        "musicAuthor": "NASA",
        "musicIsOriginal": true,
        "detectedLanguage": null,
        "hasTranscript": true,
        "transcriptSource": "ai",
        "transcriptLanguage": "en",
        "transcript": "We're going back to the freaking moon. That's why.",
        "transcriptCues": [{ "start": 0, "end": 2.72, "text": "We're going back to the freaking moon. That's why." }],
        "skippedReason": null,
        "scrapedAt": "2026-08-22T09:15:26.398Z"
    }
]
```

### 📋 Data Fields

| Field                                                                      | Description                                                                            |
| -------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
| `id`, `url`, `handle`                                                      | Video identity and where it lives.                                                     |
| `description`, `hashtags`                                                  | The caption, and the hashtags pulled out of it.                                        |
| `createdAt`, `durationSeconds`, `coverImage`                               | When it was posted, how long it runs, and its cover frame.                             |
| `authorId`, `authorName`, `authorVerified`, `authorFollowers`, `authorBio` | Who posted it and how big their audience is.                                           |
| `playCount`, `likeCount`, `commentCount`, `shareCount`, `saveCount`        | Engagement, all five counts.                                                           |
| `musicTitle`, `musicAuthor`, `musicIsOriginal`                             | The sound used, and whether it is the creator's own.                                   |
| `transcript`                                                               | The spoken words as one block of text.                                                 |
| `transcriptCues`                                                           | The same text split into cues with `start` and `end` seconds.                          |
| `transcriptLanguage`, `transcriptSource`                                   | Language spoken, and whether the text came from the platform or from AI transcription. |
| `hasTranscript`, `skippedReason`                                           | Whether text was found, and in plain words why it wasn't.                              |
| `detectedLanguage`, `scrapedAt`                                            | Speech language TikTok itself detected, and when this row was collected.               |

### 💵 Pricing

This Actor uses the **pay-per-event** pricing model — you only pay for what you get:

| Event                    | Price  | When it's charged                                       |
| ------------------------ | ------ | ------------------------------------------------------- |
| Actor start              | $0.001 | Once per run.                                           |
| Video scraped            | $0.003 | Per video returned, with all its metadata.              |
| Transcript returned      | $0.005 | Only when the video actually comes back with text.      |
| Minute transcribed by AI | $0.020 | Per started minute, only when AI transcription is used. |

A video that comes back with a transcript costs **$0.008**; one with no speech costs **$0.003**. A typical run of 100 videos with transcripts on about two-thirds of them comes to roughly **$0.63**. Photo posts and unavailable videos are skipped and never charged. New Apify accounts include **free monthly usage credits**, so you can try it at no cost.

### 💡 Tips

- Start with a small `maxResults` to preview the data shape before scaling up.
- Pair `usernames` with `onlyPostsNewerThan: 7 days` on a weekly schedule to build a rolling archive of an account's talking points.
- Leave **AI transcription** off for a first pass. Most videos with speech already carry a transcript, and you can rerun the gaps later.
- Feed `transcript` into an LLM to summarise a competitor's messaging, extract hooks, or find every video where a product was mentioned.
- Use `transcriptCues` when you need to jump to the moment something was said rather than read the whole thing.
- Leave **language** on automatic unless a specific accent is being detected wrong.

### ⚠️ Good to Know

- Around **12 recent videos** are available per account. This Actor is built to watch accounts over time, not to backfill an entire posting history in one run. For older videos, pass their URLs directly.
- Roughly **2 in 3** videos with speech already carry a transcript. Switching on AI transcription covers most of the remainder — together about **9 in 10**.
- Videos with no spoken words — dance, music and wordless comedy — return no transcript, and `skippedReason` says so.
- TikTok limits how quickly one IP can read. For larger runs, leave the proxy enabled in the input.

### ❓ FAQ

**Do I need a TikTok account or login?**
No. Nothing to log into and nothing to configure.

**Can I get every video an account has ever posted?**
Not from a username alone — about 12 recent videos are listed per account. If you have the URLs of older videos, pass them in `videoUrls` and they will be transcribed.

**Why did some videos come back without a transcript?**
Either there was no speech to transcribe, or the platform published no transcript for it and AI transcription was left off. The `skippedReason` field tells you which.

**What languages are supported?**
Whatever was spoken. Transcripts have come back in English, Japanese, Russian, Spanish, Arabic, French, German and more, detected automatically.

**Can I get comments?**
Not in this Actor — it focuses on the video and its transcript.

**Is scraping TikTok legal?**
Collecting publicly available data is generally lawful in the EU and US. Use the output responsibly and respect copyright and personal data rules in your jurisdiction.

### 🆘 Support

Found a bug or need a field that isn't here? Open an issue on the Actor's **Issues** tab and it will be looked at.

# Actor input Schema

## `usernames` (type: `array`):

Accounts to pull recent videos from. Enter a username (@nasa), a profile URL, or both. Returns the account's most recent videos — ideal for tracking accounts on a schedule.

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

Specific videos to transcribe. Paste full TikTok video URLs. Use this when you already know which videos you want; leave empty to work from the accounts above.

## `onlyPostsNewerThan` (type: `string`):

Skip anything published before this. Accepts a date (2026-08-01) or a phrase (7 days). Leave empty to take everything found.

## `transcribeWithAI` (type: `boolean`):

Most videos with speech already carry a transcript, which is returned at no extra transcription cost. Turn this on to additionally run AI transcription on the ones that do not. Slower, and billed per minute of audio.

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

Language of the spoken audio for AI transcription. Leave as automatic unless results come back in the wrong language.

## `maxResults` (type: `integer`):

Stop after this many videos.

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

Proxy used if TikTok rate-limits the run. Residential proxies are recommended.

## Actor input object example

```json
{
  "usernames": [
    "nasa"
  ],
  "videoUrls": [],
  "onlyPostsNewerThan": "",
  "transcribeWithAI": false,
  "language": "auto",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (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 = {
    "usernames": [
        "nasa"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/tiktok-video-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 = { "usernames": ["nasa"] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,piotrv1001/tiktok-video-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/2dKYlYzttT7ia1mnW/builds/XWgi0pXJYNysJZl8W/openapi.json
