{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Transcript & Subtitles Scraper - Channels, Playlists",
    "description": "Extract YouTube transcripts, subtitles and captions in bulk - paste video, channel, or playlist URLs, or search queries. Download SRT, VTT, plain text or timed segments plus video metadata. Only delivered transcripts are charged. No cookies, no API key.",
    "version": "1.0",
    "x-build-id": "sbkLhPrYpZx8ijVd0"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sauliusautomatesit~youtube-transcript-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sauliusautomatesit-youtube-transcript-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/sauliusautomatesit~youtube-transcript-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sauliusautomatesit-youtube-transcript-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/sauliusautomatesit~youtube-transcript-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sauliusautomatesit-youtube-transcript-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": [
          "videoUrls"
        ],
        "properties": {
          "videoUrls": {
            "title": "Videos, channels, playlists, or searches",
            "type": "array",
            "description": "YouTube video URLs or IDs, channel URLs (`youtube.com/@handle` or `/channel/UC...`), playlist URLs, or plain search queries. Channels, playlists, and searches are expanded into their videos automatically.",
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "title": "Preferred transcript languages",
            "type": "array",
            "description": "Language codes in priority order (e.g. `en`, `es`, `pt-BR`). The first available match is used.",
            "default": [
              "en"
            ],
            "items": {
              "type": "string"
            }
          },
          "transcriptFormat": {
            "title": "Transcript format",
            "enum": [
              "text",
              "clean-text",
              "segments",
              "chunks",
              "srt",
              "vtt"
            ],
            "type": "string",
            "description": "`text` = raw caption lines joined (unchanged legacy output); `clean-text` = sound cues removed and split into paragraphs at pauses; `segments` = array of {text, start, duration}; `chunks` = paragraphs as {text, start, end, wordCount}, ready for RAG/embedding; `srt` / `vtt` = subtitle file content.",
            "default": "text"
          },
          "chunkWords": {
            "title": "Words per paragraph",
            "minimum": 20,
            "maximum": 2000,
            "type": "integer",
            "description": "Target paragraph size for the `clean-text` and `chunks` formats. Paragraphs also break at any pause of 2s or more, so they are often shorter than this. Ignored by the other formats.",
            "default": 150
          },
          "preferAutoGenerated": {
            "title": "Prefer auto-generated captions",
            "type": "boolean",
            "description": "By default manually-created captions win over auto-generated (ASR) ones in the same language. Enable to prefer ASR.",
            "default": false
          },
          "fallbackToAnyLanguage": {
            "title": "Fall back to any available language",
            "type": "boolean",
            "description": "If no preferred language is available, use the best available track instead of skipping the video. The `language` field always shows what you got.",
            "default": true
          },
          "includeFailures": {
            "title": "Include failure rows",
            "type": "boolean",
            "description": "Push a diagnostic row (type=`failure`) for videos without captions or that could not be fetched. Failure rows are never charged.",
            "default": true
          },
          "maxVideosPerSource": {
            "title": "Max videos per channel/playlist/search",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Cap on how many videos each channel, playlist, or search expands to (newest first for channels).",
            "default": 200
          },
          "maxResults": {
            "title": "Max videos total",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "Hard cap on videos processed in this run — a spend guard for large inputs.",
            "default": 100000
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 25,
            "type": "integer",
            "description": "Videos processed in parallel.",
            "default": 10
          },
          "proxyStrategy": {
            "title": "Proxy strategy",
            "enum": [
              "auto",
              "datacenter-only",
              "residential-only"
            ],
            "type": "string",
            "description": "`auto` (recommended): try datacenter first, fall back to residential on YouTube bot-checks. Forcing a single tier is mainly for debugging.",
            "default": "auto"
          },
          "maxUnchargedRatio": {
            "title": "Stop if this share of videos has no transcript",
            "minimum": 10,
            "maximum": 100,
            "type": "integer",
            "description": "Safety valve for inputs that are wrong for this Actor. If more than this percentage of the first 200+ videos return no transcript (usually: the videos have no captions), the run stops early and reports why, instead of working through the whole list for nothing. Set to 100 to disable.",
            "default": 90
          },
          "maxResidentialAttempts": {
            "title": "Premium proxy attempt budget",
            "minimum": 0,
            "maximum": 1000000,
            "type": "integer",
            "description": "Caps how many times this run may escalate to the residential proxy tier, which is far more expensive than datacenter. 0 sizes it automatically (25% of the videos queued, minimum 500). Once spent, the run keeps going on datacenter only.",
            "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}