{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Channel Finder By Keyword Research",
    "description": "Find and analyze YouTube channels with the YouTube Channel Finder Scraper. Search by keyword or niche to extract channel names, IDs, stats, and descriptions. Ideal for influencer discovery, market research, and competitor analysis. Fast, accurate, and easy to use at scale.",
    "version": "0.0",
    "x-build-id": "6Kg8A5x4mP9072LNa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scrapier~youtube-channel-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scrapier-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/scrapier~youtube-channel-finder/runs": {
      "post": {
        "operationId": "runs-sync-scrapier-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/scrapier~youtube-channel-finder/run-sync": {
      "post": {
        "operationId": "run-sync-scrapier-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": {
          "keywords": {
            "title": "🔑 Seed Keywords to Research",
            "type": "array",
            "description": "Search terms to find YouTube channels for keyword/SEO research (e.g. \"cooking tutorials\", \"tech reviews\"). One per line. Each channel found is scored against this same keyword by the Keyword Research section below.",
            "items": {
              "type": "string"
            }
          },
          "channelCount": {
            "title": "🎯 Channels to analyze per keyword",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "How many channels to fetch and analyze per seed keyword (1-50). Higher values take longer. Note: this is hard-capped at 50 by the underlying search mechanism regardless of the value entered.",
            "default": 10
          },
          "searchRegion": {
            "title": "🌎 Search Region",
            "enum": [
              "US",
              "GB",
              "CA",
              "AU",
              "IN",
              "DE",
              "FR",
              "JP",
              "BR",
              "MX",
              "ES",
              "IT",
              "NL",
              "PL",
              "RU",
              "KR",
              "TW"
            ],
            "type": "string",
            "description": "YouTube search region (country code). Affects which channels appear in search results.",
            "default": "US"
          },
          "language": {
            "title": "🌐 Language",
            "enum": [
              "en",
              "es",
              "de",
              "fr",
              "pt",
              "ja",
              "hi",
              "zh",
              "ko",
              "ar",
              "ru"
            ],
            "type": "string",
            "description": "Interface and result language code (e.g. en for English).",
            "default": "en"
          },
          "fromDate": {
            "title": "📅 Joined After",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Only include channels that joined on or after this date (YYYY-MM-DD). Leave empty for no filter."
          },
          "toDate": {
            "title": "📅 Joined Before",
            "pattern": "^(\\d{4})-(0[1-9]|1[0-2])-(0[1-9]|[12]\\d|3[01])$",
            "type": "string",
            "description": "Only include channels that joined on or before this date (YYYY-MM-DD). Leave empty for no filter."
          },
          "keywordMatchMode": {
            "title": "🔎 Keyword Match Mode",
            "enum": [
              "broad",
              "title",
              "description",
              "exactPhrase"
            ],
            "type": "string",
            "description": "How to measure keyword match/density between your seed keyword and each channel's own text. broad = title+description combined (substring); title = channel name only; description = description only; exactPhrase = whole-phrase, word-boundary match in title+description. Drives hasKeywordInTitle/hasKeywordInDescription/keywordOccurrences/keywordDensity in the output — pure local text analysis, no extra request. Only applies in keyword-search mode (direct URLs have no seed keyword, so these fields are null).",
            "default": "broad"
          },
          "includeChannelKeywords": {
            "title": "📺 Pull SEO keywords from recent videos",
            "type": "boolean",
            "description": "When ON, fetches each channel's recent video titles (up to 'Max recent videos to sample' below) via the /videos tab, plus tags for a small sample of the newest videos, and computes channelKeywords[] — the top repeated terms across the description + those titles + tags. This is the real SEO signal the channel targets, beyond the /about page alone. Adds extra requests per channel (slower). Default OFF.",
            "default": false
          },
          "maxRecentVideos": {
            "title": "🎞️ Max recent videos to sample",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "Only used when 'Pull SEO keywords from recent videos' is ON. How many of the channel's most recent videos to pull titles from (1-20). Per-video tags are additionally fetched for only the newest 5 of these, to bound request volume. Default 10.",
            "default": 10
          },
          "urls": {
            "title": "🔗 Direct Channel URLs (skip keyword search)",
            "type": "array",
            "description": "Research specific YouTube channels directly by URL, bypassing keyword search. These rows have no seed keyword, so keywordDensity/hasKeywordInTitle/etc. are null (nothing to match against) — channelKeywords still works if enabled above.",
            "items": {
              "type": "string"
            }
          },
          "aiEnhancement": {
            "title": "🤖 Enable AI Theme Labeling",
            "type": "boolean",
            "description": "OFF by default. When ON, sends each channel's description + channelKeywords/recent titles to an LLM to label up to 5 short topical themes (aiThemes) and a one-sentence content-focus summary (aiThemeSummary). Purely additive — never affects the deterministic fields above. On any failure or missing key, both AI fields are null (never fabricated).",
            "default": false
          },
          "aiModel": {
            "title": "🤖 AI Model / Provider",
            "enum": [
              "claude-haiku-4-5",
              "claude-sonnet-5",
              "claude-opus-4-8",
              "claude-fable-5",
              "gpt-4o-mini",
              "gpt-4o",
              "gpt-4.1-mini",
              "gpt-4.1",
              "o3-mini",
              "o1",
              "gemini-2.0-flash-lite",
              "gemini-2.0-flash",
              "gemini-1.5-pro",
              "gemini-2.5-flash",
              "gemini-2.5-pro",
              "grok-2-latest",
              "grok-3-mini",
              "grok-3",
              "grok-beta",
              "deepseek-chat",
              "deepseek-reasoner",
              "sonar",
              "sonar-pro",
              "sonar-reasoning",
              "mistral-small-latest",
              "mistral-large-latest"
            ],
            "type": "string",
            "description": "Provider auto-detected from the name: claude-*=Anthropic, gpt-*/o1/o3=OpenAI, gemini-*=Google, grok-*=xAI, deepseek-*=DeepSeek, sonar*=Perplexity, mistral-*=Mistral. Cheaper mini/flash/haiku models are recommended for this classification task.",
            "default": "claude-haiku-4-5"
          },
          "aiApiKey": {
            "title": "🔑 AI Provider API Key",
            "type": "string",
            "description": "Your own API key for the selected provider (falls back to an environment variable named ANTHROPIC_API_KEY / OPENAI_API_KEY / GEMINI_API_KEY / XAI_API_KEY / DEEPSEEK_API_KEY / PERPLEXITY_API_KEY / MISTRAL_API_KEY if left empty). Required only when AI Theme Labeling is ON."
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Optional. By default the actor runs without a proxy. Enable Apify Proxy here for higher volume or to reduce blocks. If the chosen proxy gets blocked, the actor automatically falls back to Residential proxy and continues."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}