YouTube Transcript Scraper - Subtitles, Captions & Channels avatar

YouTube Transcript Scraper - Subtitles, Captions & Channels

Pricing

from $5.00 / 1,000 transcript extracteds

Go to Apify Store
YouTube Transcript Scraper - Subtitles, Captions & Channels

YouTube Transcript Scraper - Subtitles, Captions & Channels

Extract YouTube transcripts, subtitles & captions in bulk — from video URLs, entire channels, playlists, or search. Timestamped segments, SRT/VTT, auto + manual captions, translation to 100+ languages, rich video metadata, and monitoring for new uploads. No login, no API key, no browser.

Pricing

from $5.00 / 1,000 transcript extracteds

Rating

0.0

(0)

Developer

Scrape Sage

Scrape Sage

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

YouTube Transcript Scraper — Subtitles, Captions & Channel Transcripts in Bulk

Extract YouTube transcripts, subtitles and captions at scale — with timestamps, SRT/VTT subtitle files, translation to 100+ languages, and rich video metadata on every record. Feed it single videos, whole channels, playlists, or search queries and get clean, LLM-ready transcript data back.

No login, no cookies, no API key, no browser — fast JSON extraction straight from YouTube's own mobile endpoints.

Why this YouTube transcript scraper?

Most transcript actors return just a wall of text. This one ships the richest transcript record in the category — the transcript and everything you'd otherwise scrape a separate video-details actor for:

DataTypical scrapersThis actor
Plain-text transcript
Timestamped segments (start / dur / end)partial
Ready-to-save SRT and WebVTT files✅ opt-in
Auto-generated and human-written captionspartial
Translate the transcript to any language✅ (YouTube caption translation)
List of every available caption language
Title, channel, views, likes, publish date, duration
Category, keywords/tags, chapters, thumbnail
Expand a channel / playlist / search into transcriptspartial
Monitor mode — only new videos
Videos without captions flagged (not silently dropped)✅ with reason

Use cases

  • AI, RAG & LLM pipelines — turn any channel, playlist, or search into a clean transcript corpus for summarization, semantic search, fine-tuning, or retrieval-augmented generation. Every record is LLM-ready JSON.
  • Content repurposing — pull transcripts to draft blog posts, newsletters, show notes, timestamps/chapters, and social clips from long-form video.
  • Subtitle & localization workflows — export SRT/VTT and use YouTube's own translation to caption or localize videos into 100+ languages.
  • Research & analysis — build datasets of what creators actually say — competitor messaging, market research, sentiment, keyword and topic mining across thousands of videos.
  • Accessibility — generate readable transcripts of talks, lectures, and tutorials at scale.
  • Monitoring — track a channel or search and transcribe only the newest uploads on a schedule.

How to use

  1. Sign up for Apify — the free plan is enough to try this actor.
  2. Open the YouTube Transcript Scraper, paste video URLs (or a channel, playlist, or search query), and click Start.
  3. Watch transcripts stream into the dataset table.
  4. Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.

Input

{
"videoUrls": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"channelUrls": ["@lexfridman"],
"playlistUrls": ["https://www.youtube.com/playlist?list=PLrAXtmErZgOdP_8GztsuKi9nrraNbKKp4"],
"searchQueries": ["ai agents tutorial"],
"language": "en",
"translateTo": "",
"includeSegments": true,
"includeSrt": false,
"includeVtt": false,
"includeVideoMetadata": true,
"monitorMode": false,
"maxResults": 25,
"maxVideosPerSource": 25
}
  • videoUrls — YouTube video URLs or 11-char IDs. Watch, youtu.be, Shorts, embed, and live URLs all work.
  • channelUrls@handle, channel URL, or UC… ID → expands to the channel's latest videos.
  • playlistUrls — playlist URL or PL…/UU… ID → expands to the playlist's videos.
  • searchQueries — YouTube search keywords → expands to the top result videos (searchSort: relevance / date / views / rating).
  • startUrls — paste any mix of YouTube URLs; each is auto-detected as a video, playlist, channel, or search page.
  • language (default en) — preferred transcript language (ISO code). Picks a human-written track first, then auto-generated captions.
  • fallbackToAutoCaptions (default true) — use auto-generated (ASR) captions when no human track exists in the language.
  • fallbackToAnyLanguage (default true) — take the video's original caption track when nothing exists in the preferred language (rather than skipping it).
  • translateTo — optional ISO code to translate the transcript into, using YouTube's own caption translation (100+ languages).
  • includeSegments (default true) — include the segments array ({ start, dur, end, text } in seconds).
  • includeSrt / includeVtt (default false) — add ready-to-save srt / vtt subtitle-file content.
  • includeVideoMetadata (default true) — add publish date, category, likes, chapters, keywords, and channel handle (turn off for the fastest possible bulk transcript sweeps).
  • monitorMode (default false) — remember delivered videos and emit only new ones on later runs (great with Schedules on a channel/search).
  • maxResults (default 25) — total cap. 0 = no limit (opt-in).
  • maxVideosPerSource (default 25) — per channel/playlist/search cap so one source can't crowd out the rest.

Output

One record per video (type: "transcript"; videos without captions come back as type: "video" with the reason):

{
"type": "transcript",
"videoId": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"channelTitle": "Rick Astley",
"channelHandle": "@RickAstleyYT",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"channelUrl": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
"publishedDate": "2009-10-24T07:57:33-07:00",
"viewCount": 1788562314,
"likeCount": 19214235,
"lengthSeconds": 213,
"durationFormatted": "3:33",
"category": "Music",
"keywords": ["rick astley", "never gonna give you up", "…"],
"chapters": [],
"thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/hqdefault.jpg",
"hasTranscript": true,
"language": "en",
"languageName": "English",
"trackKind": "manual",
"isTranslated": false,
"availableLanguages": [
{ "code": "en", "name": "English", "kind": "manual", "translatable": true },
{ "code": "de-DE", "name": "German (Germany)", "kind": "manual", "translatable": true }
],
"wordCount": 487,
"charCount": 2089,
"segmentCount": 61,
"transcript": "We're no strangers to love. You know the rules and so do I…",
"segments": [
{ "start": 18.64, "dur": 3.24, "end": 21.88, "text": "We're no strangers to love" }
],
"source": "videoUrl",
"scrapedAt": "2026-07-02T12:00:00.000Z"
}

Turn on includeSrt / includeVtt to also get srt and vtt fields with subtitle-file text you can save directly as .srt / .vtt.

Automate & schedule

Run this actor on autopilot and pull results into your own stack:

  • Apify API — start runs, fetch datasets, and manage schedules over REST.
  • apify-client for JavaScript and apify-client for Python — official SDKs.
  • Schedules — run it hourly/daily/weekly with monitorMode to transcribe only new uploads from a channel or search.
  • Webhooks — trigger downstream actions (feed a RAG index, post to Slack, kick off summarization) the moment a run finishes.
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });
const run = await client.actor('scrapesage/youtube-transcript-scraper').call({
channelUrls: ['@lexfridman'],
maxResults: 25,
includeSrt: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} transcripts`);

Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

  • Make — multi-step automation scenarios.
  • Zapier — push new transcripts straight into Docs, Notion, or your CMS.
  • Slack — get notified when a monitored channel posts a new video.
  • Google Drive / Sheets — auto-export every run to a spreadsheet.
  • Airbyte — pipe results into your data warehouse.
  • GitHub — trigger runs from commits or releases.

Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "get transcripts of the last 20 videos from this channel and summarize the key points" and let it run this scraper for you.

Agent-ready: autonomous payments (x402 & Skyfire)

This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:

  • x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
  • Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

More scrapers from scrapesage

Build a complete video, creator & content pipeline:

Tips

  • Fastest bulk sweeps: turn includeVideoMetadata off — you'll get transcript + core video info from a single request per video (skips the metadata page).
  • Auto vs manual captions: trackKind tells you whether a transcript is manual (human-written, most accurate) or auto (ASR). Keep the fallbacks on so you never miss a video that only has one.
  • Translate anything: set translateTo to any ISO code (e.g. en, es, ja) — YouTube translates the source captions on the fly, even for auto-generated tracks.
  • Exhaust a channel/playlist: raise maxVideosPerSource (and maxResults), or set maxResults: 0 for no cap. The run self-limits before the platform timeout and reports where it stopped.
  • Recurring monitoring: combine Schedules with monitorMode to transcribe only newly uploaded videos.

FAQ

Does it work without the YouTube Data API? Yes. There's no API key, quota, or login. The actor reads YouTube's own public endpoints — the same caption data the site and app use — so there's no 10,000-unit daily quota to worry about.

Manual vs auto-generated captions — which do I get? Both. It prefers a human-written track in your chosen language, then falls back to auto-generated (ASR) captions, then to the video's original language. The trackKind field says which one each transcript came from.

Can it translate transcripts? Yes — set translateTo to an ISO language code and YouTube translates the captions into that language (works for 100+ languages, including auto-generated source tracks).

Can I get SRT or VTT subtitle files? Yes — enable includeSrt and/or includeVtt and each record gets ready-to-save srt / vtt text.

A video came back with hasTranscript: false — why? Some videos genuinely have no captions (neither uploaded nor auto-generated), or are private/age-restricted/unavailable. Those are returned as type: "video" with a transcriptUnavailableReason (e.g. no_captions, age_restricted, video_unavailable) instead of being silently dropped.

Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.

Is scraping YouTube transcripts legal? This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (including copyright and YouTube's terms). Transcripts are the creator's content — use them accordingly.

Need help?

Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.