{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Channel Search Scraper - Subscribers, Country & Stats",
    "description": "For influencer outreach, sponsorship lists and niche research: search YouTube by keyword and get one row per channel with handle, subscribers as a number, video count, total views, joined date, country and links. Filter by subscriber range and country. Export to CSV, Excel or JSON.",
    "version": "0.1",
    "x-build-id": "vM60n8Qjc75VXZoVN"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~youtube-channel-search/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-youtube-channel-search",
        "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/neverempty~youtube-channel-search/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-youtube-channel-search",
        "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/neverempty~youtube-channel-search/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-youtube-channel-search",
        "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": [
          "queries"
        ],
        "properties": {
          "queries": {
            "title": "Search keywords",
            "type": "array",
            "description": "What to search for on YouTube. Each keyword is searched separately with YouTube's own \"Channels\" filter, and every row says which keyword found it.",
            "items": {
              "type": "string"
            }
          },
          "maxChannelsPerKeyword": {
            "title": "Channels per keyword",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many channels to return for each keyword, after your filters. YouTube shows 20 channels per page and this Actor follows the pages for you. A broad keyword such as \"woodworking\" ran out after about 340 channels in our tests.",
            "default": 50
          },
          "maxRecords": {
            "title": "Maximum records",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "The most channel rows this run may return and charge for, across all keywords. The limit is shared evenly between keywords, and a keyword that finds fewer channels leaves its share to the next ones.",
            "default": 200
          },
          "includeChannelDetails": {
            "title": "Add video count, country, joined date, total views and links",
            "type": "boolean",
            "description": "Reads each channel's About panel, which is where YouTube shows these fields. Turn it off for a faster run that returns only what the search itself shows (id, name, handle, subscribers, verified badge, thumbnail, description snippet).",
            "default": true
          },
          "minSubscribers": {
            "title": "Minimum subscribers",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no minimum. YouTube rounds subscriber counts (\"1.26M subscribers\"), and this compares that rounded number. Channels that hide their subscriber count are left out when you set a range.",
            "default": 0
          },
          "maxSubscribers": {
            "title": "Maximum subscribers",
            "minimum": 0,
            "type": "integer",
            "description": "0 means no maximum. Use it with the minimum to find small and mid-size channels, for example 10,000 to 100,000.",
            "default": 0
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Keep only channels whose About panel shows one of these countries, for example \"United States\", \"Japan\" or \"UK\". English country names and common codes (US, UK, JP, IN, DE...) are accepted. Channels that do not show a country are left out when this is set.",
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Must contain",
            "type": "array",
            "description": "Keep only channels whose name, handle or description snippet contains these words.",
            "items": {
              "type": "string"
            }
          },
          "keywordMatch": {
            "title": "Must contain: match",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "any = at least one of the words must appear. all = every word must appear.",
            "default": "any"
          },
          "excludeKeywords": {
            "title": "Must not contain",
            "type": "array",
            "description": "Drop channels whose name, handle or description snippet contains any of these words.",
            "items": {
              "type": "string"
            }
          },
          "monitoringMode": {
            "title": "Only return channels that are new since the last run",
            "type": "boolean",
            "description": "Remembers which channels this Actor has already returned for these keywords and skips them next time, so a scheduled run only brings channels you have not seen. Only channels that were actually returned and charged are remembered.",
            "default": false
          },
          "resetMonitoringState": {
            "title": "Forget what was already returned",
            "type": "boolean",
            "description": "Clears the memory of what was already returned, once, so this run returns everything again.",
            "default": false
          },
          "maxRequests": {
            "title": "Maximum requests",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "A hard ceiling on how many requests this run may send to YouTube, counting search pages and About panels together. Each returned channel with details costs about one request.",
            "default": 500
          },
          "useProxy": {
            "title": "Use an Apify proxy if YouTube asks for one",
            "type": "boolean",
            "description": "Off by default: a plain connection worked in our tests and is faster. Turn this on if you see bot-check rows in the output.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}