How this page gets its numbers

Four columns of figures, from three different places. Here is which is which.

The station list comes from Radio Browser, an open, community-run directory of internet radio. We ask it for one page at a time, filtered and ordered by whatever the sidebar is set to. It gives us each station's name, genre tags, country, homepage and stream address — and nothing about who is listening right now.

Now Playing and Listeners/Max come from the stations themselves. For every row on the page we ask that station's own server directly. Stream servers send no CORS headers and many still run over plain http, so a browser cannot ask them from a page like this one; the asking is done here on the server instead. Each station is tried at the addresses these servers conventionally answer on — Icecast's status-json.xsl, SHOUTcast's stats and 7.html, their HTML status pages — at the host root and at the path prefixes proxied streams hide behind. When none of them answers, we open the stream itself and read the ICY metadata the track title travels in. Whichever address worked is remembered for a day, so later visits ask once rather than hunting, and answers are held for 30 seconds so a busy page does not pester anyone.

A stream can answer without saying much. Roughly one station in five has no status page at any of those addresses and sends no track title either, yet still answers: the ICY headers that open the connection carry the bitrate and the server's own name, and nothing else. Those rows show a bitrate, no listener count and no Now Playing, and headers under the empty figure. It is the thinnest honest answer a station can give, and it is still an answer — the alternative would be a row that looks as though we invented the number.

Every figure says where it came from. Under each number in the Listeners/Max column is the source it was read from — icecast, shoutcast, somafm, uber.radio, stream for a track title read off the stream itself, headers for the case above, no answer where the station never replied, and not counted for a figure we show but do not rank on. Hovering the number spells the same thing out in full. Nothing here is a figure of ours: the listener counts are whatever the station's own server said when the page was built.

Not everything speaks Icecast or SHOUTcast. Some networks publish their figures somewhere else entirely, and no amount of probing the conventional addresses will find them. SomaFM is the clearest case: every one of their Icecast status pages is deliberately stubbed — ask for status-json.xsl and you get a request for donations — while one public document at somafm.com/channels.json carries the listener count and current track for all 46 channels. uber.radio does the same for the thousand-odd stations it hosts. That is the better number anyway, since it totals their relays rather than counting one. Where a network does that, we read what it publishes, and the line under the listener figure names it.

Numbers that are not counts. A few servers answer with a fixed figure rather than a measurement. Three rautemusik streams return the same line as each other — 5,000 listeners, 5,000 peak, 5,000 maximum, 2 unique — and it does not move from one minute to the next, which is enough to put it at the top of a listener ranking permanently. Where a server claims to be exactly at capacity, or reports a unique count far below its current one, the figure is shown in the listing but struck through, left out of the total at the top of the page, and not ranked on.

Why so many stations read n/a. Only about one in four publishes a listener count: 13 of 50 on the first page, 8 of 40 and 11 of 40 further down the directory. The rest are either fronted by a CDN, where no origin server is reachable and no such number exists publicly, or run a server whose operator switched the stats page off. It is not something this site can fix by asking harder, so the sidebar can hide them instead.

Two counters, deliberately kept apart. Clicks (RB) is Radio Browser's: tune-ins over the last 24 hours across every app built on that directory, one per listener. Plays (here) is ours: tune-ins that happened on ypshout. Pressing Tune In! counts once in each, because Radio Browser asks the players it feeds to report a play, and this one does. Our count takes one play per address per station per hour, and stores the address only as a salted hash — enough to stop one person running a number up, not enough to identify anybody afterwards.

The genre menu is built from the directory's own tag list — every tag it knows, with how many stations carry it — grouped under families so the sub-genres sit where you would look for them: deep house and tech house under House, black metal and thrash under Metal. Tags are free-form, so the popular end of that list is full of things that are not genres; the menu keeps only what sits under a family it recognises.

The chat rooms are ours too, one per station, kept for 48 hours and then dropped. A nick is held by a token your browser generates, so nobody can take yours while you are using it. There are no accounts and nothing is shared with the stations.

« back to the listing
ypshout.com is an independent tribute to the era of the internet radio yellow pages. It is not affiliated with, endorsed by or connected to Nullsoft, Winamp or Shoutcast, and uses none of their artwork or trademarks — every graphic on this page was drawn for ypshout. Station data from Radio Browser; each station's own server supplies its now playing and listener counts. · review queue