YouTube Transcript Scraper — Videos, Channels & Playlists avatar

YouTube Transcript Scraper — Videos, Channels & Playlists

Pricing

from $3.20 / 1,000 transcripts

Go to Apify Store
YouTube Transcript Scraper — Videos, Channels & Playlists

YouTube Transcript Scraper — Videos, Channels & Playlists

Get the transcript of any YouTube video, Short, playlist or whole channel: full text plus timed segments, language, auto-generated or not, with title, channel, duration, views and description. Pay per transcript; videos without captions are free. No browser, no YouTube API key.

Pricing

from $3.20 / 1,000 transcripts

Rating

0.0

(0)

Developer

Data Fabrik

Data Fabrik

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

What is YouTube Transcript Scraper?

Get the transcript of any YouTube video as clean JSON, CSV or Excel: the full text and the timed segments, the language, whether the captions are auto-generated, plus the video's title, channel, duration, views, tags and description. Paste video, Shorts, playlist or channel links: the Actor finds every video and transcribes each one once.

  • 💲 Pay per transcript: from $3.20 per 1,000 transcripts ($4.90 on the Free plan), video details included, plus Apify's minimum start fee of $0.00005 per run. Videos without captions, private or removed videos and failures are free.
  • 📺 Videos, Shorts, playlists and whole channels in one run: @handle, /channel/UC…, /videos, /shorts or /streams tab.
  • 🌍 Any caption language: pick one (en, fr, pt-br…) or keep YouTube's default track.
  • ⚡ No browser, no YouTube API key, no login: light HTTP requests, about 10 videos at a time.

What data can you extract from YouTube?

DataExample
Full transcript"We're no strangers to love…"
Timed segments (start, duration, text)22.64, 4.32, "You know the rules and so do I"
Language, auto-generated or noten, English, false
Every caption language of the videoen, de-DE, ja, pt-BR…
Title, channel, channel link"Never Gonna Give You Up", "Rick Astley"
Duration, views, live or not213 s, 1827177355, false
Tags, description, thumbnaila list, the text, a link

What can you do with YouTube transcripts?

  • 🤖 AI and LLM apps: feed videos to ChatGPT, Claude or your RAG pipeline, summarize, answer questions about a channel.
  • ✍️ Content creation: turn videos into articles, newsletters, quotes and social posts; study what top creators say.
  • 🔎 SEO and marketing: find the words and topics competitors use, track brand mentions in videos.
  • 📊 Research: analyse speeches, lectures, interviews or news channels at scale.
  • ♿ Accessibility and translation: get the text to subtitle, translate or index videos.

Why run it on Apify?

  • API: every run is an API call, with ready clients for Python and JavaScript (see below).
  • Scheduling: transcribe the new videos of a channel every day without a server.
  • Integrations: Google Sheets, Slack, Zapier, Make, n8n, webhooks and your own database.
  • AI agents: available through Apify's MCP server, so Claude, ChatGPT or Cursor can call it.
  • Proxies included: YouTube refuses servers, so the Actor uses residential IPs, included in the price.

How does it work?

  1. Each link in urls is recognised: a video (watch, youtu.be, Shorts, live, embed or a bare id), a playlist, or a channel (@handle, /channel/, /c/, /user/).
  2. For a channel or a playlist, the Actor lists up to maxVideosPerSource videos (newest first for channels). Add /videos, /shorts or /streams to a channel link to keep one tab.
  3. For each video, it reads the caption tracks YouTube offers, picks the one in language (or YouTube's default) and downloads it.
  4. Each video becomes one item in the dataset with status. Only ok items are charged.

How to get a YouTube transcript

  1. Click Try for free.
  2. Paste one or more YouTube links in YouTube links.
  3. Optional: set Language, or Max videos per channel or playlist.
  4. Click Start. The transcripts appear in the Transcripts view, usually within seconds.
  5. Download them as JSON, CSV or Excel, or connect an integration.

Input

FieldWhat it doesDefault
urlsVideos, Shorts, playlists or channels, one per line.—
languageLanguage code of the captions (en, fr, pt-br…). Empty = YouTube's default track.empty
maxVideosPerSourceVideos taken from each channel or playlist (1 to 10,000).50
includeSegmentsAdd the timed segments next to the full text.true
maxConcurrencyVideos processed at the same time (1 to 20).10

Example:

{
"urls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://www.youtube.com/@TED/videos",
"https://www.youtube.com/playlist?list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ"
],
"language": "en",
"maxVideosPerSource": 20
}

Output

One item per video (and one free item per link that gave no video):

{
"status": "ok",
"note": null,
"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",
"channelUrl": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
"durationSeconds": 213,
"viewCount": 1827177355,
"isLiveContent": false,
"language": "en",
"languageName": "English",
"isAutoGenerated": false,
"availableLanguages": [{ "languageCode": "en", "name": "English", "isAutoGenerated": false }, { "languageCode": "en", "name": "English (auto-generated)", "isAutoGenerated": true }],
"text": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪ …",
"segments": [{ "start": 22.64, "duration": 4.32, "text": "♪ You know the rules and so do I ♪" }],
"keywords": ["rick astley", "never gonna give you up"],
"description": "The official video for “Never Gonna Give You Up” by Rick Astley…",
"thumbnailUrl": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
"source": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"scrapedAt": "2026-10-16T18:00:00.000Z"
}
FieldMeaning
statusok (charged), or a free status: no-transcript, language-unavailable, unavailable, not-found, invalid-url, failed, skipped-cost-limit.
noteWhy there is no transcript, in plain words.
videoId, urlThe video.
title, channelName, channelId, channelUrlVideo title and channel.
durationSeconds, viewCount, isLiveContentLength, views, live stream or not.
language, languageName, isAutoGeneratedThe caption track delivered.
availableLanguagesEvery caption track of the video.
textThe full transcript.
segmentsTimed pieces: start, duration (seconds), text.
keywords, description, thumbnailUrlTags, description, thumbnail.
sourceThe input link the video came from.
scrapedAtWhen the item was produced (UTC).

The run summary (counts per status) is saved as OUTPUT in the key-value store.

How much does it cost to scrape YouTube transcripts?

You pay per transcript delivered, video details included:

Apify planPrice per transcriptPer 1,000
Free$0.0049$4.90
Starter (Bronze)$0.0039$3.90
Scale (Silver)$0.0035$3.50
Business (Gold) and above$0.0032$3.20

Plus Apify's start fee of $0.00005 per run. Free: videos without captions or without captions in your language, private, removed, age-restricted or region-blocked videos, links that are not YouTube, failures. The $5 monthly credit of Apify's Free plan covers about 1,000 transcripts a month. Set Maximum cost per run in the run options to cap a run: the Actor stops before going over it.

Is it free to try?

Yes. Apify's Free plan gives $5 of credit every month, with no card needed, which covers about 1,000 transcripts.

Use it from code

Python (pip install apify-client):

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("datafabrik/youtube-transcripts").call(run_input={
"urls": ["https://www.youtube.com/@TED/videos"],
"maxVideosPerSource": 10,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if item["status"] == "ok":
print(item["title"], len(item["text"]))

JavaScript (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('datafabrik/youtube-transcripts').call({ urls: ['dQw4w9WgXcQ'], language: 'en' });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].text);

Limits

  • Only videos with captions (human-made or auto-generated by YouTube) have a transcript. The Actor does not transcribe audio itself.
  • Captions are delivered in the languages the video has; machine translation is not offered (YouTube refuses it to automated requests).
  • Videos are read from the United States: a video blocked there comes back as unavailable (free).
  • Publish date and like count are not included yet.

FAQ

The Actor reads public captions that YouTube shows to any visitor, without login. It does not collect personal data. You are responsible for how you use the content, in line with YouTube's terms and copyright law; check with a lawyer for commercial reuse.

Why did a video come back without a transcript?

Look at status and note: no captions at all, no captions in the language you asked (the note lists the available ones), or a private, removed, age-restricted or region-blocked video. None of these is charged.

Can I get the transcripts of a whole channel?

Yes: paste the channel link (https://www.youtube.com/@handle) and set maxVideosPerSource up to 10,000. Add /videos to skip Shorts and lives.

Can I get only the text, without timestamps?

Turn off includeSegments: text stays, segments is null.

Do I need a YouTube API key or an account?

No. The Actor uses the same public endpoints as YouTube's apps.

Can you add a feature or build a custom scraper?

Yes: open an issue on the Issues tab, we answer within a day.