Every YouTube Transcript, Ready for Your LLM
Turn any YouTube video or channel into a clean, timestamped transcript for RAG or summarization in one call. No OAuth, no quota units.

Copy this line to your agent to turn a YouTube URL into a clean, timestamped transcript you can feed straight to an LLM.
set up https://monid.ai/SKILL.md and use apify /starvibe/youtube-video-transcript to get a timestamped transcript for a YouTube video
One endpoint turns a YouTube video, or a whole channel, into a clean timestamped transcript you can pipe straight into a RAG store or a summarizer. No OAuth handshake, no quota units to budget, no captions-download permission you will never be granted. You give it a URL, you get back segmented text plus the video's metadata, and you pay per result only when the call runs.
We built this post around one actor because transcripts are their own problem, separate from listing a channel's videos or costing out a scraping stack. If you want the raw spoken content of a video as text an LLM can reason over, the shape of the job is narrow and the official path is closed. Here is why, and what we hand you instead.
TL;DR
- The official YouTube Data API v3 cannot give you a third-party video's transcript. Its
captions.downloadmethod is restricted to the video's owner, so pulling captions for a video you do not own returns a403no matter how your OAuth is set up (Google captions.download reference). - The Apify
starvibe/youtube-video-transcriptactor on Monid returns a full timestamped transcript plus video metadata from just a URL, with automatic fallback to auto-generated captions. - Pass exactly one of
youtube_url(single video, paired withlanguage) orchannel_url(withmax_videosand a date range to batch a channel). - Billing is per result, a fraction of a cent per transcript, shown before you run. Current pricing lives at monid.ai/tools.
Principle 1: the owner-only wall is the real blocker, not quota
Most YouTube data problems end at a quota ceiling. Transcripts end somewhere worse. The Data API does expose a captions resource, but its download method carries a hard restriction: only the channel that owns the video can retrieve caption tracks through it. Point it at someone else's video and you get an authorization error, regardless of scopes (captions.download docs). There is no tier you can pay to lift this, because it is a permission model, not a rate limit.
That leaves teams stitching together unofficial timedtext calls or browser scrapers that break on YouTube's schedule. The whole reason to reach for a hosted actor here is that the sanctioned door is locked for the exact job you have: reading transcripts of videos you did not publish.

Principle 2: one URL, a full timestamped transcript plus metadata
The actor's job is deliberately simple. Hand it a video URL and it returns the transcript as timestamped segments, so every line carries the second it was spoken. That timing is what makes the output useful downstream: you can cite a moment, jump a player to it, or chunk the transcript on natural pauses instead of arbitrary character counts.
Alongside the transcript you get the video's metadata in the same response: identifiers, title, description, publish time, duration, engagement counts, channel details, and the list of available caption languages. When a video has no human-authored captions in your language, the actor falls back to YouTube's auto-generated track rather than returning nothing. One call, one record, transcript and context together.
For agents
Grab an API key at app.monid.ai, then paste this to your agent and hand it the key:
set up https://monid.ai/SKILL.md
It learns the whole discover, inspect, run workflow itself. More details in the agent quickstart.
For humans
npm install -g @monid-ai/cli
monid keys add --label main --key <your-api-key>
More details in the CLI quickstart.
The single-video call takes the URL and a language code:
monid run -p apify -e /starvibe/youtube-video-transcript -i '{"youtube_url":"https://www.youtube.com/watch?v=gN07gbipMoY","language":"en"}' -w
The -w flag waits inline for the result. Run a free monid inspect -p apify -e /starvibe/youtube-video-transcript first to see the full schema and the exact per-result price before anything bills.
Principle 3: one input field switches you from a video to a channel
The actor accepts exactly one of two entry points, and choosing correctly is the whole trick. Provide youtube_url for a single video, paired with language. Provide channel_url instead when you want to batch a channel, and reach for max_videos to cap the pull plus start_date and end_date to window it by upload date. Do not send both URL fields in the same call.

So a windowed channel harvest looks like this:
monid run -p apify -e /starvibe/youtube-video-transcript -i '{"channel_url":"https://www.youtube.com/@taostats","max_videos":25,"start_date":"2026-01-01","language":"en"}' -w
Because billing is per result, a channel batch scales linearly with the number of videos it returns, and the max_videos cap is your spend control. Dozens of transcripts still land in the low single-digit-dollar range. Keep one channel or one video per run so the bill stays easy to predict, and confirm the count on the free inspect step first.
Principle 4: timestamps are what make the transcript LLM-ready
A raw wall of text is a weak input for retrieval. Timestamped segments are a strong one. Because each segment is anchored to a moment, you can build chunks that respect where the speaker actually paused, attach the source timecode as metadata on every chunk, and let a RAG answer link back to the exact second it drew from. For a summarizer, the same timing lets you produce a chaptered summary instead of a flat paragraph.
The flag include_transcript_text also gives you the transcript as one plain string when you would rather hand a whole video to a long-context model in a single block. Segments for retrieval, the concatenated string for summarization: the same run supports both, and you decide at read time which field to use.

Principle 5: pay per transcript, never per seat
Monid is a pay-per-call data API marketplace: one interface and one wallet to discover, inspect, and run hundreds of external data endpoints without a separate signup per vendor, and it ships as an MCP server so an agent can drive the whole loop itself. For transcripts that means no Google Cloud project, no OAuth consent screen, and no monthly floor. You are billed per result on the paid run step, at a fraction of a cent per transcript, and discovery plus inspection cost nothing. Live per-endpoint pricing is on the catalog at monid.ai/tools.
FAQ
Why can't the official YouTube API give me transcripts of other people's videos?
Its captions.download method is scoped to the video owner, so a third party gets a 403 regardless of OAuth setup (captions.download reference). The restriction is a permission model, so no higher tier unlocks it.
What if a video has no manual captions in my language?
The actor falls back to YouTube's auto-generated caption track, so you still get a transcript rather than an empty response. Set language to the ISO 639-1 code you want, for example en or fr.
Can I get the transcript without timestamps?
Yes. Turn on include_transcript_text and the response adds the full transcript as a single plain string, handy for pasting a whole video into a long-context model.
How is it priced?
Per result, a fraction of a cent per transcript, always shown on the free inspect step before you run. A channel batch is priced per video returned, so max_videos is your cap. Current prices are at monid.ai/tools.
Do I have to write any scraping code? No. Discovery, inspection, and one billed run cover it, and after you add a key an agent can run the whole thing through the MCP server. Start at monid.ai.


