{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Shorts Scraper - Channels & Hashtags",
    "description": "Extract YouTube Shorts from channels, hashtags, or video URLs. Collect titles, views, likes, publish dates, and available creator data. Paginate up to 1,000 Shorts per source and export JSON, CSV, or Excel. No YouTube API key required. $3 per 1,000 video results plus Apify usage.",
    "version": "0.0",
    "x-build-id": "0a7qiQYJycTwMQEes"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/newbs~Youtube-Shorts/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-newbs-Youtube-Shorts",
        "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/newbs~Youtube-Shorts/runs": {
      "post": {
        "operationId": "runs-sync-newbs-Youtube-Shorts",
        "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/newbs~Youtube-Shorts/run-sync": {
      "post": {
        "operationId": "run-sync-newbs-Youtube-Shorts",
        "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": {
          "channel": {
            "title": "YouTube sources",
            "maxItems": 20,
            "uniqueItems": true,
            "type": "array",
            "description": "Enter channels, hashtags, or direct video URLs. Examples: @youtube, #fashion, https://www.youtube.com/shorts/SWQHAPIY5ag. Use one source type per run: if types are mixed, direct videos take priority, then hashtags, then channels.",
            "items": {
              "type": "string"
            }
          },
          "hashtag": {
            "title": "Hashtags (optional)",
            "maxItems": 20,
            "uniqueItems": true,
            "type": "array",
            "description": "Optional dedicated hashtag list. Accepts tags with or without # and full YouTube hashtag URLs. Hashtags take precedence over channel sources.",
            "items": {
              "type": "string"
            }
          },
          "videoUrls": {
            "title": "Specific Shorts URLs (optional)",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Optional dedicated list of YouTube Shorts, watch, embed, live, or youtu.be URLs. Video IDs are also accepted. Direct videos take precedence over hashtags and channels.",
            "items": {
              "type": "string"
            }
          },
          "numberOfResults": {
            "title": "Results per source",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum Shorts per channel or hashtag, from 1 to 1,000. Automatically follows additional result pages. YouTube availability, your runtime limit, and your maximum charge can reduce the total. Keep 1 for a quick first test.",
            "default": 1
          },
          "needVideoDetails": {
            "title": "Enrich video and channel details",
            "type": "boolean",
            "description": "Enabled by default. Uses fast HTTP extraction to collect available likes, views, publish date, description, and author metadata. Disable only for a faster listing-only run with fewer fields.",
            "default": true
          },
          "fallbackToBrowser": {
            "title": "Use browser fallback for missing details",
            "type": "boolean",
            "description": "Disabled by default for speed. Enable it to open Shorts in a browser when HTTP extraction is missing important fields such as comment count. This is slower but can improve completeness.",
            "default": false
          },
          "includeChannelDetails": {
            "title": "Visit channel pages for profile data",
            "type": "boolean",
            "description": "Disabled by default for faster sample runs. Enable it to visit each unique creator channel page for subscriber count, channel video count, banner, avatar, description, and social links.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Browser concurrency",
            "minimum": 1,
            "maximum": 5,
            "type": "integer",
            "description": "How many browser fallback pages can run at once. Keep 1-2 for stability; higher values are capped at 5. HTTP work uses the separate controls below.",
            "default": 1
          },
          "maxSourceConcurrency": {
            "title": "Source concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many channel or hashtag sources are collected in parallel by the fast HTTP engine. Defaults to 2 and is capped at 10.",
            "default": 2
          },
          "maxVideoDetailConcurrency": {
            "title": "Video detail concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Concurrent HTTP video/creator enrichment per source. Defaults to 10; capped at 20. Completed results are saved as they become ready, without waiting for a full batch. Lower this if YouTube throttles a large job.",
            "default": 10
          },
          "maxRunSeconds": {
            "title": "Soft runtime limit",
            "minimum": 0,
            "maximum": 86400,
            "type": "integer",
            "description": "Optional graceful runtime cap in seconds. The sample run is prefilled with 240 so Apify tests stop cleanly before a 300-second timeout. Set 0 to use the Apify run timeout.",
            "default": 0
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings used for HTTP recovery and browser fallback. Apify Proxy is used by default on the Apify platform.",
            "default": {
              "useApifyProxy": true
            }
          },
          "proxyMode": {
            "title": "Proxy mode",
            "enum": [
              "auto",
              "always",
              "never"
            ],
            "type": "string",
            "description": "Auto tries direct HTTP first and uses the configured proxy only for recovery. Always sends HTTP requests through the proxy. Never disables proxy use.",
            "default": "auto"
          },
          "videoDetailProxyStrategy": {
            "title": "Video detail proxy strategy",
            "enum": [
              "auto",
              "proxyFirst"
            ],
            "type": "string",
            "description": "Auto enriches Shorts directly first for lower latency. Proxy first can help when the Actor's direct YouTube route is repeatedly blocked.",
            "default": "auto"
          },
          "directRetryAttempts": {
            "title": "Direct detail retries",
            "minimum": 0,
            "maximum": 3,
            "type": "integer",
            "description": "Extra direct HTTP attempts for incomplete video metadata before proxy or browser recovery. Defaults to 1 and is capped at 3.",
            "default": 1
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}