# Douyin Transcript Scraper: Video to Text with Timestamps (`parseforge/douyin-transcript-scraper`) Actor

Get Douyin video transcripts as clean text and timestamped segments, from video links, searches or creator pages. Includes language, stats and SRT. Export CSV, Excel, JSON, XML.

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

## Pricing

from $16.30 / 1,000 video processeds

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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v3.webp)

## 🎙️ Douyin Transcript Scraper

> 🚀 **Export Douyin (抖音) video transcripts in seconds.** Paste video links, search keywords or creator pages and get the spoken words of every video as clean text plus timestamped segments, with 27 columns of video, creator and engagement data. No login, no cookies.

Douyin shows visitors who are not logged in **no subtitles at all**. We checked 40 videos straight from Douyin's own web player API: none carried a caption track, and none had on-screen text extracted. So this Actor does what a person would do: it downloads the audio of each video and runs AI speech-to-text on it, then hands you the transcript in the dataset, ready for search, translation or an LLM. There are no subtitle files to download and parse.

The text comes back in the language spoken (Mandarin for most Douyin videos), with the detected language, a word count, phrase-level start and end seconds and, if you ask for it, a ready-made SRT subtitle file.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Content marketers and social media managers | Turn winning Douyin videos into scripts, articles and newsletters |
| Cross-border e-commerce and brand teams | Read what Chinese creators say about a product, out loud |
| Market and trend researchers | Mine spoken keywords and claims from high engagement videos |
| AI and data teams | Feed clean, timestamped Douyin speech into LLM and RAG pipelines |
| Translators and subtitle editors | Start from an SRT instead of typing the video out |
| Journalists and academics | Archive and quote spoken content from public Douyin accounts |

### 📋 What the Douyin Transcript Scraper does

1. Accepts Douyin video links one per line: `www.douyin.com/video/<id>` links, `v.douyin.com` share links from the app, or bare video IDs. Duplicates are processed once.
2. Optionally accepts **search keywords** (the videos Douyin returns for each keyword) and **creator pages** (the latest videos of each creator).
3. Reads each video's details from Douyin's public site: title, creator, date, duration, likes, comments, shares, saves, hashtags and sound.
4. Downloads the audio of the video (the smallest track available), re-encodes it to a small mono file and runs AI speech-to-text. Long videos are cut into pieces so the timestamps stay on the real clock.
5. Emits one row per video with the transcript first, and one **free** error row for every link that is deleted, private, a photo post or too long.

> 💡 **Why it matters:** Douyin publishes no captions to logged-out visitors, so any Douyin transcript is an AI transcript. Every row here says so in `transcriptSource`, the language is detected for you, and a video with no speech is reported as such instead of a made-up text.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

Each dataset row is one Douyin video. 27 columns per row.

| Field | Type | Description |
|---|---|---|
| 🖼 `imageUrl` | string | Video cover image |
| 📝 `title` | string | The creator's post text with hashtags |
| 🔗 `url` | string | Canonical video URL |
| 🆔 `id` | string | Douyin video ID |
| 🗣 `transcript` | string | Full spoken transcript as one text, or `N/A` when the video has no speech |
| 🎙 `transcriptSource` | string | `AI speech-to-text`, or `None` when no speech was found |
| 🌐 `transcriptLanguage` | string | Language of the speech (ISO 639-1, for example `zh`, `en`) |
| 🔢 `transcriptWordCount` | number | Chinese characters plus other words in the transcript |
| ℹ️ `transcriptNote` | string | Why a transcript is missing, when it is (`No speech detected`) |
| ⏱ `durationSeconds` | number | Video length |
| 📅 `publishedAt` | string | Upload date and time (ISO 8601) |
| 👤 `authorName` | string | Creator display name |
| 🔗 `authorUrl` | string | Creator profile URL |
| 👥 `authorFollowers` | number | Creator's follower count |
| ❤️ `likes` | number | Like count |
| 💭 `comments` | number | Comment count |
| 🔁 `shares` | number | Share count |
| 🔖 `saves` | number | Times saved to favourites |
| #️⃣ `hashtags` | array | Hashtags in the post |
| 🎵 `musicTitle` | string | Sound used in the video |
| 🎤 `musicAuthor` | string | Author of the sound |
| 🔤 `postLanguage` | string | Language Douyin detected for the post text |
| 🧭 `foundVia` | string | `Video link`, `Search: <keyword>` or `Creator page` |
| ⏲ `segments` | array | Phrases with `start`, `end` (seconds) and `text` |
| 🎞 `srt` | string | The transcript as SubRip subtitles when you switch on SRT output, otherwise `Not Requested` |
| 🕒 `scrapedAt` | string | When the row was collected |
| ❌ `error` | string | Populated only on failed rows |

#### Real sample records

Three rows from a verification run: two videos given by link and one found by the keyword 演讲 (speech). Long values are shortened here with … and only the first three segments are shown.

```json
{
  "imageUrl": "https://p9-pc-sign.douyinpic.com/image-cut-tos-priv/c468b1aa3b8eef0dc7007f8b1dd7d45b~tplv-dy-resize-…",
  "title": "实地采访篇 ｜新手采访最容易犯的错误 #新闻学 #采访视频 #昭通学院",
  "url": "https://www.douyin.com/video/7648853385944252901",
  "id": "7648853385944252901",
  "transcript": "第二期。采访篇，新手采访最容易犯的错误。外出采访不是随便聊天。没准备，遗漏素材都是常态。学会正确采访方式，轻松拿到一手优质素材。采访不是闲聊。采访前应该提前整理思路，提前拟定采访提纲。而不是连基本提纲都没有就仓促上阵交换…",
  "transcriptSource": "AI speech-to-text",
  "transcriptLanguage": "zh",
  "transcriptWordCount": 265,
  "transcriptNote": "N/A",
  "durationSeconds": 59.8,
  "publishedAt": "2026-06-08T02:57:38.000Z",
  "authorName": "青橙新语",
  "authorUrl": "https://www.douyin.com/user/MS4wLjABAAAA5sRf5dBBFpl0DQVcke4f1N7lc1wbf5…",
  "authorFollowers": 234,
  "likes": 22,
  "comments": 0,
  "shares": 2,
  "saves": 4,
  "hashtags": [
    "新闻学",
    "采访视频",
    "昭通学院"
  ],
  "musicTitle": "@青橙新语创作的原声",
  "musicAuthor": "青橙新语",
  "postLanguage": "zh",
  "foundVia": "Video link",
  "segments": [
    {
      "start": 0.48,
      "end": 1.12,
      "text": "第二期。"
    },
    {
      "start": 2.72,
      "end": 5.36,
      "text": "采访篇，新手采访最容易犯的错误。"
    },
    {
      "start": 5.76,
      "end": 7.6,
      "text": "外出采访不是随便聊天。"
    }
  ],
  "srt": "Not Requested",
  "scrapedAt": "2026-09-29T05:45:10.956Z",
  "error": null
}
```

```json
{
  "imageUrl": "https://p3-pc-sign.douyinpic.com/image-cut-tos-priv/6bb50e301395bab2596828028b917c89~tplv-dy-resize-…",
  "title": "如何摆脱死板背稿感？ #演讲#演讲比赛#演讲技巧#演讲口才 #演讲培训",
  "url": "https://www.douyin.com/video/7655709509273687657",
  "id": "7655709509273687657",
  "transcript": "你的演讲是不是这样子的？尊敬的各位领导，亲爱的同志们，大家下午好！今天我演讲的题目是礼赞新中国，奋进新征程。你是不是常常觉得自己演讲就像在背稿子一样，特别死板？我明明写的时候不是这样子的呀，我平时在生活当中讲话也不是这样…",
  "transcriptSource": "AI speech-to-text",
  "transcriptLanguage": "zh",
  "transcriptWordCount": 718,
  "transcriptNote": "N/A",
  "durationSeconds": 169.7,
  "publishedAt": "2026-06-26T14:22:53.000Z",
  "authorName": "露蔓老师的自信新声道",
  "authorUrl": "https://www.douyin.com/user/MS4wLjABAAAAuyXnX93TmUomKsYck3ipYMDFv4JVSU…",
  "authorFollowers": 57244,
  "likes": 4756,
  "comments": 43,
  "shares": 927,
  "saves": 3476,
  "hashtags": [
    "演讲",
    "演讲比赛",
    "演讲技巧",
    "演讲口才",
    "演讲培训"
  ],
  "musicTitle": "@露蔓老师的自信新声道创作的原声",
  "musicAuthor": "露蔓老师的自信新声道",
  "postLanguage": "zh",
  "foundVia": "Video link",
  "segments": [
    {
      "start": 0.24,
      "end": 1.84,
      "text": "你的演讲是不是这样子的？"
    },
    {
      "start": 2.56,
      "end": 6.88,
      "text": "尊敬的各位领导，亲爱的同志们，大家下午好！"
    },
    {
      "start": 7.2,
      "end": 12.56,
      "text": "今天我演讲的题目是礼赞新中国，奋进新征程。"
    }
  ],
  "srt": "Not Requested",
  "scrapedAt": "2026-09-29T05:45:21.738Z",
  "error": null
}
```

```json
{
  "imageUrl": "https://p11-sign.douyinpic.com/tos-cn-i-0813/oU07fvICoAEEtfGoBW0XbIAIGeAcLBARrEAUtQ~tplv-dy-resize-w…",
  "title": "演讲有气场，记住这四步 #演讲#演讲技巧#气场 #气场全开 #演讲口才",
  "url": "https://www.douyin.com/video/7664966637405557830",
  "id": "7664966637405557830",
  "transcript": "怎么样让你的演讲更加的有气场呢？记着以下四步。第一个叫放声音。声音放出去不是往上顶，你看是这样的。尊敬的各位领导、各位同事，大家好，今天我演讲的题目是。声音是推，而不是尊敬的各位领导、各位同事，也不是收着。尊敬的各位领导…",
  "transcriptSource": "AI speech-to-text",
  "transcriptLanguage": "zh",
  "transcriptWordCount": 537,
  "transcriptNote": "N/A",
  "durationSeconds": 132.1,
  "publishedAt": "2026-07-21T13:05:17.000Z",
  "authorName": "露蔓老师的自信新声道",
  "authorUrl": "https://www.douyin.com/user/MS4wLjABAAAAuyXnX93TmUomKsYck3ipYMDFv4JVSU…",
  "authorFollowers": 0,
  "likes": 442,
  "comments": 5,
  "shares": 102,
  "saves": 346,
  "hashtags": [
    "演讲",
    "演讲技巧",
    "气场",
    "气场全开",
    "演讲口才"
  ],
  "musicTitle": "@露蔓老师的自信新声道创作的原声",
  "musicAuthor": "露蔓老师的自信新声道",
  "postLanguage": "zh",
  "foundVia": "Search: 演讲",
  "segments": [
    {
      "start": 0,
      "end": 2.48,
      "text": "怎么样让你的演讲更加的有气场呢？"
    },
    {
      "start": 2.56,
      "end": 4.08,
      "text": "记着以下四步。"
    },
    {
      "start": 4.48,
      "end": 6.72,
      "text": "第一个叫放声音。"
    }
  ],
  "srt": "Not Requested",
  "scrapedAt": "2026-09-29T05:45:12.361Z",
  "error": null
}
```

AI speech-to-text can mishear names, numbers and product codes. If the video has music with singing, `transcript` may contain the lyrics as the model heard them, which are often approximate. Check quotes you plan to publish.

### ✨ Why choose this Actor

- **The transcript is in the row.** Plain text in `transcript` and phrase-level timing in `segments`, right in the dataset. No files to download and parse.
- **Three ways in.** Video links, search keywords and creator pages, in one run, deduplicated by video ID.
- **Timestamps that hold over minutes.** Long videos are cut into 5 minute pieces that are transcribed on their own clock, then stitched. A 329 second test video ended at 328.7 seconds, a 14 minute one at 850 of 851.
- **SRT on request.** Switch on `includeSrt` and every row carries a SubRip file's worth of text for video editors and players.
- **Video context on every row.** Likes, comments, shares, saves, publish date, duration, creator, followers, sound and hashtags come with each transcript, so you can rank what was said by how it performed.
- **A cost guard you control.** `maxVideoMinutes` (default 15, up to 30) skips long videos with a free error row, and speech-to-text is billed per started minute, so you can predict a run before it starts.
- **Honest failures, never charged.** Deleted or private videos, photo posts, links that are not Douyin and videos over your length limit come back as error rows with the reason. Error rows are free. A run that produced no transcript at all ends as FAILED with the reason, not as a green run with nothing in it.
- **Privacy by default.** Emails, phone numbers, QQ and WeChat IDs and labelled business handles that are read aloud or written in the title are replaced by `[removed]` unless you switch that off.
- **No login and no cookies from you.** Only public videos, read the way a logged out visitor sees them.

### 📈 How it compares to alternatives

| | This Actor | Other Douyin transcript Actors | Manual transcription |
|---|---|---|---|
| Transcript text inside the dataset | Yes | Varies | Yes |
| Timestamped segments | Yes, per phrase | Varies | No |
| Video links, keywords and creator pages | All three | Mostly links only | N/A |
| SRT output | Yes, optional | Varies | No |
| Detected language | Yes | Varies | N/A |
| Failed and unavailable videos | Free error row with the reason | Varies, empty transcripts are reported by users | N/A |
| Contact details spoken in the video | Removed by default | Not stated | N/A |
| Video, creator and engagement data | 27 columns | Varies | No |

Limits of the public surface: Douyin shows visitors who are not logged in about 100 videos per keyword and about 20 videos per creator page. Photo posts have no speech and return a free error row. Live streams are not videos and are skipped.

### 🚀 How to use

1. Create a free Apify account. New accounts include $5 of free platform credit, which is plenty to try this out: [console.apify.com/sign-up](https://console.apify.com/sign-up?fpr=vmoqkp)
2. Open the Actor and go to the Input tab.
3. Paste Douyin video links, one per line, for example `https://www.douyin.com/video/7648853385944252901`. Share links from the Douyin app (`v.douyin.com/...`) work too.
4. Optionally add **search keywords** or **creator pages**.
5. Set how many videos to process with **Max Items**, and the longest video you want to pay to transcribe.
6. Click **Start**. The log prints each video's word count and language as it lands.
7. Open the **Dataset** tab and download as CSV, Excel, JSON or XML, or pull it from the API.

```json
{
  "videoUrls": [
    "https://www.douyin.com/video/7648853385944252901",
    "https://www.douyin.com/video/7655709509273687657"
  ],
  "searchTerms": ["演讲"],
  "maxVideosPerSearch": 20,
  "maxItems": 100,
  "maxVideoMinutes": 15,
  "includeSegments": true,
  "includeSrt": false
}
```

### 💼 Business use cases

#### Cross-border product research

Search the name of a product category on Douyin, transcribe the top 100 videos and read what Chinese creators actually claim, compare and complain about. Each row keeps `likes`, `saves` and `shares`, so you can weigh the loud claims by reach.

#### Content repurposing at scale

Pick the best performing videos of a creator, run them through the Actor and hand `transcript` to your writers, your translators or an LLM. Turn on `includeSrt` to start a subtitle job from a finished draft.

#### Hook and script research

The first segments of each video are its hook. Sort by `likes`, read the first entries of `segments` and you have a swipe file of openings that worked in your niche, with the second each line lands.

#### AI and search pipelines

Clean text plus timed segments is the shape embedding and retrieval pipelines want. Load `segments` into a vector store and link each answer back to the second of the video it came from, with `url` and `publishedAt` for citations.

### 🔌 Automating Douyin Transcript Scraper

- **Make** and **Zapier**: trigger a run when a new Douyin link lands in a sheet or a form, then push the transcript into Notion, Airtable or your CMS.
- **Slack**: post the transcript of every new competitor video into a channel for the content team.
- **Airbyte**: sync datasets into Snowflake, BigQuery or Postgres and join them with your social analytics.
- **GitHub**: schedule runs from Actions and keep versioned transcript archives.
- **Google Drive**: drop a CSV or Google Sheet into a shared folder after every run.
- **API and webhooks**: every run emits a dataset ID. Subscribe to the run succeeded webhook and pull the rows into any system you already run.

### 🌟 Beyond business use cases

- **Research**: study language, public health messaging or misinformation in short video with searchable, timestamped text.
- **Language learning**: read along with native Mandarin speech, with the timing of every phrase.
- **Non-profit**: monitor how causes and campaigns are discussed on Douyin.
- **Experimentation**: build a small corpus of spoken Chinese for classification, summarisation or topic modelling.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or any assistant to get help designing your run:

> I want to transcribe Douyin videos with the "Douyin Transcript Scraper" Apify Actor. Its input has `videoUrls`, `searchTerms`, `profileUrls`, `maxItems`, `maxVideoMinutes`, `includeSegments`, `includeSrt` and `removeContactDetails`. Each output row has `transcript`, `segments`, `transcriptLanguage`, `durationSeconds` and engagement fields. Help me plan a run for: \[describe your goal].

### ❓ Frequently Asked Questions

#### 🔑 Do I need a Douyin account or cookies?

No. The Actor reads public pages the way Douyin's own website does for a visitor who is not logged in.

#### 📝 Does Douyin have subtitles I can read for free?

Not for visitors who are not logged in. We looked at 40 videos: no caption track and no extracted on-screen text on any of them. That is why every transcript here is generated from the audio.

#### 🎯 How accurate is the transcript?

Good on clear Mandarin speech, weaker on names, numbers, dialects, overlapping voices and songs. `transcriptSource` always says it is AI speech-to-text, so you know how far to trust it.

#### ⏱ Are the timestamps exact?

They are estimates from the speech model, kept inside the real duration of the video: no segment ever runs past the end. Long videos are transcribed in 5 minute pieces so the estimate does not drift.

#### 🔇 What does a video without speech return?

A row with `transcript: N/A` and `transcriptNote: No speech detected`. Music-only videos are common on Douyin. The row still carries the video's data and counts as a result, but no transcription minutes are charged for it.

#### 🚫 Why was my video rejected?

The `error` column says why: deleted or private, a photo post (no audio), a live stream, not a Douyin link, or longer than your `maxVideoMinutes`. Error rows are never charged.

#### 🔗 Where do I find a video link?

Open the video on www.douyin.com and copy the address (www.douyin.com/video/7648853385944252901), or use Share in the Douyin app and copy the short link (v.douyin.com/...). Both work.

#### 🔎 How many videos can a keyword or a creator give me?

Douyin shows visitors who are not logged in about 100 videos per keyword and about 20 videos per creator page. The Actor takes as many as you ask for up to those limits.

#### 🔒 Are contact details included?

No, unless you turn it off. Emails, phone numbers, QQ and WeChat IDs and labelled business handles read aloud or written in the title are replaced by `[removed]` in `transcript`, `segments`, `title` and the sound name.

#### 🎞 Can I get subtitles for my video editor?

Yes. Switch on **Include SRT subtitles** and the `srt` column holds the transcript in SubRip format.

#### 💳 How am I charged?

Pay per event. Each Douyin video costs $0.001 on the free Apify plan tier and less on higher tiers (down to $0.00056). Speech-to-text adds $0.008 per started minute of video (down to $0.004), because Douyin publishes no captions to logged out visitors and every transcript is produced by AI. Videos without speech, videos over your length limit and error rows do not pay for transcription minutes, error rows are free, and there is no run-start fee. The maxVideoMinutes setting caps the cost of any single video.

#### 🛡️ Do I need a proxy?

No. The Actor works without one from Apify servers, and if Douyin does not answer it retries through a residential exit by itself.

#### ⚖️ Is it legal to scrape Douyin?

The Actor reads only public pages, without a login, the way any visitor's browser does. Transcripts of public videos can still contain personal data and copyrighted speech. Use them within the law of your country, keep the contact detail removal on unless you have a lawful reason to process them, and do not republish other people's speech as your own.

### 🔌 Integrate with any app

Use the Apify API, the JavaScript and Python clients, webhooks, or ready-made integrations for Make, Zapier, Slack, Google Sheets, Airbyte and more to send Douyin transcripts wherever you need them.

### 🔗 Recommended Actors

- [Audio Transcriber](https://apify.com/parseforge/audio-transcriber) for audio files from a URL or upload.
- [YouTube Transcript Scraper](https://apify.com/parseforge/youtube-transcript-scraper) for YouTube captions and transcripts.
- More ParseForge Douyin Actors (search, creator profiles and comments) are on the way.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge) for more social media and video Actors.

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** independent tool, not affiliated with Douyin or ByteDance; only publicly available data is collected.

# Actor input Schema

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

Douyin videos to transcribe: www.douyin.com/video/<id> links or v.douyin.com share links from the app. Through the API, bare video IDs work as well. Duplicates are processed once.

## `searchTerms` (type: `array`):

Transcribe the videos Douyin returns for each keyword, for example 演讲 or 采访. Douyin shows visitors who are not logged in about 100 videos per keyword.

## `profileUrls` (type: `array`):

Transcribe the latest videos of a creator: www.douyin.com/user/\<sec_uid> links or v.douyin.com share links. Douyin shows visitors who are not logged in about 20 videos per creator.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `maxVideosPerSearch` (type: `integer`):

How many videos to take from each search keyword. Between 1 and 100.

## `maxVideosPerProfile` (type: `integer`):

How many of the latest videos to take from each creator page. Between 1 and 20.

## `maxVideoMinutes` (type: `integer`):

Videos longer than this are skipped with a free error row instead of being transcribed. Speech-to-text is charged per started minute, so this is also your cost guard. Between 1 and 30.

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

Adds a segments list to each row with the start and end second of every phrase. Turn off for a lighter export when you only need the full text.

## `includeSrt` (type: `boolean`):

Adds an srt column with the transcript as a ready-to-use subtitle file (SubRip format) for video editors and players.

## `removeContactDetails` (type: `boolean`):

On (default): emails, phone numbers, QQ and WeChat IDs and labelled business handles are replaced by \[removed] in the transcript, the title and the sound name. Turn off only when you have a lawful reason to process them.

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

Apify proxy settings. Douyin video pages and files load without a proxy from Apify servers; switch it on only for very large batches.

## Actor input object example

```json
{
  "videoUrls": [
    {
      "url": "https://www.douyin.com/video/7648853385944252901"
    },
    {
      "url": "https://www.douyin.com/video/7655709509273687657"
    }
  ],
  "maxItems": 10,
  "maxVideosPerSearch": 20,
  "maxVideosPerProfile": 10,
  "maxVideoMinutes": 15,
  "includeSegments": true,
  "includeSrt": false,
  "removeContactDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Transcript, language and key video stats

## `fullData` (type: `string`):

Complete dataset with all 27 fields

# 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": [
        {
            "url": "https://www.douyin.com/video/7648853385944252901"
        },
        {
            "url": "https://www.douyin.com/video/7655709509273687657"
        }
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/douyin-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": [
        { "url": "https://www.douyin.com/video/7648853385944252901" },
        { "url": "https://www.douyin.com/video/7655709509273687657" },
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/douyin-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": [
    {
      "url": "https://www.douyin.com/video/7648853385944252901"
    },
    {
      "url": "https://www.douyin.com/video/7655709509273687657"
    }
  ],
  "maxItems": 10
}' |
apify call parseforge/douyin-transcript-scraper --silent --output-dataset

```

## MCP server setup

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