YouTube Transcript Scraper - Full Text, Timestamps, Language avatar

YouTube Transcript Scraper - Full Text, Timestamps, Language

Pricing

$5.00 / 1,000 transcripts

Go to Apify Store
YouTube Transcript Scraper - Full Text, Timestamps, Language

YouTube Transcript Scraper - Full Text, Timestamps, Language

YouTube transcript scraper for single videos and whole channels: full text, timestamped segments, views, likes and upload date. 98.8% of customer runs succeed, videos without captions never charged. $5 per 1,000, $1 per 1,000 from Nov 12. SRT/VTT, RAG chunks, MCP.

Pricing

$5.00 / 1,000 transcripts

Rating

0.0

(0)

Developer

Khandji Omar

Khandji Omar

Maintained by Community

Actor stats

1

Bookmarked

65

Total users

10

Monthly active users

3 days ago

Last modified

Share

YouTube Transcript Scraper — Full Text, Timestamps, Any Language

Get the transcript of any YouTube video as clean text plus timestamped segments. Paste links or video IDs, get one structured transcript per video — for summaries, research, subtitles, SEO content and AI pipelines. No API key, no login.

Price: $5 per 1,000 transcripts ($0.005 each), dropping to $1 per 1,000 on 12 November 2026. Videos without captions are never charged.

Free tier — 1 result free on every run

The first 1 result of every run is free, for Apify free-plan accounts, on every run they make — not a one-off trial. One guard: the free allowance never covers more than half of a run, so the offer stays sustainable.

Measured, not promised

  • 98.8% of customer runs succeeded over the last 30 days: 859 of 869 runs (Apify's public run statistics, read 2026-10-16). The transcript scraper with the most reviews on the Store (pintostudio, 2,498 users, 3.7 stars) showed 82% over the same period, at $10 per 1,000 transcripts.
  • Real test, 2026-10-16: 3 whole channels (Veritasium, MKBHD, TED), 51 videos requested, 50 transcripts with timestamps in 4 min 51 s. The one video without captions cost $0.
  • No resold upstream: the transcripts are read first-hand from YouTube, so the price does not depend on another Actor's price.

What does this YouTube transcript scraper do?

Give it YouTube video links or IDs. For every video it returns:

  • the full transcript as one clean string, ready for an LLM, a search index or a spreadsheet;
  • timestamped segments (start, duration, text) for subtitles, players or chunked RAG;
  • the language, whether captions are human-written or auto-generated, and every other caption language available;
  • the video title, channel, duration, word count and segment count.

Watch links, youtu.be short links, Shorts, embeds and bare 11-character IDs all work, mixed in one list.

Compared with johnvc/YoutubeTranscripts

Read on the Store on 2026-10-23 (YouTube Transcript & Subtitles Scraper API). Where it does better, this section says so.

  • Built on the site's own data, not a resold scraper: no second Actor between you and the source.
  • Free results on every run and a hard cost cap (maxTotalChargeUsd).
  • Price: $5 per 1,000 here, $2.75 there.

Why use it

  • Reads YouTube's own captions — the exact text YouTube shows, not a speech-to-text guess.
  • Human captions first, auto-generated only when nothing better exists — and the output says which.
  • Clean output — one string for LLMs and timestamped segments, in the same row.
  • The video's numbers in the same row — views, likes, comment count, upload date, description, tags, channel and thumbnail, so you do not need a second scraper.
  • Up to 1,000 videos per run, fetched in parallel — paste video links, or whole channels (up to 500 videos each, with a date range).
  • Honest billing — failed videos are never charged; every failure is listed with its reason.
  • API, MCP and x402 — one HTTP call from code, a tool for AI agents, payable by agents with x402.

How to get YouTube transcripts in 3 steps

  1. Click Try for free and paste one or more YouTube links in YouTube videos.
  2. Optional: set a Preferred language (en, fr, es, de, …). Leave it empty for English, then the video's default.
  3. Click Start. Download the results as JSON, CSV, Excel, HTML or XML, or read them from the API.

Input

FieldTypeWhat it does
videosarrayYouTube watch URLs, youtu.be links, Shorts, embeds or 11-character video IDs. Up to 1,000 per run.
languagestringPreferred two-letter caption language. Human-written captions are always preferred over auto-generated ones.
includeSegmentsbooleantrue (default) adds timestamped segments; false returns plain text only.
channelsarrayWhole channels: links, @handles or channel IDs. Newest videos first. Use with or instead of videos.
maxVideosPerChannelinteger1 to 500 per channel. Default 10.
publishedAfter, publishedBeforestringKeep only channel videos uploaded in this date range (YYYY-MM-DD).
includeStatsbooleantrue (default) adds likes, comment count, upload date and the channel's subscribers, handle and avatar. Views, description, channel and thumbnail are always included.
translateTostringExperimental. Asks YouTube for a machine translation (fr, es…). YouTube often refuses automated translation requests; you then get the original language plus a translation_note, never a failed video.
outputFormatsarrayAny of srt, vtt, chunks: ready-to-use subtitle files and ~250-word RAG chunks with start/end seconds.
proxyConfigurationobjectUses Apify Proxy by default. YouTube blocks datacenter IPs, so leave it on.
youtube_url, videoUrl, channel_url, max_videos, start_date, end_date, targetLanguageField names used by other YouTube transcript Actors, accepted as aliases of videos, channels, maxVideosPerChannel, publishedAfter, publishedBefore, language. Your own names win.
maxTotalChargeUsdnumberHard spending cap for the run.
{
"videos": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"jNQXAC9IVRw"
],
"language": "en",
"includeSegments": true
}

Output

One dataset item per video:

A real row from this Actor's latest run on Apify (2026-10-24; long texts are cut and people's names hidden here, your dataset has them in full):

{
"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",
"language": "en",
"is_generated": false,
"available_languages": [
"de-DE",
"en"
],
"duration_seconds": 211.32,
"segment_count": 61,
"word_count": 487,
"text": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪ ♪ A full commitment's what I'm thinking of ♪ ♪ You wouldn't get t...",
"segments": [
{
"start": 1.36,
"duration": 1.68,
"text": "[♪♪♪]"
},
{
"start": 18.64,
"duration": 3.24,
"text": "♪ We're no strangers to love ♪"
}
],
"source": "youtube",
"channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw",
"channel_url": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
"description": "The official video for “Never Gonna Give You Up” by Rick Astley. \n\nNever: The Autobiography 📚 OUT NOW! \nFollow this link to get your copy...",
"keywords": [
"rick astley",
"Never Gonna Give You Up"
],
"view_count": 1830143111,
"video_length_seconds": 213,
"thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/sddefault.jpg",
"is_live": false,
"duration_human": "3:33",
"hashtags": [
"NeverGonnaGiveYouUp",
"OfficialMusicVideo"
],
"is_private": false,
"allow_ratings": true,
"playable_in_embed": true,
"caption_track_count": 6,
"is_translatable": true,
"translation_languages": [
"ar",
"zh-Hant"
],
"fetched_at": "2026-10-24T21:24:56Z",
"like_count": 19495568,
"comment_count": 2400000,
"published_at": "2009-10-24",
"channel_handle": "(hidden here)",
"channel_subscribers": 4550000,
"channel_thumbnail_url": "https://yt3.ggpht.com/_ShEGOdg-t5YGJse14Ooq6FYBZqX_QSlhaTNjG06miYusm5lWm1UroLyVxnYtahADfRTVLtuVQ=s176-c-k-c0x00ffffff-no-rj",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"status": "success",
"selected_language": "en",
"is_auto_generated": false,
"transcript_text": "[♪♪♪] ♪ We're no strangers to love ♪ ♪ You know the rules and so do I ♪ ♪ A full commitment's what I'm thinking of ♪ ♪ You wouldn't get t...",
"channel_username": "(hidden here)",
"thumbnail": "https://i.ytimg.com/vi/dQw4w9WgXcQ/sddefault.jpg",
"transcript": [
{
"start": 1.36,
"duration": 1.68,
"text": "[♪♪♪]",
"end": 3.04
},
{
"start": 18.64,
"duration": 3.24,
"text": "♪ We're no strangers to love ♪",
"end": 21.88
}
]
}
FieldDescription
video_id, video_urlThe video, normalised to a watch URL
title, channelVideo title and channel name
language, is_generatedCaption language and whether YouTube auto-generated it
available_languagesEvery caption language the video offers
textThe full transcript as one string
segments[{text, start, duration}], in seconds
duration_seconds, segment_count, word_countSize of the transcript
view_count, like_count, comment_countVideo statistics. Likes are exact; YouTube rounds the comment count on very large videos
published_atUpload date (YYYY-MM-DD)
description, keywords, thumbnail_urlThe video's description, tags and best thumbnail
channel_id, channel_urlThe channel, ready to join with other data
channel_handle, channel_subscribers, channel_thumbnail_urlThe channel's @handle, subscriber count (as YouTube shows it, e.g. 8,680,000) and avatar
video_length_seconds, is_liveLength of the video itself, and whether it was a live stream

Also in every row, under the names other Actors use: url, status, selected_language, is_auto_generated, transcript_text, channel_username, thumbnail and transcript (segments with an end time).

A run also writes RUN_SUMMARY.json to its key-value store: videos requested, delivered, charged, and one line per failed video with the reason.

Every field

FieldWhat it holds
video_idvideo ID
video_urlvideo URL
titletitle
channelchannel
languagelanguage
is_generatedis generated
available_languagesavailable languages
duration_secondsduration seconds
segment_countsegment count
word_countword count
texttext
segmentssegments
sourcesource
channel_idchannel ID
channel_urlchannel URL
descriptiondescription
view_countview count
video_length_secondsvideo length seconds
thumbnail_urlthumbnail URL
is_liveis live
duration_humanduration human
is_privateis private
allow_ratingsallow ratings
playable_in_embedplayable in embed
caption_track_countcaption track count
is_translatableis translatable
translation_languagestranslation languages
fetched_atfetched at
like_countlike count
comment_countcomment count
published_atpublished at
channel_handlechannel handle
channel_subscriberschannel subscribers
channel_thumbnail_urlchannel thumbnail URL
urlURL
statusstatus
selected_languageselected language
is_auto_generatedis auto generated
transcript_texttranscript text
channel_usernamechannel username
thumbnailthumbnail
transcripttranscript
keywordskeywords
hashtagshashtags

How much does it cost?

$0.005 per transcript today, $0.001 per transcript from 12 November 2026 — you pay only for videos that actually come back with a transcript.

VideosUntil 11 Nov 2026From 12 Nov 2026
100$0.50$0.10
1,000$5.00$1.00
10,000$50.00$10.00
  • Failed videos are never charged: captions disabled, private, deleted or invalid links cost $0.
  • You set the ceiling: maxTotalChargeUsd (default $1) stops the run before it spends more.
  • Paid Apify plans get the usual plan discount on top.
  • Apify's free plan includes monthly platform credit, enough for hundreds of transcripts.

For comparison, the most-used transcript Actors on the Store charge $0.005–$0.01 per video.

Use cases

  • Summarise videos with ChatGPT or Claude — feed text straight into a prompt.
  • RAG and AI agents — chunk segments by timestamp and cite the exact moment.
  • SEO and content — turn videos into blog posts, show notes and quotes.
  • Market and competitor research — what reviewers and creators actually say.
  • Accessibility and subtitles — reuse the timed captions.

Use it from code (API)

Every Apify Actor is an API. Start a run and read the results with one call.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("om_kh/youtube-transcript-api").call(run_input={"videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ", "jNQXAC9IVRw"], "language": "en", "includeSegments": True})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('om_kh/youtube-transcript-api').call({
"videos": [
"https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"jNQXAC9IVRw"
],
"language": "en",
"includeSegments": true
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

One HTTP call (cURL) — runs the Actor and returns the dataset in the same response:

curl -X POST "https://api.apify.com/v2/acts/om_kh~youtube-transcript-api/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ", "jNQXAC9IVRw"], "language": "en", "includeSegments": true}'

Integrations: n8n, Make, Zapier, Google Sheets

  • n8n — the official Apify node, operation Run Actor and get dataset, Actor om_kh/youtube-transcript-api.
  • Make — Apify › Run an Actor, then Apify › Get Dataset Items.
  • Zapier — Apify › Run Actor; map the dataset items into your next step.
  • Google Sheets, webhooks, Slack — add an integration from the Integrations tab of this Actor.
  • Schedules — run it every hour or day from Schedules in Apify Console.

Use it from an AI agent (MCP and x402)

Connect Claude Desktop, Cursor, VS Code or any MCP client to Apify's MCP server at https://mcp.apify.com and add this Actor, om_kh/youtube-transcript-api, as a tool — the agent passes the same JSON as the run input and gets the dataset back.

AI agents that pay with x402 can run it too, without an Apify account: the Actor charges only per result delivered, so an agent pays exactly for what it gets.

Tips and limits

  • No captions, no transcript. This Actor reads YouTube's own captions. A video with captions turned off returns a NO_TRANSCRIPT error for that video, is not charged, and the rest of the run continues.
  • Pick the language you want. If your language is missing, check available_languages in the output and run again with one of them.
  • Big lists: up to 1,000 videos per run; for a whole channel or playlist use YouTube Channel Transcripts Scraper - Every Video to Text.
  • Speed: videos are fetched 8 at a time; a typical video takes 1–3 seconds.

FAQ

Can I get SRT or VTT subtitle files? Yes. Set outputFormats to ["srt"], ["vtt"] or both: each result then carries a ready-to-save srt / vtt string built from the timestamped captions. No extra charge.

Is the output ready for RAG and LLMs? Yes. outputFormats: ["chunks"] adds chunks: consecutive captions merged into ~250-word pieces, each with start and end seconds, so you can embed them and cite the exact moment in the video.

Can I translate a transcript? There is an experimental translateTo option that asks YouTube for its own machine translation. YouTube often refuses automated translation requests; when it does you still get the original transcript and a translation_note (and pay only the normal price). For reliable translation, send the text or chunks to your own translation model.

Is it legal to scrape YouTube transcripts? This Actor only reads captions that YouTube shows publicly to any visitor. It does not log in and collects no personal data beyond the public channel name. You are responsible for how you use the text; check YouTube's terms and your local law, and consult a lawyer if unsure.

Does it need a YouTube API key or cookies? No. There is no key, no login and nothing that expires.

Can it transcribe videos that have no captions? No — it returns YouTube's existing captions (human or auto-generated), it does not run speech-to-text. Almost all spoken-word videos have auto-generated captions.

Which languages are supported? Every language YouTube offers captions in. Set language, or leave it empty for English first.

Can I get timestamps? Yes, includeSegments (on by default) returns every caption line with start and duration in seconds.

Am I charged for videos that fail? Never. Only transcripts that are actually delivered are charged.

Can I export to CSV or Excel? Yes, from the Storage tab of any run, or with ?format=csv on the dataset API.

Can my AI agent call it? Yes, via MCP (see above) or the plain HTTP API.

Support

Found a bug or need a feature? Open an issue in the Issues tab of this Actor — every report gets an answer, usually within a day.

Your feedback

Did this Actor save you time? A short review on the Reviews tab helps other people find it, and every review is read. Something missing or broken? Open an issue on the Issues tab: it is answered and fixed fast.