YouTube Transcript Scraper Pro (Captions + AI Fallback) avatar

YouTube Transcript Scraper Pro (Captions + AI Fallback)

Pricing

from $0.70 / 1,000 transcript extracteds

Go to Apify Store
YouTube Transcript Scraper Pro (Captions + AI Fallback)

YouTube Transcript Scraper Pro (Captions + AI Fallback)

Extract YouTube transcripts at scale without burning through your budget. It starts with free captions whenever they're available, then switches to AI only for videos that don't have them. You stay in control of costs, and the output — JSON, SRT, VTT, plain text, or LLM-ready format

Pricing

from $0.70 / 1,000 transcript extracteds

Rating

5.0

(1)

Developer

CodePoetry

CodePoetry

Maintained by Community

Actor stats

14

Bookmarked

2.9K

Total users

779

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

Extract YouTube transcripts from videos, playlists, and channels, even when captions are missing.

Most transcript tools stop at videos with no captions. This one transcribes the audio instead: built-in AI speech-to-text, no external API key required. Give it a single video, a full playlist, or an entire channel and get transcripts in JSON, plain text, SRT, VTT, or an LLM-ready format. You pay per transcript, not per minute of server time.

Works as an MCP tool with Claude Desktop, Cursor, and any MCP-compatible client.

  • No YouTube Data API key required
  • Batch-friendly for video, playlist, and channel URLs
  • Built-in controls for AI spend and long videos

Default behavior: AI transcription is off (enableAiFallback: false), the lowest-cost setting. Videos without captions are reported as NO_CAPTIONS_AVAILABLE unless you turn it on.

YouTube Transcript Scraper Pro workflow: captions first, optional AI fallback, exports in JSON/text/SRT/VTT/LLM formats.

Run this Actor now


Why use this actor

  • Captions first, the cheapest transcript source
  • Machine translation of captions into your language, timestamps kept
  • Optional AI fallback when a video has no captions at all
  • Structured outputs for automation pipelines
  • Works for single videos and bulk channel/playlist runs

Quick start

  1. Click Try for free on this actor's page.

  2. Paste one or more YouTube URLs into the YouTube URLs field. Supported formats:

    • Single video: youtube.com/watch?v=... or youtu.be/...
    • Playlist: youtube.com/playlist?list=...
    • Channel: youtube.com/@channelname

    For playlists and channels the default is 10 videos; raise Max videos per playlist/channel before starting if you want more.

  3. Choose your Output formats. Not sure? Start with Plain Text: it is the words as one block of text. Set Caption languages if you need something other than English (default: en).

  4. AI transcription is off by default, the lowest-cost setting. Videos without native captions are reported with NO_CAPTIONS_AVAILABLE unless you turn on Enable AI transcription.

    If you turned AI on: set a Max AI minutes per run cap before running an unknown playlist or channel (default: 30 minutes, up to 600). Native captions are checked first; AI only runs on videos that have none. Estimate cost in the Pricing section.

  5. Click Start. When the run completes, download results from the Dataset tab as JSON, CSV, or Excel, or read them through the API.

See the Pricing page for the full rate card.


APIs

Input and output


How it works

  1. Expand: every URL becomes the videos it names. A channel URL is read from its videos tab, newest first. A video named more than once (as a youtu.be link and in a playlist, say) is transcribed and charged once.
  2. Captions: for each video, the scraper looks for a caption track in your languages, in order: manual captions first (unless you chose auto-generated only), then auto-generated. The first track that downloads is used. No audio download needed.
  3. Machine translation (optional, on by default): with Machine-translate captions into your language on, a video that has captions only in other languages has them machine-translated into your first requested language, keeping every timestamp and charged as a normal transcript. Items carry is_machine_translated: true and translated_from.
  4. Original-language fallback (optional): with Use captions in any available language on, a video with no track in your languages delivers its track in the language it was spoken in, charged as a normal transcript.
  5. AI transcription (optional): the audio of a video with no captions at all is transcribed by the built-in AI model, with the same output structure as native captions. A video that has captions only in other languages, when translation and the original-language fallback are both off, is returned as LANGUAGE_NOT_FOUND with the languages it has.

A video that fails never stops the run: it becomes a dataset item with an error_code, and the rest of the batch continues.


What you get

Each dataset item is one video: its metadata plus the transcript in the formats you requested.

Video metadata

FieldTypeDescription
metadata.idstringYouTube video ID
metadata.titlestringVideo title
metadata.urlstringCanonical watch URL
metadata.descriptionstringFull video description
metadata.durationnumberDuration in seconds
metadata.view_countnumberTotal views
metadata.like_countnumberTotal likes
metadata.channelstringChannel display name
metadata.channel_idstringChannel ID (UC-prefixed)
metadata.channel_urlstringChannel URL
metadata.thumbnailstringHighest-resolution thumbnail URL
metadata.upload_datestringUpload date (YYYYMMDD)
metadata.tagsarrayCreator-set tags
metadata.categoriesarrayYouTube categories

Transcript fields

A field appears only on the items it applies to. A format you did not request is absent, not empty.

FieldTypeDescription
languagestringLanguage code of the transcript (e.g. en, zh-TW)
is_auto_generatedbooleantrue if YouTube auto-generated the captions
is_ai_generatedbooleantrue if the built-in AI model transcribed the audio
is_language_fallbackbooleantrue when the video's original-language track was delivered instead of your languages
is_machine_translatedbooleantrue when the transcript was machine-translated into your language from the video's original captions
translated_fromstringLanguage code of the original captions a machine-translated transcript came from
requested_languagesarrayThe languages you asked for, on language-fallback and machine-translated items
transcript_jsonarrayTimestamped segments [{start, end, text}]. With wordLevel: true, each segment also has words: [{start, end, text}]; end is estimated for native captions, exact for AI transcriptions
transcript_textstringPlain text transcript
transcript_llmstringText with [Music], (laughter) and similar tokens stripped, ready for AI pipelines
transcript_srtstringSRT subtitles
transcript_vttstringWebVTT subtitles
language_probabilitynumberThe AI model's confidence in the language it detected (0–1). AI transcription only; absent when you forced the language
language_was_forcedbooleantrue when forceTranscriptionLanguage was set. AI transcription only
ai_duration_charged_minnumberAI minutes charged for this video. AI transcription only
ai_speech_duration_secnumberSpeech detected in the audio, in seconds. AI transcription only

For a very long transcript, per-word timings are left out, and then the timestamped segments, so the item stays within the platform's size limit for one dataset item. The text formats are always kept.

Error items

FieldTypeDescription
error_codestringWhat went wrong; see the table below
errorstringWhat happened and what to do about it
retryablestringWhether running the video again can help: yes, no or conditional
urlstringThe URL as you gave it, when no metadata could be read
available_languagesarrayThe caption languages the video does have, on LANGUAGE_NOT_FOUND and CAPTION_FETCH_FAILED items

Error items are never charged: you only pay for successful transcripts.

Error codeMeaningRetryable
INVALID_URLThe URL is not a YouTube video, playlist or channelno
RUN_VIDEO_LIMIT_REACHEDThe run already took 500 videos, the most one run transcribesyes
URL_EXPANSION_FAILEDA playlist or channel could not be listedyes
AGE_RESTRICTEDThe video requires age verificationno
PRIVATE_OR_UNAVAILABLEThe video is private, removed or blocked in the regionno
LIVE_VIDEOLive streams cannot be transcribed until they are archivedconditional
BOT_DETECTIONYouTube asked for human verificationyes
EXTRACTION_ERRORThe video's information could not be readyes
CAPTION_FETCH_FAILEDA caption track exists but could not be downloadedyes
LANGUAGE_NOT_FOUNDCaptions exist, but not in your languages, and translation, the original-language fallback and AI are all off (or translation failed)no
NO_CAPTIONS_AVAILABLEThe video has no captions and AI transcription is offno
CAPTIONS_NOT_READYThe video's captions are listed but not generated yet, typical for a recent upload. Run it again later, or enable AI fallbackyes
AI_FALLBACK_SKIPPED_TOO_LONGThe video is longer than 120 minutes, or than Skip AI for long videosno
AI_MINUTES_LIMIT_REACHEDThe run's Max AI minutes budget would be exceededconditional
AI_TRANSCRIPTION_FAILEDThe audio could not be downloaded or transcribedyes

Use cases

1. Claude Desktop / Claude.ai MCP integration

Connect this actor as an MCP server so Claude Desktop, Claude.ai Projects, Cursor, or any other MCP-compatible AI client can fetch a transcript just by being handed a YouTube URL. Ask Claude to "summarise this video" or "extract the key points from this lecture", no copy-pasting required.

Recommended settings: outputFormats: ["llm"]

2. YouTube Shorts, per-word karaoke captions

YouTube Shorts often have auto-generated captions. Enable wordLevel: true to get per-word start times from the transcript_json field. Feed the result into a caption editor (CapCut, DaVinci Resolve, Adobe Premiere) to produce word-by-word highlighted captions, the "karaoke" style popular on short-form video.

Recommended settings: wordLevel: true, outputFormats: ["json", "srt"], subType: "auto"

3. Build a searchable knowledge base (RAG)

Bulk-extract every video from a company channel, educational YouTube account, or podcast series. Store the transcript_llm text in a vector database (Pinecone, Weaviate, pgvector) indexed by metadata.id and metadata.title. Use it as a retrieval-augmented generation (RAG) corpus so your chatbot can answer questions grounded in the exact video content.

Recommended settings: outputFormats: ["llm"], maxResults: 500, enableAiFallback: true so caption-free videos in the channel are transcribed automatically.

4. NLP / sentiment analysis pipeline

Extract transcripts from a brand's channel, a competitor's channel, or a set of product-review videos. Pipe transcript_text into an NLP pipeline (spaCy, HuggingFace Transformers, OpenAI) for sentiment scoring, named entity extraction, topic modeling, or keyword frequency. Useful for brand monitoring and competitive intelligence.

Recommended settings: outputFormats: ["text", "llm"], subType: "both"

5. LLM training data collection

Curate domain-specific transcripts from niche YouTube channels (medical lectures, legal explainers, coding tutorials, scientific talks) to build fine-tuning datasets. The transcript_llm format strips filler tokens cleanly. Use metadata.tags and metadata.categories to filter and label the data.

Recommended settings: outputFormats: ["llm"], a maxAiMinutes cap per run to control cost.

6. SEO content repurposing

Turn a library of tutorials or vlogs into written content. Pass the transcript_llm field to an LLM prompt asking it to rewrite the transcript as a blog post, Twitter/X thread, newsletter section, or LinkedIn article. Combine with metadata.title, metadata.tags, and metadata.description for context.

Recommended settings: outputFormats: ["llm"], languages: ["en"]

7. Podcast / lecture transcription (no captions)

Podcasters who upload to YouTube and educators who post lecture recordings rarely add manual captions. Enable AI transcription and the actor transcribes them with built-in AI. Set forceTranscriptionLanguage if you know the channel's language, so the model never guesses it wrong.

Recommended settings: enableAiFallback: true, forceTranscriptionLanguage: "en", skipAiFallbackIfLongerThan: 90 to skip anything over 90 minutes (videos over 120 minutes are always skipped).

8. Multilingual research with machine translation

Pull transcripts from channels in other languages and receive them in yours. With Machine-translate captions into your language on (the default), a Spanish or Japanese caption track comes back translated into your first requested language, timestamps kept, with translated_from recording the original.

Recommended settings: languages: ["en"], machineTranslateCaptions: true

9. Academic research and citation analysis

Download a researcher's full lecture series, a conference talk archive, or all videos from an academic YouTube channel. Index the transcripts by speaker, date (metadata.upload_date), and topic. Use to find when specific terminology first appeared, how arguments evolved over time, or to build a citation graph for a literature review.

Recommended settings: outputFormats: ["json", "text"], maxResults: 500, languages set to the channel's primary language.

10. Competitive intelligence monitoring (scheduled runs)

Schedule the actor to run weekly on a competitor's channel URL. Set maxResults: 5 to pull only the latest videos (channels are read newest first). Use an Apify webhook to POST the new transcripts to Slack, a CRM, or an internal dashboard. Automatically surface every new product announcement, feature mention, or pricing discussion your competitor publishes.

Recommended settings: maxResults: 5, outputFormats: ["llm"], paired with an Apify schedule and webhook.


Output examples

Native captions

{
"metadata": {
"id": "dQw4w9WgXcQ",
"title": "Rick Astley - Never Gonna Give You Up",
"channel": "Rick Astley",
"duration": 213,
"upload_date": "20091025"
},
"language": "en",
"is_auto_generated": false,
"is_ai_generated": false,
"transcript_json": [
{ "start": 18.5, "end": 21.0, "text": "We're no strangers to love" },
{ "start": 21.0, "end": 24.5, "text": "You know the rules and so do I" }
],
"transcript_text": "We're no strangers to love You know the rules and so do I ...",
"transcript_srt": "1\n00:00:18,500 --> 00:00:21,000\nWe're no strangers to love\n\n2\n00:00:21,000 --> 00:00:24,500\nYou know the rules and so do I\n"
}

AI transcription

When a video has no captions and enableAiFallback is on, AI transcription runs:

{
"metadata": { "id": "jNQXAC9IVRw", "title": "Me at the zoo", "duration": 19 },
"language": "en",
"language_probability": 0.9996,
"language_was_forced": false,
"is_auto_generated": false,
"is_ai_generated": true,
"transcript_text": "Alright, so here we are, one of the elephants. ...",
"ai_duration_charged_min": 1,
"ai_speech_duration_sec": 19
}

Error

{
"error_code": "LANGUAGE_NOT_FOUND",
"error": "Captions exist, but not in your requested language. Check available_languages and adjust Caption languages.",
"metadata": { "id": "dQw4w9WgXcQ", "title": "Rick Astley - Never Gonna Give You Up" },
"available_languages": ["en", "es", "fr"],
"retryable": "no"
}

Pricing

Pay per event, with no charge for server time:

  • per transcript delivered from captions (including machine-translated ones);
  • per minute of video transcribed by AI, billed on the video's full length, rounded up to the minute;
  • a start fee per run.

The prices for your plan are on the Pricing page; higher Apify plans pay less per event. There is no separate proxy charge on your account.

Built for bulk runs

  • One small startup fee, then pay per transcript. The per-transcript price is the same whether the run has 10 videos or 500.
  • No proxy bill. There is nothing to configure and no proxy line item on your account.
  • AI minutes only when needed. AI charges apply only to videos with no captions in any language. If every video in your batch has captions, you never pay AI minutes.
  • Duplicates charged once. A video named twice in one run is transcribed and charged once.
  • Failed videos never stall the run, and error items are never charged.

Keeping AI cost predictable

  • Max AI minutes per run caps the AI minutes a run may use (default 30, up to 600; 0 means the maximum, 600). A video that would exceed it is reported as AI_MINUTES_LIMIT_REACHED.
  • Skip AI for long videos leaves out videos longer than the minutes you set. Videos over 120 minutes are always skipped, whatever you set here.
  • Captions are always tried first. AI only runs on videos with no captions in any language; a video captioned in other languages is machine-translated into your language (when translation is on, the default) or returned as LANGUAGE_NOT_FOUND, never AI-transcribed.

How it compares

FeatureThis actorTypical alternatives
Transcribes videos with no captionsYes, built-in AI, no external API keyNo, returns an error
Machine-translates captions into your languageYes, timestamps keptRare
LLM-optimized output (filler stripped)Yes, transcript_llm fieldNo
Spend safeguards (AI minute cap, skip long videos)YesNo
Native transcript price$0.001 per transcriptUp to $0.005 (5x more)
No monthly subscriptionYes, pay only for what you runFlat monthly fee
Batch: playlists and channelsYesMost
Output formatsJSON, Text, SRT, VTT, LLMUsually JSON only
Word-level timestampsYesRare
YouTube Data API key requiredNoNo
MCP-compatible (Claude Desktop, Cursor, etc.)Yes, via Apify MCP integrationRare

Try it free.


Who uses it

AI and LLM developers

Every output item includes a ready-to-use transcript_llm field, filler tokens stripped, clean text, no post-processing. Batch a whole channel overnight via the API and wake up to a dataset ready for your retrieval pipeline or fine-tuning job.

Content creators and marketers

Turn any YouTube video into a blog post or newsletter draft without manual transcription. Extract pull quotes from interviews. Run an entire channel archive in one batch.

SEO professionals and researchers

Extract keyword data from video transcripts at scale. Build text content from video transcripts for search. Analyse a competitor's spoken messaging for topic and positioning gaps.

Data scientists and academics

Build NLP corpora from lectures, conference talks, and documentary interviews. Process multilingual transcripts for cross-language analysis. Run large dataset collection jobs overnight via the API.

Developers building MCP-integrated AI tools

Connect this actor as an MCP server so Claude Desktop, Claude.ai Projects, Cursor, or any MCP-compatible client can fetch and process YouTube transcripts in a single tool call. No copy-pasting, no API wiring. Just hand the model a URL.


Integration examples

Python (Apify client)

Get your API token from the Apify Console under Settings → Integrations. Keep it secret, treat it like a password.

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("codepoetry/youtube-transcript-ai-scraper").call(
run_input={
"startUrls": [{"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ"}],
"languages": ["en"],
"outputFormats": ["json", "llm"],
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
if "error_code" in item:
print(item["error_code"], item["error"])
continue
print(item["metadata"]["title"], item["transcript_llm"][:200])

JavaScript / Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('codepoetry/youtube-transcript-ai-scraper').call({
startUrls: [{ url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ' }],
languages: ['en'],
outputFormats: ['json', 'llm'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
if (item.error_code) continue;
console.log(item.metadata.title, item.transcript_llm.slice(0, 200));
}

LangChain / RAG

from apify_client import ApifyClient
from langchain.docstore.document import Document
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("codepoetry/youtube-transcript-ai-scraper").call(
run_input={
"startUrls": [{"url": "https://www.youtube.com/@channelname"}],
"outputFormats": ["llm"],
"maxResults": 50,
}
)
docs = [
Document(
page_content=item["transcript_llm"],
metadata={"source": item["metadata"]["url"], "title": item["metadata"]["title"]},
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items()
if "transcript_llm" in item
]
# docs is ready for any LangChain vector store or retriever

Run on a schedule or trigger a webhook

To run this actor on a schedule or receive a webhook notification when a run finishes, use the Schedules and Integrations tabs on the actor's page in the Apify Console. See the Apify scheduling docs and webhook docs for setup instructions.


Advanced options

All options can be set in the Input form or passed as JSON when calling via the API.

OptionUI labelDefaultWhat it does
startUrlsYouTube URLsnoneVideos, playlists and channels
maxResultsMax videos per playlist/channel10Videos taken from each playlist or channel; single videos ignore it. One run transcribes at most 500 videos; each one past that is returned as RUN_VIDEO_LIMIT_REACHED
languagesCaption languages["en"]Caption languages in order of preference; the first match on the video is used. Pick from the dropdown or pass any ISO 639-1 code via the API
subTypeCaption source"both""manual" = human captions only · "auto" = auto-generated only · "both" = prefer manual, fall back to auto
outputFormatsOutput formatsjson, text, llmWhich transcript formats each item carries
wordLevelWord-level timestampsfalsePer-word timings inside transcript_json. Safe to enable for any video
machineTranslateCaptionsMachine-translate captions into your languagetrueTranslate captions that exist only in other languages into your first requested language
useAnyAvailableCaptionLanguageUse captions in any available languagefalseDeliver the video's original-language captions when none match your languages
enableAiFallbackEnable AI transcriptionfalseTranscribe videos that have no captions at all
forceTranscriptionLanguageAI transcription languageauto-detectThe language the AI transcribes in (99 supported), instead of the one it detects in the audio
maxAiMinutesMax AI minutes per run30AI minute budget for the run, up to 600; 0 means the maximum (600)
skipAiFallbackIfLongerThanSkip AI for long videos (minutes)0 (off)Skip AI for videos longer than this; videos over 120 minutes are skipped regardless

Limitations

All non-recoverable failures produce a dataset item with an error_code field. See the Error items table for the full reference.

  • One run transcribes at most 500 videos; split bigger archives across runs.
  • AI transcription covers videos up to 120 minutes long.
  • Machine translation covers caption tracks only; AI transcripts are returned in the spoken language (or the one you force).
  • Live streams can be transcribed only once they are archived.
  • maxResults defaults to a conservative 10; increase it for large playlists or full channel archives.

Frequently asked questions

How much does one video cost?

On the Free plan, a single video with captions costs about $0.0035 with AI off: $0.001 for the transcript plus a $0.0025 start fee per run at the default memory. Each additional video in the same run adds $0.001. AI transcription adds $0.012 per minute of audio. Higher Apify plans pay less; see the Pricing page.

What happens if a video has no captions?

With AI transcription off, the video is reported with NO_CAPTIONS_AVAILABLE. Turn on Enable AI transcription and its audio is transcribed instead, with the same output structure and is_ai_generated: true. If the Max AI minutes cap is reached, remaining caption-free videos receive AI_MINUTES_LIMIT_REACHED and the run continues.

A video with captions only in other languages is never transcribed by AI: the model transcribes the language the video is spoken in, not the one you asked for. Instead, with Machine-translate captions into your language on (the default), its captions are machine-translated into your language, timestamps kept. With translation off and no transcript in your languages deliverable, it is reported with LANGUAGE_NOT_FOUND and the languages it has in available_languages. Add one of those, turn translation back on, or turn on Use captions in any available language to receive its original-language track.

Does it work for playlists, channels and Shorts?

Yes. A playlist or channel is expanded into its videos (use Max videos per playlist/channel to cap it), and a Shorts URL is treated like any other video. If one video is private, age-restricted, or unavailable, it gets an error item while the rest continue.

Which languages are supported?

Native captions: any language YouTube offers captions in. Pass multiple language codes (e.g. ["en", "es"]) to fall back automatically when your first choice is unavailable.

AI transcription: 99 languages, including English, Spanish, French, German, Portuguese, Japanese, Chinese, Arabic, and Hindi.

Does it translate transcripts?

Yes, for captions. When a video has captions only in other languages, they are machine-translated into your first requested language by default (turn off Machine-translate captions into your language to opt out). An original-language fallback is in the language spoken, and an AI transcription is in the language the model hears (or the one you set in AI transcription language).

What output formats are available?

  • JSON: timestamped segments as an array [{start, end, text}, ...]
  • Text: plain text joined from all segments
  • LLM: text with [Music], (laughter), and other filler tokens stripped, ready for AI pipelines
  • SRT: standard subtitle format for video players and editing software
  • VTT: WebVTT format for HTML5 <video> elements

Multiple formats can be requested in a single run.

Can I set a spending limit?

Yes. Max AI minutes per run caps total AI-transcribed minutes per run (default 30, up to 600). Skip AI for long videos skips videos over a duration threshold. You can also set a maximum total charge per run in the Apify Console.

How accurate is AI transcription?

Accurate for clear speech in widely spoken languages. Accuracy degrades with heavy accents, domain-specific jargon, or poor audio quality. The language_probability field indicates the model's confidence in the detected language. For quality-critical work, treat AI transcripts as a first draft and review them.

What is a YouTube transcript scraper?

A YouTube transcript scraper extracts the spoken text from YouTube videos, converting a YouTube video to text without any manual work. This actor retrieves captions when YouTube provides them, or generates a transcript from the audio when captions are unavailable.

Can I use this to convert a YouTube video to text?

Yes, that is exactly what it does. Paste the video URL, click Start, and the actor returns the spoken words as plain text (or JSON, SRT, VTT, or LLM-ready format). For videos with no captions, enable AI transcription to generate the text from the audio.

Do I need a YouTube Data API key?

No. The actor reads publicly available caption data without any YouTube API credentials.

How does this compare to the YouTube Data API?

The YouTube Data API v3 does not provide transcript data for videos you don't own. It requires a Google Cloud project, OAuth credentials, and per-day quotas. This actor requires none of that.

How does this compare to the youtube-transcript-api Python library?

The youtube-transcript-api library is fine for a handful of videos in your own Python script. This actor adds cloud infrastructure, batch processing across playlists and channels, AI transcription for caption-free videos, machine translation, multiple output formats, scheduling, and Apify platform integrations (webhooks, REST API, n8n, Make, Zapier).

YouTube's Terms of Service restrict automated access, and you are responsible for complying with their Terms and applicable law in your jurisdiction. This actor reads only publicly available caption data, the same data visible when you click "Show transcript" in the YouTube player. It does not bypass any authentication, access private content, or collect personal user data. See Apify's web scraping legality guide for a broader overview.


More actors from CodePoetry

  • Airbnb Scraper API: scrape listings, prices, reviews, ratings, and availability calendars for any city or listing URL, with 99 fields per rental. Failed listings cost nothing.
  • Markdown RAG Chunker: split PDF, Word, HTML, and Markdown documents into header-aware chunks with stable IDs and exact token counts, LangChain-ready, pay per chunk. Pairs well with this scraper for RAG pipelines.

Get started

Click Try for free at the top of this page. The Rick Astley demo URL is pre-filled; run it in one click to see the full output structure.

Questions or bugs? Use the Issues tab on this actor's page. Response time is typically within 24 hours.


Changelog

2026-10-10

  • A run stopped early (by you, or when its time limit is reached) now saves every result it has already collected, instead of returning an empty dataset.
  • A video whose captions are listed but not generated yet (typical for a recent upload) is now returned as CAPTIONS_NOT_READY with a retry hint, or transcribed with AI when AI fallback is on, instead of being reported as LANGUAGE_NOT_FOUND.
  • One unreadable caption track no longer fails the whole run; that video comes back as an error item and the rest of the run completes.

Notes

This is an unofficial scraper. It is not affiliated with, authorised by, sponsored by or endorsed by YouTube or Google, and those names are used only to say which public website it reads. Every result lands in the Apify dataset with a stable schema, available via the API, CLI, MCP, and integrations like n8n, Make, and Zapier.

Run this Actor now

⌂ 换网址