YouTube Transcript Scraper (AI-Ready) avatar

YouTube Transcript Scraper (AI-Ready)

Pricing

from $2.00 / 1,000 transcript extracteds

Go to Apify Store
YouTube Transcript Scraper (AI-Ready)

YouTube Transcript Scraper (AI-Ready)

Scrape YouTube transcripts and captions from videos, playlists, and channels. Get timestamped text, language details, TXT/SRT/VTT files, and RAG-ready chunks for AI. You pay only for successful transcripts; videos without captions are free.

Pricing

from $2.00 / 1,000 transcript extracteds

Rating

0.0

(0)

Developer

SuicidalSquirrel

SuicidalSquirrel

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Security

Limited permissions

Share

Scrape YouTube transcripts and captions for AI

Scrape transcripts from YouTube videos, playlists, and channels as clean, AI-ready text — $0.003 per transcript ($3 per 1,000), with lower prices on paid Apify plans. You're never charged for a video that has no captions, is unavailable, or is age-restricted; you only pay for a transcript you actually get.

What you get

One dataset item per requested video. Example, lightly trimmed, from a real run against jNQXAC9IVRw ("Me at the zoo", the first video ever uploaded to YouTube):

{
"status": "ok",
"errorCode": null,
"videoId": "jNQXAC9IVRw",
"url": "https://www.youtube.com/watch?v=jNQXAC9IVRw",
"title": "Me at the zoo",
"channelName": "jawed",
"durationSeconds": 19,
"language": "en",
"isAutoGenerated": false,
"text": "All right, so here we are, in front of the elephants the cool thing about these guys is that they have really... really really long trunks and that's cool (baaaaaaaaaaahhh!!) and that's pretty much all there is to say",
"segments": [
{ "start": 1.2, "duration": 2.16, "text": "All right, so here we are, in front of the elephants" },
// ...one entry per caption line, with exact start/duration...
],
"chunks": [
{ "index": 0, "startSec": 1.2, "endSec": 18.88, "text": "All right, so here we are...", "tokenEstimate": 55 },
// RAG-ready, overlapping, split only on caption boundaries
],
"chapters": [], // populated with YouTube's own chapter titles/timestamps when available
"wordCount": 39,
"tokenEstimate": 55,
"files": {}, // txt/srt/vtt key-value-store links, when requested
"source": { "type": "video", "input": "jNQXAC9IVRw" },
"fetchedAt": "2026-10-08T09:10:52.932Z",
}

A video without captions returns status: "no_captions" with empty text/segments — never a crash, never an empty item pretending to be a success, and never a charge.

How to use it

  1. Add your sources. Paste one or more video URLs, playlist URLs, or channel URLs/handles into videos, playlists, and channels. Mix and match; duplicates across all three are automatically removed.
  2. Set your limits (optional). maxVideosPerSource caps how many videos come from each playlist/channel; maxTranscripts is a hard ceiling on the whole run, so a single large channel can never run away with your budget.
  3. Run it. Read the results from the dataset as they land — status, title, language, and wordCount in the default Overview view, everything (segments, chunks, chapters, files) in the Full view.
{
"videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"],
"playlists": ["https://www.youtube.com/playlist?list=PLBCF2DAC6FFB574DE"],
"channels": ["@NASA"],
"maxVideosPerSource": 50,
"maxTranscripts": 1000,
"languages": ["en"],
"fallbackToAnyLanguage": true,
"allowAutoGenerated": true,
"includeSegments": true,
"chunking": { "enabled": true, "maxTokens": 800, "overlapTokens": 80 },
"extraFormats": ["srt"],
"proxyConfiguration": { "useApifyProxy": true }
}

Use cases

  • RAG and knowledge bases — chunks are already token-sized and overlapping, ready to embed without any extra preprocessing.
  • Summarization and research — text is clean prose (no timestamps, no [Music]-style noise), so it drops straight into a summarization prompt.
  • Content research at scale — point it at a competitor's or your own channel, cap it with maxVideosPerSource/maxTranscripts, and get every video's transcript in one dataset.
  • AI agents — pay-per-event pricing and limited permissions (see Integrations) mean an agent can call this Actor directly and only pay for transcripts it actually receives.

Pricing explained

Only the transcript-extracted event is billed, and only once per video that actually gets a transcript (status: "ok"). Enumerating a playlist or channel to find its videos is always free, and so is every no_captions, unavailable, age_restricted, or error item.

The price per transcript depends on your Apify plan:

Apify plan tierPer transcriptPer 1,000 transcripts
Free$0.003$3.00
Bronze$0.0027$2.70
Silver$0.0024$2.40
Gold$0.002$2.00

The examples below use the Free-tier price.

  • Example A — a curated list of 100 videos, some without captions. You submit 100 videos. 92 have captions and transcribe successfully; 8 don't. You pay for 92 transcripts: 92 × $0.003 = $0.276. The 8 caption-less items still appear in your dataset, for free, so you can see which videos they were.
  • Example B — a channel with more videos than you want to pay for. A channel has 4,000 uploads. You set maxVideosPerSource: 500 and maxTranscripts: 500 as a budget ceiling. Enumerating the channel's video list costs nothing. If 480 of those 500 videos have captions, you pay 480 × $0.003 = $1.44 — never more than maxTranscripts × $0.003, however large the channel actually is.

If your Apify spending limit is reached mid-run, the Actor stops starting new videos, lets any in-flight ones finish, and exits cleanly with a status message explaining why the dataset is smaller than requested — you're never charged past your own limit.

Limits and honest notes

  • Videos without captions get a free, honest no_captions status — never an empty transcript pretending to be real, and never a charge.
  • Region-locked, private, deleted, and age-restricted videos come back as unavailable or age_restricted, free, with a human-readable errorMessage.
  • Chapters are included opportunistically, not guaranteed. YouTube's chapter markers live in a much heavier page than the one this Actor fetches by default; fetching that heavier page for every single video would multiply the cost well past this Actor's price, so chapters are only captured when the (rarer) fallback extraction path already happened to load that page. Most successful items will have chapters: [] even for videos that do have chapters on youtube.com.
  • No audio or video is downloaded, in this version — only publicly available caption tracks and metadata.
  • This is HTTP-only — no headless browser. YouTube can occasionally block a request before a retry succeeds, so some videos take longer than others. If every available route fails, the item returns an honest status: "error" with a readable reason.
  • You are responsible for complying with YouTube's Terms of Service and applicable law for however you use the data this Actor returns.

Integrations

API

Replace YOUR_TOKEN with an Apify API token. The examples use this Actor's Store identifier: suicidalsquirrel/youtube-transcript-actor.

curl (synchronous — waits for the run and returns dataset items directly, up to 5 minutes):

curl -X POST "https://api.apify.com/v2/actors/suicidalsquirrel/youtube-transcript-actor/run-sync-get-dataset-items" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"videos": ["https://www.youtube.com/watch?v=dQw4w9WgXcQ"]}'

JavaScript (apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const { defaultDatasetId } = await client.actor('suicidalsquirrel/youtube-transcript-actor').call({
videos: ['https://www.youtube.com/watch?v=dQw4w9WgXcQ'],
});
const { items } = await client.dataset(defaultDatasetId).listItems();

Python (apify-client):

from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')
run = client.actor('suicidalsquirrel/youtube-transcript-actor').call(
run_input={'videos': ['https://www.youtube.com/watch?v=dQw4w9WgXcQ']},
)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item['status'], item.get('title'))

MCP and AI agents

Any Apify Actor can be called as a tool through Apify's MCP server at mcp.apify.com — point an MCP-aware client at https://mcp.apify.com?tools=suicidalsquirrel/youtube-transcript-actor (or have the agent discover it with the server's add-actor tool) and it can request transcripts directly, paying only for the transcript-extracted events it actually triggers. This Actor requests only limited permissions and never runs in Standby mode, so it stays eligible for direct agent-to-agent payments.

Make and Zapier

Both platforms have an official Apify integration: in Make, use the Run an Actor module (and Get Dataset Items to read results); in Zapier, use the Run Actor action from the Apify app. Either way, select this Actor by its ID and supply the same input JSON shown above. For a playlist or channel large enough to take more than Zapier's ~30-second synchronous timeout, use the Finished Actor Run trigger (or a webhook) instead of waiting on the action step.

FAQ

Does it download audio or video? No — only publicly available caption tracks and metadata, in this version.

Will I be charged for a video that fails or has no captions? No. Only a successful transcript is billed, once, per video — see Pricing explained.

What if the same video appears in my videos, a playlist, and a channel? It's deduplicated and billed once, keeping the first source it was found under for the source field.

Can I point it at a channel with thousands of videos without worrying about cost? Yes — maxVideosPerSource and maxTranscripts are hard ceilings checked before any transcript is attempted, and your Apify spending limit is also respected mid-run.

Does it store my proxy credentials or any personal data beyond what's in the output? No. Output is limited to public video/channel metadata and transcripts; proxy credentials are never logged.

Why is chapters empty on a video I know has chapters on youtube.com? See Limits and honest notes — it's a deliberate cost trade-off, not a bug.

Changelog

  • 2026-10-08 — Initial release: video, playlist, and channel inputs; multilingual manual and auto-generated captions; proxy escalation and retry handling; RAG-ready chunks; TXT/SRT/VTT exports; pay-per-event charging; API, MCP, Make, and Zapier integrations.