Twitch Scraper — Channels, Streams, Videos, Clips & Chat
Pricing
from $1.50 / 1,000 results
Twitch Scraper — Channels, Streams, Videos, Clips & Chat
Scrape public Twitch data without login: channel profiles with followers and live status, live streams by category and language, top streams and categories, channel videos, clips, stream schedules, search and VOD chat replay. Flat rows, date filters, GDPR-minded.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Banea Teodor
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Twitch Scraper — Channels, Streams, Videos, Clips, Schedule & Chat
What does Twitch Scraper do?
Twitch Scraper collects public Twitch data — no login, no proxy setup, no API key needed. Pick one mode per run:
| Mode | You enter | You get |
|---|---|---|
| Channel profiles | channel names or URLs (up to 1,000 per run) | followers, partner / affiliate, live now (viewers, title, category, tags), last stream, video count, team, images; optional social links, business e-mail and panels |
| Live streams in categories | category names, slugs or URLs (+ optional languages) | live streams with viewers, start time, language, tags, preview image and broadcaster followers |
| Top live streams | — (optional languages) | the most watched live streams right now — Twitch lists the top 30 per language, so add languages for more |
| Top categories | — | the 100 most watched categories with viewers, live channels, followers, box art and tags |
| Channel videos | channel names or URLs | past broadcasts, highlights and uploads with length, views, category, chapters |
| Clips | channels and/or categories + period | clips with views, duration, clip creator, source video and offset |
| Search | search terms | channels (full profile rows), categories or videos |
| Stream schedules | channel names or URLs | the next 25 upcoming schedule segments (start, end, title, categories, cancelled) |
| VOD chat replay | video IDs or video URLs | every chat message of a past broadcast with its offset, time, text and emotes — authors pseudonymised by default |
Every row is flat, has the same keys for its type (missing values are null, never left out), uses ISO 8601 UTC dates, integer counters and absolute image URLs.
Why use this Actor?
- Nine data types in one Actor — profiles, live directories, videos, clips, schedules, search and chat replay.
- Fast and cheap — up to 35 channels per request; 1,000 channel profiles take about 2 minutes.
- More than a first page — Twitch shows visitors 30-100 items per list (other Twitch actors stop at 30 per page); this Actor reads category and channel lists in several orders, languages and types and merges them without duplicates.
- Privacy-minded defaults — social links, e-mails, panels and chat usernames are off unless you turn them on.
- Scheduling-friendly — "Started / created after" keeps only new streams, videos and clips; the Actor leaves no storage behind in your account.
How much does it cost?
The Actor is priced per result: $1.50 per 1,000 rows plus $0.005 per run start. Platform usage is included.
| Example run | Rows | Price |
|---|---|---|
| 20 channel profiles (the prefilled input) | 20 | $0.035 |
| 1,000 channel profiles | 1,000 | $1.505 |
| 1,000 live streams of one category in 11 languages | 1,000 | $1.505 |
| 300 newest videos of 3 channels | 300 | $0.455 |
| 2,000 chat messages of one broadcast | 2,000 | $3.005 |
| The whole chat of a busy 2.4-hour broadcast (≈ 73,000 messages) | 73,000 | ≈ $110 |
Channels, categories or videos that do not exist produce no rows and cost nothing beyond the start fee.
Input
| Field | Description | Example |
|---|---|---|
mode | What to scrape (see the table above). | "categoryStreams" |
channels | Channel names or channel URLs. | ["examplestreamer", "https://www.twitch.tv/anotherchannel"] |
categories | Category names as Twitch shows them, slugs or category URLs. | ["Just Chatting", "valorant"] |
searchQueries / searchTarget | Search terms and what to search for (channels, categories, videos). | ["speedrun"], "channels" |
videoIds | Video IDs or URLs for chat replay. | ["https://www.twitch.tv/videos/1234567890"] |
languages | Stream languages (category and top streams). Each language is its own list, so several languages also return more streams. | ["en", "de"] |
sort | Streams: most viewers, fewest viewers, most recent. Videos: newest, most viewed. | "viewers" |
videoTypes | Past broadcasts, highlights, uploads. | ["ARCHIVE"] |
clipPeriod | Last 24 hours, 7 days, 30 days or all time. | "LAST_WEEK" |
startedAfter | Keep only streams started, videos created and clips created from this date or period on. | "2026-10-01" or "7 days" |
maxChatMessagesPerVideo, chatFromSeconds, chatToSeconds | Chat replay limit per video (0 = up to 100,000) and time window. | 2000, 0, 3600 |
includeContactInfo, includePanels, includeChatUsernames | Optional personal / long fields (all off by default). | false |
maxResultsPerTarget | Rows per channel, category or search term (0 = all Twitch shows). | 100 |
maxResults | Rows per run (0 = unlimited, capped at 10,000). | 200 |
Output
One dataset per run; the row type follows the mode. Example rows (fictitious):
{"rowType": "channel","channelId": "123456789","login": "examplestreamer","displayName": "ExampleStreamer","url": "https://www.twitch.tv/examplestreamer","description": "Variety streams every evening.","createdAt": "2019-04-01T12:00:00.000Z","followers": 125000,"isPartner": false,"isAffiliate": true,"isLive": true,"viewers": 1520,"streamTitle": "Ranked grind until diamond","streamGame": "Example Game","streamStartedAt": "2026-10-22T17:00:00.000Z","streamLanguage": "en","streamTags": ["English", "Chill"],"isMature": false,"language": "en","lastStreamAt": "2026-10-22T17:00:00.000Z","lastStreamTitle": "Ranked grind until diamond","lastStreamGame": "Example Game","totalVideos": 340,"teamName": "Example Team","primaryColorHex": "#00ADFF","profileImageUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/example-profile_image-300x300.png","bannerImageUrl": "https://static-cdn.jtvnw.net/jtv_user_pictures/example-profile_banner-480.png","offlineImageUrl": null,"socialLinks": [],"businessEmail": null,"panels": [],"searchQuery": null,"scrapedAt": "2026-10-23T10:00:00.000Z"}
{"rowType": "chatMessage","messageId": "00000000-0000-4000-8000-000000000001","videoId": "1234567890","videoOffsetSeconds": 3605,"createdAt": "2026-10-21T19:43:05.120Z","authorId": null,"authorLogin": "user-1a2b3c4d","authorDisplayName": null,"text": "gg :ExampleEmote:","emoteNames": ["ExampleEmote"],"isSubscriber": true,"isModerator": false,"scrapedAt": "2026-10-23T10:00:00.000Z"}
Stream, video, clip, category and schedule rows are documented field by field in the dataset schema (the Output tab has one table view per row type). Channels, categories or videos that could not be found or read are listed in the run's key-value store under ERRORS.
Tips and tricks
- What is complete and what is a sample. Twitch shows visitors only the first 100 items of each list (30 for the site-wide top streams). The Actor reads each list in several orders (and languages for streams; video types for videos; periods for clips) and merges them, which typically gives a few hundred streams per category or videos per channel — not a full archive. For more live streams of a big category, add languages. Search returns up to about 1,000 results per term. Search returns what Twitch shows, and the status says when that is fewer than the matches Twitch counts ("Twitch shows 923 of 7,984 matches"). Channel profiles and chat replay are complete; schedules are the next 25 upcoming segments, not the history.
- Chat replay size and cost. Busy broadcasts have 3.7-8.5 chat messages per second: a busy 2.4-hour broadcast ≈ 73,000 messages (≈ $110 at $1.50 per 1,000), a busy 10-hour one ≈ 133,000 (≈ $200). About 27 new messages are read per request. Use the time window (
chatFromSeconds/chatToSeconds) andmaxChatMessagesPerVideoto read only the part you need. Twitch deletes past broadcasts after 7-60 days. - Stream languages. Twitch files streams under the broadcaster's language; the Actor also drops the few streams whose own language is another one.
- Followers lists and the live viewer list are not public on Twitch — the Actor returns the counts only.
- Category names must match Twitch ("Just Chatting"); the slug from the category URL (
just-chatting) always works.
Scheduling
Schedule the Actor (for example hourly or daily) with Started / created after set to a period slightly longer than the schedule interval (e.g. "2 days" for a daily run). Rows carry stable IDs (streamId, videoId, clipId, messageId), so downstream tools can de-duplicate the small overlap. The Actor keeps nothing between runs — no named storage is created in your account.
Personal data
Streamers are public figures; their public profile data is returned. Note that a public bio or a video description can itself contain an e-mail address or other contact details even when contact info is off — the text is returned as written. Contact details (social links, business e-mail found in descriptions or panels) and panel texts are only added when you turn them on. Chat authors are replaced by a pseudonym that stays the same within one run ("user-1a2b3c4d") unless you turn on real usernames — names inside the message text (@mentions, the viewer named in subscription and gift notices, gift recipients) get the same pseudonyms; chat colours and badge lists are never output (only whether the author was a subscriber or moderator). Make sure you have a legitimate purpose when you process personal data.
Integrations
Export the dataset as JSON, CSV, Excel or XML, or connect it to Google Sheets, Zapier, Make, Slack, Airbyte or your own code through the Apify API and webhooks. Each run has table views per row type (Channels, Streams, Videos, Clips, Categories, Schedule, Chat).