{
  "openapi": "3.0.1",
  "info": {
    "title": "YouTube Video Scraper by Hashtag (Related Tag Expansion)",
    "description": "Extract YouTube video data by hashtags 🎯. The YouTube Video Scraper by Hashtag collects titles, channels, views, tags, and URLs from videos using specific hashtags. Perfect for hashtag research, trend analysis, and YouTube SEO optimization. 🚀",
    "version": "0.1",
    "x-build-id": "kkIEMoaTe6h4gcVpv"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/scraper-engine~youtube-video-scraper-by-hashtag/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-scraper-engine-youtube-video-scraper-by-hashtag",
        "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/scraper-engine~youtube-video-scraper-by-hashtag/runs": {
      "post": {
        "operationId": "runs-sync-scraper-engine-youtube-video-scraper-by-hashtag",
        "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/scraper-engine~youtube-video-scraper-by-hashtag/run-sync": {
      "post": {
        "operationId": "run-sync-scraper-engine-youtube-video-scraper-by-hashtag",
        "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": {
          "seedTerms": {
            "title": "🌱 Seed Tags, Keywords or Handles",
            "type": "array",
            "description": "One entry per seed. A term starting with # is searched as a hashtag, a term starting with @ as a handle, and anything else as a plain keyword — the text you type is sent to YouTube unchanged. Examples: #chatgpt, coffee recipes, @mkbhd.",
            "items": {
              "type": "string"
            }
          },
          "hashtags": {
            "title": "🔁 Search Terms (compatibility key)",
            "type": "array",
            "description": "The original input key, kept so older run configurations and API calls keep working unchanged. When this list is filled it takes priority over the seed list above. Leave it empty if you are using Step 1.",
            "items": {
              "type": "string"
            }
          },
          "expandRelatedTags": {
            "title": "🧬 Expand Each Seed Into Related Tags",
            "type": "boolean",
            "description": "Ask YouTube's public suggestion service which terms sit next to your seed, then crawl those too. Costs exactly one small request per seed, and nothing per video.",
            "default": true
          },
          "maxRelatedTags": {
            "title": "🔢 Related Tags per Seed",
            "minimum": 0,
            "maximum": 14,
            "type": "integer",
            "description": "How many neighbouring terms to keep for each seed, in YouTube's own ranking order. 14 is the hard ceiling the suggestion service returns; set 0 to crawl seeds only. Total terms crawled = seeds x (1 + this number).",
            "default": 5
          },
          "suggestionLanguage": {
            "title": "🗣️ Suggestion Language (hl)",
            "type": "string",
            "description": "Interface language used when asking for related terms, e.g. en, es, de, hi. Changes which neighbouring tags come back.",
            "default": "en"
          },
          "suggestionRegion": {
            "title": "🌍 Suggestion Region (gl)",
            "type": "string",
            "description": "Two-letter country used when asking for related terms, e.g. US, GB, IN, BR. Suggestions are ranked by what people search in that country.",
            "default": "US"
          },
          "relatedTagsOnly": {
            "title": "🚫 Crawl Related Tags Only",
            "type": "boolean",
            "description": "Skip the seed terms themselves and crawl only the discovered neighbours. Useful when you already have the seed's videos and want the surrounding neighbourhood.",
            "default": false
          },
          "maxResults": {
            "title": "📊 Max Videos per Term",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Videos collected for each individual term. YouTube search itself runs out of results long before large numbers: the deepest term measured exhausted at 301 videos over 34 pages, so the cap here is 500 rather than a number YouTube cannot serve.",
            "default": 10
          },
          "dedupeAcrossTerms": {
            "title": "♻️ Drop Videos Already Found by an Earlier Term",
            "type": "boolean",
            "description": "Neighbouring tags overlap heavily. With this on, a video is kept once for the whole run and attributed to the first term that found it, so you are never billed twice for the same video.",
            "default": true
          },
          "scrapeShortsOnly": {
            "title": "📱 Scrape Shorts Only",
            "type": "boolean",
            "description": "Restrict every crawled term to YouTube Shorts. Shorts results are read from the current shortsLockupViewModel layout, so they carry an ID, title, thumbnail and view count.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy Configuration",
            "type": "object",
            "description": "Optional. When enabled, the proxy is attached to every YouTube request the run makes, including the suggestion calls."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}