YouTube Transcript Scraper
Pricing
from $1.60 / 1,000 transcripts
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
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_timestampedis one clean string for LLMs and RAG;timestampedkeeps start and duration of every caption for citations and video chapters;word_counthelps 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"]}
| Field | What it does |
|---|---|
youtube_url | One 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_videos | Videos per channel (newest first) or playlist. Default 100, max 5,000. |
channel_transcripts | true = transcribe the channel videos; false (default) = list them only, free. |
playlist_transcripts | true (default) = transcribe playlist videos; false = list them only, free. |
languages | Ordered language codes, first available wins. Manual captions beat auto-generated ones in the same language; es also matches es-419. Default ["en"]. |
transcript_type | any (default), manual or generated. |
translate_to | Ask YouTube to translate the transcript (best effort, see limits). |
output_formats | Extra fields: srt, vtt, text (one caption per line). |
include_metadata | Title, description, channel, views, duration, thumbnail, tags, was_live. Default on, free. |
preserve_formatting | Keep <i> / <b> tags in the text. |
list_only | Only list the caption tracks of each video (languages, manual / auto, translation targets). Free. |
maxConcurrency, proxyConfiguration | Parallel 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 plusis_translatable,translation_languages,description,channel_url,tags,was_live,fetched_at, andsrt/vtt/textwhen requested. Videos from a playlist or channel carrysource. - Error row (
success: false, not charged):error_type(TranscriptsDisabled,NoTranscriptFound,VideoUnavailable,AgeRestricted,InvalidInput,RequestBlocked...),error_message,is_permanent_error, and forNoTranscriptFoundtheavailable_transcriptsYouTube 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:
| Event | Free | Bronze | Silver | Gold, 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 row | free | free | free | free |
| Run start | free | free | free | free |
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 input | This actor | Notes |
|---|---|---|
youtube_url | youtube_url | Same; no 100-URL limit per run. Playlist URLs are also expanded. |
languages | languages | Same. |
translate_to | translate_to | Same, best effort (see limits). |
transcript_type | transcript_type | Same values. |
output_formats | output_formats | Same: srt, vtt, text. |
preserve_formatting | preserve_formatting | Same. |
list_only | list_only | Same, free. |
include_metadata | include_metadata | Same basic metadata, free. |
channel, max_videos, channel_transcripts | same names | Same; 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_transcripts | Extra: 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 plan | johnvc/YoutubeTranscripts | This 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_errorfield, 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
/shortsor/streamsURL for the other tabs.publishedis 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-clientfrom apify_client import ApifyClientclient = 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-clientimport { 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
- Google Ads Transparency Scraper: every ad a brand or domain runs on Google Search, YouTube, Shopping, Maps and Play.
- Meta Ad Library Scraper: Facebook and Instagram ads by page, keyword or Ad Library URL, with creatives and landing pages.
- TikTok Top Ads Scraper: top-performing TikTok ads from the Creative Center with CTR, likes and MP4 video URLs.
- LinkedIn Ad Library Scraper: B2B ads of any company from the public LinkedIn Ad Library, with targeting and impressions.
Competitor & SEO research
- Similarweb Website Traffic Scraper: monthly visits, ranks, traffic sources and top countries for any list of domains.
- Google Trends Scraper: interest over time, by region, related queries and Trending Now.
- Google Play Store Scraper: app search, details, top charts and reviews from Google Play, any country.
Travel prices
- Google Hotels Scraper: hotel prices and every booking site's rate for any city and dates.
- Google Flights Scraper: fares, airlines, stops, price level and price calendar for any route and date.
Retail prices
- Woolworths AU Product Scraper: Woolworths Australia grocery prices, specials, unit prices and barcodes.
- Coles AU Product Scraper: Coles Australia grocery prices, half-price specials, unit prices and barcodes.
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.