YouTube Transcript Scraper: No API Key
Pricing
$1.00 / 1,000 transcripts
YouTube Transcript Scraper: No API Key
Get timestamped YouTube transcripts and captions as clean JSON with segments, fullText and char count. No API key, no login. Feed video transcripts straight into RAG, LLMs and AI agents via Claude, ChatGPT and any MCP server.
Pricing
$1.00 / 1,000 transcripts
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
a day ago
Last modified
Share
๐ YouTube Transcript Scraper: Captions to Clean JSON (No API Key)
Overview
YouTube Transcript Scraper pulls timestamped transcripts and captions from any public YouTube video and returns them as clean, structured JSON, ready to drop straight into a RAG pipeline, a vector store, or an LLM prompt. Give it a list of video URLs (or bare IDs) and get back per-video segments, a joined fullText, the caption language, and a character count.
No API key, no OAuth, no quota. It works on any public video, including auto-generated captions.
โ No login required | โ No API key | โ Pay only for delivered transcripts | โ MCP-ready for AI agents
Features
Structured JSON output. Per-segment { start, dur, text } plus a joined fullText.
Any URL shape. watch?v=, youtu.be, /shorts/, /embed/, or bare 11-char IDs.
Language preference with fallback. Prefer en, es, hi and fall back to the default track.
Auto vs. human captions flagged. isAutoGenerated tells you which you got.
Free failure handling. Videos with captions disabled return no-captions and are never billed.
How it works
The official YouTube Data API caption endpoints require OAuth, channel ownership, and a daily quota. You effectively cannot download the caption text of videos you do not own. This scraper reads the same public caption tracks YouTube already serves to any viewer's player. No key, no OAuth, no quota.
For each video, the actor resolves the canonical ID, reads available caption tracks from the watch page, and pulls the timed-text XML for the preferred language (falling back if that language is missing). Segments are cleaned into { start, dur, text } items in seconds and joined into a readable fullText. Videos with captions disabled return status: no-captions and are not billed.
๐งพ Input configuration
{"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ","https://youtu.be/9bZkp7q19f0","kJQP7kiw5Fk"],"language": "en","includeTimestamps": true,"proxy": { "useApifyProxy": true }}
๐ค Output format
{"videoId": "dQw4w9WgXcQ","url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley, Never Gonna Give You Up (Official Video)","language": "en","isAutoGenerated": false,"segments": [{ "start": 18.8, "dur": 3.2, "text": "We're no strangers to love" },{ "start": 22.0, "dur": 3.36, "text": "You know the rules and so do I" }],"fullText": "We're no strangers to love You know the rules and so do I ...","charCount": 1542,"segmentCount": 84,"status": "ok","scrapedAt": "2026-07-10T09:15:00.000Z"}
Every transcript record contains these fields:
| Field | Description |
|---|---|
๐ videoId | 11-character YouTube video ID |
๐ url | Canonical watch URL |
๐ท๏ธ title | Video title (null if unparsable) |
๐ language | Language code of the caption track used |
๐ค isAutoGenerated | True for auto (ASR) captions, false for human/uploaded |
โฑ๏ธ segments | Ordered { start, dur, text } items in seconds |
๐ fullText | All segment text joined into one readable string |
๐ข charCount | Character length of fullText |
๐ segmentCount | Number of transcript segments |
๐ฆ status | ok, no-captions, or error |
๐ scrapedAt | ISO 8601 timestamp of the fetch |
The run also pushes a final status: "summary" record with counts (transcriptsScraped, noCaptions, errored, chargedFor).
๐ผ Common use cases
RAG and vector search
Chunk fullText, embed it, and let an LLM answer questions grounded in video content.
Chain into the rag-crawler to index entire channels.
Video summarization Pipe transcripts to an LLM for TL;DRs, chapter markers, or highlight reels. Batch process a channel to produce weekly digests.
Content repurposing
Turn webinars, podcasts, and tutorials into articles, show notes, and social posts.
Feed the segments[] array into a subtitle or translation workflow.
Research and dataset building Mine spoken content across many videos for topics, keywords, and tone. Assemble timestamped speech-to-text corpora for fine-tuning or analysis.
๐ Getting started
- Open the actor in Apify Console (or call it via API or MCP).
- Under YouTube video URLs or IDs, paste one or more videos: watch URLs,
youtu.belinks,/shorts/,/embed/, or bare IDs. - Set preferred caption language (e.g.
en,es,hi). The actor falls back to the default track if that language is missing. - Toggle Include timestamps on for
{ start, dur, text }segments, or off forfullTextonly. - Click Save and Start, then download the dataset as JSON, CSV, or Excel, or pull via API or MCP.
FAQ
Do I need a YouTube API key or account?
No. The scraper reads public caption tracks directly from the watch page and the public timedtext endpoint. No API key, no OAuth, no login, and no quota.
What video URL formats are supported?
Full watch?v= URLs, youtu.be/โฆ short links, /shorts/โฆ, /embed/โฆ, and bare 11-character video IDs. Each resolves to the canonical video automatically.
What happens if a video has no captions?
The record comes back with status: "no-captions" and is not charged. Only videos that return an actual transcript are billed.
Can I choose the caption language?
Yes. Set preferred caption language to a two-letter code (e.g. en, es, hi, fr). The actor prefers an exact match, then a language-prefix match (en matches en-US), then the video's default track, then the first available, and reports what it used in language.
Are auto-generated (ASR) captions supported?
Yes. When only auto captions exist, the actor returns them and sets isAutoGenerated: true, so you can tell human captions apart from machine ones.
How is it priced? Pay per result: one charge per transcript actually returned. The first 10 transcripts on every account are free for life, so you can test before you spend.
Can I use it inside an AI agent? Yes. It is exposed as an MCP tool. See below.
Use in Claude, ChatGPT & any MCP agent
https://mcp.apify.com/?tools=themineworks/youtube-transcript-scraper
Or call it programmatically with the Apify client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('themineworks/youtube-transcript-scraper').call({videoUrls: ['https://www.youtube.com/watch?v=dQw4w9WgXcQ'],language: 'en',includeTimestamps: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
๐ ๏ธ Complete your YouTube pipeline
Pair the transcript scraper with the rest of the video suite:
- YouTube Channel Scraper: subscribers, video list, and channel stats, no API key.
- RAG Crawler: index entire sites for LLM retrieval.
- Reddit Scraper: pull public posts and comment trees for training data.
Typical flow: youtube-channel discovers the videos, youtube-transcript-scraper turns them into text, the RAG crawler assembles the wider corpus.
Found a bug or have a feature request? Open an issue on the actor's Apify Console page or reach out through the Apify profile.