Twitch Streams Scraper avatar

Twitch Streams Scraper

Pricing

from $2.97 / 1,000 results

Go to Apify Store
Twitch Streams Scraper

Twitch Streams Scraper

Collect Twitch live streams, top categories, or channel profiles and return viewer counts, titles, language, followers, category details, and tags. Live stream queries can fan out across categories and languages; each query returns up to 30 streams, without requiring a Twitch login or OAuth token.

Pricing

from $2.97 / 1,000 results

Rating

0.0

(0)

Developer

Axiom Works

Axiom Works

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Categories

Share

Returns: one row per live stream, category or channel with title, viewersCount, language, channelLogin, followers, categoryName and sourceUrl. Input: {"mode":"liveStreams","categories":["valorant"],"languages":["EN"],"maxItems":20} Best for: tracking live viewers by game, finding creators in a viewer band, and checking stream titles for events.

{
"id": "320588667868",
"title": "EG FNS | G2 vs Team Liquid - VCT Champions Group Stage Elimination #VCTWatchparty | !vote !inzone !noYT",
"viewersCount": 40495,
"language": "EN",
"channelLogin": "gofns",
"categoryName": "VALORANT",
"sourceUrl": "https://www.twitch.tv/gofns"
}

What does Twitch Streams Scraper do?

Twitch Streams Scraper is a Twitch scraper and Twitch API alternative that reads the same public data the Twitch website shows to anyone who is not logged in. It collects three kinds of records. In liveStreams mode it returns the live streams of one or more categories (for example VALORANT or League of Legends), sorted by viewer count, optionally limited to one or more broadcast languages. You can keep streams in a viewer range or with text in the title. When no category is supplied, you can scan the top categories to reach more streams than the site-wide first page. In topCategories mode it returns the most-watched categories on Twitch right now, with viewers, number of live broadcasters and followers. In channels mode it returns a profile for each channel you name, with the follower count, bio, account creation date and whether the channel is live at the moment.

You do not need a Twitch developer account, an OAuth token or a browser. The Actor sends a small number of requests to Twitch's public web endpoint, one at a time and at a polite pace, and writes clean rows into an Apify dataset that you can download as JSON, CSV, Excel or HTML, or read through the Apify API.

This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by Twitch.

Typical uses:

  • Compare how many people watch a game right now in English, Spanish, Portuguese or Japanese.
  • Build a list of the biggest streamers in a category for sponsorship or partnership research.
  • Snapshot top categories every hour to see which games are rising.
  • Look up follower counts and bios for a list of channels you already know.
  • Keep only live streams whose current viewer count falls inside a selected range.
  • Find live stream titles containing an event name within the fetched category pages.

Limits you should know about

Twitch only returns up to 30 live streams for each category and language query without a signed-in session, and up to 100 categories in the top-categories list. The Actor does not try to get around this. To collect more streams, it fans out: one query for every combination of category and language. If you give it three categories and four languages you can receive up to 360 streams (30 per query). With an empty categories list, topCategoriesToScan selects up to 100 leading categories and queries their live streams. Each category's page is sorted by viewers; the combined dataset is emitted in category order, not globally ranked. Viewer and title filters apply to those fetched pages only, so they cannot discover matches beyond each page's first 30 streams. maxItems is a ceiling, not a promise: with one category and one language you get at most 30 streams. If Twitch ever asks for an extra integrity check, the Actor stops cleanly and keeps the rows it has already saved. It never attempts to bypass such a check.

What data can you get?

Not every field exists in every mode. Fields marked "channels only" or "topCategories only" are empty (and left out) in the other modes.

FieldTypeDescription
idstringStream ID (liveStreams), category ID (topCategories) or user ID (channels)
titlestringStream title; category name in topCategories; display name in channels
viewersCountnumberCurrent viewers; 0 for an offline channel
languagestringBroadcaster language code such as EN or ES
startedAtstringISO time the stream went live
streamTypestringTwitch stream type such as live or rerun (liveStreams only)
channelLoginstringChannel login name used in the channel URL
channelNamestringChannel display name
followersnumberChannel followers (category followers in topCategories)
categoryNamestringGame or category name
categorySlugstringCategory slug used in the Twitch URL
tagsarray of stringsStream tags; content tags for categories
thumbnailUrlstringStream preview, category box art or channel profile image
broadcastersCountnumberLive broadcasters in the category (topCategories only)
streamTitlestringLast broadcast title (channels only)
descriptionstringChannel bio (channels only)
createdAtstringChannel creation time (channels only)
isLivebooleanWhether the channel is live now (channels only)
sponsorshipCategorystringOptional AI label, present only when AI enrichment is on
sourceUrlstringTwitch page the record belongs to

Every record has a stable id, and the Actor never outputs the same id twice in a run.

How to use

  1. Open the Actor in Apify Console and choose a mode.
  2. For live streams, enter one or more category slugs such as valorant or league-of-legends. You can also paste a category name, including accented names such as Pokémon, or a twitch.tv directory URL. Leave the list empty to get the top streams across all of Twitch.
  3. Add language codes (EN, ES, PT, JA, KO and so on) if you only want streams in certain languages. Leave it empty for all languages.
  4. Optionally set minViewers, maxViewers, or titleContains. With no categories, set topCategoriesToScan to search several leading categories.
  5. Set maxItems and press Start.
  6. When the run finishes, open the Output tab to preview the table or download the data.

The default run (VALORANT, English, 20 items) finishes in a few seconds.

If a category slug does not exist, or a channel login is unknown, the Actor logs a warning and carries on with the rest of your input. If nothing at all is found, the run ends successfully with an empty dataset and a warning. It does not write placeholder rows.

Input

FieldTypeDescription
modestringliveStreams, topCategories or channels. Default liveStreams.
categoriesarrayCategory slugs, names or directory URLs for liveStreams mode. Empty means site-wide top streams.
languagesarrayTwitch language codes for liveStreams mode. One query per language and category. Empty means all languages.
channelsarrayChannel logins or twitch.tv URLs for channels mode.
maxItemsintegerMaximum records to output, 1 to 1000, default 50.
minViewersintegerMinimum current viewers for live streams; default 0.
maxViewersintegerMaximum current viewers for live streams; omit for no upper bound.
titleContainsstringText that a live stream title must contain, ignoring case; default empty.
topCategoriesToScanintegerWith empty categories, query live streams in the top 1-100 categories; default 0 for site-wide top streams only.
enrichWithAIbooleanAdd a sponsorshipCategory label using a third-party AI processor. Default false.
proxyConfigurationobjectApify Proxy settings. Off by default because the public endpoint normally works without one.

Example input for live streams in several languages:

{
"mode": "liveStreams",
"categories": ["valorant"],
"languages": ["EN", "ES", "PT", "JA"],
"maxItems": 50
}

Example input for top categories:

{
"mode": "topCategories",
"maxItems": 50
}

To find live streams in a viewer band across the leading categories, leave categories empty and use the discovery and filter inputs together:

{
"mode": "liveStreams",
"categories": [],
"topCategoriesToScan": 10,
"minViewers": 500,
"maxViewers": 5000,
"titleContains": "ranked",
"maxItems": 50
}

Example input for channel profiles:

{
"mode": "channels",
"channels": ["shroud", "caedrel", "valorant"],
"maxItems": 3
}

Output

Each run writes its records to the default dataset. A live stream record looks like this:

{
"id": "316077019602",
"title": "G2 vs. TL - VALORANT Champions Shanghai - Group Stage",
"viewersCount": 24055,
"language": "EN",
"startedAt": "2026-10-03T08:30:09Z",
"streamType": "live",
"channelLogin": "valorant",
"channelName": "VALORANT",
"followers": 4901400,
"categoryName": "VALORANT",
"categorySlug": "valorant",
"tags": ["Esports", "VCT", "English"],
"thumbnailUrl": "https://static-cdn.jtvnw.net/previews-ttv/live_user_valorant-440x248.jpg",
"sourceUrl": "https://www.twitch.tv/valorant"
}

A top category record has the category name as title, the number of viewers across the category, broadcastersCount, category followers, content tags and the box art as thumbnailUrl.

A channel record has the display name as title, viewersCount of 0 when the channel is offline, isLive, followers, description, createdAt and the last streamTitle.

Viewer counts change every minute, so two runs a few minutes apart will not match. Followers and viewers are the numbers Twitch shows at the time of the run.

How much does it cost?

The Actor is charged per result: each record written to the dataset counts as one result. If you switch on AI enrichment, records that were successfully labelled count as enriched results as well. Records where enrichment failed or was skipped are charged as normal results only. See the Pricing tab of the Actor for the current rates. Your Apify plan's platform usage also applies, but runs of this Actor are small and short.

Because maxItems is honoured exactly, you can cap the cost of any run by lowering it.

Use with AI agents (MCP)

You can call this Actor from any MCP-capable assistant through the Apify MCP server. Add this to your client configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=axiomworks/twitch-streams-scraper"
}
}
}

Example prompts:

  • "Use the Twitch scraper to list the 20 most-watched VALORANT streams in Spanish."
  • "Which 10 categories on Twitch have the most viewers right now?"
  • "Get the follower count and bio for the Twitch channels shroud and caedrel."

Integrations and API

You can start the Actor from code with the Apify API clients.

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("axiomworks/twitch-streams-scraper").call(run_input={
"mode": "liveStreams",
"categories": ["valorant"],
"languages": ["EN"],
"maxItems": 20,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["channelName"], item["viewersCount"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('axiomworks/twitch-streams-scraper').call({
mode: 'topCategories',
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.info(items.length);

cURL:

curl -X POST "https://api.apify.com/v2/acts/axiomworks~twitch-streams-scraper/runs" \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"channels","channels":["shroud"],"maxItems":1}'

You can also schedule the Actor to run every hour, send the dataset to Google Sheets, a webhook, Make, Zapier or n8n through Apify integrations, and compare snapshots over time.

FAQ

Do I need a Twitch account or API key? No. The Actor reads public data without logging in.

Why do I get fewer streams than maxItems? Twitch returns at most 30 streams per category and language query. Add more languages or categories to widen the search. A language with no live streams in that category (for example Korean for some games) simply returns nothing.

Are the streams sorted? Yes, within each query by viewer count, highest first. Queries run in the order of your categories and languages.

What happens with a wrong category or channel? The Actor logs a warning for that item and continues. If the whole run has no results, it finishes with an empty dataset.

Is the language the language of the stream? It is the language the broadcaster has set for the channel, which is the value Twitch uses for its language filter.

Does the Actor use a proxy? It does not need one in most cases. If you enable Apify Proxy, requests that are blocked are retried with a fresh session.

What does AI enrichment do? When switched on, each record is sent to a third-party AI processor, which picks one label for sponsorshipCategory from a fixed list. If the AI step fails, the record is still saved without the label.

Can it get chat, VODs or clips? No. This Actor covers live streams, categories and channel profiles.

The Actor only reads public information that Twitch shows to visitors who are not logged in. It collects no private data, passwords or messages, and it does not get past any login or bot check. Public channel names and stream titles can still be personal data in some jurisdictions, so you should have a lawful reason for collecting them and handle them according to the rules that apply to you, such as GDPR. Twitch's terms of service discourage automated access, so review them for your use case and keep your request volume modest. This is general information, not legal advice.

Feedback

If a field is missing, a category does not resolve or you need another mode, open an issue from the Actor page in Apify Console and include the input and the run link. Reports with a concrete example are fixed fastest.