YouTube Transcript Scraper avatar

YouTube Transcript Scraper

Pricing

Pay per event

Go to Apify Store
YouTube Transcript Scraper

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

Stas Persiianenko

Maintained by Community

Actor stats

1

Bookmarked

117

Total users

45

Monthly active users

6 days ago

Last modified

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 fullText into 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):

FieldTypeDescription
videoIdstringYouTube video ID (11 characters)
videoUrlstringFull YouTube URL
videoTitlestringVideo title
channelNamestringChannel display name
channelIdstringChannel ID (UC-prefixed)
descriptionstringFull video description
viewCountnumberExact view count
durationSecondsnumberDuration in seconds
keywordsarrayVideo tags/keywords set by creator
thumbnailstringHighest-resolution thumbnail URL
publishDatestringPublication date (ISO 8601)
availableLanguagesarrayAll available caption languages

📝 Transcript data:

FieldTypeDescription
languagestringLanguage code of selected transcript (e.g. en)
selectedLanguagestringFull language name (e.g. English)
isAutoGeneratedbooleantrue if captions are auto-generated by YouTube
segmentsarrayTimestamped text segments (see below)
segmentCountnumberTotal segments in the transcript
fullTextstringAll segments merged into one string (optional, enable via mergeSegments)

⏱️ Each segment contains:

FieldTypeDescription
textstringCaption text (HTML entities decoded)
startnumberStart time in seconds
durationnumberSegment 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.

FreeBronze ($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 caseVideosCost (Free tier)
Single video transcript1~$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

  1. Go to YouTube Transcript Scraper on Apify Store
  2. Click Try for free (no credit card needed for the free $5 credit)
  3. Paste one or more YouTube video URLs into the Videos field
  4. Set your preferred language code (default: en for English)
  5. Optionally enable Merge into full text to get a single string per video
  6. Click Start and wait seconds to minutes depending on batch size
  7. 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

ParameterTypeDefaultDescription
urlsarrayrequiredYouTube video URLs, video IDs, Shorts URLs, or channel URLs
languagestring"en"Preferred transcript language code (ISO 639-1). Automatic fallback if unavailable
includeAutoGeneratedbooleantrueInclude YouTube auto-generated captions when manual captions aren't available
mergeSegmentsbooleanfalseAdd fullText field with all segments as a single string
maxVideosPerChannelinteger50Max videos per channel URL (newest first). Range: 1–500
startDatestringOnly process videos published on or after this date (YYYY-MM-DD)
endDatestringOnly 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 dQw4w9WgXcQ work just as well as full URLs
  • 🤖 Keep includeAutoGenerated: true — many videos (especially non-English) only have auto-generated captions
  • 🧠 Use mergeSegments: true for LLM pipelines — the fullText field gives the entire transcript as one string, ready for summarization
  • 📋 Check availableLanguages in the output — if you need a different language, re-run with the correct code
  • 📅 Use startDate for 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: 0 with 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 fullText into 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 startDate set 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 ApifyClient
client = 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().items
print(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.

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