Extract complete, timestamped transcripts and subtitles from any YouTube video URL or ID without API keys. Supports 100+ languages, auto-generated captions, and SRT/VTT/Markdown export.
Extract complete, timestamped transcripts and subtitles from any YouTube video URL or ID without API keys. Supports 100+ languages, auto-generated captions, and SRT/VTT/Markdown export.
Extracts complete transcripts and subtitles without Google Cloud console setup, paid API keys, or 10,000 units/day quota limitations.
Cascades across Android 20.42.38, iOS 19.29.1, TVHTML5, and Playwright DOM fallbacks to bypass modern BotGuard challenges and cookie walls.
Simultaneously outputs clean LLM paragraphs, timestamped markdown, SubRip (.srt), and WebVTT (.vtt) subtitle files with millisecond precision.
Supports human-authored and auto-generated ASR captions with seamless on-the-fly translation into any target language via YouTube cloud services.
Collapses rolling-buffer repeated phrases in YouTube ASR speech recognition and optionally strips sound annotations like [Music] and [Applause].
Templates & workflows
Extract full transcript, timestamped lines, and SRT/VTT subtitle files for a popular YouTube video.
{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"format": "all",
"language": "auto",
"translateTo": "",
"includeTimestamps": true,
"preserveFormatting": true
}Extract clean, unformatted spoken text from a vertical YouTube Shorts video for LLM summarization.
{
"url": "https://www.youtube.com/shorts/jNQXAC9IVRw",
"format": "paragraphs",
"language": "auto",
"translateTo": "",
"includeTimestamps": false,
"preserveFormatting": false
}Process multiple video URLs simultaneously across standard and short links with automatic deduplication.
{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ\nhttps://youtu.be/jNQXAC9IVRw",
"format": "timestamped",
"language": "auto",
"translateTo": "",
"includeTimestamps": true,
"preserveFormatting": true
}YouTube Transcript Scraper: Free InnerTube Subtitle & Caption Extraction API (SRT, VTT, Markdown & Plain Text)
YouTube Transcript Scraper is an enterprise-grade, 100% free, zero-API-key transcript and subtitle extraction plugin for BrowserMesh. Built upon YouTube's modern 2026 InnerTube protocol, multi-client waterfall emulation (Android 20.42.38, iOS 19.29.1, Smart TV TVHTML5, Mobile Web, and Desktop Web), and direct timedtext Google Video Edge CDN ingestion, it extracts full, clean, timestamped transcripts and subtitle files (
.srt,.vtt, Markdown, Plain Text) from any YouTube video, Shorts, or unlisted upload at machine speed without quota exhaustion, Google Cloud console setup, or billing credentials.
The cloud-native, zero-cost alternative to costly paid YouTube Data API v3 setups (which cap usage at a 10,000 units/day quota where caption operations cost 100+ units) and fragile browser extensions that break on anti-bot challenges.
Traditional YouTube transcript scraping forces developers into either costly cloud billing or fragile DOM extensions that trigger IP bans. Here is how BrowserMesh compares across industry benchmarks:
.srt) and WebVTT (.vtt) subtitle files with millisecond timing precision for direct import into Adobe Premiere Pro, DaVinci Resolve, Final Cut Pro, or CapCut.To guarantee near-100% extraction resilience across all video types (standard uploads, YouTube Shorts, age-restricted clips, unlisted links, and live stream archives), the engine executes an autonomous 4-Tier Waterfall Fallback architecture:
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RAW INPUT (YouTube URL, Shorts, Embed, or ID) β
βββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β STAGE 1: INPUT NORMALIZATION β
β β’ Extracts clean 11-char Video ID via Regex β
β β’ Deduplicates redundant URLs across multi-line batch inputs β
βββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TIER 1: MULTI-CLIENT INNERTUBE PLAYER API β
β β’ Android 20.42.38 (Primary: Bypasses BotGuard & GDPR) β
β β’ iOS 19.29.1 (Secondary: High-trust native mobile gRPC) β
β β’ TVHTML5_SIMPLY_EMBEDDED_PLAYER 2.0 (Age-gate bypass) β
β β’ Mobile Web (MWEB) & Desktop Web (WEB) fallback β
βββββββββββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β Success?
ββββββββββββββββ΄βββββββββββββββ
YESβ β NO (Throttled/Blocked)
βΌ βΌ
βββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββββββ
β TIER 2: TIMEDTEXT INGEST β β TIER 3: IN-PAGE HTML PARSER β
β Direct CDN GET /timedtext β β GET https://youtube.com/watch β
β Preferred: &fmt=json3 β β (Extract ytInitialPlayerResponseβ
β Fallback: XML srv1 / srv3 β β + INNERTUBE_API_KEY) β
βββββββββββββββ¬ββββββββββββββ βββββββββββββββ¬ββββββββββββββββββββ
β Success? β Success?
ββββββββββ΄βββββββββ ββββββββββ΄βββββββββ
YESβ NOβ YESβ NOβ
βΌ βΌ βΌ βΌ
ββββββββββββββββ βββββββββββββββββββββββββ βββββββββββββββββββββ
β Clean & Parseβ β TIER 4: PLAYWRIGHT β β Yield Clean Error β
β Yield Record β β STEALTH DOM FALLBACK ββββΊβ Row with Details β
β Status: 'ok' β β (Evaluate transcript) β β (No crash) β
ββββββββββββββββ βββββββββββββββββββββββββ βββββββββββββββββββββ
POST https://www.youtube.com/youtubei/v1/player using official mobile app signatures (ANDROID, IOS, TVHTML5). Native mobile client protocols bypass Google's desktop BotGuard challenges, EU GDPR consent screens, and standard age verification gates without requiring user credentials.https://www.youtube.com/api/timedtext). Once a valid captionTrack.baseUrl is obtained, subtitle ingestion does NOT require PO tokens or user authentication. The engine attempts structured json3 first (yielding millisecond word-level timing), cascading to standard XML (srv1) and mobile XML (srv3).ytInitialPlayerResponse script objects, and harvests the active INNERTUBE_API_KEY and session visitorData.ytd-transcript-segment-renderer).Completely independent of Google Cloud Console billing, OAuth credentials, and daily quota limits. Uses native mobile and web protocols used directly by YouTube clients.
Emulates official YouTube client profiles across Android (v20.42.38), iOS (v19.29.1), Smart TV embedded player, and Mobile Web, ensuring resilient extraction even on hardened videos.
YouTube's real-time automatic speech recognition (ASR) frequently repeats words across overlapping time windows. Our intelligent deduplication engine collapses duplicate phrases into clean, readable sentences.
Pulls timedtext directly from Google's high-speed public CDN nodes in json3, srv1, or srv3 format with full HTML entity unescaping (&, ', ", <, >).
Simultaneously outputs:
**01:23** text...) ideal for study notes and summaries.WEBVTT.{ start, end, duration, text } objects activating BrowserMesh Sub-Table Data Inspector.Optionally strips non-speech audio cues such as [Music], [Applause], [Laughter], [Cheering], and [Sigh] for crystal-clear spoken word transcription.
Leverages YouTube's cloud translation engine (&tlang=<code>) to automatically translate captions into any target language (e.g., Spanish, German, French, Japanese, Tamil, Hindi).
Emits high-resolution video thumbnail URLs (hqdefault.jpg), channel attribution links, duration badges, and view counts, automatically activating the BrowserMesh Cards View and Modal Lightbox.
Configure your transcription job in the BrowserMesh Dashboard or via JSON configuration:
{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ, https://youtu.be/jNQXAC9IVRw",
"language": "auto",
"format": "all",
"includeTimestamps": true,
"translateTo": "",
"preserveFormatting": true
}
The parser automatically extracts the 11-character Video ID from all YouTube link structures:
https://www.youtube.com/watch?v=dQw4w9WgXcQhttps://www.youtube.com/watch?v=dQw4w9WgXcQ&t=42s&feature=sharehttps://youtu.be/dQw4w9WgXcQ or https://youtu.be/dQw4w9WgXcQ?t=15https://www.youtube.com/shorts/dQw4w9WgXcQhttps://m.youtube.com/watch?v=dQw4w9WgXcQhttps://www.youtube.com/embed/dQw4w9WgXcQhttps://www.youtube.com/live/dQw4w9WgXcQdQw4w9WgXcQEach yielded record strictly satisfies the following schema contract:
Seamlessly integrate YouTube transcripts into your production apps, data science notebooks, or autonomous AI pipelines.
Run an immediate extraction job against BrowserMesh cloud workers:
curl -X POST "https://api.browsermesh.in/v1/plugins/youtube-transcript-scraper/run" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"language": "auto",
"format": "all",
"includeTimestamps": true,
"preserveFormatting": false
}'
Extract full transcripts and streaming segments in any Node.js service or serverless edge function:
import { BrowserMeshClient } from '@browsermesh/sdk';
const client = new BrowserMeshClient({ apiKey: process.env.BROWSERMESH_API_KEY });
async function getTranscripts() {
const result = await client.runPlugin('youtube-transcript-scraper', {
url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
language: 'auto',
format: 'paragraphs',
preserveFormatting: false
});
for (const record of result.data) {
console.log(`Title: ${record.title}`);
console.log(`Word Count: ${record.word_count}`);
console.log(`Transcript: ${record.transcript}`);
}
}
getTranscripts();
Process hundreds of videos in bulk with automatic error isolation and CSV/JSON export:
import requests
import json
URLS = [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://www.youtube.com/shorts/jNQXAC9IVRw"
]
payload = {
"url": "\n".join(URLS),
"language": "auto",
"format": "all",
"includeTimestamps": True,
"preserveFormatting": True
}
response = requests.post(
"https://api.browsermesh.in/v1/plugins/youtube-transcript-scraper/run",
json=payload
)
records = response.json().get("data", [])
for item in records:
if item["status"] == "ok":
print(f"β
Extracted {item['title']} ({item['word_count']} words)")
with open(f"{item['video_id']}.srt", "w", encoding="utf-8") as f:
f.write(item["transcript_srt"])
else:
print(f"β οΈ Video {item['video_id']} status: {item['status']}")
Feed extracted video transcripts directly into LangChain text splitters, OpenAI embeddings, and Chroma vector stores for conversational video question answering:
from langchain.text_splitter import RecursiveCharacterTextSplitter
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings
# 1. Fetch transcript from BrowserMesh Scraper
transcript_text = item["transcript"]
# 2. Chunk transcript into semantic passages
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=150)
docs = text_splitter.create_documents(
texts=[transcript_text],
metadatas=[{"video_id": item["video_id"], "title": item["title"], "url": item["url"]}]
)
# 3. Store in Vector Database for RAG Search
vector_db = Chroma.from_documents(docs, OpenAIEmbeddings())
query = "What is the key takeaway explained in this video?"
relevant_chunks = vector_db.similarity_search(query, k=3)
Here are two verified records extracted by the plugin in live production tests:
[
{
"video_id": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Music Video)",
"channel": "Rick Astley",
"channel_url": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
"thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"duration": 213,
"duration_formatted": "3:33",
"view_count": 1729000000,
"published_date": "",
"transcript": "We're no strangers to love You know the rules and so do I (do I) A full commitment's what I'm thinking of You wouldn't get this from any other guy I just wanna tell you how I'm feeling Gotta make you understand Never gonna give you up Never gonna let you down Never gonna run around and desert you Never gonna make you cry Never gonna say goodbye Never gonna tell a lie and hurt you...",
"transcript_timestamped": "**00:18** We're no strangers to love\n**00:22** You know the rules and so do I (do I)\n**00:27** A full commitment's what I'm thinking of\n**00:31** You wouldn't get this from any other guy\n**00:35** I just wanna tell you how I'm feeling\n**00:40** Gotta make you understand\n**00:43** Never gonna give you up\n**00:45** Never gonna let you down\n**00:47** Never gonna run around and desert you\n**00:51** Never gonna make you cry\n**00:54** Never gonna say goodbye\n**00:56** Never gonna tell a lie and hurt you",
"transcript_markdown": "# Rick Astley - Never Gonna Give You Up (Official Music Video)\n\n- **Channel:** [Rick Astley](https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw)\n- **URL:** [Watch on YouTube](https://www.youtube.com/watch?v=dQw4w9WgXcQ)\n- **Duration:** 3:33\n- **Views:** 1,729,000,000\n- **Language:** English\n\n---\n\n## π Transcript\n\n**00:18** We're no strangers to love\n**00:22** You know the rules and so do I (do I)\n**00:27** A full commitment's what I'm thinking of\n**00:31** You wouldn't get this from any other guy\n**00:35** I just wanna tell you how I'm feeling\n**00:40** Gotta make you understand\n**00:43** Never gonna give you up\n**00:45** Never gonna let you down\n**00:47** Never gonna run around and desert you\n**00:51** Never gonna make you cry\n**00:54** Never gonna say goodbye\n**00:56** Never gonna tell a lie and hurt you",
"transcript_srt": "1\n00:00:18,780 --> 00:00:22,860\nWe're no strangers to love\n\n2\n00:00:22,860 --> 00:00:27,140\nYou know the rules and so do I (do I)\n\n3\n00:00:27,140 --> 00:00:31,460\nA full commitment's what I'm thinking of\n\n4\n00:00:31,460 --> 00:00:35,740\nYou wouldn't get this from any other guy\n\n",
"transcript_vtt": "WEBVTT\n\n00:18.780 --> 00:22.860\nWe're no strangers to love\n\n00:22.860 --> 00:27.140\nYou know the rules and so do I (do I)\n\n00:27.140 --> 00:31.460\nA full commitment's what I'm thinking of\n\n",
"language": "English",
"language_code": "en",
"is_generated": false,
"available_languages": ["en"],
"word_count": 367,
"character_count": 1968,
"segments_count": 61,
"segments": [
{ "start": 18.78, "end": 22.86, "duration": 4.08, "text": "We're no strangers to love" },
{ "start": 22.86, "end": 27.14, "duration": 4.28, "text": "You know the rules and so do I (do I)" }
],
"status": "ok"
},
{
"video_id": "jNQXAC9IVRw",
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"title": "Me at the zoo",
"channel": "jawed",
"channel_url": "https://www.youtube.com/channel/UC4QobU6ST3KWZCmTQ450Ujg",
"thumbnail": "https://i.ytimg.com/vi/jNQXAC9IVRw/hqdefault.jpg",
"duration": 19,
"duration_formatted": "0:19",
"view_count": 348000000,
"published_date": "",
"transcript": "Alright, so here we are in front of the, uh, elephants. And the cool thing about these guys is that they have really, really, really long, trunks, and that's, that's cool. And that's pretty much all there is to say.",
"transcript_timestamped": "**00:01** Alright, so here we are in front of the, uh, elephants.\n**00:05** And the cool thing about these guys is that they have really, really, really long, trunks, and that's, that's cool.\n**00:14** And that's pretty much all there is to say.",
"transcript_markdown": "# Me at the zoo\n\n- **Channel:** [jawed](https://www.youtube.com/channel/UC4QobU6ST3KWZCmTQ450Ujg)\n- **URL:** [Watch on YouTube](https://www.youtube.com/watch?v=jNQXAC9IVRw)\n- **Duration:** 0:19\n- **Views:** 348,000,000\n- **Language:** English (auto-generated)\n\n---\n\n## π Transcript\n\n**00:01** Alright, so here we are in front of the, uh, elephants.\n**00:05** And the cool thing about these guys is that they have really, really, really long, trunks, and that's, that's cool.\n**00:14** And that's pretty much all there is to say.",
"transcript_srt": "1\n00:00:01,849 --> 00:00:05,099\nAlright, so here we are in front of the, uh, elephants.\n\n2\n00:00:05,099 --> 00:00:14,249\nAnd the cool thing about these guys is that they have really, really, really long, trunks, and that's, that's cool.\n\n3\n00:00:14,249 --> 00:00:18,480\nAnd that's pretty much all there is to say.",
"transcript_vtt": "WEBVTT\n\n00:01.849 --> 00:05.099\nAlright, so here we are in front of the, uh, elephants.\n\n00:05.099 --> 00:14.249\nAnd the cool thing about these guys is that they have really, really, really long, trunks, and that's, that's cool.\n\n00:14.249 --> 00:18.480\nAnd that's pretty much all there is to say.",
"language": "English (auto-generated)",
"language_code": "en",
"is_generated": true,
"available_languages": ["en"],
"word_count": 39,
"character_count": 218,
"segments_count": 3,
"segments": [
{ "start": 1.849, "end": 5.099, "duration": 3.25, "text": "Alright, so here we are in front of the, uh, elephants." },
{ "start": 5.099, "end": 14.249, "duration": 9.15, "text": "And the cool thing about these guys is that they have really, really, really long, trunks, and that's, that's cool." },
{ "start": 14.249, "end": 18.48, "duration": 4.231, "text": "And that's pretty much all there is to say." }
],
"status": "ok"
}
]
Build powerful end-to-end multi-modal automation pipelines by pairing YouTube Transcript Scraper with other BrowserMesh plugins:
image-to-text-extractor): Extract textual slides, code snippets, or presentation graphics from video thumbnails and screenshots, combining visual and audio transcript data.website-meta-tag-extractor): Scrape external blog posts, landing pages, or creator portfolio sites linked in video descriptions.website-social-links-extractor): Extract Twitter/X, Instagram, LinkedIn, and Discord handles from creators' channels and link trees.open-graph-extractor): Verify Open Graph preview images and meta tags for video-embedding landing pages.unlimited-free-image-generator): Generate bespoke blog headers and thumbnail art directly inspired by the video transcript content..srt and .vtt subtitles across 100+ languages, translate captions, and synchronize synthetic voice-over audio for foreign language YouTube channels.You do not need a Google Cloud API key, OAuth credentials, or YouTube Data API v3 quota. This scraper communicates directly with YouTube's public InnerTube and timedtext endpoints, extracting transcripts instantly without registration, quota exhaustion, or monthly subscription fees.
Can this scraper extract transcripts from YouTube Shorts and Live Streams?
Yes. Provide any YouTube Shorts URL (e.g. https://www.youtube.com/shorts/dQw4w9WgXcQ), live stream replay URL (/live/), embedded player link (/embed/), or raw 11-character video ID. The engine automatically normalizes the link and extracts the complete transcript.
If a video has captions turned off by the creator, contains only music without spoken lyrics, or is set to private, the scraper returns a structured metadata record containing all available video details (title, channel, duration, view count, thumbnail) with an empty transcript string and status: "no_captions". Your batch scraper never crashes or halts.
How does the scraper eliminate repeated overlapping words in auto-generated captions?
YouTube's real-time Automatic Speech Recognition (ASR) system emits streaming caption cues where phrases repeat across overlapping time intervals. BrowserMesh utilizes an intelligent ASR Rolling Buffer Deduplication engine that compares adjacent cues, trims overlapping prefix/suffix tokens, and reassembles them into clean, fluent sentences.
Can I translate transcripts into foreign languages (e.g. Spanish, German, Japanese, Tamil)?
Yes. Set the translateTo configuration field to any ISO language code (e.g., 'es', 'fr', 'de', 'ja', 'ta', 'hi'). The plugin leverages YouTube's cloud translation engine to fetch and translate the transcript on-the-fly, yielding bilingual or translated subtitles.
How fast is extraction compared to Whisper or audio-to-text transcription APIs?
Traditional speech-to-text models like OpenAI Whisper or Deepgram require downloading entire video/audio files (often hundreds of megabytes) and processing audio waveforms, which takes 30β60 seconds per video and costs $0.006/minute. BrowserMesh extracts existing server-side timedtext directly from Google's Edge CDN in under 800 milliseconds per video, using 99% less bandwidth and zero compute cost.
Can I download subtitle files (.srt and .vtt) directly for video editing?
Yes. By setting "format": "all" or "format": "srt", the scraper outputs production-ready SubRip (.srt) and WebVTT (.vtt) files with sequential numbering and millisecond timestamp markers (00:00:18,780 --> 00:00:22,860), ready for immediate drag-and-drop into Adobe Premiere Pro, DaVinci Resolve, or CapCut.
Yes. Paste multiple YouTube links or Video IDs into the url field, separated by commas or newlines. The scraper processes each video sequentially with randomized jitter delays, checkpoints progress after each video, and protects against rate-limiting.
How does YouTube Transcript Scraper bypass YouTube 2026 BotGuard and PO token walls?
YouTube blocks generic scrapers with desktop BotGuard challenges and Proof of Origin (PO) token verifications. BrowserMesh emulates native mobile InnerTube clients (Android 20.42.38 and iOS 19.29.1), which YouTube trusts for mobile app streaming without requiring browser DOM JavaScript token challenges.
Can I feed these transcripts directly into ChatGPT, Claude, or local LLMs?
Yes. Selecting "format": "paragraphs" produces natural flowing text stripped of timestamps and sound effects, making it ideal for LLM context windows, summarization prompts, RAG vector embeddings, and autonomous agent memory without wasting prompt tokens on formatting artifacts.
This workflow executes natively within your local or peer BrowserMesh node using real Chromium browser automation. It navigates dynamically rendered single-page applications, executes interaction logic, avoids cloud proxy fees, and extracts clean structured datasets directly to your local machine with complete security and privacy.
Unlike legacy cloud scraping APIs that impose expensive per-request markups and risk IP bans, BrowserMesh routes execution through authentic residential environments. You pay zero cloud data transfer fees, experience full anti-bot stealth emulation, and retain 100% ownership of your extracted datasets without vendor lock-in.
2 records Β· 24 nested fields Β· real execution preview
Combine complementary browser automation and auditing workflows to verify site health, infrastructure, and search engine crawlability with 100% local execution.
Scan websites and XML sitemaps to detect 404 dead links, broken anchors, and redirect loops with zero cloud markups.
Discover who hosts any website. Detect cloud infrastructure, CDN edge networks, IP geo, and DNS routing instantly.
Audit on-page SEO factors, meta tags, heading structures, Core Web Vitals, and SERP snippet previews with local privacy.
Explore our comprehensive guides or reach out directly to our engineering support team.