{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Channel Videos Scraper — Exact Stats & Outliers",
    "description": "The videos of any YouTube channel — Videos, Shorts, Live — with unrounded views, likes, publish date and duration, and an outlier score that shows which videos beat the channel's usual. Comment count, description and chapters on request. Only-new mode for monitoring. No login, no API key.",
    "version": "0.1",
    "x-build-id": "eoR73ly0jd9dvqHIt"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/foxlabs~youtube-channel-videos-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-foxlabs-youtube-channel-videos-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/foxlabs~youtube-channel-videos-scraper/runs": {
      "post": {
        "operationId": "runs-sync-foxlabs-youtube-channel-videos-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/foxlabs~youtube-channel-videos-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-foxlabs-youtube-channel-videos-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",
        "required": [
          "channels"
        ],
        "properties": {
          "channels": {
            "title": "Channels",
            "type": "array",
            "description": "One channel per line: a channel URL (https://www.youtube.com/@mkbhd), an @handle or a channel ID. URLs, handles and IDs can be mixed.",
            "items": {
              "type": "string"
            }
          },
          "videoTypes": {
            "title": "Kinds of video",
            "type": "array",
            "description": "Which of the channel's lists to read: its Videos tab, its Shorts tab, its Live tab. Each kind is listed separately, up to the per-channel maximum.",
            "items": {
              "type": "string",
              "enum": [
                "videos",
                "shorts",
                "live"
              ],
              "enumTitles": [
                "Videos",
                "Shorts",
                "Live streams"
              ]
            },
            "default": [
              "videos"
            ]
          },
          "maxVideosPerChannel": {
            "title": "Maximum videos per channel and kind",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "How many videos to deliver for each channel, per kind of video. A channel's lists can be followed to their end: use a large number for a full archive.",
            "default": 30
          },
          "maxVideos": {
            "title": "Maximum videos in total",
            "minimum": 1,
            "maximum": 1000000,
            "type": "integer",
            "description": "The run stops when this many rows have been delivered. You are charged only for delivered rows.",
            "default": 1000
          },
          "sort": {
            "title": "Order",
            "enum": [
              "latest",
              "popular",
              "oldest"
            ],
            "type": "string",
            "description": "The order of each list, as on the channel page: newest first, most viewed first, or oldest first.",
            "default": "latest"
          },
          "details": {
            "title": "What to read for each video",
            "enum": [
              "figures",
              "full",
              "list"
            ],
            "type": "string",
            "description": "\"Exact figures\" asks only for what a video's page keeps refreshing: the unrounded view count, the like count and the publish date. \"Everything\" reads each video's own page as well; YouTube limits how many pages one address may read in a row (about a thousand), after which the Actor moves to other addresses and, if none is left, delivers the remaining videos with exact figures only. \"Lists and feed only\" is the cheapest: about four requests a channel, for watching many channels.",
            "default": "figures"
          },
          "publishedWithinDays": {
            "title": "Published within the last N days (optional)",
            "minimum": 1,
            "maximum": 36500,
            "type": "integer",
            "description": "Only videos published at most this many days ago. With the latest-first order the list is not read past this point. Exact with \"Exact figures\" and \"Everything\"; with \"Lists and feed only\" a video is judged by what the list shows (\"1 month ago\" passes 30 days) and a video without a date there — a Short outside the feed, a stream on air — is left out."
          },
          "minViews": {
            "title": "Minimum views (optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Only videos with at least this many views. Leave empty (or 0) for no minimum."
          },
          "minOutlierScore": {
            "title": "Minimum outlier score (optional)",
            "type": "string",
            "description": "Only videos that did at least this many times the channel's usual: 2 keeps videos with twice the median views of the channel's latest videos of the same kind, 5 keeps the rare hits. Decimals are fine (1.5)."
          },
          "onlyNewVideos": {
            "title": "Only videos not delivered before",
            "type": "boolean",
            "description": "Remember delivered videos under the list name below and skip them in later runs. Schedule the same channels daily and each run brings only the videos it has not delivered before. With this on, \"Maximum videos per channel\" is how far down each list the Actor looks: of the first 30 (or whatever you set) it delivers the ones it has not delivered before, and it does not go further back.",
            "default": false
          },
          "listName": {
            "title": "List name",
            "type": "string",
            "description": "Name of the memory used by \"Only videos not delivered before\". Use a different name for each project. Letters, digits and hyphens (a hyphen not first or last), up to 40 characters; capitals are read as lower case.",
            "default": "default"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Nothing to change for normal use: requests go out directly, and the Actor switches to Apify Proxy by itself if YouTube refuses them. Turn a proxy on here only if you want every request to use it.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}