Twitch serves a proxied client nothing on the home page and everything in the head of a channel page. On 28 September 2026 we fetched twitch.tv through residential exits: the home answered a plain HTTP client with 200, 202,478 bytes and zero words, and a headless browser needed 1,718,470 bytes and 45.7 seconds to return 101. A channel page over the same plain HTTP carried a ProfilePage JSON-LD block with 2,461,147 followers and an ItemList of ten videos with view counts, in 214,029 bytes and 6.4 seconds. Twitch proxies are for reading that head from the right country; the numbers behind it belong to the Helix API, and this article gives the setting for both.
The home is empty; the channel head is full
Twitch is a React application. The home page over plain HTTP is a title, a description, a canonical, an Organization JSON-LD block and a bundle of scripts, which is why the audit counted zero words without JavaScript and only 101 with it. The rendered home took 45.7 seconds and 1.72 MB and returned 343 words in a second pass, all of it directory chrome. That surface is not worth a proxy.
A channel page is different, and not because of the body. The server embeds structured data for search engines before any script runs, and that block carries the numbers a data job wants:
| Fetch | Exit | Status | Words | Bytes | What it contains |
|---|---|---|---|---|---|
| twitch.tv, plain HTTP | United States | 200 | 0 | 202,478 | Title, description, canonical, Organization JSON-LD |
| twitch.tv, plain HTTP | Germany | 200 | 0 | 202,563 | German description, canonical https://www.twitch.tv/?lang=de |
| twitch.tv, rendered | United States | 200 | 101 | 1,718,470 | Directory shell, 45.7 seconds |
| twitch.tv/twitch, plain HTTP | United States | 200 | 0 body words | 214,029 | ProfilePage with 2,461,147 followers; BreadcrumbList; ItemList of 10 VideoObjects with views, duration, upload date |
| api.twitch.tv/helix/streams, no token | United States | 401 | n/a | 72 | OAuth token is missing |
| robots.txt | United States | 200 | n/a | 1,167 | 48 Disallow lines, /directory allowed, Amazon bots allowed everywhere |
The ItemList is the useful surprise. For the official Twitch channel it listed ten recent VODs and clips, each with a name, URL, upload date, ISO duration and a WatchAction InteractionCounter: 182,232 views on the September patch-notes stream, 106,658 on the Spanish-language show, 67,272 on the Portuguese one, down to 168 on a clip. Follower count, recent videos and their views, from one plain HTTP request, no browser, no token. The same trick works on Kick, whose JSON-LD carries the live viewer count, and on Facebook, whose meta description carries the follower count.
Twitch picks the language from the exit, before any cookie
The home fetched from a German residential exit returned the same 0 words but a different head: the description was in German (Twitch ist ein interaktiver Livestreaming-Dienst...) and the canonical became https://www.twitch.tv/?lang=de. No Accept-Language header, no cookie, only the exit country. For anyone verifying what a viewer in a market sees, the localized interface, a sponsorship disclosure, a regional ad slot, the exit country is the whole job and only a real exit in that market shows it. For anyone reading follower counts, the country is irrelevant and one exit is enough.
What the terms allow, and what the API is for
Section 10 of the Twitch Terms of Service, Prohibited Conduct, item xi, forbids accessing any Twitch resource by means of any robot, spider, scraper, crawler, or other automated means for any purpose, and forbids bypassing any measures Twitch may use to prevent or restrict access. That is the contract every account holder signs, and it is absolute in wording. robots.txt, by contrast, disallows 48 paths (login, search, chat, popout, embed, user settings) and explicitly allows /directory; it also grants Amazonbot, Amazonbot-Video, Amzn-SearchBot and Amzn-User unrestricted access, which tells you who owns Twitch.
What that leaves for data is the Helix API, and it is a good one. Get Streams at https://api.twitch.tv/helix/streams returns up to 100 live streams per page with viewer_count, game_name and language; Get Channel Information at /helix/channels returns broadcaster_language and game_name for up to 100 broadcaster ids; Get Users returns the profile. Every request needs an Authorization: Bearer app access token and a Client-Id header; without them the endpoint answers 401 in 72 bytes, OAuth token is missing. Rate limiting is a token bucket per client: each endpoint costs points, the default is one per request, the bucket refills every minute, and the Ratelimit-Limit, Ratelimit-Remaining and Ratelimit-Reset headers tell you where you stand; exceeding it returns 429. The documented example bucket is 800.
The API does not need a proxy. Its limit is the token, not the address. What a proxy is for on Twitch is narrower than the vendor pages claim: seeing the page a viewer in a country sees, reading the public head of a channel page from that country, and operating your own few accounts from stable addresses. What it is not for, and where most of the search demand sits: viewer bots, follower inflation, farms of accounts and ad-stripping playlist proxies. Artificial engagement is a violation of the terms whatever address it comes from, it ends with the channel removed, and we do not help with any of it.
Cost math with real prices, 1 GB counted as 1,000,000,000 bytes
Prices from our pricing page: residential Basic $0.80/GB, residential Premium $2.20/GB, datacenter $0.50/GB, and the web scraping API from $0.0002 per page ($0.001 with rendering), billed only on success.
| Approach | Bytes per unit | Units per GB | Cost per 1,000 units, residential Basic |
|---|---|---|---|
| Channel page head, plain HTTP | 214,029 | about 4,670 | $0.17 |
| Home, plain HTTP (0 words) | 202,478 | about 4,940 | $0.16 |
| Home, rendered | 1,718,470 | 582 | $1.37 |
| Helix Get Streams, 100 streams per call | n/a | n/a | $0 in bandwidth terms; limited by the token bucket |
| Web scraping API, one channel page, no render | n/a | n/a | $0.20 |
| Web scraping API, one page, rendered | n/a | n/a | $1.00 |
Byte figures are decoded page size; compressed transfer is smaller and the ordering holds. Reading the follower count and ten recent videos for 1,000 channels costs 17 cents over plain HTTP and $1.37 by rendering a home page that does not contain them. The render also takes 45.7 seconds per page; at that pace a browser reads 79 pages an hour, a plain HTTP client reads the same head in 6.4 seconds.
Which proxy type, by job
| Job | Proxy type | Why |
|---|---|---|
| Live viewer counts, stream lists, channel info | None, use Helix with an app token | 100 streams per call, viewer_count included; the limit is the bucket, not the IP |
| Follower count and recent videos of public channels | Residential, plain HTTP | JSON-LD in the channel head, 214,029 bytes, no token, no browser |
| Checking the page a viewer in a market sees | Residential, country-targeted | Twitch sets language and canonical from the exit country |
| Watching streams from a market | Not a per-GB proxy job | Video is gigabytes per hour; the most expensive thing you can do on Twitch at per-GB prices |
| Viewer bots, follower inflation, ad-stripping | None | Prohibited by the terms; a proxy does not restore a removed channel |
Mobile proxies are not justified anywhere on this list. Nothing we sent from a residential exit was challenged, and Twitch did not treat the address as the problem at any point.
The setting that works on Twitch
- Network: residential, Basic at $0.80/GB, for the channel head and for market checks. For counts and stream lists use Helix with your own app token; it needs no proxy.
- Fetch mode: engine: tls. The channel page over plain HTTP carries 2,461,147 followers and ten videos with views in 214,029 bytes; rendering the home costs 1,718,470 bytes and 45.7 seconds for 101 words.
- Country: pin the market you are checking. From a German exit the same home URL returned a German description and the canonical https://www.twitch.tv/?lang=de; for follower counts the country does not matter and us is fine.
- When the proxy is not enough: there is no Twitch collector in our catalogue and, given the terms, we are not building one. For typed rows from a channel head, use the web scraping API without rendering ($0.0002 per page) and extract the JSON-LD; for everything live, Helix.
- Every account gets $2 of free API usage per month, which is 2.5 GB of residential bandwidth, about 11,600 channel heads, before anything is billed.