YouTube Transcript Scraper - Fast, Reliable, $2/1000 avatar

YouTube Transcript Scraper - Fast, Reliable, $2/1000

Pricing

from $2.00 / 1,000 results

Go to Apify Store
YouTube Transcript Scraper - Fast, Reliable, $2/1000

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

Kyle Pretorius

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

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

FieldTypeDefaultDescription
videoUrlsarray["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]Video URLs or IDs. Accepts playlist/channel URLs when expandPlaylists is true
languagestring"en"Preferred caption language code (en, es, de, ko, etc.)
preferManualbooleantruePrefer human-written captions over auto-generated (ASR)
includeTimestampsbooleantrueInclude per-segment start time and duration
plainTextbooleantrueReturn the whole transcript as one cleaned string
expandPlaylistsbooleanfalseExpand playlist or channel URLs into individual videos
maxItemsinteger100Maximum number of videos to process

Output fields

FieldTypeDescription
video_idstringYouTube video ID
video_urlstringFull YouTube URL
titlestringVideo title
channelstringChannel name
channel_idstringChannel ID
duration_secondsnumberVideo duration in seconds
view_countnumberView count
published_atstringPublish date (null if unavailable)
languagestringLanguage code of the returned transcript
is_auto_generatedbooleanTrue if the transcript is ASR-generated
available_languagesarrayAll caption language codes available for this video
transcript_textstringFull transcript as a single string (null if plainText=false)
segmentsarrayList of {start, duration, text} objects (null if includeTimestamps=false)
word_countnumberWord count of the transcript
errorstringError 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_at is 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 error field 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.