← All solutions

Transcript export guide

Export YouTube Transcripts: JSON, SRT, VTT or a Review CSV?

Use JSON when you need to preserve a transcript's structure, SRT when a subtitle editor needs timed cues, and CSV when someone needs to review a batch in a spreadsheet. For WebVTT, plan a separate conversion: TubeText's current YouTube Transcript input schema offers SRT and segments, but does not document an includeVtt option.

Runs on Apify. Review current inputs, pricing and costs before starting.

The important distinction is between the format of the exported dataset and the transcript fields inside each record. Downloading a CSV does not create one subtitle file per video. Downloading JSON does not mean you asked the Actor to include timing segments.

Published Documentation checked 23 October 2026Practical workflow guide

Choose the destination before you run the batch

Your next taskKeep or createWhat to watch for
Archive results or write an integrationFull JSON exportPreserve video identity, outcome and optional nested fields.
Read a transcript alongside the videotimestampedTextA readable starting point, not word-level alignment.
Import captions into a compatible editorThe srt value saved as a UTF-8 .srt fileCheck cue timing and text in the target editor.
Review many videos in a spreadsheetCSV with selected top-level fieldsDecide whether each row represents a video or a segment.
Supply a web player that requires WebVTTConvert validated SRT or segments to .vttConversion is separate from this YouTube Actor's documented outputs.
Build retrieval over a transcript collectionJSON plus selected timing fieldsUse the YouTube transcript RAG guide for chunking and provenance.

On a narrow screen, scroll the table sideways to read all columns.

Apify's dataset export supports JSON, CSV, Excel and other formats. In the Console, open the dataset, choose Export, select a format and download it. Field selection can narrow the result, so leave it unrestricted when saving your archival JSON. Apify dataset documentation.

Request the fields you will need

Start with a small list of direct video links that you are allowed to process. This configuration requests readable timestamps, SRT and segments while explicitly disabling optional AI transcription:

Configuration example only. Replace the placeholder; this is not an executed request.

Configuration example · not executed
{
  "urls": ["YOUR_YOUTUBE_VIDEO_URL"],
  "languages": ["en"],
  "preferManualCaptions": true,
  "includeTimestampedText": true,
  "includeSrt": true,
  "includeSegments": true,
  "chunkWords": 0,
  "aiFallback": false,
  "deduplicateExactCaptions": false,
  "maxVideosPerSource": 5
}

The current input reference documents these controls. The language list is a preference order, not a translation request: inspect the returned language rather than assuming that requesting English produces English.

maxVideosPerSource bounds expansion from sources such as a channel or playlist. It is not a total-video budget for an arbitrary list of direct links. If you supply several expanding sources, review each source's limit and the resulting scope.

Here, disabling AI is an intentional captions-only choice, not a statement about the product default. A missing-caption item needs a separate decision before you enable transcription. The missing-transcript guide explains that branch.

Save the original JSON first

After the run finishes, retain its run identifier, dataset identifier and complete JSON export together. Keep unsuccessful records too, in a diagnostic set rather than in your transcript collection.

For every usable transcript, preserve at least its videoId, url, status, language, source when present, and the actual text. Keep the optional segments and srt fields if you requested them. The documented output distinguishes plain text from timed text; the input reference describes segment inclusion.

Check one downloaded object before processing the whole file. A selected table view may display fewer columns than the record contains, and an export configured to include only a few fields cannot serve as your complete archive.

Save an SRT field as a subtitle file

With includeSrt: true, the Actor adds an srt string to the record. Treat that string as file content:

  1. Parse the JSON so escaped line breaks become real line breaks.
  2. Read the successful record's srt value, not the entire JSON object.
  3. Save it as plain UTF-8 text, using a distinct filename such as VIDEO_ID.LANGUAGE.srt.
  4. Open it in the intended subtitle editor or player and review the beginning, middle and end.

A spreadsheet cell containing an SRT string is still a spreadsheet cell. Renaming the entire CSV to .srt will not turn it into a subtitle file. Likewise, copying a JSON-escaped string without decoding it can leave visible \n characters instead of separate cue lines.

Check words as well as timing. Format conversion cannot correct a misheard name or an inaccurate caption. YouTube's own format reference describes SRT as timed text and requires plain UTF-8 for its basic SRT support. YouTube subtitle-file guidance.

If you need WebVTT

Do not add includeVtt to this YouTube configuration by analogy with a different tool. It is not documented in the checked YouTube schema.

Instead, convert a reviewed SRT file with a converter or editor you trust, or implement conversion from the returned segments. The resulting file must follow WebVTT syntax, including its WEBVTT header and cue timestamps. Changing only the extension is insufficient. Test the output in the exact player that will consume it. MDN WebVTT format reference.

If your destination accepts SRT already, conversion may add work without helping the reader. Choose the format required by the destination rather than exporting every possible variant.

Build a review CSV without losing the source

For a one-row-per-video review, use these columns:

ColumnPurpose
Video ID and URLStable join key and a route back to the source.
Title and languageHuman-readable identity and language check.
Status and sourceSeparate usable transcripts from failures; retain provenance.
TranscriptSearchable text for a reviewer.
Run/dataset referenceLocate the archived record.
Review state and notesRecord your own checks without rewriting the original output.

On a narrow screen, scroll the table sideways to read all columns.

The last two entries are workflow columns you add, not promised Actor fields. A segment-level sheet is a different table: one row per segment, with the video key repeated on every row and separate start, duration and text columns. It requires an explicit transformation of the segments array. Do not assume the standard CSV export creates that layout for you.

For integrations, Apify documents unwind for expanding arrays and flatten for objects. Validate the chosen transformation on a small export before relying on its row count or column names. Dataset-items API.

Reconcile the batch and its costs

Before calling the export complete, check that every selected video has a usable transcript or an explained diagnostic outcome. Count successful transcript records separately from the number of input sources and the number of spreadsheet rows. Keep re-exporting an existing dataset separate from starting a new Actor run.

Review the current pricing events and set an appropriate maximum run cost before execution. Delivered transcripts, optional AI transcription by started minute, and Actor Start are distinct considerations. Disabling AI does not make the whole run free, and a source-count limit is not a currency limit.

Start with the format your workflow needs

Open YouTube Transcript on Apify, request the fields your destination needs, and inspect one permitted video before expanding the batch. Preserve JSON even when the immediate deliverable is a spreadsheet or subtitle file.

TubeText Labs maintains the linked Actor. This guide was prepared with AI assistance and checked against public documentation; the configuration and review layout are proposed examples, not a new live test. Product execution and billing take place in your Apify account. About TubeText.