{
  "openapi": "3.0.1",
  "info": {
    "title": "Twitch Scraper — Channels, Streams, Leads",
    "description": "Build Twitch influencer & sponsorship lists in minutes. Channel profiles with socials and contact emails, live streams by game, VODs, clips and schedules. Filter by follower band, live viewers or language, export creator leads as JSON, CSV or Excel. Keyless, no browser.",
    "version": "0.0",
    "x-build-id": "BKxUZMTJGfkB4nB9o"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~twitch-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-twitch-scraper",
        "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/memo23~twitch-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-twitch-scraper",
        "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/memo23~twitch-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-twitch-scraper",
        "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": {
          "mode": {
            "title": "What to scrape",
            "enum": [
              "channels",
              "searchChannels",
              "gameStreams",
              "topStreams",
              "topGames",
              "videos",
              "clips",
              "schedule"
            ],
            "type": "string",
            "description": "<b>channels</b> — full streamer profiles (socials, bio email, followers) for the usernames/URLs you provide.<br><b>searchChannels</b> — discover channels by keyword (finds offline channels too, paginates deep).<br><b>gameStreams</b> — live streams for the given games/categories.<br><b>topStreams</b> — top live streams across all of Twitch.<br><b>topGames</b> — the games/categories directory.<br><b>videos</b> — VODs of the given channels.<br><b>clips</b> — clips of the given channels or games.<br><b>schedule</b> — published stream schedules of the given channels.",
            "default": "channels"
          },
          "channelUsernames": {
            "title": "Channel usernames",
            "type": "array",
            "description": "Twitch usernames, @handles, or full channel URLs — e.g. <code>shroud</code>, <code>@pokimane</code>, <code>https://www.twitch.tv/caseoh_</code>. Used by the channels, videos, clips and schedule modes.",
            "items": {
              "type": "string"
            }
          },
          "gameNames": {
            "title": "Games / categories",
            "type": "array",
            "description": "Game or category names (<code>Fortnite</code>, <code>Just Chatting</code>), slugs (<code>just-chatting</code>), or directory URLs (<code>https://www.twitch.tv/directory/category/fortnite</code>). Used by the gameStreams and clips modes.",
            "items": {
              "type": "string"
            }
          },
          "searchQueries": {
            "title": "Search queries",
            "type": "array",
            "description": "Keywords for searchChannels mode, e.g. <code>chess</code>, <code>cooking</code>, <code>speedrun</code>. Each query paginates far beyond the first page of Twitch search.",
            "items": {
              "type": "string"
            }
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Any twitch.tv URLs — channel pages, directory/category pages, video or clip links. They are auto-detected and merged with the lists above.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many dataset rows (across all targets).",
            "default": 100
          },
          "languages": {
            "title": "Broadcaster languages",
            "type": "array",
            "description": "Two-letter language codes (e.g. <code>EN</code>, <code>DE</code>, <code>ES</code>). Stream modes filter server-side; channel modes filter on the channel's broadcast language.",
            "items": {
              "type": "string"
            }
          },
          "minFollowers": {
            "title": "Min followers",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only channels/streams with at least this many followers."
          },
          "maxFollowers": {
            "title": "Max followers",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only channels/streams with at most this many followers — ideal for finding micro/mid-tier streamers open to sponsorships."
          },
          "minViewers": {
            "title": "Min live viewers",
            "minimum": 0,
            "type": "integer",
            "description": "Stream modes only: keep streams with at least this many current viewers."
          },
          "maxViewers": {
            "title": "Max live viewers",
            "minimum": 0,
            "type": "integer",
            "description": "Stream modes only: keep streams with at most this many current viewers."
          },
          "onlyWithEmail": {
            "title": "Only rows with a contact email",
            "type": "boolean",
            "description": "Keep only streamers whose bio/panels (or the opt-in enrichment) surfaced an email address.",
            "default": false
          },
          "onlyWithSocials": {
            "title": "Only rows with social links",
            "type": "boolean",
            "description": "Keep only streamers with at least one social/website link.",
            "default": false
          },
          "includePanels": {
            "title": "Scrape channel panels",
            "type": "boolean",
            "description": "Fetch each channel's panels too — they often carry the streamer's own website, sponsor links and extra emails. One extra request per channel.",
            "default": true
          },
          "includeVideos": {
            "title": "Attach recent VODs to channel rows",
            "type": "boolean",
            "description": "Adds a <code>recentVideos</code> list to every channel row (channels/searchChannels modes).",
            "default": false
          },
          "includeClips": {
            "title": "Attach top clips to channel rows",
            "type": "boolean",
            "description": "Adds a <code>topClips</code> list to every channel row (channels/searchChannels modes).",
            "default": false
          },
          "maxVideosPerChannel": {
            "title": "Max videos per channel",
            "minimum": 1,
            "type": "integer",
            "description": "Cap for the videos mode and the nested recentVideos list.",
            "default": 30
          },
          "maxClipsPerChannel": {
            "title": "Max clips per channel/game",
            "minimum": 1,
            "type": "integer",
            "description": "Cap for the clips mode and the nested topClips list.",
            "default": 30
          },
          "videoType": {
            "title": "Video type",
            "enum": [
              "ALL",
              "ARCHIVE",
              "HIGHLIGHT",
              "UPLOAD"
            ],
            "type": "string",
            "description": "Filter VODs by type (videos mode).",
            "default": "ALL"
          },
          "videoSort": {
            "title": "Video sort",
            "enum": [
              "TIME",
              "VIEWS"
            ],
            "type": "string",
            "description": "Sort VODs by recency or views (videos mode).",
            "default": "TIME"
          },
          "clipPeriod": {
            "title": "Clip period",
            "enum": [
              "LAST_DAY",
              "LAST_WEEK",
              "LAST_MONTH",
              "ALL_TIME"
            ],
            "type": "string",
            "description": "Time window for clips.",
            "default": "LAST_WEEK"
          },
          "clipSort": {
            "title": "Clip sort",
            "enum": [
              "VIEWS_DESC",
              "CREATED_AT_DESC",
              "TRENDING"
            ],
            "type": "string",
            "description": "Sort clips by views, recency, or trending.",
            "default": "VIEWS_DESC"
          },
          "enrichEmails": {
            "title": "Find contact emails from streamer websites (free, experimental)",
            "type": "boolean",
            "description": "Opt-in: when a streamer links their own website (in panels or social links), visit it and its contact/about pages to find a business email. Adds <code>contactEmail</code>, <code>contactWebsite</code> and a detailed <code>emailEnrichment</code> object. Best-effort.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Parallel requests against the Twitch API.",
            "default": 10
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Optional. Twitch's public API usually works without any proxy; add one only if you see rate-limiting."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}