{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Channel Finder — Keyword & Similar Channels",
    "description": "Find YouTube channels by keyword, or channels similar to one you name. Every channel comes with subscribers, median and average views of recent videos, upload frequency, last upload, country and topic keywords. Filter by size, country and activity. No login, no API key.",
    "version": "0.1",
    "x-build-id": "HkbK1AW8QsI3nx6sj"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/foxlabs~youtube-channel-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-foxlabs-youtube-channel-finder",
        "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-finder/runs": {
      "post": {
        "operationId": "runs-sync-foxlabs-youtube-channel-finder",
        "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-finder/run-sync": {
      "post": {
        "operationId": "run-sync-foxlabs-youtube-channel-finder",
        "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": {
          "searchKeywords": {
            "title": "Search keywords (niches)",
            "type": "array",
            "description": "One niche or topic per line, the way you would type it into YouTube search: \"budget mechanical keyboards\", \"vegan recipes\", \"drone review\". One keyword followed to the end of YouTube's results brought 600 to 800 channels in our runs.",
            "items": {
              "type": "string"
            }
          },
          "expandKeywords": {
            "title": "Widen each keyword with YouTube's search suggestions",
            "type": "boolean",
            "description": "Also search the phrases YouTube's search box suggests for each keyword (\"skincare\" → \"skincare routines\", \"skincare for men\", …). Brings many more channels; some suggestions drift away from the niche, and every row says which phrase found it.",
            "default": false
          },
          "maxKeywordSuggestions": {
            "title": "Suggestions per keyword",
            "minimum": 1,
            "maximum": 14,
            "type": "integer",
            "description": "How many suggested phrases to add per keyword when widening is on (YouTube's list holds up to 14 phrases; the keyword itself, when it is one of them, is not searched twice).",
            "default": 10
          },
          "similarTo": {
            "title": "Find channels similar to (optional)",
            "type": "array",
            "description": "One channel per line: a channel URL (https://www.youtube.com/@51Drones), an @handle or a channel ID. For each, the Actor looks at the channels YouTube shows next to its videos and at channels that cover the same topics, scores them and returns the closest first. Clear \"Search keywords\" above if you want similar channels only.",
            "items": {
              "type": "string"
            }
          },
          "similarPerSeed": {
            "title": "Similar channels per seed",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many similar channels to return for each channel listed above.",
            "default": 25
          },
          "minSimilarityPercent": {
            "title": "Minimum similarity (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Similar channels below this topic similarity are left out. In our hand check about four in five channels between 10 and 20 were in the seed's niche, and about one in three between 5 and 10; raise it for a tighter list, lower it for a wider one.",
            "default": 10
          },
          "maxChannels": {
            "title": "Maximum channels",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "How many channel rows to deliver in total. The run stops here; you are charged only for delivered rows.",
            "default": 100
          },
          "discoverFrom": {
            "title": "Where keywords look for channels",
            "enum": [
              "channels-and-videos",
              "channels",
              "videos"
            ],
            "type": "string",
            "description": "Channel search lists the channels YouTube ranks for the keyword, mostly by name and description (many are small). The creators behind the top videos are channels that actually rank for the keyword. Both gives the widest list.",
            "default": "channels-and-videos"
          },
          "maxChannelsPerKeyword": {
            "title": "Maximum channels per keyword (optional)",
            "minimum": 1,
            "maximum": 100000,
            "type": "integer",
            "description": "Limits how many rows one keyword may deliver, so a list of keywords is covered evenly. Leave empty for no per-keyword limit."
          },
          "minSubscribers": {
            "title": "Minimum subscribers",
            "minimum": 0,
            "type": "integer",
            "description": "Only channels with at least this many subscribers. YouTube's channel search returns many very small channels; 1000 keeps the ones with an audience. Channels that hide their subscriber count are left out when this is above 0. Filtered channels are not delivered and not charged.",
            "default": 0
          },
          "maxSubscribers": {
            "title": "Maximum subscribers (optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Only channels with at most this many subscribers, for example 100000 for micro-creators. Leave empty (or 0) for no upper limit."
          },
          "countries": {
            "title": "Countries (optional)",
            "type": "array",
            "description": "Only channels whose stated country is in this list. Write country names or two-letter codes: United States, US, Germany, DE. Channels that state no country are left out when the list is filled.",
            "items": {
              "type": "string"
            }
          },
          "uploadedWithinDays": {
            "title": "Uploaded within the last N days (optional)",
            "minimum": 1,
            "maximum": 3650,
            "type": "integer",
            "description": "Only channels whose latest upload is at most this many days old, for example 30 for active channels."
          },
          "minMedianViews": {
            "title": "Minimum median views of recent videos (optional)",
            "minimum": 0,
            "type": "integer",
            "description": "Only channels whose recent uploads (the latest 15 at most) reach at least this median number of views."
          },
          "minKeywordMatchPercent": {
            "title": "Minimum keyword match of recent titles (%)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Keyword rows only: deliver a channel only if at least this share of its recent video titles mention the keyword's topic. A keyword also finds channels that made a single video on the topic; 20 keeps the channels that return to it. 0 delivers everything (the row still shows the share as keywordMatch).",
            "default": 0
          },
          "onlyNewChannels": {
            "title": "Only channels not delivered before",
            "type": "boolean",
            "description": "Remember delivered channels under the list name below and skip them in later runs. Schedule the same keywords weekly and each run brings only channels you have not received yet.",
            "default": false
          },
          "listName": {
            "title": "List name",
            "type": "string",
            "description": "Name of the memory used by \"Only channels 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 a kind of request YouTube refuses (or keeps leaving unanswered) is moved to Apify Proxy by the Actor itself. 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}