Bulk YouTube transcript extractor
Point it at a channel and it pulls the transcript for the latest 25 uploads, or paste your own list of URLs. Download everything as one text file or as JSON with the timings intact.
This page runs 25 videos at a time so it stays available to everyone. The API takes 500 targets in a single POST /v1/jobs/batch call with no ceiling.
How this works
In channel mode the tool first lists the channel's recent uploads, then fetches each transcript a few at a time so results start appearing immediately rather than after the whole run. You can stop it part-way and still download what finished.
Videos without captions are marked skipped with the reason, and the run continues. That behaviour matches the API: an empty result is refunded in full, so a batch where half the videos have no captions bills for exactly the half that produced something.
This page caps a run at 25 videos so it stays fast for everyone. The API has no such limit — one batch call takes 500 targets and runs to completion however long that takes, then calls your webhook.
# 500 videos, one call, no timeout ceiling
curl -X POST "$API/v1/jobs/batch" \
-H "x-api-key: $KEY" -H "content-type: application/json" \
-d '{
"endpoint": "youtube.transcript",
"targets": ["8XkPqR2nLvE", "dQw4w9WgXcQ", "..."],
"webhook_url": "https://you.example/hooks/batch"
}'
# → 202 { "jobId": "job_...", "pollUrl": "..." }Questions
- How many videos can I do at once?
- This page caps a run so it stays fast and available to everyone. The API does not: POST /v1/jobs/batch accepts up to 500 targets per call and runs them with no timeout ceiling.
- What happens to videos with no captions?
- They are listed as skipped with a reason. The run continues. In the API, those targets are refunded automatically — an empty result is never charged.
- What format do I get?
- One combined text file with a header per video, or a JSON file with the full cue list and timings for each one. Both download straight from your browser.
- Can I feed this into an LLM?
- That is the common case. The combined text export is plain UTF-8 with a clear separator per video. The API returns the same thing as a single text field plus timed cues, so you can chunk it however your pipeline wants.