YouTube Transcript Scraper - Fast, Reliable, $2/1000
Pricing
from $2.00 / 1,000 results
YouTube Transcript Scraper - Fast, Reliable, $2/1000
Bulk YouTube transcripts and subtitles (any language, auto or manual captions) at $2 per 1,000 - five times cheaper than the incumbent and it actually works. Uses mobile innertube API to bypass empty web timedtext responses.
Pricing
from $2.00 / 1,000 results
Rating
0.0
(0)
Developer
Kyle Pretorius
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Share
Bulk-fetch transcripts and subtitles from YouTube videos, playlists, and channels. Supports any language, both manual captions and auto-generated (ASR). Priced at $2 per 1,000 results - five times cheaper than comparable tools.
How it works
Uses YouTube's mobile innertube API (Android/iOS clients) to retrieve caption track lists. The classic web timedtext path silently returns empty responses; mobile clients still work. Falls back from Android to iOS client automatically, and from JSON3 caption format to XML.
Inputs
| Field | Type | Default | Description |
|---|---|---|---|
| videoUrls | array | ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"] | Video URLs or IDs. Accepts playlist/channel URLs when expandPlaylists is true |
| language | string | "en" | Preferred caption language code (en, es, de, ko, etc.) |
| preferManual | boolean | true | Prefer human-written captions over auto-generated (ASR) |
| includeTimestamps | boolean | true | Include per-segment start time and duration |
| plainText | boolean | true | Return the whole transcript as one cleaned string |
| expandPlaylists | boolean | false | Expand playlist or channel URLs into individual videos |
| maxItems | integer | 100 | Maximum number of videos to process |
Output fields
| Field | Type | Description |
|---|---|---|
| video_id | string | YouTube video ID |
| video_url | string | Full YouTube URL |
| title | string | Video title |
| channel | string | Channel name |
| channel_id | string | Channel ID |
| duration_seconds | number | Video duration in seconds |
| view_count | number | View count |
| published_at | string | Publish date (null if unavailable) |
| language | string | Language code of the returned transcript |
| is_auto_generated | boolean | True if the transcript is ASR-generated |
| available_languages | array | All caption language codes available for this video |
| transcript_text | string | Full transcript as a single string (null if plainText=false) |
| segments | array | List of {start, duration, text} objects (null if includeTimestamps=false) |
| word_count | number | Word count of the transcript |
| error | string | Error message if the video failed, otherwise null |
Example output item
{"video_id": "dQw4w9WgXcQ","video_url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ","title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)","channel": "Rick Astley","channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw","duration_seconds": 213,"view_count": 1815620592,"published_at": null,"language": "en","is_auto_generated": false,"available_languages": ["en", "en (auto)", "de-DE"],"transcript_text": "[music] We're no strangers to love You know the rules and so do I ...","segments": [{ "start": 0.0, "duration": 2.4, "text": "[music]" },{ "start": 18.88, "duration": 3.28, "text": "We're no strangers to love" }],"word_count": 487,"error": null}
Pricing
$2.00 per 1,000 results (pay-per-result). You are only charged for items that are successfully pushed to the dataset.
Limitations
published_atis not returned by the mobile API and will be null.- Videos with no captions (no auto-generated, no manual) return an item with
error: "no captions available for this video". - Private, deleted, age-restricted, and live-stream videos return an item with a descriptive
errorfield instead of failing the whole run. - Concurrency is capped at 5 requests with small jittered delays to avoid rate limiting.
- Playlist/channel expansion uses the same mobile API; very large playlists paginate automatically up to
maxItems.