YouTube Transcript & Subtitle Scraper
Pricing
from $8.00 / 1,000 transcripts
YouTube Transcript & Subtitle Scraper
Scrape transcripts and subtitles with timestamps from any public YouTube video, playlist or channel. Every row carries transcript_text, title, channel_name, language, duration_seconds, view_count and published_at. Export JSON, CSV or Excel.
Pricing
from $8.00 / 1,000 transcripts
Rating
0.0
(0)
Developer
herus13
Maintained by CommunityActor stats
0
Bookmarked
9
Total users
4
Monthly active users
4 days ago
Last modified
Categories
Share
The YouTube Transcript & Subtitle Scraper extracts the full transcript, with per-line timestamps, from any public YouTube video, playlist or channel — along with the video's title, channel, duration, publish date, view count and every caption language available for it. No API key needed.
What you get
One dataset row per video, ready to export as JSON, CSV or Excel.
{"video_id": "dQw4w9WgXcQ","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","channel_name": "Rick Astley","duration_seconds": 213,"published_at": "2009-10-24T23:57:33-07:00","view_count": 1793953812,"language": "en","is_generated": false,"transcript_text": "[♪♪♪]\n♪ We're no strangers to love ♪\n♪ You know the rules and so do I ♪","scraped_at": "2026-07-18T09:03:17.597050+00:00"}
transcript_text is the whole transcript as one string, one caption per line — the shape an LLM prompt wants. Rows also carry channel_id, description, thumbnail_url, transcript_segments (every caption line as {text, start, duration}, for subtitle files and jump-to-timestamp links), available_languages (every caption track YouTube offers for that video) and error, which is null on success and otherwise says why a row has no transcript.
What it costs
| Event | Price |
|---|---|
Actor Start (apify-actor-start) | $0.001 |
Transcript (transcript) | $0.008 |
You pay per transcript delivered, not per minute: $0.008 a video plus $0.001 to start the run. A hundred videos is about $0.80. A video with no captions, or none in the language you asked for, still arrives as a row explaining itself and is not charged — and discovering a playlist or channel costs nothing, so you only pay for what comes back. The residential proxy the run needs is included in that price.
Input
| Field | Type | Required | Default | What it does |
|---|---|---|---|---|
video_urls | array | no | — | YouTube links to transcribe, one per entry, mixing three kinds freely. A video: watch?v=…, youtu.be/…, /shorts/…, /embed/…, or a bare 11-character ID. A playlist: /playlist?list=PL… — every video in it is transcribed. A channel: /@handle, /channel/UC…, /c/Name or /user/Name — its uploads are transcribed, newest first. A watch?v=…&list=… link counts as the single video. Leave empty and the run has nothing to do. |
language | string | no | — | Caption language you want, written as a language code — for example en, es, ja, pt-BR. Leave empty to take whichever track the video treats as its default. When a video has no track in the language you asked for, its row still arrives and the reason is on it. |
prefer_manual | boolean | no | true | When a video carries both human-written and auto-generated captions in the language you asked for, take the human ones, which are punctuated and far more accurate. Default true. Set it to false to take the auto-generated track instead. A video with only one kind of track returns that kind regardless. |
max_videos_per_source | integer | no | — | How many videos to take from each playlist or channel you paste, at least 1. Leave empty to use 100, the built-in cap that stops one channel link from turning into a very large run. It does nothing to entries that are already a single video. |
max_records | integer | no | — | Ceiling on how many videos the whole run processes, counted after playlists and channels have expanded, at least 1. Leave empty for no ceiling. It is the cost ceiling for a run that starts from a channel whose size you do not know. |
proxyUrls | array | no | — | Leave empty and the run uses the residential proxy this actor ships with, included in the price of the run. To route the run through your own account instead, add one gateway URL per entry, for example http://user:pass@host:port — works with DataImpulse, Bright Data, Oxylabs, Smartproxy or any provider that issues URLs. When set, only these URLs are used. |
How to run it
- Open the actor on Apify Console and click Try for free.
- Paste video, playlist or channel links into Video, playlist, or channel URLs — you can mix all three.
- Pick a caption language if you want a specific one, then Run. Export JSON, CSV or Excel from the dataset.
{"video_urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://www.youtube.com/@GoogleDevelopers","https://www.youtube.com/playlist?list=PLOU2XLYxmsIKpaV8h0AGE05so0fAwwfTw"],"language": "en","prefer_manual": true,"max_videos_per_source": 50,"max_records": 200}
Minimal input:
{"video_urls": ["dQw4w9WgXcQ"]}
Available as the MCP tool herus13--youtube-transcript-scraper on mcp.apify.com and through the Apify API; send the same JSON.
Why this scraper
- Transcript, metadata and language list in one row. No chaining a captions tool to a separate metadata scraper and then joining the two on a video ID.
- A channel is a valid input. Paste one channel or playlist link and every video in it is found and transcribed, capped where you tell it to stop.
- Ready for a prompt or for a subtitle file.
transcript_textis a clean newline-separated string;transcript_segmentskeeps second-accurate timings, so.srtand.vttneed no re-timing work. - No API key to obtain. There is no public key that returns caption text, so there is nothing to apply for, quota or rotate.
- You are charged for transcripts, not attempts. A video with no captions is still delivered as a row, flagged, and never billed.
Use cases
- RAG pipelines and LLM knowledge bases — A conference playlist or a course channel becomes a set of
transcript_textstrings ready to chunk and embed, each keeping the title, channel and publish date a citation needs. - Content repurposing — Turn a webinar or podcast into blog drafts, newsletters and social copy by feeding the transcript straight into a summarizer.
- Video SEO and competitor analysis — Read what the top-ranking videos for a keyword actually say, not what their titles claim, weighted by
view_countandpublished_at. - Searchable interview and webinar archives —
transcript_segmentsgives the timings for a jump-to-moment index over hundreds of hours of recordings. - Subtitle and caption files — Convert the segments into
.srtor.vttfor accessibility or localization, after checkingavailable_languagesfor tracks that already exist. - Channel monitoring — Re-run a channel weekly and watch how its talking points move over time.
FAQ
Can I scrape a whole playlist or channel? Yes. Paste the playlist or channel link and every video in it is found and transcribed. Max videos per playlist/channel caps each one at 100 by default, and Max videos (whole run) caps the run as a whole. Mixes and radio lists (list=RD…) and private lists such as Watch Later or Liked are not supported.
Why did some videos come back with no transcript? The error field says which of the three reasons applied: the video has no captions at all, it has none in the language you asked for, or the request did not get through. The row still arrives, and it is not charged.
Can I get auto-generated captions specifically? Yes — set Prefer human (manual) captions to false. When a video has only auto-generated tracks, those are used whatever the setting says.
What is transcript_segments for? The same transcript as transcript_text, split into {text, start, duration} objects with second-accurate timings — for jump-to-timestamp links, subtitle files, or aligning a quote to a moment in the video.
Is a proxy included? A residential proxy is included in the price of the run. To use your own, paste gateway URLs into Your own proxy URLs. Scraping at volume? Your own DataImpulse account is cheaper per GB.
Is scraping YouTube transcripts legal? This actor collects only publicly available caption text and metadata that YouTube shows to any viewer. You are responsible for complying with YouTube's terms and applicable law for your use case, including attribution and the copyright of the spoken content itself.
Related actors
Building a content-intelligence pipeline? Pair this actor with:
- Google Trends Scraper — check whether a video's topic is rising before you write about it.
- Google Play App Search & Reviews Scraper — pair video content with what app users actually say.
- Apple App Store Reviews Scraper — the iOS side of the same review picture.
- levels.fyi Salary Scraper — compensation data for career and tech-content research.