TikTok & YouTube & Loom Transcript Extractor & Video Downloader
Pricing
from $2.00 / 1,000 transcript rows
TikTok & YouTube & Loom Transcript Extractor & Video Downloader
Transcripts from TikTok, YouTube (incl. Shorts and Live) and Loom videos as text, WebVTT and SRT, with video details. Whisper AI for videos without captions, optional MP4 download. Pay only for delivered transcripts: private or unsupported links cost nothing. Mix platforms in one run.
Pricing
from $2.00 / 1,000 transcript rows
Rating
3.0
(11)
Developer
Muhamed Didovic
Maintained by CommunityActor stats
18
Bookmarked
560
Total users
5
Monthly active users
a day ago
Last modified
Categories
Share
TikTok, YouTube & Loom Transcript Extractor
Paste TikTok, YouTube or Loom video links and get their transcripts back as clean text, WebVTT subtitles and video details. Videos without captions are transcribed from their audio with Whisper AI, and you can save each video as an MP4 in the same run.
Why Use This Scraper?
- Three platforms in one run: mix TikTok, YouTube (including Shorts and Live) and Loom links in a single list
- Captions first, AI second: TikTok's, YouTube's and Loom's own caption tracks are used when they exist, Whisper only when they don't
- Timestamped output: WebVTT on every platform, SRT for Loom, timed segments for YouTube
- Rich TikTok rows: author, likes, comments, shares, plays, saves and sound details at no extra cost
- Optional MP4 download (up to 720p) stored next to the transcript
- You pay only for transcripts: unsupported, private or silent videos are listed in the run's
ERRORSrecord and cost nothing
Overview
This actor is built for content teams, researchers, marketers and developers who need the spoken words of short-form and long-form videos as data, without logging in anywhere.
Each video URL produces one dataset row. The row shape depends on the platform: a TikTok row carries the transcript plus the post's metadata and engagement, a YouTube row carries the transcript plus (optionally) the video's details, and a Loom row carries the transcript in plain text, WebVTT and SRT plus the title, creator and duration.
A URL that cannot be transcribed does not become a row. It goes to the ERRORS record in the run's key-value store with a reason, and the run's status line counts it, for example "Transcribed 3 of 5 URLs (3 rows). Not charged: 1 URL is not a supported video; 1 video has no captions and no Whisper transcript."
Supported Inputs
URL types
| Platform | URL form | Example |
|---|---|---|
| TikTok video | tiktok.com/@user/video/<id> | https://www.tiktok.com/@stoolpresidente/video/7451747413649263915 |
| TikTok share link | vm.tiktok.com/..., vt.tiktok.com/..., tiktok.com/t/... | https://vm.tiktok.com/ZMabc123/ |
| YouTube video | youtube.com/watch?v=<id>, youtu.be/<id> | https://www.youtube.com/watch?v=aAkMkVFwAoo |
| YouTube Short / Live | youtube.com/shorts/<id>, youtube.com/live/<id> | https://www.youtube.com/shorts/aAkMkVFwAoo |
| Loom video | loom.com/share/<id>, loom.com/embed/<id> | https://www.loom.com/share/912e89a68ccc42c5ab5096fec7cd63d6 |
Copy-pasteable startUrls
{"startUrls": [{ "url": "https://www.tiktok.com/@stoolpresidente/video/7451747413649263915" },{ "url": "https://www.youtube.com/watch?v=aAkMkVFwAoo" },{ "url": "https://www.loom.com/share/912e89a68ccc42c5ab5096fec7cd63d6" }]}
The same video pasted twice (for example a watch?v= link and a youtu.be link) is processed once.
Unsupported inputs
- TikTok profiles (
tiktok.com/@user): paste video links, or use TikTok Transcript Scraper, which takes profiles - YouTube channels and playlists
- Private, login-only or password-protected videos
- Sites other than TikTok, YouTube and Loom
Unsupported URLs are listed in ERRORS with the reason and are not charged.
Use Cases
| Audience | Use case |
|---|---|
| Content teams | Turn videos into blog posts, newsletters and captions for other channels |
| Marketing teams | Study what competitors and creators actually say, at scale |
| Researchers | Build text datasets from TikTok, YouTube and Loom for analysis |
| AI and LLM builders | Feed clean transcripts into summarizers, RAG pipelines and agents |
| Sales and support teams | Make recorded Loom walkthroughs searchable and quotable |
| Accessibility work | Get subtitle files (WebVTT, SRT) for existing videos |
How It Works
- Sort the URLs - every link is matched to TikTok, YouTube or Loom; anything else goes to
ERRORSbefore a single request is made. - Read the captions - the actor fetches the platform's own caption tracks: TikTok's auto and creator captions, YouTube's caption tracks in the language you pick, Loom's transcript.
- Fall back to Whisper - when a video has no caption track and
whisperFallbackis on, its audio is downloaded and transcribed with Whisper AI (faster-whisper, language detected automatically). - Deliver - each video becomes one dataset row with the transcript and the video's details; failed URLs go to
ERRORS, uncharged. - Download (optional) - with
downloadVideoon, the MP4 is saved to the run's key-value store and linked from the row.
Input Configuration
Input fields
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | 3 sample URLs | TikTok, YouTube and Loom video URLs, mixed freely. Required. |
maxItems | integer | no limit | The most URLs a run processes, in input order. Free Apify plan runs take the first 20. |
whisperFallback | boolean | true | Transcribe videos without captions from their audio with Whisper AI. Billed per started minute of audio. |
downloadVideo | boolean | false | Also save each video as an MP4 (up to 720p) and link it from the row. Billed per started minute of video. |
maxFileSizeMb | integer | 100 | Skip MP4 downloads larger than this. Used only with downloadVideo. |
maxRequestRetries | integer | 3 | Retries for a failed URL. Private and silent videos are not retried. |
includeYoutubeVideosDetails | boolean | false | YouTube: add title, channel, views, keywords, thumbnails and description to each row. |
youtubeTranscriptLanguage | string | default | YouTube caption language; falls back to the video's default track. |
includeVideoMetadata | boolean | true | TikTok: video id, caption, creation time, duration. |
includeAuthorMetadata | boolean | true | TikTok: author username, name, id, verified flag. |
includeEngagementStats | boolean | true | TikTok: likes, comments, shares, plays, saves. |
includeMusicMetadata | boolean | true | TikTok: sound title, author, id, original flag. |
languageFilter | string | empty | TikTok: comma-separated caption languages to keep, e.g. en,es. Empty keeps any. |
maxTranscriptLanguagesPerVideo | integer | 1 | TikTok: how many caption languages per video, original first. |
proxy | object | Apify residential | Proxy for fetching pages. Custom proxy URLs also route MP4 downloads. |
Common scenarios
Transcripts only, no Whisper (cheapest; caption-less videos are skipped and not charged):
{"startUrls": [{ "url": "https://www.tiktok.com/@stoolpresidente/video/7451747413649263915" }],"whisperFallback": false}
YouTube in Spanish with video details:
{"startUrls": [{ "url": "https://www.youtube.com/watch?v=aAkMkVFwAoo" }],"youtubeTranscriptLanguage": "es","includeYoutubeVideosDetails": true}
Loom walkthroughs with the MP4 saved:
{"startUrls": [{ "url": "https://www.loom.com/share/912e89a68ccc42c5ab5096fec7cd63d6" }],"downloadVideo": true,"maxFileSizeMb": 200}
Output Overview
One row per video that was transcribed. The fields differ by platform:
- TikTok rows:
url, the transcript astextandvtt, the captionlanguageandsource(subtitlesorwhisper), every selected language intranscripts, plus the post's metadata, author, engagement and sound. - YouTube rows:
videoId, the transcript astranscriptText, with timed segments (transcript) when it came from YouTube's captions, or WebVTT (transcriptVtt) when it came from the yt-dlp fallback;transcriptSourcesays which (captionsorfallback-yt-dlp). - Loom rows:
transcript,transcriptVTTandtranscriptSRT, plustitle,creatorandduration.
With downloadVideo on, every row also carries videoUrl and videoKey (or videoError when the download failed).
URLs that could not be transcribed are in the ERRORS record of the run's key-value store, each as { url, reason, message }.
Output Samples
TikTok row (captioned video, transcript shortened):
{"url": "https://www.tiktok.com/@stoolpresidente/video/7451747413649263915","videoId": "7451747413649263915","description": "TinyBrickOven in Baltimore was owned by the most upbeat guy ever and was closing forever on Christmas","createTimeISO": "2024-12-23T23:05:50.000Z","durationSeconds": 129,"authorUsername": "stoolpresidente","authorName": "Dave Portnoy","authorVerified": true,"likeCount": 2200000,"commentCount": 11800,"shareCount": 77400,"playCount": 15900000,"collectCount": 110386,"musicTitle": "original sound","language": "eng-US","source": "subtitles","transcriptLanguages": ["eng-US"],"text": "Watch out for the snow storm, president. Oh, he said watch out for. No, I didn't know what the hell you were talking about. Tiny brick oven. That looks good...","vtt": "WEBVTT\n\n00:00:00.260 --> 00:00:01.500\nWatch out for the snow storm,\n\n00:00:01.501 --> 00:00:02.621\npresident. Oh,\n..."}
YouTube row (captions read through the yt-dlp fallback, transcript shortened):
{"videoId": "aAkMkVFwAoo","title": "Mariah Carey - All I Want for Christmas Is You (Make My Wish Come True Edition)","author": "MariahCareyVEVO","channelId": "UClS0wn3LPs9jdX_yt2g1k8w","lengthSeconds": "243","viewCount": "913234099","transcriptSource": "fallback-yt-dlp","transcriptText": "(light cheerful music) I don't want a lot for Christmas. There is just one thing I need..."}
Loom row (subtitle fields shortened):
{"url": "https://www.loom.com/share/912e89a68ccc42c5ab5096fec7cd63d6","title": "Getting Started with Loom","creator": "Chanel Lovell","duration": "00:05:54","durationISO8601": "PT354.97S","transcript": "Hey, Chanel here from the Loom team. I'm going to show you how to get started with Loom...","transcriptVTT": "WEBVTT\r\n\r\n1\r\n00:00:01.154 --> 00:00:04.774\r\n...","transcriptSRT": "1\n00:00:01,154 --> 00:00:04,774\n...","error": null}
ERRORS record entry (uncharged):
{"url": "https://www.tiktok.com/@bbcnews/video/7690191232705891606","reason": "no_transcript","message": "https://www.tiktok.com/@bbcnews/video/7690191232705891606: the video has no captions, and its audio had no speech to transcribe (or whisperFallback is off)."}
Key Output Fields
Transcript
- TikTok:
text(plain),vtt(WebVTT),language,source(subtitlesorwhisper),transcriptLanguages,transcripts(one entry per selected language) - YouTube:
videoId,url,transcriptText,transcript(timed segments withstartMs,endMs,startTimeText),transcriptVtt,transcriptSource - Loom:
transcript,transcriptVTT,transcriptSRT
TikTok post
url,videoId,description,createTime,createTimeISO,durationSeconds- Author:
authorUsername,authorName,authorId,authorVerified - Engagement:
likeCount,commentCount,shareCount,playCount,collectCount - Sound:
musicTitle,musicAuthor,musicId,musicOriginal
YouTube video
videoId,title,author,channelId,lengthSeconds,viewCount,keywords,shortDescription,thumbnail(withincludeYoutubeVideosDetails, or on fallback rows)
Loom video
url,title,creator,uploadDate,duration,durationISO8601
Video file (with downloadVideo)
videoUrl,videoKey,videoError
Errors record
url,reason(invalid_input,video_unavailable,no_transcript,too_long_for_whisper,transcription_failed,fetch_failed,no_result),message
FAQ
Which URLs are supported?
TikTok video and share links, YouTube videos, Shorts and Live links, and Loom share and embed links. See the table in Supported Inputs. Profiles, channels and playlists are not supported.
What happens with a video that has no captions?
With whisperFallback on (the default), the audio is transcribed with Whisper AI and billed per started minute of audio. With it off, the video goes to ERRORS and costs nothing. A video with no speech at all (music only, silent) also goes to ERRORS.
How long can a video be for Whisper?
Whisper runs on the run's CPU, which Apify scales with memory. At the default 2 GB, TikTok clips up to about 8 minutes are transcribed, and YouTube audio is cut into chunks that each fit the Whisper timeout. A video that cannot finish in time is listed as too_long_for_whisper, uncharged; a run with more memory can take it.
Which language is the transcript in?
TikTok: the original caption language first, or the languages in languageFilter. YouTube: youtubeTranscriptLanguage, falling back to the video's default track. Whisper detects the spoken language and reports it in language.
What does it cost?
Pay per event: $0.002 per transcript row, $0.05 per started minute of audio transcribed by Whisper, $0.01 per started minute of video downloaded, plus a small start fee per GB of run memory. URLs that end in ERRORS and URLs left out by maxItems or the free-plan limit are not charged.
Can I scrape private videos?
No. The actor reads only public videos. Private, login-only and password-protected videos go to ERRORS.
Why did my run take a while?
Caption-only runs take seconds per video. Whisper and MP4 downloads take longer: the audio or video has to be downloaded through the proxy, and Whisper needs roughly 0.3 to 1 second per second of audio at the default memory.
Can I mix platforms in one run?
Yes. Paste TikTok, YouTube and Loom links together in startUrls; each is routed to the right extractor.
Support
Found a bug or need a field added? Open an issue on the actor's Issues tab or email muhamed.didovic@gmail.com. Author's website: muhamed-didovic.github.io.
Additional Services
Need a custom transcript pipeline, a private version of this actor, or data from another platform? Email muhamed.didovic@gmail.com. API access to this scraper without the Apify fee is available on request.
Explore More Scrapers
- TikTok Transcript Scraper - TikTok transcripts from videos or whole profiles
- YouTube Transcript Scraper - YouTube transcripts with SRT, channels and live streams
- Instagram Transcript Scraper - transcripts of Instagram Reels and videos
- Facebook Video Transcript Scraper - transcripts of Facebook videos
- Video & Audio Transcriber - transcribe any media file URL
Browse all actors on memo23's Apify profile.
🤖 For AI Agents & LLM Apps
Compact reference for AI agents calling this actor via the Apify MCP server or the Apify API (actor: memo23/tiktok-transcript-extractor-cheerio).
Purpose: transcripts of TikTok, YouTube and Loom videos from their URLs, using the platforms' captions and Whisper AI for videos without captions.
Minimal input:
{ "startUrls": [{ "url": "https://www.tiktok.com/@stoolpresidente/video/7451747413649263915" }], "maxItems": 10 }
Output: one dataset row per transcribed video. TikTok: url, videoId, text, vtt, language, source, transcripts[], description, createTimeISO, durationSeconds, authorUsername, likeCount, commentCount, shareCount, playCount. YouTube: videoId, url, transcriptText, transcriptSource, transcript[] {text, startMs, endMs} or transcriptVtt (plus title, author, viewCount with includeYoutubeVideosDetails). Loom: url, title, creator, duration, transcript, transcriptVTT, transcriptSRT.
Behaviors an agent should know:
- Set
maxItems; it caps URLs per run. Free Apify plan runs take 20 URLs. - Failed and unsupported URLs are not rows: read the
ERRORSkey-value record (url, reason, message) and the run's status message. - Billing: $0.002 per row; Whisper $0.05 per started minute of audio; MP4 download $0.01 per started minute; small start fee per GB of memory. Misses are free.
whisperFallback: falseskips caption-less videos at no cost.- Profiles, channels, playlists and private videos are not supported.
⚠️ Disclaimer
This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by ByteDance Ltd. (TikTok), Google LLC (YouTube) or Loom, Inc., or any of their subsidiaries. All trademarks mentioned are the property of their respective owners.
The scraper accesses only publicly available video pages and their public caption tracks - no authenticated endpoints, paid features, or content behind a login wall. Users are responsible for ensuring their use complies with the Terms of Service of TikTok, YouTube and Loom, applicable data-protection law (GDPR, CCPA, etc.), copyright law, and any contractual obligations of their own organization.
SEO Keywords
tiktok transcript extractor, youtube transcript extractor, loom transcript extractor, tiktok transcript scraper, youtube transcript scraper, loom transcript, video transcript scraper, video to text, tiktok subtitles download, youtube subtitles download, loom video downloader, tiktok video downloader, whisper transcription, speech to text api, webvtt export, srt subtitles, transcript api, Apify transcript, content repurposing data, video content analysis, ai training transcripts, social media video intelligence