YouTube Transcript Scraper avatar

YouTube Transcript Scraper

Pricing

from $1.60 / 1,000 transcripts

Go to Apify Store
YouTube Transcript Scraper

YouTube Transcript Scraper

YouTube transcript API: captions and subtitles of videos, Shorts, playlists and whole channels as clean text, timestamped segments, SRT or VTT. Language picking, video metadata, auto residential fallback. 20% cheaper than the leader; failed videos are free.

Pricing

from $1.60 / 1,000 transcripts

Rating

0.0

(0)

Developer

Quelli di Carne Genuina

Quelli di Carne Genuina

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

A fast YouTube transcript API: get the captions / subtitles of any YouTube video, Shorts, playlist or whole channel as clean text for LLMs, timestamped segments, SRT or VTT. Pick the language, prefer human captions over auto-generated ones, get the video metadata for free. Videos without captions are never charged.

Independent tool, not affiliated with or endorsed by YouTube or Google LLC. It reads the same public captions you see in the YouTube player.

What you get

One row per video (real result, shortened):

{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"video_id": "dQw4w9WgXcQ",
"language": "English",
"language_code": "en",
"is_generated": false,
"source_type": "Manual",
"total_seconds": 211.32,
"duration_human": "3m 31s",
"snippet_count": 61,
"word_count": 487,
"timestamped": [{ "text": "♪ We're no strangers to love ♪", "start": 18.64, "duration": 3.24 }],
"non_timestamped": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪ ...",
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"channel_name": "Rick Astley",
"channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw",
"view_count": 1827520389,
"video_duration_seconds": 213,
"thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"success": true
}

Try it in 1 click: press Start with the prefilled two videos. In our test it finished in about 5 seconds at 512 MB and costs $0.0044 on the Apify Free plan (less on paid plans).

Price: $2.20 per 1,000 transcripts on the Free plan, down to $1.60 on Gold and above. Platform usage and proxies included, no start fee, failed videos and videos without captions free.

Why this YouTube transcript scraper

  • 20% cheaper than johnvc/YoutubeTranscripts on every plan ($2.20 vs $2.75 per 1,000 on Free, $1.60 vs $2.00 on Gold), with the same input field names, so you switch by changing the actor ID.
  • Pay only for transcripts you get: no captions, wrong language, private or deleted video = an error row that tells you why, not charged.
  • Doesn't get stuck on blocks: YouTube blocks datacenter IPs for captions; the actor detects it and moves to residential proxy automatically, at no extra cost to you.
  • Whole channels and playlists: paste a channel or playlist URL and get every transcript (up to 5,000 videos per source), or list the videos for free first.
  • Ready for AI: non_timestamped is one clean string for LLMs and RAG; timestamped keeps start and duration of every caption for citations and video chapters; word_count helps you budget tokens.

What you can do with it

  • RAG and LLM datasets: turn a channel or a playlist of lectures into a searchable text corpus.
  • AI agents that watch YouTube: let Claude, ChatGPT or Cursor read a video before answering (see MCP below).
  • Content repurposing: blog posts, newsletters, summaries, social clips with exact timestamps.
  • SEO and market research: what competitors and creators actually say, keyword by keyword.
  • Subtitles: download SRT or VTT files of your own or public videos.

Input

{
"youtube_url": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://youtu.be/jNQXAC9IVRw"],
"languages": ["en", "es"],
"transcript_type": "any",
"output_formats": ["srt"]
}
FieldWhat it does
youtube_urlOne URL or a list. Videos, Shorts, youtu.be, embed, live, mobile URLs and bare video IDs. Playlist URLs are expanded and transcribed; channel URLs are treated like channel.
channel@handle, bare handle, channel ID (UC...) or channel URL. A /videos, /shorts or /streams URL keeps that tab.
max_videosVideos per channel (newest first) or playlist. Default 100, max 5,000.
channel_transcriptstrue = transcribe the channel videos; false (default) = list them only, free.
playlist_transcriptstrue (default) = transcribe playlist videos; false = list them only, free.
languagesOrdered language codes, first available wins. Manual captions beat auto-generated ones in the same language; es also matches es-419. Default ["en"].
transcript_typeany (default), manual or generated.
translate_toAsk YouTube to translate the transcript (best effort, see limits).
output_formatsExtra fields: srt, vtt, text (one caption per line).
include_metadataTitle, description, channel, views, duration, thumbnail, tags, was_live. Default on, free.
preserve_formattingKeep <i> / <b> tags in the text.
list_onlyOnly list the caption tracks of each video (languages, manual / auto, translation targets). Free.
maxConcurrency, proxyConfigurationParallel videos (default 10) and proxy.

Also accepted for easy migration: videoUrls, urls, startUrls (lists of URLs) and language (a single code).

Output

  • Transcript row (success: true): the fields shown above plus is_translatable, translation_languages, description, channel_url, tags, was_live, fetched_at, and srt / vtt / text when requested. Videos from a playlist or channel carry source.
  • Error row (success: false, not charged): error_type (TranscriptsDisabled, NoTranscriptFound, VideoUnavailable, AgeRestricted, InvalidInput, RequestBlocked...), error_message, is_permanent_error, and for NoTranscriptFound the available_transcripts YouTube offers, so you can retry with the right language:
{
"url": "https://www.youtube.com/watch?v=4WUVkpC8MKs",
"success": false,
"error_type": "NoTranscriptFound",
"error_message": "No captions in en; available_transcripts lists the caption tracks YouTube offers.",
"available_transcripts": [{ "language": "Russian (auto-generated)", "language_code": "ru", "is_generated": true, "is_translatable": true }],
"title": "A New Take on an Ancient Sound | Tina Lajevardian | TED"
}
  • Listing row (result_type: "channel_video" or "playlist_video", free): video_id, url, title, video_duration_seconds, view_count, published, thumbnail_url.

Pricing

Pay per transcript, platform usage and proxies included. The price depends on your Apify plan:

EventFreeBronzeSilverGold, Platinum, Diamond
Transcript (one video with captions, any length, metadata included)$0.0022$0.0020$0.0018$0.0016
Video without captions, failed video, listing row, list_only rowfreefreefreefree
Run startfreefreefreefree

Examples on the Free plan: 1,000 transcripts = $2.20 ($1.60 on Gold). A 3-hour podcast costs the same as a 30-second Short. Set a maximum total charge to cap spending; the actor stops cleanly when it is reached.

Migrating from johnvc/YoutubeTranscripts

The input field names are the same, so an existing input usually works after changing the actor ID to lagenuina_agency/youtube-transcript-scraper.

johnvc/YoutubeTranscripts inputThis actorNotes
youtube_urlyoutube_urlSame; no 100-URL limit per run. Playlist URLs are also expanded.
languageslanguagesSame.
translate_totranslate_toSame, best effort (see limits).
transcript_typetranscript_typeSame values.
output_formatsoutput_formatsSame: srt, vtt, text.
preserve_formattingpreserve_formattingSame.
list_onlylist_onlySame, free.
include_metadatainclude_metadataSame basic metadata, free.
channel, max_videos, channel_transcriptssame namesSame; max_videos up to 5,000.
include_extended_metadata(not supported)Like count, upload date, categories are not returned.
max_age_days(not needed)Ignored: every transcript is fetched fresh from YouTube.
(not available)playlist_transcriptsExtra: playlists.

Output: the same field names (url, video_id, language, language_code, is_generated, is_translatable, translation_languages, total_seconds, duration_human, source_type, snippet_count, timestamped, non_timestamped, title, channel_name, channel_id, channel_url, view_count, video_duration_seconds, thumbnail_url, tags, was_live, success, error_type, error_message, available_transcripts). Extra: word_count, source. Not returned: like_count, upload_date, categories, availability, cached.

Price per 1,000 transcripts (public Apify Store prices, checked on 17 October 2026):

Apify planjohnvc/YoutubeTranscriptsThis actor
Free$2.75$2.20
Bronze$2.50$2.00
Silver$2.25$1.80
Gold / Platinum / Diamond$2.00$1.60

Both include platform usage and proxies; failed videos are free on both.

Limits / not supported

  • Only videos that have captions (manual or auto-generated) can be transcribed. There is no speech-to-text for videos without captions.
  • Translation is best effort: YouTube currently refuses most automated translation requests. When that happens you get the original transcript and a translation_error field, charged once as a normal transcript.
  • Age-restricted, private, members-only and deleted videos return an error row (not charged): they need a signed-in account, which this actor never uses.
  • Live streams in progress and premieres not yet aired have no transcript.
  • Channel listing reads the Videos tab by default; pass a /shorts or /streams URL for the other tabs. published is YouTube's relative text ("2 months ago").
  • No like_count / upload_date (johnvc's paid extended metadata).

Use it from AI agents (MCP)

This actor is a ready-made tool for any MCP client (Claude, ChatGPT, Cursor, custom agents) through the Apify MCP server:

{
"mcpServers": {
"apify": { "url": "https://mcp.apify.com/?actors=lagenuina_agency/youtube-transcript-scraper" }
}
}

Ask things like "Get the transcript of https://youtu.be/dQw4w9WgXcQ and summarise it in 5 bullets" or "Transcribe the last 20 videos of @TED and tell me which talks mention AI".

Integrations and API

Call it from your code with the official Apify clients (full examples: github.com/assa83/youtube-transcript-scraper-api):

# pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("lagenuina_agency/youtube-transcript-scraper").call(run_input={"youtube_url": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item.get("non_timestamped", item.get("error_message"))[:200])
// npm i apify-client
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('lagenuina_agency/youtube-transcript-scraper').call({ youtube_url: ['https://www.youtube.com/watch?v=dQw4w9WgXcQ'] });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

No-code: use the Apify app in n8n, Make or Zapier (action "Run Actor", pick lagenuina_agency/youtube-transcript-scraper), or the langchain-apify / CrewAI ApifyActorsTool integrations for AI agents. Results can also be pushed to Google Sheets, Slack, webhooks or any S3 bucket via Apify integrations.

More tools from Quelli di Carne Genuina

Ad intelligence

Competitor & SEO research

Travel prices

Retail prices

Content & social data

  • Medium Scraper: Medium articles by tag, author or search, with full text as Markdown.
  • Likee Scraper: Likee videos, profiles and creator engagement analytics.

FAQ

How do I get the transcript of a YouTube video? Paste the video URL in youtube_url and press Start: you get the full text and the timestamped captions in seconds, as JSON, CSV, Excel or via API.

Is there an official YouTube transcript API? The YouTube Data API only downloads captions of videos you own (OAuth required). This actor reads the public captions of any video, no Google account needed.

youtube-transcript-api (Python) not working, "RequestBlocked" or "IpBlocked"? YouTube blocks cloud and datacenter IPs. This actor handles blocking with automatic residential proxy fallback, and you call it from Python with apify-client instead.

Does it work for YouTube Shorts and live replays? Yes: Shorts, /live/ replays, embeds and youtu.be links all work when the video has captions.

Can I download a whole channel or playlist transcript? Yes: put the channel in channel with channel_transcripts: true, or paste a playlist URL in youtube_url. Up to 5,000 videos per source.

Auto-generated subtitles or manual? By default manual captions are preferred and auto-generated are used when there is nothing else (source_type tells you which). Force one with transcript_type.

Can I get SRT or VTT subtitle files? Yes: output_formats: ["srt", "vtt"] adds them to each row.

What if a video has no transcript? You get an error row (not charged) with the reason and, if other languages exist, the list of available transcripts.

Is scraping YouTube transcripts legal? The actor reads publicly available captions. You are responsible for how you use them; respect copyright and YouTube's terms.

Something broke? Open an issue on the Issues tab: we answer within 24 hours.