Free export
YouTube to JSON
Paste a channel, playlist or video link and download structured JSON: one object per video with its metadata and, when captions exist, the complete transcript as timed segments.
How do I export YouTube to JSON?
Paste a YouTube channel, playlist or video link into BulkTranscripts, choose JSON, and press Export. Each video becomes one JSON object with its id, title, channel, URL, duration, upload date and, when captions exist, the full transcript as timed segments. A channel or playlist comes back as a ZIP of one file per video. No API key is needed; the first 30 videos are free.
What is in each JSON file
Every video becomes one object with video_id, title, channel, url, duration in seconds, upload_date, the caption language, a source flag telling you whether the captions were written by the creator or auto-generated, the cleaned full text, and a segments array of {start, duration, text}. It is the same shape the REST API returns, so code written against one works with the other.
Export a whole channel or playlist, not one video
Paste a channel handle or a playlist link and every video is processed in one job, up to 1,000 at a time. The download is a ZIP with one JSON file per video, named by video id, so a folder of them is trivially loadable with a glob. Playlist order is preserved. Videos without captions still appear in the results list so you know what was skipped, and they are never charged.
Connect YouTube to JSON in your own code
The same engine is a REST API. One GET returns a video's transcript as JSON; the channel and playlist endpoints return the video list as JSON so you can page through an archive and fetch only what you need. There is also a hosted MCP server for Claude, ChatGPT and Cursor. The docs cover every call; the API page has the quick start.
curl "https://bulktranscripts.co/api/v1/transcript?video=dQw4w9WgXcQ" \
-H "Authorization: Bearer YOUR_KEY"
curl "https://bulktranscripts.co/api/v1/channel/videos?channel=@veritasium&limit=50" \
-H "Authorization: Bearer YOUR_KEY"Why JSON and not CSV or text
JSON keeps the nesting: one video, many timed segments, without flattening every segment into its own row. That makes it the right input for search indexes, RAG pipelines, jq, pandas via json_normalize, or any script that wants metadata and transcript together. If you want one row per segment for a spreadsheet, choose CSV instead; if you want one readable document for NotebookLM or Claude, choose the combined AI-ready export.
Sample output
One object per video: metadata, the full cleaned text, and a segments array of {start, duration, text}. source is manual_caption or auto_caption so you can filter on caption quality. Same shape as the REST API's transcript endpoint.
{
"video_id": "dQw4w9WgXcQ",
"title": "How to Build a Second Brain",
"channel": "Tiago Forte",
"url": "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
"duration": 1122,
"upload_date": "20240312",
"language": "en",
"source": "manual_caption",
"text": "The idea is simple: your brain is for having ideas, not holding them. ...",
"segments": [
{"start": 0.0, "duration": 3.2, "text": "The idea is simple: your brain is for having ideas,"},
{"start": 3.2, "duration": 2.7, "text": "not holding them."}
]
}Questions
Do I need an API key or a Google Cloud project?
No. The web export needs nothing: paste a link and download. The REST API uses a license key from a credit pack, and anonymous calls get a free allowance.
Can I export a YouTube playlist to JSON?
Yes. Paste the playlist link; you get one JSON file per video, in playlist order, in a single ZIP.
Does the JSON include the transcript?
Yes, when the video has captions: the full cleaned text plus timed segments. Videos without captions are listed as skipped and cost nothing.
Is the JSON the same as the API response?
The per-video fields match. The API adds a few extras such as word count and paragraphs, and a billing object showing credits used.
Is there a limit?
Up to 1,000 videos per job. The first 30 transcripts are free with no card; after that credits are bought once and never expire, and re-exporting anything already in your library is free.