YouTube Transcript Scraper: Captions, Subtitles & API avatar

YouTube Transcript Scraper: Captions, Subtitles & API

Pricing

from $1.10 / 1,000 transcript scrapeds

Go to Apify Store
YouTube Transcript Scraper: Captions, Subtitles & API

YouTube Transcript Scraper: Captions, Subtitles & API

Get YouTube transcripts (captions and subtitles) for videos, channels and playlists: full text plus timestamped segments in any language, auto-translation, and video metadata (title, channel, views, duration). No official API key.

Pricing

from $1.10 / 1,000 transcript scrapeds

Rating

0.0

(0)

Developer

veenkes

veenkes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 hours ago

Last modified

Features

Limited permissions

Share

A YouTube transcript API and scraper for captions and subtitles. Give it video URLs, channel handles or playlists and get the full transcript text, timestamped segments, the caption language (human-made or auto-generated), optional auto-translation, and video metadata: title, channel, views, duration, description, keywords and thumbnail.

No official YouTube API key, no login, no browser. Built for AI / LLM pipelines, content repurposing, SEO and research.

Why use this YouTube transcript scraper?

  • 📝 Full text + timestamps: a clean transcript string for LLMs, and segments (start, duration, text) for subtitles, chapters and quotes.
  • 🌍 Any language and translation: choose preferred languages (e.g. en, es), fall back to the original language, or translate with YouTube's built-in translation (translateTo: "en").
  • 🎯 Human captions first: creator-uploaded captions are preferred over auto-generated ones, and the isAutoGenerated flag tells you which you got.
  • 📺 Channels and playlists: paste a channel @handle or a playlist URL to process its latest videos.
  • 📊 Video metadata included: title, channel, views, duration, description, keywords, thumbnail.
  • 🛡️ Reliable: if YouTube refuses a request, the Actor automatically retries through a residential connection at no extra cost to you.
  • 💸 Fair pricing: from $1.10 per 1,000 transcripts, and videos without a transcript are free.

Who is it for?

  • AI builders: RAG over YouTube content, summarization, Q&A bots, fine-tuning datasets.
  • Content marketers: turn videos into blog posts, newsletters, social threads and show notes.
  • SEO teams and researchers: analyze what competitors and creators say, at scale.
  • Educators and students: searchable lecture notes.
  • Media monitoring: track mentions of brands and topics inside videos.

What data does it extract?

FieldExample
videoId, url, titledQw4w9WgXcQ, Rick Astley - Never Gonna Give You Up…
channelName, channelIdRick Astley, UCuAXFkgsw1L7xaCfnd5JJOw
transcriptfull text
segments[{ "start": 1.36, "duration": 1.68, "text": "♪ We're no strangers to love ♪" }]
transcriptLanguage, transcriptLanguageName, isAutoGenerated, translateden, English, false, false
availableLanguagesevery caption track: code, name, auto-generated flag
wordCount, segmentCount487, 61
durationSeconds, viewCount, description, keywords, thumbnailmetadata
sourcevideo, a channel or a playlist

How to use it

  1. Click Try for free.
  2. Paste video URLs or IDs and/or channels / playlists.
  3. Set preferred languages (and optionally Translate to).
  4. Click Start, then export to JSON, CSV, Excel or Google Sheets, or call the Actor through the API from your AI app (works with the Apify MCP server, LangChain, n8n, Make and Zapier).

Run it from the API

You can start this Actor from any language with the official Apify API client. Replace YOUR_APIFY_TOKEN with a token from Apify Console > Integrations. Never put the token in a public repo.

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("veenkes/veenkes-youtube-transcripts").call(run_input={
"videos": [
"https://www.youtube.com/watch?v=jNQXAC9IVRw"
],
"languages": [
"en"
],
"includeSegments": True,
"includeMetadata": True
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('veenkes/veenkes-youtube-transcripts').call({
"videos": [
"https://www.youtube.com/watch?v=jNQXAC9IVRw"
],
"languages": [
"en"
],
"includeSegments": true,
"includeMetadata": true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Schedule the Actor, send results to a webhook, or connect it in Zapier, Make or n8n. Store page: https://apify.com/veenkes/veenkes-youtube-transcripts.

Use from AI agents (Apify MCP)

AI agents can run this Actor through the Apify MCP server. Connect Claude, Cursor or any MCP-compatible client to Apify, then ask the agent to call veenkes/veenkes-youtube-transcripts with an input like the example above. The agent discovers the tool from the Actor title and description.

How much does it cost?

Pay per transcript. Videos without captions, private or deleted videos are not charged.

Apify plan tierPrice per 1,000 transcripts
FREE$2.00
BRONZE$1.50
SILVER$1.30
GOLD and above$1.10

There is also a $0.00005 start fee per run. Metadata, segments and translation are included at no extra cost.

Input example

{
"videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://youtu.be/jNQXAC9IVRw"],
"channels": ["@mkbhd"],
"maxVideosPerChannel": 10,
"languages": ["en", "es"],
"fallbackToAnyLanguage": true,
"preferManual": true,
"translateTo": "",
"includeSegments": true,
"includeMetadata": true
}

Output example

{
"videoId": "dQw4w9WgXcQ",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"channelName": "Rick Astley",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"transcriptLanguage": "en",
"transcriptLanguageName": "English",
"isAutoGenerated": false,
"translated": false,
"transcript": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪ …",
"wordCount": 487,
"segmentCount": 61,
"durationSeconds": 213,
"viewCount": 1836532905,
"thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/sddefault.jpg",
"segments": [{ "start": 1.36, "duration": 1.68, "text": "[♪♪♪]" }],
"scrapedAt": "2026-11-12T22:06:14.903Z"
}

The key-value store record SUMMARY lists videos that had no transcript or couldn't be processed, and why.

Tips

  • Transcripts for LLMs: turn off Include timestamped segments to keep only the text.
  • Non-English videos: add your languages in order, or set Translate to = en.
  • Channels: YouTube's public channel feed lists the latest 15 videos. For older videos, paste their URLs.

Why this one?

You are charged per video that actually returns a transcript — videos with no captions are free. Preferred languages, fallback, and YouTube's own translation are built in, and you can turn off timestamped segments when you only need a clean text block for an LLM.

FAQ

Is this legal? The Actor reads captions that YouTube shows publicly in its player. It collects no personal data. Transcripts may be copyrighted by their creators, so use them in line with copyright law (for example research, analysis or summarization) and YouTube's terms.

Why did a video fail? The video has no captions (neither creator-made nor auto-generated), is private or age-restricted, or was removed. Failed videos are listed in SUMMARY and are not charged.


Integrations

  • Apify API — Python and JavaScript clients (examples above), plus a REST API.
  • AI agents — run it via the Apify MCP server.
  • Automation tools — Zapier, Make, n8n, or an Apify webhook when a run finishes.
  • Export — download the dataset as JSON, CSV, Excel or XML, or load it from a scheduled run.

Open the Actor in Apify Store.

Not affiliated with or endorsed by YouTube or Google. YouTube is a trademark of Google LLC.