YouTube Transcript Scraper API: Subtitles, Captions, Channels avatar

YouTube Transcript Scraper API: Subtitles, Captions, Channels

Pricing

from $3.25 / 1,000 transcripts

Go to Apify Store
YouTube Transcript Scraper API: Subtitles, Captions, Channels

YouTube Transcript Scraper API: Subtitles, Captions, Channels

Get YouTube transcripts, subtitles and captions from videos, Shorts, playlists and whole channels as text, timestamped JSON, SRT or VTT. Any language, auto-generated captions and translation. YouTube to text for AI. Pay only for transcripts.

Pricing

from $3.25 / 1,000 transcripts

Rating

0.0

(0)

Developer

Andracore

Andracore

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

14 days ago

Last modified

Share

Get the transcript, subtitles and captions of YouTube videos, whole channels and playlists as plain text, timestamped JSON, SRT or VTT. Works with manual and auto-generated captions in any language. No API key, no browser, no login.

Turn YouTube to text in a few clicks, or call it as a YouTube transcript API from your code or AI agent.

How the YouTube Transcript Scraper works: paste a video, playlist or channel link, the scraper fetches the captions, and you get a clean transcript as text, JSON, SRT or VTT

Why use this YouTube transcript scraper

  • Channels and full playlists. Paste a channel link to get the transcripts of its newest videos, or a playlist link to get every video in it, not just the first 100.
  • You only pay for transcripts. Videos without captions, music without speech, unavailable videos and failed requests are listed with the reason and are not charged.
  • Fast. Five videos at a time. In our tests, 100 videos from one channel took about a minute.
  • Four output formats. Plain text for LLMs and search, timestamped JSON for analysis, SRT and VTT for subtitle workflows, or all at once.
  • Any language. You get captions in your preferred language when the video has them, and the original captions otherwise. YouTube machine translation is available too.
  • No API key or quota. Uses YouTube's internal mobile API. No Data API key, no daily limits.

YouTube transcript data you get for each video

FieldWhat it is
title, author, channelIdVideo and channel metadata
lengthSeconds, viewCountDuration and views when the transcript was fetched
languageLanguage of the returned transcript
isAutoGeneratedTrue when the captions were auto-generated by YouTube
preferredLanguageFoundFalse when the video has no captions in your preferred language and the original ones were returned
isTranslatedTrue when the transcript was machine-translated
translationErrorOnly when you ask for a translation: why YouTube did not translate this video
transcriptFull text as one string (text and all formats)
segmentsTimestamped segments with startMs, durationMs, text (timestamped and all formats)
srtStandard SRT subtitle file
vttStandard WebVTT subtitle file
availableLanguagesEvery caption track the video has
errorWhy the video has no transcript. These rows are not charged

Use cases for YouTube transcripts

  • LLM context. Feed video transcripts to GPT, Claude or any language model for summaries, Q&A or extraction.
  • Channel research. Pull every transcript from a creator or competitor channel and analyze topics, keywords and claims.
  • SEO research. Get the text of YouTube videos that rank for your keywords.
  • Content repurposing. Turn videos into blog posts, newsletters or social media threads.
  • Subtitle download. Get SRT or VTT files for any video.
  • Dataset building. Batch-process channels and playlists for research or training data.

How to get YouTube transcripts

  1. Paste links in YouTube links or video IDs: videos, playlists or channels.
  2. Pick a Preferred language (default: English).
  3. Choose an Output format (default: plain text).
  4. Set Max videos (default: 50).
  5. Click Start, then download the results as JSON, CSV, Excel or HTML, or read them through the Apify API.
LinkWhat you get
youtube.com/watch?v=..., youtu.be/..., youtube.com/shorts/... or the 11-character video IDThat video
youtube.com/playlist?list=...Every video in the playlist, in playlist order
youtube.com/@channel or youtube.com/@channel/videosThe channel's newest long videos
youtube.com/@channel/shortsThe channel's newest Shorts
youtube.com/@channel/streamsThe channel's past live streams

Channel links can also be youtube.com/channel/UC..., youtube.com/c/name or just @channel.

Input examples

Single video:

{
"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"language": "en",
"outputFormat": "text"
}

The 100 newest videos of a channel:

{
"urls": ["https://www.youtube.com/@3blue1brown"],
"maxVideos": 100
}

A playlist in Portuguese, as SRT subtitles:

{
"urls": ["https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi"],
"language": "pt",
"outputFormat": "srt"
}

Videos translated to Spanish, all formats:

{
"urls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://youtu.be/jNQXAC9IVRw"
],
"translateTo": "es",
"outputFormat": "all"
}

YouTube subtitles as SRT or VTT

Set Output format to SRT or VTT to get standard subtitle files that video editors and players open directly. Each video's file comes in the srt or vtt field, ready to save as a .srt or .vtt file. Choose All formats at once to get text, timestamped segments, SRT and VTT in one run.

YouTube transcript API

Run the scraper from your own code and get the transcripts back as JSON. Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("andracore/youtube-transcript-scraper").call(
run_input={"urls": ["https://www.youtube.com/@3blue1brown"], "maxVideos": 20}
)
for video in client.dataset(run.default_dataset_id).iterate_items():
print(video.get("title"), video.get("transcript") or video.get("error"))

Or with one HTTP request that waits for the run and returns the transcripts:

curl -X POST "https://api.apify.com/v2/acts/andracore~youtube-transcript-scraper/run-sync-get-dataset-items" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"], "outputFormat": "text"}'

Your token is in Apify Console under Settings > API & Integrations. The same input works from JavaScript, Make, Zapier, n8n and the Apify MCP server for AI agents.

Output example

{
"videoId": "dQw4w9WgXcQ",
"videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"author": "Rick Astley",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"lengthSeconds": 213,
"viewCount": 1823062921,
"language": "en",
"isAutoGenerated": false,
"isTranslated": false,
"preferredLanguageFound": true,
"transcript": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪ ...",
"availableLanguages": [
{ "code": "en", "name": "English", "isAutoGenerated": false },
{ "code": "en", "name": "English (auto-generated)", "isAutoGenerated": true },
{ "code": "de-DE", "name": "German (Germany)", "isAutoGenerated": false }
],
"scrapedAt": "2026-10-04T05:58:41.391Z"
}

Timestamped format:

{
"segments": [
{ "startMs": 18640, "durationMs": 3240, "text": "♪ We're no strangers to love ♪" },
{ "startMs": 22640, "durationMs": 4320, "text": "♪ You know the rules and so do I ♪" }
]
}

A video without a transcript (not charged):

{
"videoId": "y6120QOlsfU",
"videoUrl": "https://www.youtube.com/watch?v=y6120QOlsfU",
"title": "Darude - Sandstorm",
"transcript": null,
"error": "The captions only contain music or sound tags, no speech."
}

Pricing

$4.00 per 1,000 transcripts. Videos that fail, have no captions or have no speech are not charged. Paid Apify plans pay less: $3.75 on Bronze, $3.50 on Silver and $3.25 on Gold and above, per 1,000 transcripts.

TranscriptsCost
10$0.04
100$0.40
1,000$4.00

Set a maximum cost per run in the run options and the scraper stops exactly there.

Good to know

  • Caption coverage. Most YouTube videos have auto-generated captions in their original language. Manual captions are less common, and preferred when available.
  • Language. When a video has no captions in your preferred language, you get the original captions and preferredLanguageFound is false.
  • Translation is best effort. YouTube refuses some machine-translation requests. The scraper retries from other IPs, and when YouTube still refuses, you get the original captions with translationError explaining why. In our tests about 3 in 4 translations went through. Machine translation quality varies, so verify it for critical use.
  • Private, age-restricted and members-only videos. YouTube only shows these to signed-in users, so they are listed with the reason and not charged.
  • Music videos. When the captions only contain tags like [Music], the video is reported as having no speech and is not charged.
  • Residential proxy required. YouTube blocks datacenter IPs. On Apify the scraper uses Apify residential proxies by default. You can also supply your own residential proxy URLs in the input.
  • Live streams. Live streams in progress do not have complete captions and may return partial or empty results.

Other Actors by Andracore

FAQ

Do I need a YouTube API key? No. The scraper uses YouTube's internal mobile API, which does not require a key or quota.

Can I get the transcripts of a whole channel? Yes. Paste the channel link, like youtube.com/@channel, and set Max videos. You get its newest long videos. Add /shorts or /streams to the link for Shorts or past live streams.

What languages are supported? Any language YouTube has captions for. Set the preferred language to a two-letter code (en, es, pt, fr, de, ja...). A code like pt also matches regional tracks like pt-BR.

Why did I get a different language than I asked for? The video has no captions in that language, so you got the original ones (preferredLanguageFound is false). Set Translate to for a machine translation.

Why is there no transcript for some videos? The uploader turned captions off, the video has no speech, or it is private, age-restricted or unavailable. The error field says which, and these videos are not charged.

Can I use it from my code or AI agent? Yes. See the YouTube transcript API section above, or connect it to your AI agent through the Apify MCP server.

Found a bug or need a feature? Open an issue in the Issues tab.