{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Shorts Scraper - Views, Likes & Channel Data",
    "description": "Scrape every Short from any YouTube channel: title, view count, thumbnail, duration, publish date and description, with exact view and like counts on request. Takes handles, channel ids or URLs. No login, no API key, no quota.",
    "version": "0.0",
    "x-build-id": "znh8gvtOLIQrpoxql"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/eiv~youtube-shorts-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-eiv-youtube-shorts-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/eiv~youtube-shorts-scraper/runs": {
      "post": {
        "operationId": "runs-sync-eiv-youtube-shorts-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/eiv~youtube-shorts-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-eiv-youtube-shorts-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": {
          "channels": {
            "title": "YouTube channels",
            "type": "array",
            "description": "Channels whose Shorts you want, one per line. Accepts a handle (@MrBeast or just MrBeast), a channel id (UCX6OQ3DkcsbYNE6H8uQQuVA), or any channel URL, including the older /c/ and /user/ forms. A handle costs one extra request to resolve; a UC… id costs none. A /watch or /shorts link is a single video rather than a channel and is reported as bad input instead of being guessed at. Leave empty to run a small demo on @MrBeast.",
            "items": {
              "type": "string"
            }
          },
          "includeDetails": {
            "title": "Exact view counts, duration, publish date and description",
            "type": "boolean",
            "description": "Off by default. The Shorts tab only ever says \"12M views\", which is anything from 12,000,000 to 12,999,999. Turning this on fetches each Short individually and replaces the rounded figure with the exact one (measured: 12,576,545 where the list said 12M), and adds the duration in seconds, the publish date and the full description. Every row says which kind of view count it got: viewCountIsExact. YouTube bot-checks the request that carries duration, publish date and description, based on the IP address a run happens to be given, so those three can come back empty on some Shorts - measured on a full run, roughly half. Exact view counts are read from a second source and arrived on every row. Each summary row reports how many Shorts were affected under detailsGated, and you are never charged for statistics that were not returned. Switching on like counts below makes exact view counts more reliable still, at no extra request.",
            "default": false
          },
          "includeLikes": {
            "title": "Also fetch exact like counts",
            "type": "boolean",
            "description": "Off by default, and only does anything when the option above is on. YouTube no longer publishes exact like counts anywhere on a Shorts listing, so each one needs its own request to the watch page - a much heavier response than the exact-views request. Charged per like count actually obtained: a Short whose count could not be read is left null and is not charged for it. That same response also states the exact view count, so turning this on makes exact view counts more reliable at no extra request and no extra charge.",
            "default": false
          },
          "minViews": {
            "title": "Minimum views",
            "minimum": 0,
            "maximum": 1000000000,
            "type": "integer",
            "description": "Skip Shorts below this view count. Filtered Shorts are never written and never charged. With exact statistics off this is compared against YouTube's rounded figure, so a threshold of 1,000,000 against a Short listed as \"1M views\" is approximate; with exact statistics on it is compared against the exact number instead.",
            "default": 0
          },
          "maxShortsPerChannel": {
            "title": "Max Shorts per channel",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Stop after this many Shorts from each channel. YouTube returns 48 per request, so 100 is three requests.",
            "default": 100
          },
          "maxTotalShorts": {
            "title": "Max Shorts in total",
            "minimum": 1,
            "maximum": 500000,
            "type": "integer",
            "description": "A ceiling across every channel in the run, so one prolific channel cannot spend the whole budget. Counted on rows actually written, and a Short that appears under two of your inputs is only counted, written and charged once.",
            "default": 1000
          },
          "maxPagesPerChannel": {
            "title": "Max pages per channel",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "A work limit rather than an output limit: pages READ, not rows kept. It matters when a strict Minimum views filter drops nearly everything, where without it a run could read a whole channel to find ten rows. At 48 Shorts per page the default reaches roughly 960. If a channel stops on this limit the summary row says so, so it is never mistaken for the channel running out of Shorts.",
            "default": 20
          },
          "maxConcurrency": {
            "title": "Parallel workers",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many requests may be in flight at once. Raising this does not speed up a run on its own, because the delay below paces requests globally rather than per worker.",
            "default": 5
          },
          "requestDelayMs": {
            "title": "Delay between requests",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Milliseconds between the START of one request and the next, counted across the whole run rather than per worker. YouTube was measured to accept about 174 requests a minute before it starts refusing; the default is 150 a minute, comfortably under that. Lowering it risks blocks that cost retries.",
            "default": 400
          },
          "proxyConfig": {
            "title": "Proxy",
            "type": "object",
            "description": "Datacenter proxy is the default and is what this Actor was measured on. YouTube's internal API needs no login, no API key and no browser here, so there is nothing for a residential proxy to unblock — it only makes the run slower and heavier. Use one only if you specifically need results as they appear from another country.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}