agentsclimarketplace

Apify youtube transcript api

Skill johnisanerd/claude-skill-youtube-transcript-api/apify-youtube-transcript-api

Get YouTube transcripts as structured JSON with a hosted YouTube transcript API (the Apify Actor johnvc/YoutubeTranscripts). Pass one video URL or a batch array and get back non_timestamped text, timestamped snippets, language metadata, and optional SRT, VTT, and plain text formats, plus video title, channel, and view count. Works with standard videos and Shorts, handles language preference and translation, and runs from cloud IPs without IpBlocked errors. Use when the user wants a youtube transcript api, needs to get or download a YouTube transcript or subtitles, asks to extract the transcript from a YouTube video, or wants captions as JSON, SRT, or VTT. Pay-per-video billing, MCP-ready for Claude and other AI agents.From its SKILL.md

Install
npx -y skills add johnisanerd/claude-skill-youtube-transcript-api --skill apify-youtube-transcript-api

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

3 things to look at

  • 29 days oldThe repository was created 29 days ago. New is not bad, but a brand new repository carrying a familiar-sounding name is the shape a typosquat arrives in, and there has been no time for anyone else to find a problem with it.
  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its file declares

Copied from the file, not written here

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

7.0 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it

YouTube Transcript API: Captions to Structured JSON

Fetch the transcript of any YouTube video as clean JSON with a hosted YouTube transcript API. Pass a single URL or a batch array; each video comes back as one row with the full plain text, timestamped snippets, language details, and the video's title, channel, and view count.

When to use this skill

  • The user wants a YouTube transcript API, or asks to get, fetch, or download the transcript of a YouTube video.
  • They want subtitles or captions as JSON, SRT, VTT, or plain text.
  • They ask to extract the transcript from a YouTube video, a Short, or a list of URLs.
  • Their own transcript library keeps failing with IpBlocked or RequestBlocked from a cloud or datacenter IP.

Not for: videos with no caption track at all (those return an error row, not a transcript), private or age-gated videos, or generating captions with speech-to-text (this API reads YouTube's published caption tracks; it does not run ASR).

What you get (one row per video)

non_timestamped (full transcript text), timestamped (snippets with text, start, duration), language, language_code, source_type (Manual or Auto-generated), is_translatable, translation_languages, total_seconds, duration_human, snippet_count, video_id, url, success. With metadata on (the default): title, channel_name, channel_url, view_count, like_count, upload_date, thumbnail_url, tags, categories. Optional extra formats: srt, vtt, text. A video that cannot be transcribed comes back as an error row (success false with error_type and error_message) instead of failing the run.

Prerequisites

The Actor

Run it with the Apify CLI

Single video:

apify actors call "johnvc/YoutubeTranscripts" -i '{"youtube_url":"https://www.youtube.com/watch?v=jNQXAC9IVRw"}' \
  --json \
  --output-dataset \
  --user-agent apify-awesome-skills/apify-youtube-transcript-api \
  2>/dev/null

Batch, with SRT and VTT added to each row:

apify actors call "johnvc/YoutubeTranscripts" -i '{"youtube_url":["https://www.youtube.com/watch?v=jNQXAC9IVRw","https://www.youtube.com/shorts/s4UkCaf_scs"],"output_formats":["srt","vtt"]}' \
  --json \
  --output-dataset \
  --user-agent apify-awesome-skills/apify-youtube-transcript-api \
  2>/dev/null

Every call carries the three flags this repo expects: --json, --user-agent apify-awesome-skills/apify-youtube-transcript-api, and 2>/dev/null. The --output-dataset flag prints the dataset rows (the transcript data) on success instead of just run metadata.

Run it from Claude or another AI agent (MCP)

The Actor is MCP-ready. Add the hosted server URL:

https://mcp.apify.com/?tools=actors,docs,johnvc/YoutubeTranscripts

Then ask, for example: "Get the transcript of this YouTube video and summarize it." MCP setup docs: https://docs.apify.com/platform/integrations/mcp

Workflow

  1. Collect the URL or URLs. Standard watch URLs, Shorts, youtu.be, embed, and mobile URLs all work; batches go in one array.
  2. Pick the language if it matters. languages is an ordered preference list (default ["en"]); first available track wins, with fallback to whatever exists.
  3. Optional: discover before fetching. "list_only": true returns available_transcripts per video (language, manual vs generated, translatable) without fetching or charging for any transcript.
  4. Optional: request output_formats (srt, vtt, text) if the user needs subtitle files rather than JSON.
  5. Run the Actor and read the dataset. Deliver non_timestamped for reading or LLM input, timestamped for alignment, srt or vtt for players.

Inputs

  • youtube_url (string or array, required)
  • languages (ordered array of ISO 639-1 codes, default ["en"])
  • translate_to (single ISO code; see limits below)
  • transcript_type (any, manual, generated; default any)
  • output_formats (array: srt, vtt, text)
  • preserve_formatting (boolean, keeps inline italic and bold tags)
  • list_only (boolean, discovery mode, free of the per-video charge)
  • include_metadata (boolean, default true; set false for slightly faster runs)

Cost

Billing is per video successfully transcribed, at a fraction of a cent per video; a thousand-video batch costs on the order of a few cents. Failed videos and list_only discovery runs are not charged the per-video fee. Details and the live-price check are in references/gotchas.md.

Honest limits

  • Translation (translate_to) only covers the languages YouTube exposes for auto-translation, roughly 18 codes. An unsupported code returns the original track unchanged; check for the translated_to field in the output to confirm translation actually happened.
  • No captions means no transcript: the API reads YouTube's caption tracks, so a video with captions disabled returns an error row.
  • Very large batches take time; the Actor processes several videos in parallel, but thousands of URLs can run for many minutes.

Troubleshooting

  • Error row with error_type IpBlocked or RequestBlocked: rare and transient; the Actor retries with fresh sessions automatically. Rerun the failed URLs; only successes are charged.
  • Empty translated_to after requesting translation: the target code is not in translation_languages for that video. Pick a supported code from a list_only run.
  • Timed-out run on a huge batch: split the input into smaller arrays, or raise the run timeout in the run options.

See references/gotchas.md for cost guardrails and error recovery, and references/actor-index.md for the Actor routing table.

Related Actors

What ships with it: 2 files

4.2 KB alongside SKILL.md

references/

Gives 0 of the 12 instructions most video audio skills give in ~1.5k tokens

Counted across 622 of the 795 authors here whose files we hold, read 2026-08-07

  • Read individual rule files for detailed explanationsin 21 of 622, across 10 files
  • Render final videoin 13 of 622, across 6 files
  • Use WAV PCM 16kHz mono audio formatin 12 of 622, across 3 files
  • Use this skill when dealing with Remotion codein 11 of 622, across 4 files
  • Save generated audio to a WAV filein 11 of 622, across 4 files
  • Handle conversion errors gracefullyin 10 of 622, across 6 files
  • Add captions to videos alwaysin 10 of 622, across 4 files
  • Generate music from text descriptions using MusicGenin 9 of 622, across 2 files
  • Do not skip pipeline layersin 9 of 622, across 3 files
  • Do not make one tool do everythingin 9 of 622, across 3 files
  • Use Azure Document Intelligence for complex PDFsin 9 of 622, across 4 files
  • Never ask the user to paste their full API keyin 9 of 622, across 3 files

Said here and by no other author read

  • pass one video URL or a batch array
  • set languages as an ordered preference array
  • run list_only true to discover available tracks
  • request srt vtt or text output if needed
  • run the actor and read the dataset
  • deliver non_timestamped text for reading

Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.

Keep looking

Skills are one crate of 326,452. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.