{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Transcript Scraper Pro (Captions + AI Fallback)",
    "description": "Extract YouTube transcripts at scale without burning through your budget. It starts with free captions whenever they're available, then switches to AI only for videos that don't have them. You stay in control of costs, and the output — JSON, SRT, VTT, plain text, or LLM-ready format",
    "version": "1.0",
    "x-build-id": "kTKb9L7WT77UeaUao"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/codepoetry~youtube-transcript-ai-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-codepoetry-youtube-transcript-ai-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/codepoetry~youtube-transcript-ai-scraper/runs": {
      "post": {
        "operationId": "runs-sync-codepoetry-youtube-transcript-ai-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/codepoetry~youtube-transcript-ai-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-codepoetry-youtube-transcript-ai-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "YouTube URLs",
            "type": "array",
            "description": "Paste one or more YouTube URLs — single videos, playlists, or channels. Supports watch URLs, short youtu.be links, and channel URLs.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxResults": {
            "title": "Max videos per playlist/channel",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of videos to fetch from a playlist or channel. Single video URLs ignore this. Channels return newest videos first.",
            "default": 10
          },
          "languages": {
            "title": "Caption languages",
            "type": "array",
            "description": "Languages to try, in order of preference. The first match on each video is used. Note: setting Caption source to Manual Only means auto-generated captions are ignored even if they exist in your requested language.",
            "items": {
              "type": "string",
              "enum": [
                "af",
                "ak",
                "sq",
                "am",
                "ar",
                "hy",
                "as",
                "ay",
                "az",
                "bn",
                "eu",
                "be",
                "bho",
                "bs",
                "bg",
                "my",
                "ca",
                "ceb",
                "zh",
                "zh-CN",
                "zh-HK",
                "zh-SG",
                "zh-TW",
                "zh-Hans",
                "zh-Hant",
                "co",
                "hr",
                "cs",
                "da",
                "dv",
                "nl",
                "en",
                "en-US",
                "eo",
                "et",
                "ee",
                "fil",
                "fi",
                "fr",
                "gl",
                "lg",
                "ka",
                "de",
                "el",
                "gn",
                "gu",
                "ht",
                "ha",
                "haw",
                "he",
                "hi",
                "hmn",
                "hu",
                "is",
                "ig",
                "id",
                "ga",
                "it",
                "ja",
                "jv",
                "kn",
                "kk",
                "km",
                "rw",
                "ko",
                "kri",
                "ku",
                "ky",
                "lo",
                "la",
                "lv",
                "ln",
                "lt",
                "lb",
                "mk",
                "mg",
                "ms",
                "ml",
                "mt",
                "mi",
                "mr",
                "mn",
                "ne",
                "nso",
                "no",
                "ny",
                "or",
                "om",
                "ps",
                "fa",
                "pl",
                "pt",
                "pa",
                "qu",
                "ro",
                "ru",
                "sm",
                "sa",
                "gd",
                "sr",
                "sn",
                "sd",
                "si",
                "sk",
                "sl",
                "so",
                "st",
                "es",
                "su",
                "sw",
                "sv",
                "tg",
                "ta",
                "tt",
                "te",
                "th",
                "ti",
                "ts",
                "tr",
                "tk",
                "uk",
                "ur",
                "ug",
                "uz",
                "vi",
                "cy",
                "fy",
                "xh",
                "yi",
                "yo",
                "zu"
              ],
              "enumTitles": [
                "af — Afrikaans",
                "ak — Akan",
                "sq — Albanian",
                "am — Amharic",
                "ar — Arabic",
                "hy — Armenian",
                "as — Assamese",
                "ay — Aymara",
                "az — Azerbaijani",
                "bn — Bangla",
                "eu — Basque",
                "be — Belarusian",
                "bho — Bhojpuri",
                "bs — Bosnian",
                "bg — Bulgarian",
                "my — Burmese",
                "ca — Catalan",
                "ceb — Cebuano",
                "zh — Chinese",
                "zh-CN — Chinese (China)",
                "zh-HK — Chinese (Hong Kong)",
                "zh-SG — Chinese (Singapore)",
                "zh-TW — Chinese (Taiwan)",
                "zh-Hans — Chinese (Simplified)",
                "zh-Hant — Chinese (Traditional)",
                "co — Corsican",
                "hr — Croatian",
                "cs — Czech",
                "da — Danish",
                "dv — Divehi",
                "nl — Dutch",
                "en — English",
                "en-US — English (United States)",
                "eo — Esperanto",
                "et — Estonian",
                "ee — Ewe",
                "fil — Filipino",
                "fi — Finnish",
                "fr — French",
                "gl — Galician",
                "lg — Ganda",
                "ka — Georgian",
                "de — German",
                "el — Greek",
                "gn — Guarani",
                "gu — Gujarati",
                "ht — Haitian Creole",
                "ha — Hausa",
                "haw — Hawaiian",
                "he — Hebrew",
                "hi — Hindi",
                "hmn — Hmong",
                "hu — Hungarian",
                "is — Icelandic",
                "ig — Igbo",
                "id — Indonesian",
                "ga — Irish",
                "it — Italian",
                "ja — Japanese",
                "jv — Javanese",
                "kn — Kannada",
                "kk — Kazakh",
                "km — Khmer",
                "rw — Kinyarwanda",
                "ko — Korean",
                "kri — Krio",
                "ku — Kurdish",
                "ky — Kyrgyz",
                "lo — Lao",
                "la — Latin",
                "lv — Latvian",
                "ln — Lingala",
                "lt — Lithuanian",
                "lb — Luxembourgish",
                "mk — Macedonian",
                "mg — Malagasy",
                "ms — Malay",
                "ml — Malayalam",
                "mt — Maltese",
                "mi — Māori",
                "mr — Marathi",
                "mn — Mongolian",
                "ne — Nepali",
                "nso — Northern Sotho",
                "no — Norwegian",
                "ny — Nyanja",
                "or — Odia",
                "om — Oromo",
                "ps — Pashto",
                "fa — Persian",
                "pl — Polish",
                "pt — Portuguese",
                "pa — Punjabi",
                "qu — Quechua",
                "ro — Romanian",
                "ru — Russian",
                "sm — Samoan",
                "sa — Sanskrit",
                "gd — Scottish Gaelic",
                "sr — Serbian",
                "sn — Shona",
                "sd — Sindhi",
                "si — Sinhala",
                "sk — Slovak",
                "sl — Slovenian",
                "so — Somali",
                "st — Southern Sotho",
                "es — Spanish",
                "su — Sundanese",
                "sw — Swahili",
                "sv — Swedish",
                "tg — Tajik",
                "ta — Tamil",
                "tt — Tatar",
                "te — Telugu",
                "th — Thai",
                "ti — Tigrinya",
                "ts — Tsonga",
                "tr — Turkish",
                "tk — Turkmen",
                "uk — Ukrainian",
                "ur — Urdu",
                "ug — Uyghur",
                "uz — Uzbek",
                "vi — Vietnamese",
                "cy — Welsh",
                "fy — Western Frisian",
                "xh — Xhosa",
                "yi — Yiddish",
                "yo — Yoruba",
                "zu — Zulu"
              ]
            },
            "default": [
              "en"
            ]
          },
          "subType": {
            "title": "Caption source",
            "enum": [
              "manual",
              "auto",
              "both"
            ],
            "type": "string",
            "description": "Manual = human-written captions only. Auto = YouTube's machine-generated captions only. Both = tries manual first, falls back to auto. Most videos only have auto-generated captions.",
            "default": "both"
          },
          "outputFormats": {
            "title": "Output formats",
            "type": "array",
            "description": "Plain Text is the simplest — one block of words. JSON adds timestamps. LLM-Ready strips [Music] and filler tokens for AI pipelines. SRT and VTT are subtitle formats for video editors.",
            "items": {
              "type": "string",
              "enum": [
                "json",
                "text",
                "llm",
                "srt",
                "vtt"
              ],
              "enumTitles": [
                "JSON (timestamped segments)",
                "Plain Text",
                "LLM-Ready (filler stripped)",
                "SRT (subtitle file)",
                "VTT (WebVTT)"
              ]
            },
            "default": [
              "json",
              "text",
              "llm"
            ]
          },
          "wordLevel": {
            "title": "Word-level timestamps",
            "type": "boolean",
            "description": "Add per-word start and end times inside each JSON segment.",
            "default": false
          },
          "enableAiFallback": {
            "title": "Enable AI transcription",
            "type": "boolean",
            "description": "Off by default. Turn on to transcribe videos that have no native YouTube captions. Memory increases to 4 GB automatically and per-minute AI charges apply.",
            "default": false
          },
          "forceWhisperLanguage": {
            "title": "AI transcription language",
            "enum": [
              "",
              "af",
              "am",
              "ar",
              "as",
              "az",
              "ba",
              "be",
              "bg",
              "bn",
              "bo",
              "br",
              "bs",
              "ca",
              "cs",
              "cy",
              "da",
              "de",
              "el",
              "en",
              "es",
              "et",
              "eu",
              "fa",
              "fi",
              "fo",
              "fr",
              "gl",
              "gu",
              "ha",
              "haw",
              "he",
              "hi",
              "hr",
              "ht",
              "hu",
              "hy",
              "id",
              "is",
              "it",
              "ja",
              "jw",
              "ka",
              "kk",
              "km",
              "kn",
              "ko",
              "la",
              "lb",
              "ln",
              "lo",
              "lt",
              "lv",
              "mg",
              "mi",
              "mk",
              "ml",
              "mn",
              "mr",
              "ms",
              "mt",
              "my",
              "ne",
              "nl",
              "nn",
              "no",
              "oc",
              "pa",
              "pl",
              "ps",
              "pt",
              "ro",
              "ru",
              "sa",
              "sd",
              "si",
              "sk",
              "sl",
              "sn",
              "so",
              "sq",
              "sr",
              "su",
              "sv",
              "sw",
              "ta",
              "te",
              "tg",
              "th",
              "tl",
              "tr",
              "tt",
              "uk",
              "ur",
              "uz",
              "vi",
              "yi",
              "yo",
              "yue",
              "zh"
            ],
            "type": "string",
            "description": "Force the AI model to a specific language and skip the 30-second detection window at the start of each video. Saves roughly 20% of AI transcription time per video. Leave empty to auto-detect."
          },
          "maxAiMinutes": {
            "title": "Max AI minutes per run",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on total AI transcription minutes for this run. When reached, remaining caption-free videos are skipped and the run continues. Set to 0 for unlimited.",
            "default": 30
          },
          "skipAiFallbackIfLongerThan": {
            "title": "Skip AI for long videos (minutes)",
            "minimum": 0,
            "type": "integer",
            "description": "Skip AI transcription for any video longer than this many minutes. Useful when a channel mixes short clips with long recordings. Set to 0 to disable.",
            "default": 0
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}