YouTube Transcript & Subtitle Scraper avatar

YouTube Transcript & Subtitle Scraper

Pricing

from $8.00 / 1,000 transcripts

Go to Apify Store
YouTube Transcript & Subtitle Scraper

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

herus13

Maintained by Community

Actor stats

0

Bookmarked

9

Total users

4

Monthly active users

4 days ago

Last modified

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

EventPrice
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

FieldTypeRequiredDefaultWhat it does
video_urlsarraynoYouTube 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.
languagestringnoCaption 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_manualbooleannotrueWhen 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_sourceintegernoHow 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_recordsintegernoCeiling 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.
proxyUrlsarraynoLeave 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

  1. Open the actor on Apify Console and click Try for free.
  2. Paste video, playlist or channel links into Video, playlist, or channel URLs — you can mix all three.
  3. 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_text is a clean newline-separated string; transcript_segments keeps second-accurate timings, so .srt and .vtt need 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_text strings 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_count and published_at.
  • Searchable interview and webinar archivestranscript_segments gives the timings for a jump-to-moment index over hundreds of hours of recordings.
  • Subtitle and caption files — Convert the segments into .srt or .vtt for accessibility or localization, after checking available_languages for 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.

Building a content-intelligence pipeline? Pair this actor with: