Douyin Transcript Scraper: 抖音 Video to Text, Punctuated avatar

Douyin Transcript Scraper: 抖音 Video to Text, Punctuated

Pricing

from $1.00 / 1,000 transcripts

Go to Apify Store
Douyin Transcript Scraper: 抖音 Video to Text, Punctuated

Douyin Transcript Scraper: 抖音 Video to Text, Punctuated

Douyin (抖音) video transcripts: punctuated simplified Chinese with timestamps, SRT/VTT, share links and app share text accepted. No login. Music-only videos are detected and never charged.

Pricing

from $1.00 / 1,000 transcripts

Rating

0.0

(0)

Developer

Quarra Labs

Quarra Labs

Maintained by Community

Actor stats

0

Bookmarked

4

Total users

4

Monthly active users

9 hours ago

Last modified

Share

Turn Douyin (抖音) videos into text, without an account or API key. Paste video links, v.douyin.com share links, or the whole share text copied from the Douyin app, and each video comes back with its transcript in punctuated Chinese (as plain text and as timestamped segments), optional SRT and WebVTT subtitle files, and the video's metadata (author, followers, date, likes, comments, shares, saves, caption, hashtags, sound). Tick Translate to English to get an English translation next to the Chinese (paid option, see Pricing).

Music-only videos come back as a free no_speech record instead of a made-up transcript. Deleted and private videos, photo posts and failures are free too. You pay only for transcripts delivered.

What we measured

On the Apify platform on 13 October 2026, with the default settings (512 MB), on 19 inputs: video IDs, douyin.com links, v.douyin.com share links, the share text of the Douyin app, an account page and damaged or dead links:

  • 10 transcripts, all in punctuated Chinese, from 21 seconds to 11 minutes (28 minutes in all). The 11-minute talk comes back complete: 4,080 characters.
  • 6 videos without a transcript, free: 3 songs or music compilations (no_speech), 2 videos whose language could not be settled (uncertain_language, both music), 1 photo post.
  • 3 failures with their reason, free: a private video, a deleted video, and an account page (not supported).
  • 0 failures on our side; 19 records in about 5 minutes.

Punctuated Chinese, complete, not guessed

Speech-to-text models write Chinese without punctuation unless they are guided: one block of characters with no commas and no full stops, unusable for subtitles, quotes or an LLM. We guide the model to punctuate, then put the punctuation in Chinese form (, 。 ? ! instead of , . ? !). On an 11-minute talk, every minute of the transcript is punctuated (8 to 15 marks per 100 characters). Chinese text is joined without spaces, and wordCount counts each Chinese character as a word, and punctuation as none.

Fast talkers are transcribed in full. The model writes at most about 220 tokens for each 30 seconds of audio: very dense speech, common in Douyin's talking-head videos (口播), loses the end of each 30 seconds without a trace. We detect it and transcribe the same audio slowed down by 25% (same pitch), with the timestamps brought back to real time: on an 11-minute talk, the passages that were cut off came back complete (4,080 characters). If the text is still incomplete, a stronger model checks it; a video is never charged as a fragment.

Music is not speech. On songs, the model is known to invent sentences that were never said, often the credits of the videos it learnt from (「请不吝点赞 订阅 转发 打赏支持明镜与点点栏目」, 「字幕志愿者 …」). We filter those, along with phrases the model is not confident about and loops. A video whose speech is all filtered out is a free no_speech record; one where more than 20% of the speech had to be left out is a free incomplete_transcript record. Clearly sung lyrics still count as speech.

Speech-to-text runs on third-party AI providers: ElevenLabs Scribe v2, the most accurate model in our tests, for most videos (directly or through OpenRouter), and OpenAI's Whisper large-v3 turbo run by Groq for the first videos of some runs and as a backup. The audio is sent to them only to be transcribed. When we call ElevenLabs directly, it stores each transcript on its side: we delete it as soon as we have read it and check that it is gone; if a deletion cannot be confirmed before the run ends, the run log says so. Through OpenRouter, nothing is stored under our account and there is nothing for us to delete; OpenRouter's and ElevenLabs' own data policies apply.

What you can transcribe

InputExamplesWhat you get
Videoshttps://www.douyin.com/video/7677683496155991339, 7677683496155991339that video
Share linkshttps://v.douyin.com/…/, v.douyin.com/…the video they lead to
Share text from the app7.92 复制打开抖音,看看【作品】 https://v.douyin.com/…/ 07/11 Lmr:/the video in the text
Other formsdouyin.com/…?modal_id=…, iesdouyin.com/share/video/…that video

Mix them in one run. A video found in two inputs (a link and its share link) is transcribed and charged once.

Videos only. Douyin shows an account's video list, search results and comments only to signed-in users, and we do not use accounts: an account, search, topic or live link gets a free invalid_url record that says so. Paste the links of the videos you want; a live stream link (live.douyin.com) is refused the same way, since a live stream is not a saved video. A photo post (图文) link, /note/… or /slides/… or a share link, gets a free photo_post record; a photo post given by its bare ID gets a free unavailable record (Douyin gives nothing for it under a video ID). The share text can start or end with the link, hold it in quotes or brackets, or hold two links: each link becomes a video.

Damaged links are refused, never guessed. A link with a cut or extra character gets a free invalid_url record.

Languages

Most Douyin videos are in Mandarin and come back in simplified Chinese (language: "zh"). Videos in another language (English, Japanese…) come back in that language: nothing is translated unless you tick Translate to English. We do not trust a single language detection when anything says otherwise: when the caption's script and the detected language disagree, a stronger model settles the language and transcribes the video. If it still cannot be settled, the video comes back as a free uncertain_language record, never as a charged guess.

language is a preference, never an instruction: it changes neither the models used nor the number of passes, and never forces a translation (requestedLanguageFound: false when the video is in another language).

English translation (optional)

Tick Translate to English (translateToEnglish: true) and each transcript also comes back in English, in a translation field. The original text always stays in transcript, so you can check a sentence or quote it in Chinese. The translation is made from the whole punctuated transcript, sentence by sentence and in order, by a large language model; long talks are translated in full, never summarized.

  • It is charged only when it is complete (translationStatus: "ok"). If it cannot be completed, you get the transcript as usual, translationStatus: "failed" with the reason in translationError, and nothing is charged for the translation.
  • A transcript already in English is not translated and not charged (translationStatus: "notNeeded").
  • Segments and subtitle files stay in the original language.
  • Names of people, brands and shows are only as good as the speech-to-text heard them: when one matters, check it against the Chinese.

Output

One record per video. A transcript (status: "ok"), shortened here:

{
"status": "ok",
"platform": "douyin",
"videoId": "7656127265465470262",
"url": "https://www.douyin.com/video/7656127265465470262",
"author": {
"username": "35953766040",
"fullName": "易运小霞",
"id": "54342049077896",
"secUid": "MS4wLjABAAAAC84O2ce3a9AB-uKQTwevPcAHxWlmPB9tFXe91WH4pos",
"isVerified": false,
"followerCount": 3245,
"url": "https://www.douyin.com/user/MS4wLjABAAAAC84O2ce3a9AB-uKQTwevPcAHxWlmPB9tFXe91WH4pos"
},
"caption": "如果你容易怯场,不敢上台演讲,在公共场合总是沉默寡言,一开口就结巴,那么这个每日练嘴就是你的必备神器",
"title": null,
"hashtags": null,
"publishedAt": "2026-06-27T17:24:03Z",
"viewCount": null,
"likeCount": 0,
"commentCount": 0,
"shareCount": 0,
"saveCount": 0,
"sound": { "title": "@易运小霞创作的原声", "author": "易运小霞", "isOriginal": true },
"durationSeconds": 23.8,
"language": "zh",
"transcriptSource": "speech_to_text",
"hasSpeech": true,
"transcript": "在人前表现自己真的超重要。如果你容易怯场,不敢上台演讲,在公共场合总是沉默寡言,一开口就接吧。那么这个小巧的口袋书,每日恋嘴就是你的必备神器。…",
"segments": [
{ "start": 0, "end": 1.773, "duration": 1.773, "text": "在人前表现自己真的超重要。" },
{ "start": 1.773, "end": 6.41, "duration": 4.637, "text": "如果你容易怯场,不敢上台演讲,在公共场合总是沉默寡言,一开口就接吧。" }
],
"segmentCount": 6,
"wordCount": 154,
"characterCount": 171,
"billedMinutes": 1,
"input": "7656127265465470262",
"inputType": "video",
"scrapedAt": "2026-10-13T17:40:18.899Z"
}

The example shows what speech-to-text is: 「结巴」 heard as 「接吧」, 「练嘴」 as 「恋嘴」. Names, brands and homophones are where it errs most; the meaning of the speech comes through.

A video without a transcript comes back as a free record that holds the reason and nothing else:

{
"status": "missing",
"platform": "douyin",
"videoId": "7508507662460538146",
"url": "https://v.douyin.com/KZXuuMuBTko/",
"missingReason": "photo_post",
"message": "this is a photo post (图文), not a video",
"input": "7.92 复制打开抖音,看看【作品】 https://v.douyin.com/KZXuuMuBTko/ 07/11 Lmr:/",
"inputType": "video"
}

Fields that need a word of explanation

  • status: ok (transcript, charged), missing (the video exists but has nothing to transcribe: no_speech, incomplete_transcript, uncertain_language, no_audio, photo_post, or too_long past your limit; free) or error (the link could not be read; free).
  • errorCode and retryable: not_found (deleted video or expired share link), private, region_blocked, not_a_video (a share link that leads to an account) and invalid_url are final, and so is unavailable when Douyin gives no video for an ID (often a photo post given by its bare ID). unavailable for a video under review, blocked, network, transcription_capacity and transcription_failed are worth retrying later (retryable: true). connection_failed means your own connection settings could not be used: fix them, or keep the default.
  • segments: start, end and duration in seconds. Long Chinese segments are split at the end of sentences (at most 40 characters each, two subtitle lines); the time of each piece is shared out by its number of characters, so the bounds of the original segment are exact and the cuts inside it are close. includeSrt and includeVtt add ready-to-save .srt and .vtt files.
  • viewCount: Douyin does not publish view counts to visitors; it is always null. Likes, comments, shares and saves are the counts Douyin shows.
  • author.username is the Douyin ID (抖音号) when the author set one; secUid is the stable key of the account in Douyin's links.
  • filteredSegments: segments of the raw speech-to-text output left out as non-speech (an invented credit over music, a loop); minutes are billed on the video's length as usual.
  • billedMinutes: started minutes of speech-to-text billed for this transcript.
  • translation, translationStatus, translationError, translatedMinutes: only with Translate to English (see above). translatedMinutes is the number of started minutes charged for the translation.

The dataset has three views: Overview, Transcripts and Video details. For a spreadsheet, export the Transcripts view as Excel (XLSX): one row per video, and Excel treats every cell as text. The run's summary is the OUTPUT record of the default key-value store: per input, transcripts, missing videos, errors and duplicates, plus speech-to-text statistics.

Input example

{
"urls": [
"https://www.douyin.com/video/7677683496155991339",
"https://v.douyin.com/53V2F5zmZ_c/",
"7.92 复制打开抖音,看看【作品】 https://v.douyin.com/KZXuuMuBTko/ 07/11 Lmr:/"
],
"includeSrt": true
}

Pricing

Pay per result: $0.001 per transcript plus $0.01 per started minute of speech, plus a start fee of $0.003 per GB of memory per run ($0.003 at the default 512 MB). A 1-minute video costs $0.011; a 5-minute talk costs $0.051. Translate to English adds $0.03 per started minute of the video, only for complete translations: $0.201 for the same 5-minute talk with its translation. Videos without speech, incomplete transcripts, photo posts, deleted or private videos, errors and duplicates are free. Platform usage is included.

Your maximum charge per run is never exceeded: the length of each video is read before it is transcribed. A video that would cost more than what is left (with its translation, when you ask for one) gets a free over_budget record and the run goes on with the next ones (a shorter video may still fit); the run stops once not even one more transcript fits, and its status says both. maxItems caps the transcripts of a run: ask for 10, get 10.

Free records are a by-product, not a product: a run stops, and says why, once 100 videos or inputs plus 2 per transcript have given no transcript, or once the audio transcribed for nothing (music-only videos) passes 15 minutes of audio plus the start fee and 40% of what the run has charged: about 18.5 minutes of audio at the default 512 MB, plus about 2.5 minutes per billed minute. A long video is never turned away because of its length: the run stops only once that much audio has really been transcribed for nothing. maxDurationMinutes (default 30, at most 60) skips longer videos before anything is transcribed.

Use cases

  • Market and trend research in China: what creators in a niche say, searchable, quotable and ready for translation.
  • Product and brand research: what Douyin sellers and reviewers say about a product (live-commerce scripts, 带货).
  • Subtitles: punctuated SRT files for your own Douyin videos, for reposting elsewhere.
  • LLM pipelines: summaries, translation, hooks and topic analysis across hundreds of Chinese videos.

Limits

  • Videos only: no accounts, search, hashtags, comments or live streams (they need a signed-in account).
  • Private videos and videos only friends can see come back as free private records.
  • Speech or music. The speech-to-text service does not return exactly the same text on every pass over the same video; on clear speech it does not matter, on music it can. A video is charged only when its speech is clear; songs are charged only when the lyrics are clear on two passes that agree.
  • Speed. Count about 10 to 30 seconds per video, more for long ones. Our speech-to-text capacity is shared fairly between runs; if it is temporarily used up, videos get free transcription_capacity records (retryable: true) and the status says when to retry.

Memory

512 MB is the default and the best setting: the run waits on speech-to-text, not on memory, and the Actor used at most 160 MB in our tests, an 11-minute video included. More memory only shortens the preparation of long videos (our 19 inputs: about 5 minutes at 512 MB, 4 at 1 GB; the maximum is 1 GB).

FAQ

Is it legal to scrape Douyin transcripts? This Actor reads only public videos, the way a visitor who is not signed in sees them, and accepts no Douyin terms on your behalf. Transcripts reproduce what people say, which may be protected by copyright and may contain personal data: check that your use (research, analysis, quotation, accessibility) is allowed where you are, and handle personal data under the rules that apply to you (GDPR in Europe, PIPL in China). We keep nothing after the run. With Translate to English, the transcript text is sent to a language-model service that does not keep it to train its models.

Do I need a Douyin account, a Chinese phone number or any setup? No. Keep the default connection: its cost is included in the price.

Can it translate? Yes, into English: tick Translate to English ($0.03 per started minute, charged only when the translation is complete). The Chinese transcript always comes with it.

What happens when Douyin changes something? The Actor runs every day on known videos, so we see a change before you do. A run that fails on our side ends as Failed and charges no transcript.