YouTube Transcript Scraper
Pricing
Pay per event
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
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:
| Field | Type | Description |
|---|---|---|
| videoId | string | YouTube video ID |
| videoUrl | string | Full YouTube URL |
| videoTitle | string | Video title |
| channelName | string | Channel name |
| channelId | string | Channel ID |
| description | string | Video description |
| viewCount | number | View count (as number, not string) |
| durationSeconds | number | Video duration in seconds |
| keywords | array | Video keywords/tags |
| thumbnail | string | Highest-resolution thumbnail URL |
| publishDate | string | Publication date |
| availableLanguages | array | All available caption languages |
Transcript data:
| Field | Type | Description |
|---|---|---|
| language | string | Language code of selected transcript |
| selectedLanguage | string | Full name of selected language |
| isAutoGenerated | boolean | Whether captions are auto-generated |
| segments | array | Timestamped text segments |
| segmentCount | number | Total number of segments |
| fullText | string | Merged full transcript text (optional) |
Each segment contains:
| Field | Type | Description |
|---|---|---|
| text | string | Caption text (HTML entities decoded) |
| start | number | Start time in seconds |
| duration | number | Segment 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 plan | Starter ($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 case | Videos | Cost (Free tier) |
|---|---|---|
| Single video transcript | 1 | $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
- Go to the YouTube Transcript Scraper on Apify Store
- Click Try for free
- Paste one or more YouTube video URLs
- Set your preferred language (default: English)
- Click Start and wait for the results
- 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
| Parameter | Type | Default | Description |
|---|---|---|---|
| urls | array | (required) | YouTube video URLs or video IDs. Supports full URLs, short URLs (youtu.be), embed URLs, and plain 11-character video IDs |
| language | string | "en" | Preferred transcript language code (e.g., en, es, de, ja, ko). Falls back to any available language |
| includeAutoGenerated | boolean | true | Include YouTube's auto-generated captions when manual captions aren't available |
| mergeSegments | boolean | false | Add 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
dQw4w9WgXcQwork just as well as full URLs - Enable auto-generated captions — many videos only have auto-generated captions; keep
includeAutoGenerated: truefor maximum coverage - Use
mergeSegmentsfor AI/LLM pipelines — thefullTextfield 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: 0without 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 ApifyClientclient = 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().itemsprint(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
- YouTube Scraper — extract video metadata, comments, and channel info
- YouTube Channel Scraper — scrape all videos from a YouTube channel
- YouTube Comment Scraper — extract comments from YouTube videos