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

11

Total users

5

Monthly active users

5 days 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)
  • Cheapest on Apify Store — $0.003 per transcript vs $0.005-$0.01 from competitors (40-70% savings)
  • 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.

Free planStarter ($49/mo)Scale ($499/mo)
Start fee$0.003$0.0025$0.002
Per transcript$0.003$0.0025$0.002
10 videos$0.033$0.0275$0.022
100 videos$0.303$0.2525$0.202
1,000 videos$3.003$2.5025$2.002

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

Compared to competitors: starvibe charges $0.005/video (requires separate run per video), karamelo charges $0.005-0.007/video, topaz_sharingan charges $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}'

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.

Other YouTube scrapers