YouTube Transcript Scraper
Pricing
Pay per event
YouTube Transcript Scraper
Extract timestamped transcripts & subtitles from any public YouTube video. Batch hundreds of URLs, 100+ languages with auto-fallback, no API key required. Returns full video metadata + segments. Export JSON, CSV, Excel.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Stas Persiianenko
Actor stats
1
Bookmarked
117
Total users
45
Monthly active users
6 days ago
Last modified
Categories
Share
What does YouTube Transcript Scraper do?
YouTube Transcript Scraper extracts full transcripts, subtitles, and captions from any public YouTube video — with no YouTube Data API key required. Paste one or more video URLs (or channel URLs to auto-discover videos), choose your language, and get timestamped text segments plus complete video metadata including title, channel, view count, duration, keywords, and thumbnail.
The actor uses YouTube's internal ANDROID InnerTube API — the same endpoint the YouTube mobile app uses — which means it works reliably without browser overhead, API quotas, or OAuth credentials. Batch hundreds of videos in a single run.
Try it free: go to YouTube Transcript Scraper on Apify Store and click Try for free.
Who is YouTube Transcript Scraper for?
Content creators and marketers
- 📝 Repurpose a YouTube video into a blog post, newsletter, or Twitter thread
- 🔄 Feed transcripts into ChatGPT or Claude to generate summaries, titles, or social copy
- 📌 Extract quotes from interviews for use in articles or email campaigns
SEO professionals and agencies
- 🔍 Build text content from video to rank alongside video results on Google
- 🗂️ Analyze transcript keyword density across a YouTube channel
- 📊 Audit a competitor's spoken messaging for topic gaps
Researchers, academics, and journalists
- 🎓 Build NLP corpora from lectures, conference talks, and interviews
- 📰 Search and reference spoken content from press conferences without rewatching
- 🌐 Collect multilingual transcripts for cross-language analysis
Developers and AI/ML engineers
- 🤖 Feed merged
fullTextinto summarization, translation, or Q&A pipelines - ⚡ Process hundreds of transcripts overnight via the API with zero manual work
- 🧩 Power RAG (retrieval-augmented generation) systems with timestamped video knowledge
Educators and e-learning builders
- 📚 Convert course videos into searchable text notes
- ♿ Generate accessible transcripts for learners who need closed captions
- 🌍 Translate transcripts to other languages via downstream translation APIs
Why use YouTube Transcript Scraper?
- ✅ Actually works — tested on 15+ video types: music, vlogs, tutorials, lectures, news, and Shorts
- 💸 Best price on Apify Store — $0.0025/transcript (Bronze), down to $0.00075 for Diamond; up to 75% cheaper than competitors
- 🚀 Batch processing — extract hundreds of transcripts in one run (competitors often limit to 1 video per call)
- 🌍 100+ languages — auto-generated and manual captions, with smart fallback to the best available language
- 📦 Full metadata — title, channel, description, view count, duration, keywords, thumbnail, publish date, available languages
- ⚡ No browser — lightweight pure HTTP extraction, no Playwright or Puppeteer overhead
- 🔑 No API key — no YouTube Data API quota, no OAuth, no rate limits
- 📅 Date filtering — filter channel videos by publish date range when processing channels
- 🔗 Flexible input — full URLs, short URLs (
youtu.be/), embed URLs, Shorts URLs, or plain 11-character video IDs
What data can you extract?
🎬 Video metadata (returned for every video):
| Field | Type | Description |
|---|---|---|
videoId | string | YouTube video ID (11 characters) |
videoUrl | string | Full YouTube URL |
videoTitle | string | Video title |
channelName | string | Channel display name |
channelId | string | Channel ID (UC-prefixed) |
description | string | Full video description |
viewCount | number | Exact view count |
durationSeconds | number | Duration in seconds |
keywords | array | Video tags/keywords set by creator |
thumbnail | string | Highest-resolution thumbnail URL |
publishDate | string | Publication date (ISO 8601) |
availableLanguages | array | All available caption languages |
📝 Transcript data:
| Field | Type | Description |
|---|---|---|
language | string | Language code of selected transcript (e.g. en) |
selectedLanguage | string | Full language name (e.g. English) |
isAutoGenerated | boolean | true if captions are auto-generated by YouTube |
segments | array | Timestamped text segments (see below) |
segmentCount | number | Total segments in the transcript |
fullText | string | All segments merged into one string (optional, enable via mergeSegments) |
⏱️ Each segment contains:
| Field | Type | Description |
|---|---|---|
text | string | Caption text (HTML entities decoded) |
start | number | Start time in seconds |
duration | number | Segment duration in seconds |
How much does it cost to extract YouTube transcripts?
This Actor uses pay-per-event pricing — you pay only for what you extract. No monthly subscription. All platform costs (compute, proxy, storage) are included.
| Free | Bronze ($29/mo) | Silver ($199/mo) | Gold ($999/mo) | |
|---|---|---|---|---|
| Start fee | $0.003 | $0.0025 | $0.002 | $0.0015 |
| Per transcript | $0.003 | $0.0025 | $0.002 | $0.0015 |
| 10 transcripts | $0.033 | $0.0275 | $0.022 | $0.0165 |
| 100 transcripts | $0.303 | $0.2525 | $0.202 | $0.1515 |
| 1,000 transcripts | $3.003 | $2.5025 | $2.002 | $1.5015 |
Higher-tier plans get additional volume discounts (Platinum and Diamond).
Real-world cost examples:
| Use case | Videos | Cost (Free tier) |
|---|---|---|
| Single video transcript | 1 | ~$0.006 |
| YouTube playlist (20 videos) | 20 | ~$0.063 |
| Channel analysis (100 videos) | 100 | ~$0.303 |
| Research dataset (1,000 videos) | 1,000 | ~$3.003 |
Compared to competitors: starvibe charges $0.005/video, karamelo charges $0.005–$0.007/video, pintostudio and topaz_sharingan charge $0.01/video. Our batch processing makes bulk extraction significantly cheaper when you include the $0.003 start fee savings per run.
On the free $5 credit that every new Apify account gets, you can extract approximately 1,600 transcripts.
How to get YouTube video transcripts
- Go to YouTube Transcript Scraper on Apify Store
- Click Try for free (no credit card needed for the free $5 credit)
- Paste one or more YouTube video URLs into the Videos field
- Set your preferred language code (default:
enfor English) - Optionally enable Merge into full text to get a single string per video
- Click Start and wait seconds to minutes depending on batch size
- Download transcripts as JSON, CSV, or Excel from the dataset view
Example inputs:
Minimal — single video:
{"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"language": "en"}
Batch with merge:
{"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/jNQXAC9IVRw","9bZkp7q19f0"],"language": "en","includeAutoGenerated": true,"mergeSegments": true}
Channel with date filter (last 30 days):
{"urls": ["https://www.youtube.com/@lexfridman"],"language": "en","maxVideosPerChannel": 20,"startDate": "2026-03-01"}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
urls | array | required | YouTube video URLs, video IDs, Shorts URLs, or channel URLs |
language | string | "en" | Preferred transcript language code (ISO 639-1). Automatic fallback if unavailable |
includeAutoGenerated | boolean | true | Include YouTube auto-generated captions when manual captions aren't available |
mergeSegments | boolean | false | Add fullText field with all segments as a single string |
maxVideosPerChannel | integer | 50 | Max videos per channel URL (newest first). Range: 1–500 |
startDate | string | — | Only process videos published on or after this date (YYYY-MM-DD) |
endDate | string | — | Only process videos published on or before this date (YYYY-MM-DD) |
Output examples
Transcript with segments:
{"videoId": "dQw4w9WgXcQ","videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","videoTitle": "Rick Astley - Never Gonna Give You Up (Official Music Video)","channelName": "Rick Astley","channelId": "UCuAXFkgsw1L7xaCfnd5JJOw","description": "The official video for \"Never Gonna Give You Up\" by Rick Astley...","viewCount": 1600000000,"durationSeconds": 213,"keywords": ["rick astley", "never gonna give you up"],"thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg","publishDate": "2009-10-25","language": "en","selectedLanguage": "English","isAutoGenerated": false,"availableLanguages": ["English", "Spanish", "French", "German (auto-generated)"],"segments": [{ "text": "We're no strangers to love", "start": 18.0, "duration": 3.0 },{ "text": "You know the rules and so do I", "start": 21.0, "duration": 3.0 }],"segmentCount": 61}
With mergeSegments: true, the item also includes:
{"fullText": "We're no strangers to love You know the rules and so do I..."}
Tips for best results
- 📦 Batch your requests — 100 videos in one run saves 99 start fees versus 100 separate runs
- 🆔 Use video IDs directly — plain 11-character IDs like
dQw4w9WgXcQwork just as well as full URLs - 🤖 Keep
includeAutoGenerated: true— many videos (especially non-English) only have auto-generated captions - 🧠 Use
mergeSegments: truefor LLM pipelines — thefullTextfield gives the entire transcript as one string, ready for summarization - 📋 Check
availableLanguagesin the output — if you need a different language, re-run with the correct code - 📅 Use
startDatefor channel monitoring — set a weekly date range to get only new videos from a channel - ⚠️ Videos without captions — Shorts, music-only videos, and some older uploads have no captions; they return
segmentCount: 0with full metadata
How to download YouTube subtitles and captions
YouTube Transcript Scraper retrieves subtitles using YouTube's internal InnerTube API — the same way the YouTube player loads captions. You get the exact text a viewer sees when they enable captions.
Supported caption types:
- 📝 Manual captions — professionally created or uploaded by the video owner (highest accuracy)
- 🤖 Auto-generated captions — created by YouTube's speech recognition (most English videos and many others)
- 🌐 Community captions — user-contributed translations where enabled by the creator
Export formats from the Apify dataset:
- JSON — structured data with timestamps, ideal for programmatic use
- CSV — flat format, one row per video, easy to open in Excel or Google Sheets
- Excel (.xlsx) — ready-to-open spreadsheet with all metadata and transcript columns
To download: run the Actor → click Export in the Dataset view → choose your format.
How to get transcripts without the YouTube Data API
The official YouTube Data API v3 does not expose transcript or caption text to third-party developers — it only lets you list available caption tracks. To read the actual text, you need a different approach.
YouTube Transcript Scraper uses YouTube's ANDROID InnerTube API — the same internal endpoint used by the YouTube mobile app to load captions. This approach:
- 🚫 Requires no YouTube API key or quota
- 🌍 Works on any public video with captions enabled
- ⏱️ Returns more detailed segmentation than web-based extraction
- ♾️ Is not subject to the YouTube Data API's 10,000 daily unit quota
This makes it ideal for developers who need transcripts at scale without managing API keys, OAuth flows, or quota limits.
Integrations
Connect YouTube Transcript Scraper with your existing workflows:
- 📊 YouTube Transcript → Google Sheets — schedule daily extraction of a channel's new videos and append transcripts to a running spreadsheet for content analysis
- 🤖 YouTube Transcript → OpenAI/Claude — pipe
fullTextinto a summarization prompt to auto-generate blog posts or show notes from every new episode - 📧 YouTube Transcript → Email — use Make or Zapier to send a formatted transcript digest when a watched channel publishes a new video
- 🔔 Webhook on completion — trigger a downstream pipeline (keyword extraction, translation, indexing) as soon as the run finishes
- 📅 Scheduled channel monitoring — run weekly with
startDateset to last week to continuously capture new transcripts from research channels
Learn more about Apify integrations.
Using the Apify API
You can start YouTube Transcript Scraper programmatically using the Apify API.
Node.js:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('automation-lab/youtube-transcript').call({urls: ['https://www.youtube.com/watch?v=dQw4w9WgXcQ'],language: 'en',mergeSegments: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items[0].fullText);
Python:
from apify_client import ApifyClientclient = ApifyClient('YOUR_API_TOKEN')run = client.actor('automation-lab/youtube-transcript').call(run_input={'urls': ['https://www.youtube.com/watch?v=dQw4w9WgXcQ'],'language': 'en','mergeSegments': True,})items = client.dataset(run['defaultDatasetId']).list_items().itemsprint(items[0]['fullText'])
cURL:
curl -X POST "https://api.apify.com/v2/acts/automation-lab~youtube-transcript/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"urls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"language": "en","mergeSegments": true}'
Use with AI agents via MCP
YouTube Transcript Scraper is available as a tool for AI assistants that support the Model Context Protocol (MCP).
Add the Apify MCP server to your AI client — this gives you access to all Apify actors, including this one:
Setup for Claude Code
$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/youtube-transcript"
Setup for Claude Desktop, Cursor, or VS Code
Add this to your MCP config file:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/youtube-transcript"}}}
Your AI assistant will use OAuth to authenticate with your Apify account on first use.
Example prompts
Once connected, try asking your AI assistant:
- "Use automation-lab/youtube-transcript to get the full transcript of this video and summarize the key points: https://www.youtube.com/watch?v=dQw4w9WgXcQ"
- "Extract the English transcripts for all videos published this month on the @lexfridman channel and merge them into full text"
- "Get the transcript for this YouTube lecture and extract all timestamps where the speaker mentions machine learning"
Learn more in the Apify MCP documentation.
Is it legal to scrape YouTube transcripts?
YouTube Transcript Scraper only accesses publicly available captions and metadata from YouTube videos. It does not bypass any login walls, age restrictions, or access controls. The data collected is the same as what any viewer can access by clicking the CC button on a public YouTube video.
Web scraping of publicly available data is generally considered legal — particularly for non-commercial research and content analysis purposes — but you should review YouTube's Terms of Service and applicable laws in your jurisdiction. Use the data responsibly and in compliance with privacy regulations like GDPR and CCPA. Read more about the legality of web scraping.
FAQ
Can I extract transcripts from private or age-restricted videos? No. This Actor only works with public YouTube videos. Private, unlisted, or age-restricted videos that require a login will return an error message with the video ID so you can identify which ones failed.
What happens if a video doesn't have captions?
The Actor returns the full video metadata with segmentCount: 0 and an empty segments array. No error is thrown. You still get the title, description, view count, publish date, and other fields.
Which languages are supported?
All languages available on YouTube — over 100 languages including auto-generated captions. Set language to any ISO 639-1 code: en, es, de, ja, ko, ar, hi, pt, fr, zh, etc. If your preferred language isn't available, the Actor automatically falls back to the best available option and records it in selectedLanguage.
How many videos can I process in one run? There is no hard limit. The Actor processes videos concurrently, so large batches benefit from parallelization. For very large datasets (10,000+ videos), consider splitting into multiple runs scheduled across time.
What URL formats are supported?
Full URLs (youtube.com/watch?v=...), short URLs (youtu.be/...), embed URLs (youtube.com/embed/...), Shorts URLs (youtube.com/shorts/...), channel URLs (youtube.com/@handle, youtube.com/channel/UC..., youtube.com/c/Name), bare @handles, and plain 11-character video IDs.
Why are there more segments than the competitor's output? This Actor uses the ANDROID InnerTube API, which often returns more detailed caption segmentation than web-based extraction. More segments means more precise timestamps for applications that need accurate time references.
The transcript is in the wrong language. How do I fix it?
Set language to the desired ISO 639-1 code (e.g., es for Spanish, ja for Japanese). Check availableLanguages in the output to see all options for that video. If the target language has only auto-generated captions, make sure includeAutoGenerated is true.
I'm getting segmentCount: 0. Why?
Some videos genuinely have no captions — this is common with Shorts, music videos, and older uploads. Check if captions exist on YouTube by opening the video and clicking the CC button. If captions exist on YouTube but the Actor returns 0 segments, verify that includeAutoGenerated is true, since many videos only have auto-generated captions that are skipped when this option is off.
How is this different from the YouTube Data API? The YouTube Data API v3 does not expose transcript text — it only lists available caption tracks. This Actor bypasses that limitation by using YouTube's internal InnerTube endpoint, which returns the actual caption text with timestamps. No API key or quota required.
Other YouTube and video scrapers
- YouTube Scraper — scrape YouTube videos, channels, playlists, and comments at scale
- YouTube Shorts Scraper — extract Shorts data from any YouTube channel including views, likes, and engagement
- YouTube Transcript Enhanced — transcripts with SRT/VTT export, paragraph chunking, and keyword search
- TikTok Scraper — scrape TikTok videos, profiles, and hashtags
- Instagram Scraper — extract Instagram posts, reels, profiles, and hashtags