Douyin Transcript Scraper | Subtitles and Speech to Text avatar

Douyin Transcript Scraper | Subtitles and Speech to Text

Pricing

from $0.81 / 1,000 transcripts

Go to Apify Store
Douyin Transcript Scraper | Subtitles and Speech to Text

Douyin Transcript Scraper | Subtitles and Speech to Text

Douyin (抖音) transcript scraper: turn any video link, id or creator page into the full transcript, timed segments and SRT subtitles, plus title, hashtags, likes, comments, shares and creator stats. 10 transcripts in 38 seconds, 38 fields each. No login, no cookie, export to JSON, CSV or Excel.

Pricing

from $0.81 / 1,000 transcripts

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Douyin Transcript Scraper (抖音) | Subtitles, Speech to Text and SRT (2026)

2 URLs. 10 Douyin transcripts. 38 fields per transcript.

From SilentFlow. Creators of Pinterest Scraper and Leboncoin Scraper, with 420,000+ combined lifetime runs.

Turn Douyin (抖音) videos into text you can read, search, translate and quote: the full transcript, timed segments and ready-to-use SRT subtitles, with each video's title, hashtags, likes, comments, shares, favorites and creator in the same row. Paste video links, the share text from the app, video ids or a creator's page, and press Start. The prefilled form returned 10 transcripts in 35 seconds on our latest test run, 444 timed sentences in all. No Douyin account, no Chinese phone number, nothing to install.

Why choose this actor?

Watching Douyin videos one by one to type out what the creator says? Pasting a single link per run, then copying the text into a spreadsheet by hand? Getting a transcript without the timings you need to cut a clip or burn subtitles?

  • Links, ids or a whole creator, in one run. Paste desktop links, v.douyin.com share links, the whole share text from the app, 19-digit video ids, or a creator's page, all in the same input. On our test run, three video ids and one creator link came back as 10 transcripts in 57 seconds: three explainers of about 9 minutes each (Google's quarterly results, economics, electrical safety) and the first episodes of the creator's collection 投资学习. Each value is read by its shape, so an id pasted among links still works, and a video given twice becomes one row.
  • The words, the timings and the numbers in one row. Our test rows carried 27 to 36 filled data fields each: the transcript, timed segments with start and end seconds, an SRT subtitle file, the detected language and word count, then the title, description, hashtags, chapters, category, collection and episode, likes, comments, shares, favorites, duration, publish date, cover, video and music links, and the creator's name, username, bio, followers, video count and total likes. On our three test runs of 10 videos each, 36, 36 and 31 fields were filled on at least half the rows (fewer when creators post without music or hashtags), where the most used Douyin transcript actor on the Store lists 20 output fields.
  • Nothing to fill in before the first run. No field is required. The form opens on two video links and a driving coach's page, and returned 10 transcripts in 35 seconds as it is. Change the links when you are ready.

Try Douyin Transcript Scraper

Try your first transcripts

Paste this input in the JSON tab, or keep the prefilled form and press Start. It transcribes two videos (a driving coach's three-step fix for fogged-up windows, and a first-grader's self-introduction in English at a parents' meeting) and the first episodes of the coach's collection 新手开车技巧 (driving tips for new drivers): 10 rows in 35 seconds on our latest test run.

{
"videoUrls": [
"https://www.douyin.com/video/7534679152504376595",
"https://www.douyin.com/video/7570214442996613775"
],
"creatorUrls": [
"https://www.douyin.com/user/MS4wLjABAAAAk9mpFofCPQpsv1I1SVFxdb-A_BWiJnGy1qoDQxLEB4s"
],
"maxItems": 10
}

Runs on the Apify Free plan: sign up, open the actor, press Start. Each video lands as one row of the dataset, which you can open as a table, download as CSV, Excel or JSON, or read from the API. Replace the links with your own videos, or keep only the creator link and raise maxItems to transcribe a whole series.

How it works

SilentFlow · Douyin suite
  Douyin Comments Scraper
Comments, Likes and IP
Douyin Transcript Scraper
You are here

Copy to your AI assistant

Paste this block into Claude, ChatGPT or Cursor to give it the full picture of this scraper before you ask it to write code or plan a dataset:

You have access to the Douyin Transcript Scraper on Apify: silentflow/douyin-transcript-scraper
It reads Douyin (抖音, douyin.com), ByteDance's short-video platform in China, and turns the speech
of each video into text with timings. One row = one video. No account, no field is required.
Input (all optional; give at least one link, id or creator):
- videoUrls (array of strings): any Douyin video link, one per entry:
https://www.douyin.com/video/7534679152504376595, https://v.douyin.com/xxxx/ share links,
the whole share text copied from the app, feed links with ?modal_id=<id>,
https://www.iesdouyin.com/share/video/<id>/. A creator link here works too.
- videoIds (array of strings): 19-digit video ids, e.g. "7534679152504376595".
- creatorUrls (array of strings): creator pages https://www.douyin.com/user/MS4wLjABAAAA... or bare sec_uids.
Transcribes the videos of the creator's public collections (合集), episode by episode.
A creator with no collection gives no row.
- maxItems (integer, default 100): transcripts for the whole run.
Output per video (flat JSON, a missing value is null):
- id (string, stable 19-digit video id), url (permanent page link), title, description
- transcript (string, all sentences heard), segments (array of {start, end, text}, seconds),
subtitlesSrt (string, SubRip file), language ("zh", "en", "ja" or "ko", from the script of the transcript),
hasSpeech (boolean, false for music or silence only), wordCount (integer: one per Chinese character,
one per word in other scripts)
- hashtags (array of strings), chapters (array of {title, summary, start}), category ("汽车 > 用车 > 用车知识"),
collectionName (string), episode (integer)
- authorId (sec_uid), authorName, authorUsername, authorUrl, authorAvatarUrl, authorDescription,
authorVerified (boolean), authorFollowers, authorVideoCount, authorTotalLikes (integers)
- likeCount, commentCount, shareCount, collectCount (integers)
- duration (seconds, number), publishedAt (RFC 3339 UTC)
- coverUrl, videoUrl, musicUrl (links that expire after a few hours or days), musicTitle, musicAuthor,
isOriginalSound (boolean, true when the soundtrack is the creator's own recording)
- inputUrl (what you typed for this row), scrapedAt (RFC 3339 UTC)
Use apify-client for Python or JavaScript: client.actor("silentflow/douyin-transcript-scraper").call(run_input={...}).

How to transcribe Douyin videos

Get the transcript of one Douyin video

Paste the link from your browser or from the app's share button. One row comes back with the transcript, the timed segments and the SRT subtitles.

{
"videoUrls": ["https://www.douyin.com/video/7534679152504376595"]
}

Transcribe a list of videos by id

When your list comes from a spreadsheet, a database or another scraper, give the 19-digit ids. Long explainers work as well as short clips: on our test run, these three explainers of about 9 minutes each came back with 219, 236 and 289 timed sentences.

{
"videoIds": [
"7566989250659388713",
"7527602803074665779",
"7324310484130237696"
]
}

Transcribe a creator's lessons, episode by episode

A creator's page link returns the videos of their public collections (合集) in episode order, each with its collection name and episode number. On our test run this electronics teacher's page gave 4 collections, and the first 8 lessons of 电子元件和电路原理 (components and circuit principles) came back with 65 to 184 timed sentences each, in the same 77-second run as two pasted links.

{
"creatorUrls": ["https://www.douyin.com/user/MS4wLjABAAAAzQO_AJd_oZkuoGv4lDBFiu4IWV-LTJUwi6xmKC3khdY"],
"maxItems": 20
}

Input parameters

ParameterTypeDefaultWhat it does
videoUrlsarray of stringsprefilled with 2 linksDouyin video links, share links or share texts, one per entry. A creator link here is read as a creator.
videoIdsarray of stringsempty19-digit video ids, the number in douyin.com/video/{id}.
creatorUrlsarray of stringsprefilled with 1 creatorCreator pages, douyin.com/user/{sec_uid}, or the bare sec_uid. Returns the videos of the creator's public collections (合集).
maxItemsinteger100 (form prefilled with 10)Transcripts for the whole run. The run stops as soon as this many rows are saved.

Links the actor reads. Video pages: https://www.douyin.com/video/{id}, the same with any query string (?previous_page=app_code_link), feed and search pages opened on a video (https://www.douyin.com/jingxuan?modal_id={id}, https://www.douyin.com/user/{sec_uid}?modal_id={id}), shared pages https://www.iesdouyin.com/share/video/{id}/ and https://m.douyin.com/share/video/{id}. Share links https://v.douyin.com/{code}/ are followed to the video or creator they open. The whole share text copied from the app works too (7.43 复制打开抖音,看看【…的作品】… https://v.douyin.com/{code}/ …): the link inside it is read and the rest ignored.

Creator pages. https://www.douyin.com/user/{sec_uid} and https://www.iesdouyin.com/share/user/{sec_uid}, or the sec_uid alone (it always starts with MS4wLjABAAAA). The actor reads the creator's public collections (合集), the playlists Douyin shows on the creator's page, and transcribes their videos in episode order, collection after collection.

Values typed in the wrong box still work. A 19-digit number is a video id wherever you put it, a creator link is a creator in any field, and a duplicate (the same video by link, by id and inside a collection) becomes one row. A value that is neither a Douyin link nor an id is named in the log and skipped, and the rest of the input still runs.

What data can you extract from Douyin?

Every row is one video, flat, with the fields grouped the way you read them: what the video is, what is said in it, what it is about, who made it, how it performs, when, and its media.

GroupFields
Identityid, url, title, description
Transcripttranscript, segments (start, end, text), subtitlesSrt, language, hasSpeech, wordCount
Contenthashtags, chapters (title, summary, start), category, collectionName, episode
CreatorauthorId, authorName, authorUsername, authorUrl, authorAvatarUrl, authorDescription, authorVerified, authorFollowers, authorVideoCount, authorTotalLikes
EngagementlikeCount, commentCount, shareCount, collectCount
Timeduration (seconds), publishedAt (RFC 3339 UTC)
MediacoverUrl, videoUrl, musicTitle, musicAuthor, musicUrl, isOriginalSound
RuninputUrl, scrapedAt

What each part gives you.

  • Transcript and segments. transcript is every sentence heard, in order, as one text. segments keeps each sentence apart with its start and end in seconds from the start of the video, so you can jump to a quote, cut a clip or align a translation. subtitlesSrt is the same segments as a SubRip file, ready to save as .srt and load in CapCut, Premiere, DaVinci Resolve, YouTube or VLC.
  • Language and speech. language is read from the script of the transcript: zh for Chinese, en for English, ja and ko when they appear. hasSpeech is false when everything heard is sung or played music; the lyrics heard are still written in transcript, so nothing is thrown away. wordCount counts one word per Chinese character and one per word in other scripts.
  • Content. hashtags are the creator's tags, chapters the chapters Douyin cuts longer videos into (with a one-line summary when Douyin wrote one), category Douyin's own topic path (汽车 > 用车 > 用车知识), and collectionName with episode the series a video belongs to.
  • Creator. authorId is the creator's stable public id (sec_uid) and authorUrl their permanent page. authorFollowers, authorVideoCount and authorTotalLikes come from the creator's public profile, read once per creator per run.
  • Engagement. Likes, comments, shares and favorites as Douyin shows them at the time of the run. Douyin does not make view counts public, so there is no view field rather than a fake 0.

Which links last. url and authorUrl are permanent. coverUrl, videoUrl, authorAvatarUrl and musicUrl are Douyin's media links: they work for a few hours to a few days, so download what you want to keep right after the run.

Output example

A real row from the prefilled run: the driving coach's video on fogged-up windows. Here transcript is cut after 120 characters and segments and subtitlesSrt keep their first 3 sentences; the full row carries all 32 timed sentences and a 362-character transcript.

{
"id": "7534679152504376595",
"url": "https://www.douyin.com/video/7534679152504376595",
"title": "雨天开车秒变“睁眼瞎”?玻璃起雾别慌!3步极速除雾法",
"description": "雨天开车秒变“睁眼瞎”?玻璃起雾别慌!3步极速除雾法, 新手必存#雨天开车除雾正确方法 #新手司机 #新手开车 #青年创作者成长计划 @抖音汽车",
"transcript": "雨天开车玻璃上是不是很容易起雾你看我这个玻璃根本上看不清楚前面的路况你看,连左右两边车窗都起雾了后视镜也看不清楚这样开车上路是非常容易发生事故的有些人呢这个时候就会用手去擦这样开车上路是非常危险的今天我就教你怎么快速的把这个雾清除掉新手司机…",
"segments": [
{
"start": 0.08,
"end": 3.06,
"text": "雨天开车玻璃上是不是很容易起雾"
},
{
"start": 3.06,
"end": 6.6,
"text": "你看我这个玻璃根本上看不清楚前面的路况"
},
{
"start": 6.88,
"end": 9.4,
"text": "你看,连左右两边车窗都起雾了"
}
],
"subtitlesSrt": "1\n00:00:00,080 --> 00:00:03,060\n雨天开车玻璃上是不是很容易起雾\n\n2\n00:00:03,060 --> 00:00:06,600\n你看我这个玻璃根本上看不清楚前面的路况\n\n3\n00:00:06,880 --> 00:00:09,400\n你看,连左右两边车窗都起雾了\n",
"language": "zh",
"hasSpeech": true,
"wordCount": 356,
"hashtags": [
"雨天开车除雾正确方法",
"新手司机",
"新手开车",
"青年创作者成长计划"
],
"chapters": [
{
"title": "引言",
"start": 0
},
{
"title": "空调除雾",
"summary": "打开空调和AC,选择扇形图标,快速除雾。",
"start": 26
},
{
"title": "后视镜加热",
"summary": "找到长方形图标打开,加热后视镜,防止沾水。",
"start": 54
}
],
"category": null,
"collectionName": "新手开车技巧",
"episode": 181,
"authorId": "MS4wLjABAAAAk9mpFofCPQpsv1I1SVFxdb-A_BWiJnGy1qoDQxLEB4s",
"authorName": "懂车小彬",
"authorUsername": "48719987861",
"authorUrl": "https://www.douyin.com/user/MS4wLjABAAAAk9mpFofCPQpsv1I1SVFxdb-A_BWiJnGy1qoDQxLEB4s",
"authorAvatarUrl": "https://p3.douyinpic.com/aweme/720x720/aweme-avatar/tos-cn-avt-0015_d3d9c772518cb0a6b28375ad865ac23f.heic?from=327834062&se=false&biz_tag=feed_avatar&l=20261017041623A9CB31CD86EFC73356DF",
"authorDescription": "每天分享开车技巧\n帮助新手司机渡过新手期\n分享的是方法\n新手同学需根据自身情况灵活运用",
"authorVerified": false,
"authorFollowers": 396000,
"authorVideoCount": 560,
"authorTotalLikes": 3915504,
"likeCount": 12697,
"commentCount": 649,
"shareCount": 5123,
"collectCount": 13829,
"duration": 67.76,
"publishedAt": "2025-08-04T10:43:20Z",
"coverUrl": "https://p11-sign.douyinpic.com/tos-cn-p-0015/o0EQICA9ejiSAcB0Wi2Jf3KHlbwANimgCtEsBv~tplv-dy-resize-walign-adapt-aq:540:q75.webp?lk3s=138a59ce&x-expires=1793390400&x-signature=WNdFJcuX8DWorkLmrlUr%2FHgipnA%3D&from=327834062&s=PackSourceEnum_FEED&se=false&sc=cover&biz_tag=aweme_video&l=20261017041623A9CB31CD86EFC73356DF",
"videoUrl": "https://api-play.amemv.com/aweme/v1/play/?video_id=v0200fg10000d288r6vog65gb1sarnig&line=0&file_id=69a8317d0b204443954f77a5ce17f965&sign=643059a2651ee14606813b23a0de1b02&is_play_url=1&source=PackSourceEnum_FEED",
"musicTitle": "@懂车小彬创作的原声",
"musicAuthor": "懂车小彬",
"musicUrl": "https://sf6-cdn-tos.douyinstatic.com/obj/ies-music/7534679156710247206.mp3",
"isOriginalSound": true,
"inputUrl": "https://www.douyin.com/video/7534679152504376595",
"scrapedAt": "2026-10-16T20:16:32Z"
}

Advanced usage

Build a subtitle library from a creator's whole series

Raise maxItems to the number of episodes you want. A creator's collections are read one after the other, in episode order, so the first rows are the first episodes.

{
"creatorUrls": ["https://www.douyin.com/user/MS4wLjABAAAAF8RCFgLGLMh7pNmq-FzXfU_vpGZrhyvjkfk1Q3sMgFk"],
"maxItems": 300
}

This investing and AI channel keeps its videos in five collections (投资学习, 人工智能, 股市, 经济和行业, 汽车). Every row tells you which collection and which episode it comes from, so you can split the library by topic afterwards.

Paste what the Douyin app shares

On a phone, the app's share button copies a text with a link inside (usually a v.douyin.com short link). Paste it as it is, several of them if you like, mixed with ordinary links and feed links.

{
"videoUrls": [
"复制打开抖音,看看【懂车小彬的作品】雨天开车秒变“睁眼瞎”? https://www.iesdouyin.com/share/video/7534679152504376595/",
"https://www.douyin.com/jingxuan?modal_id=7570214442996613775"
]
}

The link inside each text is read (a short link is followed to its video), and inputUrl keeps what you pasted so you can match every row to its source.

All three inputs run together and duplicates are dropped, which makes it easy to refresh a list you already track and add a new creator in the same run.

{
"videoUrls": ["https://www.douyin.com/video/7534679152504376595"],
"videoIds": ["7566989250659388713", "7382375915797400842"],
"creatorUrls": ["https://www.douyin.com/user/MS4wLjABAAAAk9mpFofCPQpsv1I1SVFxdb-A_BWiJnGy1qoDQxLEB4s"],
"maxItems": 25
}

Feed transcripts to an LLM for summaries or translation

Run the actor from Python, keep the videos with speech, and send each transcript with its timings to the model of your choice.

{
"videoIds": ["7566989250659388713", "7527602803074665779"]
}
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("silentflow/douyin-transcript-scraper").call(
run_input={"videoIds": ["7566989250659388713", "7527602803074665779"]}
)
for video in client.dataset(run["defaultDatasetId"]).iterate_items():
if not video["hasSpeech"]:
continue
prompt = f"Summarize this Douyin video in English, with timestamps:\n{video['subtitlesSrt']}"
print(video["title"], video["authorName"], video["likeCount"])
# send `prompt` to your LLM here

Save every video's subtitles as an .srt file

Each row already holds a complete SubRip file. Write it to disk with the video id as the file name, then load it in your editor.

{
"creatorUrls": ["https://www.douyin.com/user/MS4wLjABAAAAzQO_AJd_oZkuoGv4lDBFiu4IWV-LTJUwi6xmKC3khdY"],
"maxItems": 50
}
from pathlib import Path
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("silentflow/douyin-transcript-scraper").call(
run_input={"creatorUrls": ["https://www.douyin.com/user/MS4wLjABAAAAzQO_AJd_oZkuoGv4lDBFiu4IWV-LTJUwi6xmKC3khdY"], "maxItems": 50}
)
out = Path("subtitles")
out.mkdir(exist_ok=True)
for video in client.dataset(run["defaultDatasetId"]).iterate_items():
if video["subtitlesSrt"]:
(out / f"{video['id']}.srt").write_text(video["subtitlesSrt"], encoding="utf-8")

FAQ

What is Douyin (抖音)? Douyin is ByteDance's short-video platform for mainland China, the domestic counterpart of TikTok, with its own creators, trends and shops. Most of its videos are spoken Mandarin: tutorials, product reviews, news, lessons, vlogs and live-commerce clips. This actor writes down what is said in them.

Do I need a Douyin account, a Chinese phone number or an API key? No. The actor reads public videos the way any visitor sees them, without logging in. You do not need a Chinese phone number, a VPN or a developer key.

Which languages are transcribed? Mandarin Chinese and English, including videos that switch between the two. The text comes back in the language spoken, in simplified Chinese characters for Mandarin. language tells you which script dominates each transcript.

Does it translate the transcript? No, it returns the original words with their timings. Because every sentence comes with its start and end, you can send segments or subtitlesSrt to any translator or LLM and keep the timings for translated subtitles.

What happens with videos that have only music, or no voice? They keep their row with all their other fields, and hasSpeech is false. When lyrics are heard, they are still written in transcript, so you decide what to keep. A silent video has transcript, segments and subtitlesSrt set to null.

How long does a run take? About a minute for 10 videos on our test runs: 35 to 50 seconds for 17 minutes of audio, 57 seconds for 40 minutes of audio, 77 seconds for 10 videos of 11 seconds to 9 minutes. A 9-minute explainer was transcribed in 14 to 54 seconds, a 2-minute clip in 7 to 10. Several videos are transcribed at the same time, so a list goes faster than the sum of its videos.

Can I get all the videos of a creator? The actor reads a creator's public collections (合集), the playlists shown on their Douyin page, episode by episode. Creators of lessons, tutorials, series and reviews usually keep most of their videos there: on our tests, the driving coach in the example had one collection of 497 episodes, an investing and AI channel five collections totalling 819 episodes, and an electronics teacher four collections totalling 481. A creator who posts only standalone videos has no collection to read, the run says so, and you can paste their video links instead.

Can I transcribe private, deleted or photo posts? No. A video that is removed, private or behind a wrong id is skipped and named in the log; the rest of the input still runs. Photo posts (图文) have no voice and are skipped too. None of them become a row.

How fresh is the data? Every run reads Douyin live: likes, comments, shares and favorites are the counts of the moment, and the transcript is made during the run. Re-run the same input to refresh the counts; id stays the same, so you can merge runs on it.

Can I run it on a schedule or from my code? Yes. Save your input as a task and schedule it daily or weekly in Apify, or call the actor from Python, JavaScript, Make, Zapier or n8n. Each run returns a dataset you can export as JSON, CSV or Excel.

More SilentFlow scrapers

🛒 E-commerce

💼 Jobs

🏠 Real estate

📣 Social media

🏢 Business data

✈️ Travel

🎯 Lead generation

🔎 SEO

📈 Marketing

🧰 More tools

Support

Need something this scraper doesn't do yet? We ship features fast.

  • Feature requests go straight to our backlog
  • Enterprise needs? We do custom integrations and high-volume plans
  • Pricing questions? Check the Monetization tab on the actor page

Response time: usually under 24 hours.

This Actor extracts publicly available data from Douyin (抖音). It does not bypass any login, paywall or CAPTCHA. Users are responsible for complying with Douyin's and ByteDance's terms of service and with applicable data protection laws (GDPR in the European Union, CCPA in California, and PIPL in China where relevant). Rows carry creators' public names, bios, avatars and follower counts, and transcripts may contain what people say about themselves or others: this is personal data when it concerns an individual, so handle it accordingly when you store, analyse or republish it. Videos, voices and words belong to their creators; check your rights before you reuse a transcript or subtitles in your own content. Transcripts are produced automatically and can contain recognition errors: verify quotes before you publish them.

Douyin Transcript Scraper by SilentFlow: what Douyin's creators say, as text, timed segments and SRT subtitles, with their numbers in the same row.