YouTube Transcript Scraper avatar

YouTube Transcript Scraper

Pricing

Pay per event

Go to Apify Store
YouTube Transcript Scraper

YouTube Transcript Scraper

Extract transcripts and subtitles from YouTube videos with full metadata. Supports batch URLs, 100+ languages, auto-generated and manual captions. Returns timestamped segments, video metadata, and merged full text. Uses residential proxies for 100% success rate.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

77

Total users

42

Monthly active users

14 hours ago

Last modified

Categories

Share

What does YouTube Transcript Scraper do?

YouTube Transcript Scraper extracts transcripts, subtitles, and captions from any public YouTube video. It returns timestamped text segments along with full video metadata including title, channel, view count, duration, keywords, and thumbnail. Process multiple videos in a single run with automatic language fallback — if your preferred language isn't available, it finds the best alternative.

Why use YouTube Transcript Scraper?

  • 100% success rate — tested on 15+ diverse videos including music, vlogs, tutorials, and shorts
  • Batch processing — extract transcripts from hundreds of videos in one run (competitors often limit to 1 video per run)
  • Best value on Apify Store — $0.003 per transcript (Free plan), down to $0.00075 for Diamond subscribers — up to 75% cheaper than competitors charging $0.01/transcript
  • Smart language fallback — prefers manual captions, falls back to auto-generated, then to any available language
  • Full metadata — title, channel, description, view count, duration, keywords, thumbnail, publish date, and available languages
  • No browser needed — lightweight HTTP-only extraction, no Puppeteer or Playwright overhead
  • PoToken-free — bypasses YouTube's Proof of Origin Token requirement using the ANDROID InnerTube API

What data can you extract?

Video metadata:

FieldTypeDescription
videoIdstringYouTube video ID
videoUrlstringFull YouTube URL
videoTitlestringVideo title
channelNamestringChannel name
channelIdstringChannel ID
descriptionstringVideo description
viewCountnumberView count (as number, not string)
durationSecondsnumberVideo duration in seconds
keywordsarrayVideo keywords/tags
thumbnailstringHighest-resolution thumbnail URL
publishDatestringPublication date
availableLanguagesarrayAll available caption languages

Transcript data:

FieldTypeDescription
languagestringLanguage code of selected transcript
selectedLanguagestringFull name of selected language
isAutoGeneratedbooleanWhether captions are auto-generated
segmentsarrayTimestamped text segments
segmentCountnumberTotal number of segments
fullTextstringMerged full transcript text (optional)

Each segment contains:

FieldTypeDescription
textstringCaption text (HTML entities decoded)
startnumberStart time in seconds
durationnumberSegment duration in seconds

How much does it cost to extract YouTube transcripts?

This Actor uses pay-per-event pricing — you pay only for what you extract. No monthly subscription. All platform costs (compute, proxy, storage) are included.

FreeBronzeSilverGoldPlatinumDiamond
Start fee$0.003$0.0025$0.002$0.0015$0.001$0.00075
Per transcript$0.003$0.0025$0.002$0.0015$0.001$0.00075
10 videos$0.033$0.0275$0.022$0.0165$0.011$0.00825
100 videos$0.303$0.2525$0.202$0.1515$0.101$0.07575
1,000 videos$3.003$2.5025$2.002$1.5015$1.001$0.75075

Real-world cost examples:

Use caseVideosCost (Free tier)
Single video transcript1$0.006
YouTube playlist (20 videos)20$0.063
Channel analysis (100 videos)100$0.303
Research dataset (1,000 videos)1,000$3.003

Prices shown for Free plan. Diamond subscribers pay as little as $0.00075/transcript.

Compared to competitors: starvibe charges $0.005/video, karamelo charges $0.005–$0.007/video, pintostudio and topaz_sharingan charge $0.01/video. Our batch processing makes bulk extraction significantly cheaper.

How to extract YouTube transcripts

  1. Go to the YouTube Transcript Scraper on Apify Store
  2. Click Try for free
  3. Paste one or more YouTube video URLs
  4. Set your preferred language (default: English)
  5. Click Start and wait for the results
  6. Download transcripts as JSON, CSV, or Excel

Example input:

{
"urls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://youtu.be/jNQXAC9IVRw",
"9bZkp7q19f0"
],
"language": "en",
"includeAutoGenerated": true,
"mergeSegments": false
}

Input parameters

ParameterTypeDefaultDescription
urlsarray(required)YouTube video URLs or video IDs. Supports full URLs, short URLs (youtu.be), embed URLs, and plain 11-character video IDs
languagestring"en"Preferred transcript language code (e.g., en, es, de, ja, ko). Falls back to any available language
includeAutoGeneratedbooleantrueInclude YouTube's auto-generated captions when manual captions aren't available
mergeSegmentsbooleanfalseAdd a fullText field with all segments merged into a single string

Output example

{
"videoId": "dQw4w9WgXcQ",
"videoUrl": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"videoTitle": "Rick Astley - Never Gonna Give You Up (Official Music Video)",
"channelName": "Rick Astley",
"channelId": "UCuAXFkgsw1L7xaCfnd5JJOw",
"description": "The official video for \"Never Gonna Give You Up\" by Rick Astley...",
"viewCount": 1600000000,
"durationSeconds": 213,
"keywords": ["rick astley", "never gonna give you up", "rickroll"],
"thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
"publishDate": "2009-10-25",
"language": "en",
"selectedLanguage": "English",
"isAutoGenerated": false,
"availableLanguages": ["English", "Spanish", "French", "German (auto-generated)"],
"segments": [
{ "text": "We're no strangers to love", "start": 18.0, "duration": 3.0 },
{ "text": "You know the rules and so do I", "start": 21.0, "duration": 3.0 }
],
"segmentCount": 61
}

Tips for best results

  • Batch your requests — processing 100 videos in one run is much cheaper than 100 separate runs (you save 99 start fees)
  • Use video IDs directly — plain 11-character IDs like dQw4w9WgXcQ work just as well as full URLs
  • Enable auto-generated captions — many videos only have auto-generated captions; keep includeAutoGenerated: true for maximum coverage
  • Use mergeSegments for AI/LLM pipelines — the fullText field gives you the entire transcript as a single string, ready for summarization or analysis
  • Check availableLanguages — the output tells you which languages are available, so you can re-run with a different language code if needed
  • Videos without captions — some videos (especially Shorts or music-only content) have no captions at all; these return segmentCount: 0 without error

Integrations

Connect YouTube Transcript Scraper with your existing tools and workflows:

  • Make (Integromat) — trigger transcript extraction on new playlist videos, send results to Google Sheets
  • Zapier — automate transcript extraction when new videos are added to a channel
  • Google Sheets — export transcripts directly to spreadsheets for analysis
  • Slack / Discord — get notifications when transcripts are ready
  • Webhooks — receive results via HTTP POST to your own API

Learn more about Apify integrations.

Using the Apify API

You can start YouTube Transcript Scraper programmatically using the Apify API.

Node.js:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('automation-lab/youtube-transcript').call({
urls: ['https://www.youtube.com/watch?v=dQw4w9WgXcQ'],
language: 'en',
mergeSegments: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].fullText);

Python:

from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
run = client.actor('automation-lab/youtube-transcript').call(run_input={
'urls': ['https://www.youtube.com/watch?v=dQw4w9WgXcQ'],
'language': 'en',
'mergeSegments': True,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items[0]['fullText'])

cURL:

curl -X POST "https://api.apify.com/v2/acts/automation-lab~youtube-transcript/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"urls":["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],"language":"en","mergeSegments":true}'

Use with AI agents via MCP

YouTube Transcript Scraper is available as a tool for AI assistants via the Model Context Protocol (MCP).

Setup for Claude Code

$claude mcp add --transport http apify "https://mcp.apify.com"

Setup for Claude Desktop, Cursor, or VS Code

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com"
}
}
}

Example prompts

  • "Get the transcript for this YouTube video"
  • "Download subtitles for these YouTube URLs"
  • "Extract the English transcript from this lecture video and merge it into one text"

Learn more in the Apify MCP documentation.

FAQ

Can I extract transcripts from private or age-restricted videos? No. This Actor only works with public YouTube videos. Private, unlisted, or age-restricted videos that require login will return an error message.

What happens if a video doesn't have captions? The Actor returns the video metadata with segmentCount: 0 and an empty segments array. No error is thrown — you still get the video title, description, view count, and other metadata.

Which languages are supported? All languages available on YouTube — over 100 languages including auto-generated captions. Set the language parameter to any ISO 639-1 code (e.g., en, es, de, ja, ko, ar, hi). If your preferred language isn't available, the Actor automatically falls back to the best available option.

How many videos can I process in one run? There is no hard limit. The Actor processes videos sequentially, so 100 videos take roughly 100x the time of a single video. For very large batches (1,000+), consider splitting into multiple runs.

What URL formats are supported? Full URLs (youtube.com/watch?v=...), short URLs (youtu.be/...), embed URLs (youtube.com/embed/...), Shorts URLs (youtube.com/shorts/...), and plain 11-character video IDs.

Why are there more segments than the competitor? This Actor uses the ANDROID InnerTube API which often returns more detailed caption segmentation than web-based extraction. More segments means more precise timestamps.

The transcript is in the wrong language. How do I fix this? Set the language parameter to the desired ISO 639-1 code (e.g., es for Spanish, ja for Japanese). If manual captions in that language aren't available, the Actor falls back to auto-generated captions, then to any available language. Check the availableLanguages field in the output to see all options.

I'm getting empty transcripts (segmentCount: 0). Why? Some videos genuinely have no captions — this is common with Shorts, music-only videos, and very old uploads. Check if captions are available by looking at the video on YouTube (click the CC button). If captions exist on YouTube but the Actor returns 0 segments, make sure includeAutoGenerated is set to true, since many videos only have auto-generated captions.

Other YouTube and video scrapers on Apify