YouTube Transcript & Subtitles Scraper - Bulk & Channels avatar

YouTube Transcript & Subtitles Scraper - Bulk & Channels

Pricing

from $1.40 / 1,000 results

Go to Apify Store
YouTube Transcript & Subtitles Scraper - Bulk & Channels

YouTube Transcript & Subtitles Scraper - Bulk & Channels

Get YouTube transcripts and subtitles as clean text with timestamps, from videos, Shorts, playlists or whole channels. Any language. $2 per 1,000, and videos without captions are never charged.

Pricing

from $1.40 / 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

Share

YouTube Transcript & Subtitles Scraper

Turn YouTube videos into text. Paste video, Shorts, playlist or channel URLs and get back one JSON row per video with the full transcript, timestamped segments and video details. Works with any caption language, manual or auto-generated.

$2 per 1,000 transcripts. Videos that have no captions, or that fail, are never charged.

Sample output

Three real rows from a run on 22 Oct 2026 (one JSON row per video; segments holds the timestamped lines):

video_idchannellanguageauto-generatedword_countsegments
jNQXAC9IVRwjawedenfalse396
dQw4w9WgXcQRick Astleyenfalse48761
9bZkp7q19f0officialpsykotrue19467

transcript_text for the first row starts: "All right, so here we are, in front of the elephants..."

What you get

For each video:

  • The full transcript as one clean string, ready for an LLM, a search index or a document
  • Timestamped segments (start, duration, text) for subtitles, quotes and chapter work
  • Title, channel, channel ID, duration and view count
  • Which caption language you got, whether it was auto-generated, and every language the video offers

Quick start

  1. Paste one or more YouTube links into Video URLs or IDs.
  2. Set Language to the caption language you want (for example en, es, de, pt, ko).
  3. Click Start. Download the results as JSON, CSV, Excel or HTML, or read them through the Apify API.

Input example

{
"videoUrls": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"https://youtu.be/jNQXAC9IVRw",
"https://www.youtube.com/shorts/VIDEO_ID",
"https://www.youtube.com/playlist?list=PLAYLIST_ID",
"https://www.youtube.com/@3blue1brown"
],
"language": "en",
"preferManual": true,
"includeTimestamps": true,
"plainText": true,
"expandPlaylists": true,
"maxItems": 200
}

Accepted links: watch?v=, youtu.be/, /shorts/, /embed/, /live/ and bare 11-character video IDs. Playlist links (?list=) and channel links (/@handle or /channel/UC...) are expanded into their videos when Expand Playlists is on.

Input options

FieldDefaultWhat it does
videoUrlsone sample videoVideo links or IDs. Playlist and channel links when expandPlaylists is on
languageenPreferred caption language code
preferManualtrueUse human-written captions before auto-generated ones
includeTimestampstrueReturn the timestamped segments list
plainTexttrueReturn the whole transcript as one string in transcript_text
expandPlaylistsfalseExpand playlist and channel links into individual videos
maxItems100Maximum number of videos per run (up to 10,000)

Output example

{
"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,
"route": "direct",
"error": null
}

Output fields

FieldDescription
video_id, video_urlThe video
title, channel, channel_idVideo and channel details
duration_seconds, view_countLength and views
is_liveTrue for live streams and past live streams
languageLanguage code of the transcript you received
is_auto_generatedTrue if YouTube generated the captions automatically
available_languagesEvery caption track on the video, auto tracks marked (auto)
transcript_textFull transcript as one string (null if plainText is off)
segmentsList of {start, duration, text} (null if includeTimestamps is off)
word_countNumber of words in the transcript
routeNetwork route used for the video (direct, datacenter or residential)
published_atAlways null. YouTube's mobile API does not return it
errorAlways null in the results. Failed videos go to a separate free list (see below)

Pricing

You pay $2.00 per 1,000 transcripts delivered, which is $0.002 per video. There is also a start fee of $0.00005 per GB of run memory, which is a fraction of a cent per run.

You are only charged for rows in the results dataset. Videos that can't be transcribed (no captions, private, deleted, age-restricted, or blocked by YouTube after every retry) are never written there. Instead they are listed with the reason in the run's OUTPUT record and in a separate failed-videos dataset, at no charge.

Use cases

  • LLM and RAG pipelines. Feed clean transcript text into ChatGPT, Claude or a vector database to summarise videos or answer questions about them.
  • Content repurposing. Turn videos and podcasts into blog posts, newsletters, show notes and social posts.
  • Research. Pull every talk from a channel or playlist and search, quote or analyse what was said.
  • Subtitles and quotes. Use the timestamped segments to find the exact moment something was said.
  • SEO and competitor research. See what topics and keywords other channels cover.

How it works

Transcripts come from YouTube's own caption tracks through its mobile player API, not from scraping the web page. YouTube often blocks cloud servers, so when a request is refused the actor retries that video through fresh proxy IPs (datacenter first, then residential). Retries are included in the price.

In tests on 27 September 2026 it delivered 30 of 33 random videos across 7 languages. The 3 misses had no captions at all. A 3.5-hour podcast came back at 29,466 words, and transcripts matched YouTube's own transcript view at about 97%.

Limitations

  • Videos with no captions at all can't be transcribed. This is common for music videos and sports highlights. They are reported free of charge.
  • If the language you ask for isn't available, you get the best track the video has (manual first, then auto-generated). The language field tells you which one you got.
  • Channel links return the channel's latest uploads from its Videos tab.
  • A link that contains both a video and a playlist (watch?v=...&list=...) is treated as that single video. Use the playlist?list= link to get the whole playlist.

Calling it from code or AI agents

Run it from the Apify API, the JavaScript or Python clients, Make, Zapier or n8n, or from AI agents through Apify's MCP server. Each run returns a dataset you can read as JSON or CSV.