{
  "openapi": "3.0.1",
  "info": {
    "title": "Youtube Shorts Scraper Max",
    "description": "Extract detailed metadata of YouTube Shorts from public channel pages: titles, views, likes, comments, tags, hashtags, music, duration, publish date, media formats and channel stats. No login or API key needed.",
    "version": "0.1",
    "x-build-id": "Y7T4g6nwyu40zCbl3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/alpha-scraper~youtube-shorts-scraper-max/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-alpha-scraper-youtube-shorts-scraper-max",
        "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/alpha-scraper~youtube-shorts-scraper-max/runs": {
      "post": {
        "operationId": "runs-sync-alpha-scraper-youtube-shorts-scraper-max",
        "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/alpha-scraper~youtube-shorts-scraper-max/run-sync": {
      "post": {
        "operationId": "run-sync-alpha-scraper-youtube-shorts-scraper-max",
        "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": "🟢 Start URLs",
            "type": "array",
            "description": "One or more YouTube **channel** URLs. Accepted formats: `https://www.youtube.com/@handle`, `https://www.youtube.com/@handle/shorts`, `https://www.youtube.com/channel/UC…`, `https://www.youtube.com/c/name` and `https://www.youtube.com/user/name`. A channel URL without a tab is routed to that channel's Shorts tab. Other tabs (Videos, Live, Playlists) and search pages are not supported. Plain @handles go into 'Channel handles' and bare channel IDs into 'Channel IDs' below, and particular Shorts into 'Individual Shorts URLs'. Leave this list empty if you only use those.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "usernames": {
            "title": "Channel handles",
            "type": "array",
            "description": "Channels to scrape by their handle, one per row, with or without the @, for example `MrBeast` or `@MrBeast`. Each handle is opened as `https://www.youtube.com/@handle` and its Shorts are scraped just like a channel URL. This works alongside Start URLs and Channel IDs, and a channel that appears more than once is scraped only once.",
            "items": {
              "type": "string"
            }
          },
          "channelIds": {
            "title": "Channel IDs",
            "type": "array",
            "description": "Channels to scrape by their ID, one per row. A channel ID is 24 characters long and starts with UC, for example `UCX6OQ3DkcsbYNE6H8uQQuVA`; YouTube shows it under a channel's About → Share channel → Copy channel ID. Each ID is opened as `https://www.youtube.com/channel/ID` and its Shorts are scraped just like a channel URL. IDs that do not match this format are rejected before the run starts.",
            "items": {
              "type": "string",
              "pattern": "^UC[\\w-]{22}$"
            }
          },
          "maxshorts": {
            "title": "🟢 Max shorts per channel",
            "minimum": 1,
            "maximum": 4800,
            "type": "integer",
            "description": "Maximum number of Shorts to collect from **each** channel, newest first. YouTube delivers 48 Shorts per page, so a higher limit means more pages and more requests. The Actor stops earlier when a channel has fewer Shorts than this, or when 'Max pages per channel' is reached.",
            "default": 20
          },
          "individualShortsUrls": {
            "title": "Individual Shorts URLs",
            "type": "array",
            "description": "Links to the specific Shorts you want, one per row, for example `https://www.youtube.com/shorts/VIDEO_ID` or a share link such as `https://youtube.com/shorts/VIDEO_ID?si=…`. Each one returns the same complete record as a Short found on a channel, including its channel details. Use this instead of channel URLs or together with them. The filters below apply to these Shorts as well, 'Max shorts per channel' does not limit them, and a Short that is also found on one of your channels is returned only once.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "minViews": {
            "title": "Minimum views",
            "minimum": 0,
            "type": "integer",
            "description": "Only return Shorts that have at least this many views (the exact count at scraping time). Shorts below it are skipped and do not count towards 'Max shorts per channel', so the Actor keeps going further down the channel until enough Shorts qualify or the channel runs out; a built-in page limit stops endless scanning. Set 0 to switch the filter off.",
            "default": 0
          },
          "minDuration": {
            "title": "Minimum length",
            "type": "object",
            "description": "Skip Shorts shorter than this. Fill in minutes, seconds or both: for example 1 minute and 30 seconds, or just 90 seconds (more than 59 seconds is fine). A Short of exactly this length is kept. Leave both boxes at 0 for no minimum.",
            "properties": {
              "minutes": {
                "title": "Minutes",
                "description": "Whole minutes, for example 1.",
                "type": "integer",
                "editor": "number",
                "default": 0,
                "minimum": 0,
                "maximum": 10,
                "unit": "minutes"
              },
              "seconds": {
                "title": "Seconds",
                "description": "Seconds, for example 15. Values above 59 are fine: 90 seconds is the same as 1 minute 30 seconds.",
                "type": "integer",
                "editor": "number",
                "default": 0,
                "minimum": 0,
                "maximum": 600,
                "unit": "seconds"
              }
            },
            "default": {
              "minutes": 0,
              "seconds": 0
            },
            "additionalProperties": false
          },
          "maxDuration": {
            "title": "Maximum length",
            "type": "object",
            "description": "Skip Shorts longer than this. Fill in minutes, seconds or both: for example 1 minute, or just 60 seconds. A Short of exactly this length is kept. Leave both boxes at 0 for no maximum.",
            "properties": {
              "minutes": {
                "title": "Minutes",
                "description": "Whole minutes, for example 1.",
                "type": "integer",
                "editor": "number",
                "default": 0,
                "minimum": 0,
                "maximum": 10,
                "unit": "minutes"
              },
              "seconds": {
                "title": "Seconds",
                "description": "Seconds, for example 45. Values above 59 are fine: 90 seconds is the same as 1 minute 30 seconds.",
                "type": "integer",
                "editor": "number",
                "default": 0,
                "minimum": 0,
                "maximum": 600,
                "unit": "seconds"
              }
            },
            "default": {
              "minutes": 0,
              "seconds": 0
            },
            "additionalProperties": false
          },
          "newerThan": {
            "title": "Shorts newer than",
            "type": "string",
            "description": "Only return Shorts published on or after this date. Pick a date (YYYY-MM-DD) or type a relative age such as '2 weeks' or '3 months', which means that long ago. Dates are in UTC. Leave empty for no limit. Channels list their Shorts newest first, so a recent date keeps the run short. 'Max shorts per channel' still applies, so raise it to collect every Short published since the date."
          },
          "olderThan": {
            "title": "Shorts older than",
            "type": "string",
            "description": "Only return Shorts published before this date. Pick a date (YYYY-MM-DD) or type a relative age such as '1 month', which means that long ago. Dates are in UTC. Combine it with 'Newer than' for a date range, in which case this date must be later than the 'Newer than' date. Leave empty for no limit."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}