{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Scraper: Videos, Channels & Subtitles",
    "description": "YouTube scraper, YouTube data API and YouTube channel scraper with no API key: scrape YouTube videos from channels, search results and playlists, plus Shorts and live streams. One row per video: YouTube metadata, views, exact likes, comments, duration, tags, channel stats, free subtitles. No login.",
    "version": "0.1",
    "x-build-id": "CuNMxLiQjiwP9Whnt"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/deepmine~youtube-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-deepmine-youtube-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/deepmine~youtube-scraper/runs": {
      "post": {
        "operationId": "runs-sync-deepmine-youtube-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/deepmine~youtube-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-deepmine-youtube-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": {
          "startUrls": {
            "title": "🔗 YouTube links (channels, videos, playlists)",
            "type": "array",
            "description": "Channel links or @handles (e.g. https://www.youtube.com/@TED or @TED), video and Shorts links, playlists or search result links. A channel link reads its Videos, Shorts and Live tabs up to maxResults, maxResultsShorts and maxResultStreams; a link ending in /shorts or /streams reads that tab only. Give at least one of startUrls, searchQueries or channels.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "searchQueries": {
            "title": "🔍 Search terms",
            "type": "array",
            "description": "Words you'd type in YouTube's search box, one per line, e.g. web scraping. Each term returns up to maxResults videos (plus maxResultsShorts Shorts and maxResultStreams live streams). The form starts with a channel; to search instead, clear the link above and type your words here.",
            "items": {
              "type": "string",
              "pattern": "\\S"
            }
          },
          "maxResults": {
            "title": "🎬 Max videos per channel or search",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Regular videos per channel, playlist or search term. 0 = none. Left out: 50, unless you set only Shorts or live streams (then no regular videos). All three maximums 0: each channel link gives one row with the channel's info only."
          },
          "maxResultsShorts": {
            "title": "📱 Max Shorts per channel or search",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Shorts per channel (its Shorts tab) or search term. 0 = none.",
            "default": 0
          },
          "maxResultStreams": {
            "title": "🔴 Max live streams per channel or search",
            "minimum": 0,
            "maximum": 10000,
            "type": "integer",
            "description": "Live and past live streams per channel (its Live tab) or search term. 0 = none.",
            "default": 0
          },
          "oldestPostDate": {
            "title": "📅 Published after",
            "type": "string",
            "description": "Keep only videos published on or after this date, e.g. 2026-09-01 or 30 days. Channel tabs stop at the first older video. Empty = any date."
          },
          "sortVideosBy": {
            "title": "Channel: sort videos by",
            "enum": [
              "NEWEST",
              "POPULAR",
              "OLDEST"
            ],
            "type": "string",
            "description": "Order of a channel's videos, Shorts and live streams (the tab's Latest / Popular / Oldest). Empty = newest first."
          },
          "sortingOrder": {
            "title": "Search: sort by",
            "enum": [
              "relevance",
              "date",
              "views",
              "rating"
            ],
            "type": "string",
            "description": "Order of search results. Empty = YouTube's relevance."
          },
          "dateFilter": {
            "title": "Search: upload date",
            "enum": [
              "hour",
              "today",
              "week",
              "month",
              "year"
            ],
            "type": "string",
            "description": "Only search results uploaded in this period. Empty = any time."
          },
          "lengthFilter": {
            "title": "Search: video length",
            "enum": [
              "under4",
              "between420",
              "plus20"
            ],
            "type": "string",
            "description": "Only search results of this length. Empty = any length."
          },
          "videoType": {
            "title": "Search: type",
            "enum": [
              "video",
              "movie"
            ],
            "type": "string",
            "description": "Search for videos or for movies. Empty = videos."
          },
          "searchFeatures": {
            "title": "Search: features",
            "type": "array",
            "description": "Only search results with all of these, e.g. HD and Subtitles/CC. Empty = no feature filter.",
            "items": {
              "type": "string",
              "enum": [
                "isLive",
                "is4K",
                "isHD",
                "hasSubtitles",
                "hasCC",
                "is360",
                "isVR180",
                "is3D",
                "isHDR",
                "hasLocation",
                "isBought"
              ],
              "enumTitles": [
                "Live",
                "4K",
                "HD",
                "Subtitles/CC",
                "Creative Commons",
                "360°",
                "VR180",
                "3D",
                "HDR",
                "Location",
                "Purchased"
              ]
            }
          },
          "sortChannelShortsBy": {
            "title": "sortChannelShortsBy",
            "type": "string",
            "description": "NEWEST, POPULAR or OLDEST: order of the Shorts read for channels (the Shorts tab's Latest / Popular / Oldest). Empty = the sortVideosBy order."
          },
          "subtitlesMode": {
            "title": "Subtitles",
            "enum": [
              "NONE",
              "ALWAYS_SUBTITLES"
            ],
            "type": "string",
            "description": "Download each video's own subtitles into the subtitles column. The subtitles view of the results and the subtitlesStatus column say 'off' while this is No subtitles.",
            "default": "NONE"
          },
          "transcriptionAndSubtitle": {
            "title": "transcriptionAndSubtitle",
            "type": "string",
            "description": "Older key of the Subtitles choice (subtitlesMode), kept so saved inputs of other YouTube scrapers run. NONE, or ALWAYS_SUBTITLES = subtitles in the rows. Not offered: TRANSCRIPTION_AS_FALLBACK saves the videos' own subtitles only, ALWAYS_TRANSCRIBE saves none (subtitlesStatus notOffered); the run's status message says so."
          },
          "subtitlesLanguage": {
            "title": "Subtitle language",
            "type": "string",
            "description": "A language code such as en, de, es, pt-BR or ja, or any for the video's own language. Only used when subtitles are on.",
            "default": "en"
          },
          "subtitlesFormat": {
            "title": "Subtitle format",
            "enum": [
              "srt",
              "vtt",
              "xml",
              "plaintext"
            ],
            "type": "string",
            "description": "How the subtitles are written. Plain text has no times. Only used when subtitles are on.",
            "default": "srt"
          },
          "preferAutoGeneratedSubtitles": {
            "title": "Prefer automatic subtitles",
            "type": "boolean",
            "description": "Take YouTube's automatic subtitles before a person-made track.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Leave as is: Apify datacenter proxy works for every YouTube call this Actor makes.",
            "default": {
              "useApifyProxy": true
            }
          },
          "isHD": {
            "title": "isHD",
            "type": "boolean",
            "description": "true = only search results with this feature, the same as adding isHD to searchFeatures. Accepted so saved inputs from other YouTube scrapers run."
          },
          "hasSubtitles": {
            "title": "hasSubtitles",
            "type": "boolean",
            "description": "true = only search results with this feature, the same as adding hasSubtitles to searchFeatures. Accepted so saved inputs from other YouTube scrapers run."
          },
          "hasCC": {
            "title": "hasCC",
            "type": "boolean",
            "description": "true = only search results with this feature, the same as adding hasCC to searchFeatures. Accepted so saved inputs from other YouTube scrapers run."
          },
          "is3D": {
            "title": "is3D",
            "type": "boolean",
            "description": "true = only search results with this feature, the same as adding is3D to searchFeatures. Accepted so saved inputs from other YouTube scrapers run."
          },
          "isLive": {
            "title": "isLive",
            "type": "boolean",
            "description": "true = only search results with this feature, the same as adding isLive to searchFeatures. Accepted so saved inputs from other YouTube scrapers run."
          },
          "isBought": {
            "title": "isBought",
            "type": "boolean",
            "description": "true = only search results with this feature, the same as adding isBought to searchFeatures. Accepted so saved inputs from other YouTube scrapers run."
          },
          "is4K": {
            "title": "is4K",
            "type": "boolean",
            "description": "true = only search results with this feature, the same as adding is4K to searchFeatures. Accepted so saved inputs from other YouTube scrapers run."
          },
          "is360": {
            "title": "is360",
            "type": "boolean",
            "description": "true = only search results with this feature, the same as adding is360 to searchFeatures. Accepted so saved inputs from other YouTube scrapers run."
          },
          "hasLocation": {
            "title": "hasLocation",
            "type": "boolean",
            "description": "true = only search results with this feature, the same as adding hasLocation to searchFeatures. Accepted so saved inputs from other YouTube scrapers run."
          },
          "isHDR": {
            "title": "isHDR",
            "type": "boolean",
            "description": "true = only search results with this feature, the same as adding isHDR to searchFeatures. Accepted so saved inputs from other YouTube scrapers run."
          },
          "isVR180": {
            "title": "isVR180",
            "type": "boolean",
            "description": "true = only search results with this feature, the same as adding isVR180 to searchFeatures. Accepted so saved inputs from other YouTube scrapers run."
          },
          "aiVideoDescription": {
            "title": "aiVideoDescription",
            "type": "boolean",
            "description": "Accepted so saved inputs from other YouTube scrapers run: not offered, ignored (AI text columns are not written; subtitles are always in the row)."
          },
          "aiVideoSummary": {
            "title": "aiVideoSummary",
            "type": "boolean",
            "description": "Accepted so saved inputs from other YouTube scrapers run: not offered, ignored (AI text columns are not written; subtitles are always in the row)."
          },
          "saveSubsToKVS": {
            "title": "saveSubsToKVS",
            "type": "boolean",
            "description": "Accepted so saved inputs from other YouTube scrapers run: not offered, ignored (AI text columns are not written; subtitles are always in the row)."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}