{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Latest Videos: No API Key, With View Counts",
    "description": "The latest videos from any YouTube channel or playlist, with live view counts, ratings and descriptions. No Google API key, no quota, no browser. Paste a handle, URL, channel id or playlist. Returns the 15 most recent videos per channel.",
    "version": "0.1",
    "x-build-id": "uMPOcI65ETYeQSAES"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/glitchbound~youtube-latest-videos-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-glitchbound-youtube-latest-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/glitchbound~youtube-latest-videos-scraper/runs": {
      "post": {
        "operationId": "runs-sync-glitchbound-youtube-latest-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/glitchbound~youtube-latest-videos-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-glitchbound-youtube-latest-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",
        "properties": {
          "channels": {
            "title": "Channels or playlists",
            "uniqueItems": true,
            "type": "array",
            "description": "One per line. Any of these works: a handle (@mkbhd), a channel URL, a channel id (UCBJycsmduvYEL83R_U4JriQ), a /user/ or /c/ URL, or a playlist URL or id.",
            "items": {
              "type": "string"
            }
          },
          "maxVideosPerChannel": {
            "title": "Maximum videos per channel",
            "minimum": 0,
            "maximum": 15,
            "type": "integer",
            "description": "How many videos to keep per channel or playlist. YouTube serves one page with no paging, about 30 videos for a channel, so asking for more than that page holds simply returns what the page held."
          },
          "titleKeywords": {
            "title": "Title must contain any of",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only videos whose title contains any of these, case-insensitive. Filtered videos are never charged.",
            "items": {
              "type": "string"
            }
          },
          "titleExclude": {
            "title": "Title must NOT contain",
            "uniqueItems": true,
            "type": "array",
            "description": "Drop videos whose title contains any of these, e.g. shorts or trailer.",
            "items": {
              "type": "string"
            }
          },
          "minViews": {
            "title": "Minimum views",
            "minimum": 0,
            "type": "integer",
            "description": "Only videos with at least this many views. Compared against YouTube's ROUNDED figure ('3.4M views') unless exactStats is on. Videos where YouTube publishes no count are kept out rather than treated as zero."
          },
          "publishedAfter": {
            "title": "Published on or after",
            "type": "string",
            "description": "An ISO date, e.g. 2026-07-01. The listing page gives only relative text ('4 days ago'), so setting this turns exactStats on for the run: it reads each kept video's own page for the real date. Costs one extra request per video kept."
          },
          "exactStats": {
            "title": "Exact view counts and publish dates",
            "type": "boolean",
            "description": "Off, every row carries what YouTube printed on the listing: '3.4M views' and '4 days ago'. On, each kept video's own page is read for the exact view count, the exact publication instant, the like count and the length in seconds. ONE EXTRA REQUEST PER VIDEO KEPT, so it is off by default. NOTE, measured 2026-08-29: YouTube now asks datacenter addresses to sign in before it will serve an individual video page, so on Apify's own IPs this usually returns nothing extra. The run detects that on the first video, says so in the log and stops asking rather than spending a request per row to be refused each time. Run through a residential proxy to make the per-video pages readable. The listing figures are always there either way.",
            "default": false
          },
          "maxResults": {
            "title": "Maximum videos to return",
            "minimum": 0,
            "type": "integer",
            "description": "A hard ceiling on rows returned and charged across the whole run. Defaults to 1,000 if left out. Set 0 for a dry run that returns and charges nothing."
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Proxy settings. The default is Apify's shared pool, which rotates addresses and costs nothing extra, and the channel and playlist listings come back complete through it.\n\nINDIVIDUAL VIDEO PAGES ARE DIFFERENT. YouTube answers a datacenter address with a sign-in wall on those (playabilityStatus LOGIN_REQUIRED), which is what stops exactStats returning anything. Selecting the RESIDENTIAL group makes them readable: measured 2026-08-31, the same video returned no view count through the datacenter pool and 410,554,316 through residential.\n\nIt is not the default because it is billed by traffic and a watch page is about 1.2 MB, so exact figures cost roughly a cent a video. Turn it on when you need the exact numbers, and leave maxResults low while you do.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}