Free tool
YouTube transcript API
Straightforward HTTP endpoints for transcripts — including a streaming bulk endpoint for whole channels.
Open the appSingle video
POST /api/transcript with {"url": "…"} returns the video's metadata, the full plain text, and a segments array of {text, start, duration} objects. Accepts a watch URL, a youtu.be link, a Shorts URL, or a bare 11-character video ID.
Bulk, as a stream
POST /api/bulk takes a channel or playlist URL and streams Server-Sent Events: one metadata event with the video count, a video event per transcript as it completes, and a final done event with totals. Streaming matters here — a 200-video job should not be a single request you wait minutes for.
Exports
GET /api/export/<video_id>?format=srt returns a single file in any supported format. POST /api/export/bundle takes a list of video IDs and returns either a ZIP or one combined document.
Errors are specific
Failures return a code you can branch on rather than a generic message — no_transcript for a video without captions, invalid_input for a malformed URL, resolution_failed when the video cannot be reached. In a bulk run, a failed video is reported inline and the job continues.
Questions
Do I need an API key?
Not for normal use. Requests without a key run against the free allowance; a license key raises the limit and is sent as an X-License-Key header.
Is there a rate limit?
Bulk jobs run up to 300 videos each with server-side concurrency control. Be reasonable and you will not hit anything.
Does it return timestamps?
Yes — every segment carries a start time and duration in seconds, and SRT/VTT exports are timestamped by definition.