{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Scraper",
    "description": "YouTube scraper for video data in one row: views, exact likes and date, top comments, chapters, channel subscribers and the transcript. Takes videos, channels, playlists or keyword searches. No YouTube API key. Missing or private videos are free. $4.99 per 1,000 on Free, from $2.49 on paid plans.",
    "version": "0.0",
    "x-build-id": "6Dhyab50WYIjxtzIo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nokia2k~youtube-all-in-one-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nokia2k-youtube-all-in-one-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/nokia2k~youtube-all-in-one-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nokia2k-youtube-all-in-one-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/nokia2k~youtube-all-in-one-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nokia2k-youtube-all-in-one-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",
        "properties": {
          "urls": {
            "title": "📺 Videos, channels or playlists",
            "type": "array",
            "description": "Paste YouTube links, one per line. A <b>channel</b> link (<code>https://www.youtube.com/@name</code>) gives you the videos of the channel, newest first. A <b>playlist</b> link gives you the videos of the playlist. A <b>video</b> link gives you that one video. You can mix them freely, and a plain <code>@name</code> works too.",
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerSource": {
            "title": "🔢 Videos per channel or playlist",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "How many videos to take from each channel or playlist. Start with a small number to see what you get, then raise it. You only pay for transcripts that are delivered.",
            "default": 50
          },
          "languages": {
            "title": "🌐 Transcript language",
            "type": "array",
            "description": "Leave it on <b>Original language</b> to get each video in the language it is spoken in: you do not need to know the language in advance. Or pick one or more languages in order of preference, and the first one the video has is used. You can also type any language code (<code>pt-BR</code>, <code>es-419</code>) or a language name (<code>Spanish</code>, <code>español</code>, <code>German</code>). Captions written by people are preferred over auto-generated ones. Every row tells you which language was returned and which other languages the video has.",
            "items": {
              "type": "string",
              "enumSuggestedValues": [
                "auto",
                "en",
                "es",
                "pt",
                "pt-BR",
                "fr",
                "de",
                "it",
                "nl",
                "ru",
                "uk",
                "pl",
                "tr",
                "ar",
                "hi",
                "bn",
                "ur",
                "id",
                "ms",
                "vi",
                "th",
                "fil",
                "ja",
                "ko",
                "zh",
                "zh-Hans",
                "zh-Hant",
                "fa",
                "he",
                "el",
                "sv",
                "no",
                "da",
                "fi",
                "cs",
                "sk",
                "hu",
                "ro",
                "bg",
                "sr",
                "hr",
                "sl",
                "lt",
                "lv",
                "et",
                "ca",
                "gl",
                "eu",
                "ta",
                "te",
                "mr",
                "gu",
                "kn",
                "ml",
                "pa",
                "ne",
                "si",
                "km",
                "my",
                "sw",
                "am",
                "af",
                "az",
                "kk",
                "uz",
                "ka",
                "hy",
                "sq",
                "mk",
                "is",
                "mn"
              ],
              "enumTitles": [
                "🎬 Original language of the video (recommended)",
                "English (en)",
                "Spanish (es)",
                "Portuguese (pt)",
                "Portuguese (Brazil) (pt-BR)",
                "French (fr)",
                "German (de)",
                "Italian (it)",
                "Dutch (nl)",
                "Russian (ru)",
                "Ukrainian (uk)",
                "Polish (pl)",
                "Turkish (tr)",
                "Arabic (ar)",
                "Hindi (hi)",
                "Bengali (bn)",
                "Urdu (ur)",
                "Indonesian (id)",
                "Malay (ms)",
                "Vietnamese (vi)",
                "Thai (th)",
                "Filipino (fil)",
                "Japanese (ja)",
                "Korean (ko)",
                "Chinese (zh)",
                "Chinese (Simplified) (zh-Hans)",
                "Chinese (Traditional) (zh-Hant)",
                "Persian (fa)",
                "Hebrew (he)",
                "Greek (el)",
                "Swedish (sv)",
                "Norwegian (no)",
                "Danish (da)",
                "Finnish (fi)",
                "Czech (cs)",
                "Slovak (sk)",
                "Hungarian (hu)",
                "Romanian (ro)",
                "Bulgarian (bg)",
                "Serbian (sr)",
                "Croatian (hr)",
                "Slovenian (sl)",
                "Lithuanian (lt)",
                "Latvian (lv)",
                "Estonian (et)",
                "Catalan (ca)",
                "Galician (gl)",
                "Basque (eu)",
                "Tamil (ta)",
                "Telugu (te)",
                "Marathi (mr)",
                "Gujarati (gu)",
                "Kannada (kn)",
                "Malayalam (ml)",
                "Punjabi (pa)",
                "Nepali (ne)",
                "Sinhala (si)",
                "Khmer (km)",
                "Burmese (my)",
                "Swahili (sw)",
                "Amharic (am)",
                "Afrikaans (af)",
                "Azerbaijani (az)",
                "Kazakh (kk)",
                "Uzbek (uz)",
                "Georgian (ka)",
                "Armenian (hy)",
                "Albanian (sq)",
                "Macedonian (mk)",
                "Icelandic (is)",
                "Mongolian (mn)"
              ]
            },
            "default": [
              "auto"
            ]
          },
          "outputFormats": {
            "title": "📄 Output formats",
            "type": "array",
            "description": "Choose how each transcript is returned. You can pick several: the price per transcript stays the same.",
            "items": {
              "type": "string",
              "enum": [
                "segments",
                "text",
                "timestampedText",
                "srt",
                "vtt",
                "markdown"
              ],
              "enumTitles": [
                "Lines with start and end times (for apps and code)",
                "Plain text (for reading and for AI)",
                "Text with a timestamp on every line",
                "SRT subtitle file",
                "WebVTT subtitle file",
                "Markdown document with title, channel, date and link (for knowledge bases)"
              ]
            },
            "default": [
              "segments",
              "text"
            ]
          },
          "combinedFile": {
            "title": "📚 Also give me everything as one Markdown file",
            "type": "boolean",
            "description": "Saves all transcripts of the run into one file, <code>ALL_TRANSCRIPTS.md</code>, with a heading, the channel, the date and the link for every video. Upload it to ChatGPT, Claude, NotebookLM or your knowledge base in one go. You find it in the run's <b>Storage &gt; Key-value store</b> tab. Large runs are split into files of about 8 MB. The price stays the same.",
            "default": false
          },
          "saveFiles": {
            "title": "💾 Also save subtitle files I can download",
            "type": "boolean",
            "description": "Saves a ready-to-use file per video for each text format you selected above: <code>.srt</code>, <code>.vtt</code> and <code>.txt</code>. Each row gets a <code>files</code> field with direct download links, and all files are listed in the run's <b>Storage &gt; Key-value store</b> tab. The price per transcript stays the same.",
            "default": false
          },
          "includeDetails": {
            "title": "📊 Video and channel details",
            "type": "boolean",
            "description": "Adds everything YouTube shows about the video: exact publish date, likes, number of comments, category, hashtags, links in the description, chapters, the most replayed moments and YouTube's AI summary (both only when YouTube shows them for the video), music credits, countries where it is blocked, and the channel's name, handle, subscribers and verified badge.",
            "default": true
          },
          "maxComments": {
            "title": "💬 Top comments per video",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How many of the top comments to add to each row, with author, likes and reply count. 0 for none.",
            "default": 20
          },
          "searchQueries": {
            "title": "🔎 What to search for",
            "type": "array",
            "description": "Type what you would type into YouTube's search box, one search per line. For each search you get the transcripts of the videos YouTube ranks highest. No links needed.",
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerSearch": {
            "title": "🔢 Videos per search",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many of the top results to take for each search. You only pay for transcripts that are delivered.",
            "default": 10
          },
          "searchUploadDate": {
            "title": "📅 Uploaded",
            "enum": [
              "any",
              "hour",
              "today",
              "week",
              "month",
              "year"
            ],
            "type": "string",
            "description": "Keep only videos uploaded recently. This is YouTube's own filter.",
            "default": "any"
          },
          "searchDuration": {
            "title": "⏱️ Length",
            "enum": [
              "any",
              "short",
              "medium",
              "long"
            ],
            "type": "string",
            "description": "Keep only short, medium or long videos. This is YouTube's own filter.",
            "default": "any"
          },
          "searchSortBy": {
            "title": "↕️ Order",
            "enum": [
              "relevance",
              "date",
              "views"
            ],
            "type": "string",
            "description": "Relevance is what YouTube shows by default. The other two put the found videos in order of date or views.",
            "default": "relevance"
          },
          "onlyWithCaptions": {
            "title": "Only videos that have captions (recommended)",
            "type": "boolean",
            "description": "Asks YouTube for videos with captions only, so nearly every result comes back with a transcript.",
            "default": true
          },
          "newerThan": {
            "title": "📅 Only videos newer than",
            "type": "string",
            "description": "Leave empty for no limit. Pick a date, or an age such as <code>30 days</code> or <code>6 months</code>. YouTube's lists show the age of a video only roughly (\"3 weeks ago\"), so the cut is approximate: nothing newer is ever left out, and a few videos just past the limit can slip in. Every row carries the exact date in <code>publishedAt</code>."
          },
          "onlyNewVideos": {
            "title": "Only new videos since the last run",
            "type": "boolean",
            "description": "Turn this on when you run the Actor on a <b>schedule</b> (for example every day). Each run then gives you only the videos it has not delivered before for the same channels, playlists and searches, so you never get, or pay for, the same video twice. The first run delivers everything it finds and remembers it. The list of delivered videos is kept in your own Apify account, in the key-value store named <code>youtube-transcripts-memory</code> (<b>Storage &gt; Key-value stores</b>). Videos that failed are tried again next time. Video links you paste directly are always delivered.",
            "default": false
          },
          "memoryName": {
            "title": "Memory name",
            "type": "string",
            "description": "Optional. Used only with <b>Only new videos since the last run</b>. Leave it empty and the Actor makes a name from your channels, playlists and searches, so every combination has its own list. Type a name (for example <code>my-daily-news</code>) to choose it yourself: the same name keeps adding to the same list even if you change the links, and a different name starts a separate list. Letters, digits and <code>-_.!'()</code>; other characters become <code>-</code>."
          },
          "contentTypes": {
            "title": "🎞️ Kinds of videos to take from a channel",
            "type": "array",
            "description": "A channel can hold regular videos, Shorts and recordings of live streams. Untick what you do not need.",
            "items": {
              "type": "string",
              "enum": [
                "videos",
                "shorts",
                "streams"
              ],
              "enumTitles": [
                "Regular videos",
                "Shorts",
                "Recordings of live streams"
              ]
            },
            "default": [
              "videos",
              "shorts",
              "streams"
            ]
          },
          "translateTo": {
            "title": "🔁 Translate to",
            "type": "string",
            "description": "Pick a language to get YouTube's own machine translation when the video has no captions in that language. If the video already has captions in it, those are returned instead, because they are better than a machine translation. YouTube does not offer translation for every video: when it does not, you get the original language and a note in <code>message</code>.",
            "default": "none"
          },
          "fallbackToAnyLanguage": {
            "title": "If my language is missing, give me the original language",
            "type": "boolean",
            "description": "When on, a video without captions in the languages you picked still returns its transcript in its original language, and the <code>language</code> and <code>message</code> fields tell you which one. Turn it off to skip those videos instead. Skipped videos are not charged.",
            "default": true
          },
          "captionType": {
            "title": "Caption type",
            "enum": [
              "any",
              "manual",
              "auto"
            ],
            "type": "string",
            "description": "Choose which captions are accepted. Auto-generated captions are produced by YouTube's speech recognition and have no punctuation in many languages.",
            "default": "any"
          },
          "mergeSegmentsSeconds": {
            "title": "Merge caption lines into blocks",
            "minimum": 0,
            "maximum": 3600,
            "type": "integer",
            "description": "YouTube captions come in lines of a few words. Set a number of seconds, for example 30, to join them into longer blocks. This is useful for chapters, search indexes and chunking for RAG and vector databases: each block becomes one RAG chunk with its start and end time. Use 0 to keep the original lines.",
            "default": 0
          },
          "includeMetadata": {
            "title": "Include video details",
            "type": "boolean",
            "description": "Adds channel, duration, view count, description, keywords and thumbnail to every row. The video title is always included.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}