{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Shorts [Only $0.45💰] Scraper",
    "description": "$0.45💰 Unlock YouTube Shorts analytics! Extract views, likes, and engagement data from any channel. Get complete channel stats: 919M+ views tracking, subscriber counts, join dates, locations. Bulk scrape with sorting options. Perfect for content creators, marketers, and researchers analyzing trends",
    "version": "0.0",
    "x-build-id": "hMBe0jQynDY6CEfQi"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~youtube-shorts-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-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/memo23~youtube-shorts-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-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/memo23~youtube-shorts-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-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": "Channel name(s)",
            "type": "array",
            "description": "Channel names, one per row: a username without the `@` sign (e.g. `rainbowicecream9780`), an `@handle`, a display name with spaces or punctuation (`Marques Brownlee`, `AC/DC`), or a full channel link (`https://www.youtube.com/@handle`, `https://www.youtube.com/c/Apify`, `https://www.youtube.com/channel/UC…`, `https://www.youtube.com/user/name`, `https://www.youtube.com/Apify`). Paste whole URLs, not bare paths like `/c/Apify`. A name that is not a live handle is resolved through YouTube's channel search, and a name that matches no channel gets a `CHANNEL_NAME_NOT_RESOLVED` row instead of silently scraping a look-alike. Merged with **Channel / start URLs** below and processed first; an entry that appears in both fields with the same spelling is scraped once, but the same channel reached two different ways (a name and its channel link) is scraped twice.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Channel / start URLs",
            "type": "array",
            "description": "The same channel sources as a URL list: full Shorts tab URLs (`https://www.youtube.com/@handle/shorts`, `m.youtube.com`, `/channel/UC…/shorts`, `/c/…/shorts`, `/user/…/shorts`, `/Apify/shorts`), scheme-less `youtube.com/…`, or bare handles. Optional if you use **Channel name(s)**, **Search queries** or another source only.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Keywords for **YouTube Shorts search** (`/results` with Shorts filter). Each term is searched separately; results feed the same detail pipeline as channel Shorts. The per-term cap is **Maximum number of shorts per channel / search query / hashtag** below.",
            "items": {
              "type": "string"
            }
          },
          "hashtags": {
            "title": "Hashtags",
            "type": "array",
            "description": "Tags for **YouTube hashtag Shorts hubs** (`/hashtag/{tag}/shorts`). Enter `apify` or `#apify` per row. Same per-source cap as channels and search (see below).",
            "items": {
              "type": "string"
            }
          },
          "shortUrls": {
            "title": "Short URLs",
            "type": "array",
            "description": "Direct links to specific Shorts, e.g. `https://www.youtube.com/shorts/VIDEO_ID`. Also accepts `watch?v=` and `youtu.be/` — each unique video id is scraped once. Counts toward **Max items**.",
            "items": {
              "type": "string"
            }
          },
          "maxItems": {
            "title": "Max Items",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum number of shorts to scrape (global cap across all sources). Free users are capped at 30 items, and to the first 5 entries of each source field — further channels, queries, hashtags and Short URLs are skipped, and the run log names the ones it dropped.",
            "default": 10000
          },
          "maxResultsShorts": {
            "title": "Maximum number of shorts per channel / search query / hashtag",
            "minimum": 1,
            "type": "integer",
            "description": "Cap per channel, per keyword search **or** per hashtag hub (in addition to the global max items cap)."
          },
          "sortChannelShortsBy": {
            "title": "Sort shorts by",
            "enum": [
              "NEWEST",
              "POPULAR",
              "OLDEST"
            ],
            "type": "string",
            "description": "Listing order for each channel's Shorts tab. **Newest** uses the default grid; **Popular** and **Oldest** use YouTube's own sort chips.",
            "default": "NEWEST"
          },
          "regionCode": {
            "title": "Region (gl)",
            "pattern": "^$|^[A-Za-z]{2}$",
            "type": "string",
            "description": "ISO 3166-1 alpha-2 country code (e.g. `US`, `DE`, `JP`) applied to listing pages and InnerTube requests. Leave empty to use the proxy IP's default region."
          },
          "contentLanguage": {
            "title": "Content language (hl)",
            "pattern": "^$|^[a-z]{2,3}(-[A-Za-z]{2,4})?$",
            "type": "string",
            "description": "Interface language code (e.g. `en`, `de`, `pt-BR`) applied to listing pages and InnerTube requests. Affects localized metadata text. Leave empty for the default."
          },
          "oldestPostDate": {
            "title": "Scrape shorts published after [date]",
            "pattern": "^$|^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])(T[0-2]\\d:[0-5]\\d(:[0-5]\\d)?(\\.\\d+)?Z?)?$|^(\\d+)\\s*(minute|hour|day|week|month|year)s?$",
            "type": "string",
            "description": "Apify date picker: **Absolute** = `YYYY-MM-DD` or `YYYY-MM-DDTHH:MM[:SS]Z` (UTC, inclusive). **Relative** = e.g. `30 minutes`, `2 hours`, `7 days`, `2 weeks`, `3 months`, `1 year` (cutoff = now minus that span). Leave empty to disable. Filtering uses each video’s publish date from the detail page."
          },
          "includeTranscript": {
            "title": "Include transcript",
            "type": "boolean",
            "description": "Fetch the transcript for each Short and add a `subtitles` object to the output (plain text, timed segments, and ready-to-save **SRT** and **WebVTT** strings). Slightly slower runs.",
            "default": false
          },
          "language": {
            "title": "Transcript language",
            "pattern": "^$|^default$|^[a-z]{2,3}(-[A-Za-z]{2,4})?$",
            "type": "string",
            "description": "Preferred transcript language code (e.g. `en`, `de`, `es`). `default` = YouTube's default track. Falls back to English / the default track when the language is unavailable.",
            "default": "default"
          },
          "maxConcurrency": {
            "title": "Max Concurrency",
            "type": "integer",
            "description": "Maximum number of pages that can be processed at the same time.",
            "default": 10
          },
          "maxRequestRetries": {
            "title": "Max Request Retries",
            "minimum": 0,
            "type": "integer",
            "description": "How many times a failed request is retried before the source is given up on. Lower it to spend less on channels that are blocked or gone; raise it for flaky proxies. 404s are never retried.",
            "default": 15
          },
          "proxy": {
            "title": "Proxy configuration (optional override)",
            "type": "object",
            "description": "Runs go out through the actor's own residential pools, so Apify proxy groups and countries chosen here are not used (the run logs a line saying so). Only your own proxy URLs, with 'Use Apify Proxy' switched off, are honoured.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}