YouTube Transcript API & Scraper with Timestamps avatar

YouTube Transcript API & Scraper with Timestamps

Pricing

$10.00 / 1,000 transcript delivereds

Go to Apify Store
YouTube Transcript API & Scraper with Timestamps

YouTube Transcript API & Scraper with Timestamps

YouTube transcript API and scraper: get transcripts with timestamps from the captions (subtitles) of any public video that has them, extracting up to 100 videos per run for AI agents, LLMs and MCP. Runs on Apify proxies, not your VPS's IP; failed videos are free.

Pricing

$10.00 / 1,000 transcript delivereds

Rating

0.0

(0)

Developer

Frameskim Tools

Frameskim Tools

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

a day ago

Last modified

Categories

Features

Limited permissions

Share

YouTube Transcript for AI Agents

Give it public YouTube URLs and get their transcripts with timestamps, ready to paste into an LLM, for AI agents, LLMs and MCP. It runs on Apify and reaches YouTube through Apify's datacenter and residential proxies, not your server's IP, so it also works for agents on a cloud server or VPS where yt-dlp or youtube-transcript-api get blocked; a video YouTube still blocks is not charged. It is one call away from Claude and other agents through the Apify MCP server.

Use it for:

  • RAG and search over videos: index what is said, with the second it is said.
  • Summaries, notes and study guides from lectures, talks and tutorials.
  • Turning a video into a blog post or a newsletter.
  • Researching a topic across many videos in one run.
  • Subtitles to translate or caption.

More: YouTube Transcript on frameskim.dev

YouTube transcript scraper with timestamps

Send up to 100 video, channel or playlist URLs per run. A channel (youtube.com/@handle, /channel/, /c/, /user/) adds its newest uploads and a playlist its videos in order, up to maxVideos each (default 20); the run takes 100 videos at most. For each video you get one dataset item:

  • videoId, title and lang (the language of the captions used).
  • segments: the transcript as { start, end, text } in seconds.
  • text: the whole transcript as one string.
  • frameskimUrl: a link to Frameskim, the sister actor for frames, screenshots and moments of the same videos.

Run it on one video or on many, from the Console, a schedule, the API or an agent.

A video that has no captions, or that YouTube blocks, becomes an item with videoId and error and is not charged. A URL that is not a YouTube video, channel or playlist, and a channel or playlist that cannot be listed (private, removed, blocked or without videos), becomes an item with url and error, is not charged, and the other URLs still run; a search URL refuses the whole run. If YouTube blocks the video's metadata but the transcript is available, title is an empty string.

YouTube to text for LLMs and RAG

text is the whole transcript as one string, ready to paste into a prompt, and segments keeps the timestamps when you need to point back to the exact second: split segments into chunks for a vector index and keep start as the citation. Captions only: the actor does not transcribe audio.

Pricing

Pay per event, no subscription. Apify bills each event and never more than the spending limit you set for the run.

EventPrice (USD)When
transcript$0.01Per transcript delivered

What fails is not charged: a video without a transcript, a blocked video, a video that takes too long and every video left after a stop (see Limits) cost nothing. If every video fails, the run still ends as succeeded, with the error items and the reason as its status message: nothing was charged.

Examples

Input:

{ "urls": ["https://youtu.be/fWjsdhR3z3c", "https://www.youtube.com/watch?v=4czjS9h4Fpg"], "lang": "en" }

Output (one item per video, values shortened):

{ "videoId": "fWjsdhR3z3c", "title": "...", "lang": "en", "segments": [{ "start": 0.0, "end": 4.2, "text": "..." }], "text": "...", "frameskimUrl": "https://apify.com/emttn/frameskim" }

A video that failed:

{ "videoId": "abc123def45", "error": "..." }

YouTube transcript API

curl -X POST "https://api.apify.com/v2/acts/emttn~youtube-transcript/run-sync-get-dataset-items" \
-H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
-d '{"urls": ["https://youtu.be/fWjsdhR3z3c"]}'

Ready-made tasks (YouTube to text, bulk) are in the Tasks tab of this page.

Use it from Claude (MCP)

Add the Apify MCP server with this actor as a tool:

{ "mcpServers": { "apify": { "url": "https://mcp.apify.com/?actors=emttn/youtube-transcript" } } }

Then ask, for example: "Use YouTube Transcript to read this video and summarize it."

The tool starts a run and returns its status; the agent then reads the results with the server's get-dataset-items tool.

Bulk YouTube transcripts: up to 100 videos per run

Put up to 100 video URLs in urls, or a channel or playlist and how many of its videos you want in maxVideos, and get one item per video, in one run and one bill: you pay only for the transcripts delivered, and a video that fails is an error item that costs nothing. Duplicates are processed once. A real run on a whole channel, with its input and output: transcripts of a YouTube channel or playlist.

Limits

  • Public videos, channels and playlists; no searches. A search URL, more than 100 URLs, an empty list or a maxVideos outside 1 to 100 is refused before anything is processed, with nothing charged; any other URL that is not a YouTube video, channel or playlist becomes an error item and the rest of the list runs.
  • Each channel or playlist adds up to maxVideos videos (default 20): a channel its newest uploads from the Videos tab (not Shorts or live streams), a playlist in its own order. Single videos come first; the run takes 100 videos in total, and a channel or playlist that finds no room left is an error item. Listing is never charged; each transcript delivered is.
  • Videos are processed one after the other. A video that takes longer than 120 s is reported as failed and not charged; the batch stops after 55 minutes.
  • The batch stops after 5 failures in a row, or when what the failed videos cost us exceeds 30% of what was charged for the delivered ones plus 0.01 USD. The videos left become error items ("Stopped: ..."), nothing is charged for them, and the run still ends as succeeded with what was delivered.
  • Each run respects your Apify spending limit: when it does not cover one more transcript, the batch stops and the rest are error items, not charged.
  • Duplicate URLs (the same video twice, in any URL form) are deduplicated: the video is processed once and charged once.
  • lang applies to the whole batch; there is no per-video language.
  • Videos need captions: this actor does not transcribe audio.

Integrations

  • Schedule it. Save a run as a task and add a schedule in Apify to get the transcripts of new videos every day or every week: how to schedule tasks.
  • Chain it after another actor. Start this actor when a YouTube scraper finishes and pass it the URLs it found: Actor-to-Actor integrations.
  • MCP. Add the actor to Claude or another agent with the MCP server above: it runs only when the agent asks.
  • Make, Zapier, Google Sheets and webhooks work through Apify's own integrations.

FAQ

Which languages? Any language the video has captions in; set lang (default en) and the actor falls back to the original language. When the video has no manual track in the requested language, YouTube's automatic translation of its captions may be returned instead; the lang field of each item says which language you got.

What if a run fails? The status message says why. A run that cannot start says "Nothing was charged."; a run that stops unexpectedly says "Only delivered transcripts were charged." and charges only the transcripts it delivered, if any. Retry later if YouTube blocked the request. If it looks like our bug, share the run with us from Apify Console or open an issue on the Issues tab with the run ID: we only see the runs you share.

Do you keep my transcripts? No. They live only in your run's own Apify storage, with your plan's retention.

Why not the official YouTube Data API? Its caption download method, captions.download, requires permission to edit the video, an OAuth scope and 200 quota units per call, so it serves the owner of a video, not a third party. This actor reads the captions of public videos and returns them as JSON: 17 of 20 public videos delivered in our last measurement (85%), and a video that cannot be read is reported and not charged.

YouTube transcript alternatives? You can copy captions by hand from the video page, or write your own extractor and keep it working as YouTube changes. This actor is the pay-per-transcript version of that; for frames and moments of the same videos use Frameskim, and for Reels and TikToks Instagram & TikTok Transcripts, Frames & Posts.

Frames, screenshots or the moments that answer a question? Use Frameskim.

Not affiliated with YouTube or Google. By running this actor you confirm you have the right to process each video you submit.

Takedown requests: open an issue in the Issues tab of this page or write to support@frameskim.dev. Blocked videos and channels are refused on the next run.

Terms · Privacy