{
  "openapi": "3.0.1",
  "info": {
    "title": "Youtube Channel Scraper",
    "description": "Scrape YouTube channels or keyword searches for video URLs, titles, metrics, transcripts, channel profiles, social links, descriptions and more. Fast, low-cost YouTube data extraction for monitoring, influencer research, SEO, and LLM workflows.",
    "version": "0.0",
    "x-build-id": "yl4PXUa4G0fwPbqdf"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/newbs~Youtube-Channel/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-newbs-Youtube-Channel",
        "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-Channel/runs": {
      "post": {
        "operationId": "runs-sync-newbs-Youtube-Channel",
        "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-Channel/run-sync": {
      "post": {
        "operationId": "run-sync-newbs-Youtube-Channel",
        "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": [
          "channel",
          "numberOfResults"
        ],
        "properties": {
          "channel": {
            "title": "YouTube channels, videos, or search terms",
            "type": "array",
            "description": "Add channel handles or URLs, video URLs, or search terms. Turn on Search by keyword when every entry is a search query. Regular videos only; Shorts are excluded.",
            "items": {
              "type": "string"
            }
          },
          "numberOfResults": {
            "title": "Videos per channel or search",
            "minimum": 1,
            "type": "integer",
            "description": "Maximum videos to collect from each entry. A direct video URL returns one video."
          },
          "scrapeMode": {
            "title": "What to collect",
            "enum": [
              "transcripts",
              "basic",
              "custom"
            ],
            "type": "string",
            "description": "Video details + transcripts automatically retries missing captions with residential proxy. Successful direct results cost $0.50/1,000; proxy-assisted results cost $8/1,000 instead, even if captions remain unavailable. Basic returns listing data without transcripts or proxy, at $0.50/1,000. Paid-plan discounts apply. Choose advanced settings only to customize recovery. A missing transcript has an explanation in transcriptMessage.",
            "default": "custom"
          },
          "keywords": {
            "title": "Search by keyword",
            "type": "boolean",
            "description": "Turn on to search every entry, including single words. Leave off for channel handles and video URLs.",
            "default": false
          },
          "maxVideosPerChannel": {
            "title": "Max videos per channel",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "Applies to explicit and automatically detected keyword searches. Limits how many videos from the same YouTube channel are returned for each keyword. Leave empty for no per-channel limit. Set 1 for creator discovery use cases."
          },
          "localeHl": {
            "title": "YouTube language hint",
            "type": "string",
            "description": "YouTube hl parameter. Examples: en, fr, de, es, ja."
          },
          "localeGl": {
            "title": "YouTube country hint",
            "type": "string",
            "description": "YouTube gl parameter. Examples: US, GB, FR, DE, JP."
          },
          "maxVideoDetailConcurrency": {
            "title": "Parallel video details",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum videos processed in parallel. Default 20; memory pressure can temporarily reduce it. Lower this only when troubleshooting."
          },
          "maxChannelConcurrency": {
            "title": "Parallel channels or keywords",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many channel or keyword inputs to collect in parallel. Higher values can improve multi-input runs but can increase YouTube throttling risk."
          },
          "needVideoDetails": {
            "title": "Include full details",
            "type": "boolean",
            "description": "Enabled: collect full metadata and available transcripts. Disabled: return faster basic listing results (URL, title, thumbnail, channel and visible listing metrics). Details-only fields remain null, with collectionMode=basic and detailsStatus=not_requested. See the Basic results dataset view.",
            "default": true
          },
          "proxyMode": {
            "title": "Proxy mode",
            "enum": [
              "auto",
              "always",
              "never"
            ],
            "type": "string",
            "description": "Auto starts video extraction directly and uses proxy for blocked details or transcript recovery. Successful direct video results cost $0.50 per 1,000; results whose video requests or source collection use proxy cost $8 per 1,000 instead. All run platform usage is included in these result prices. Never disables proxy completely and keeps successful results at the direct rate. Always proxies collection and details. Captions are best effort in every mode. Recovery stops when its run-wide request or transfer allowance is exhausted or repeated attempts produce no usable results; see the run summary.",
            "default": "auto"
          },
          "transcriptMode": {
            "title": "Transcript mode",
            "enum": [
              "standard",
              "aggressive"
            ],
            "type": "string",
            "description": "Limited recovery controls cost with an automatic retry cap. Recover every missing transcript attempts recovery for each eligible video, within spending, proxy-transfer, and per-video limits. YouTube may not expose captions for every video.",
            "default": "standard"
          },
          "videoDetailProxyStrategy": {
            "title": "Video detail proxy strategy",
            "enum": [
              "auto",
              "proxyFirst"
            ],
            "type": "string",
            "description": "Auto starts each video directly. Proxy-first uses proxy for per-video requests and therefore uses the proxy-assisted result price. Proxy-backed source collection also makes its results proxy-assisted. Captions are not guaranteed.",
            "default": "auto"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional Apify Proxy settings. Leave empty with Auto mode unless you need custom proxy groups or country settings for fallback or Always mode."
          },
          "uniqueChannels": {
            "title": "Unique channels in keyword results",
            "type": "boolean",
            "description": "Applies to explicit and automatically detected keyword searches. Keep at most one result from each YouTube channel per keyword, and deduplicate repeated video URLs across the run."
          },
          "acceptLanguage": {
            "title": "Accept-Language header",
            "type": "string",
            "description": "HTTP language preferences sent with each request, for example en-US,en;q=0.9. This nudges YouTube localization but does not guarantee localized results."
          },
          "fastVideoDetailConcurrency": {
            "title": "Fast HTTP detail concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum videos processed in parallel, up to 20. Lower values are respected. Memory pressure temporarily reduces active concurrency without cancelling in-flight work. Default memory is 1,024 MB; 512 MB remains supported. Proxy requests share a separate limit of 2. Fast HTTP detail concurrency takes precedence when both fields are supplied."
          },
          "adaptiveTranscriptProxyFallback": {
            "title": "Adaptive transcript recovery",
            "type": "boolean",
            "description": "In standard mode, retry missing captions when coverage is poor, including a bounded early sample on large runs. Successful videos with actual proxy requests use the proxy-assisted result price. Disable this to avoid transcript-only proxy upgrades; choose Never use proxy to disable all proxy requests."
          },
          "adaptiveTranscriptMaxRetries": {
            "title": "Max adaptive transcript retries",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "Maximum missing-transcript rows retried by adaptive recovery in standard mode. Leave empty for automatic caps: all rows for small runs, and up to 80 round-robin rows for larger runs. Lower it when runtime and proxy cost matter more than transcript coverage."
          },
          "adaptiveTranscriptRetryConcurrency": {
            "title": "Parallel adaptive transcript retries",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many videos adaptive caption recovery processes in parallel. Defaults to 8 to overlap lightweight player requests, direct caption downloads, and dataset writes. The shared proxy limit remains 2 requests; increasing queued jobs beyond the default can delay results."
          },
          "residentialFallbackForMissingTranscripts": {
            "title": "Residential fallback for missing transcripts",
            "type": "boolean",
            "description": "Compatibility option. Prefer Transcript mode = Aggressive. When enabled, videos that still miss transcripts after direct caption extraction are retried with Apify residential proxy."
          },
          "streamDatasetItems": {
            "title": "Stream dataset rows",
            "type": "boolean",
            "description": "Write completed rows while the run is still processing instead of waiting until the end. Keep enabled for larger runs so partial progress is preserved if a run times out."
          },
          "resetCheckpoint": {
            "title": "Reset saved progress",
            "type": "boolean",
            "description": "Accepted for compatibility. Existing saved video IDs are always restored after a migration or restart to prevent duplicate results and charges. Start a new run for a fresh dataset."
          },
          "maxContinuationPages": {
            "title": "Maximum pagination requests",
            "minimum": 0,
            "maximum": 60,
            "type": "integer",
            "description": "Limit continuation requests per channel or keyword. Set 0 to read only the initial results page. Omit for an automatic limit based on numberOfResults (maximum 60)."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}