YouTube Transcript Scraper: No API Key avatar

YouTube Transcript Scraper: No API Key

Pricing

$1.00 / 1,000 transcripts

Go to Apify Store
YouTube Transcript Scraper: No API Key

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

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

a day ago

Last modified

Categories

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:

FieldDescription
๐Ÿ†” videoId11-character YouTube video ID
๐Ÿ”— urlCanonical watch URL
๐Ÿท๏ธ titleVideo title (null if unparsable)
๐ŸŒ languageLanguage code of the caption track used
๐Ÿค– isAutoGeneratedTrue for auto (ASR) captions, false for human/uploaded
โฑ๏ธ segmentsOrdered { start, dur, text } items in seconds
๐Ÿ“ fullTextAll segment text joined into one readable string
๐Ÿ”ข charCountCharacter length of fullText
๐Ÿ“Š segmentCountNumber of transcript segments
๐Ÿšฆ statusok, no-captions, or error
๐Ÿ•’ scrapedAtISO 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

  1. Open the actor in Apify Console (or call it via API or MCP).
  2. Under YouTube video URLs or IDs, paste one or more videos: watch URLs, youtu.be links, /shorts/, /embed/, or bare IDs.
  3. Set preferred caption language (e.g. en, es, hi). The actor falls back to the default track if that language is missing.
  4. Toggle Include timestamps on for { start, dur, text } segments, or off for fullText only.
  5. 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:

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.