Field notes · № 01 · · 7 min read
Twelve things you could build on a live index of internet radio
Tuneping reads the title line of tens of thousands of internet radio stations every 20 to 60 seconds and serves the result as JSON. That is a plain fact about the world, refreshed all day, and it is good for more than a search box. Here are twelve things it makes possible, from the trivial to the ambitious, each with the calls it needs and the plan it takes. Most of them fit a weekend.
● Confirmed. You get one e-mail on release day, and nothing before it.
● Mail sent. One click on the link in it confirms your address; then you hear from us once, on release day. Nothing yet? Look in spam.
▲ That did not look like an e-mail address. Try again below.
▲ Too many confirmation mails for this address or network today. Try again tomorrow.
▲ That confirmation link is unknown or older than 7 days. Enter your address again below for a fresh one.
First the shape of the thing, because every idea below rests on it. At any moment about 23,000 stations are announcing a title; 58,000 are checked; 78,000 are listed. Every title change is kept, matched against MusicBrainz where it is a song, and classified: a song, a station ident, a programme name, an ad break, nothing, or junk. The live part needs no key at all. History, wishlists and the event stream need one, and the plans say how deep and how fast.
curl "https://api.tuneping.com/v1/now-playing/search?q=boards%20of%20canada&limit=5"
The reverse Shazam
Shazam tells you what song is playing. This tells you where a song is playing. Type an artist or a title, get the stations announcing it right now, press play on one of them. The home page of this site is the smallest possible version; a phone app that remembers your favourite stations, opens the stream in one tap and keeps a history of what you found is the next one.
GET/v1/now-playing/search no key
A song alarm
"The next time any station in Germany plays Kraftwerk, tell me." A wishlist is exactly that sentence as JSON: an artist or a track, a station filter, a delivery. Tuneping watches the index and tells you the moment a station announces a match, by webhook, over a stream, or when you ask. From there it is a Discord bot, a Telegram message, a lamp that turns red, or a recorder that starts recording, which is the next note.
POST/v1/wishlists GET/v1/stream key · developer webhooks from Pro
Ad-break hopping
A radio player that never plays an ad. Keep a list of stations of the same kind, say a dozen jazz stations, and ask for all of them in one call. Each row carries a classification. When your station switches to ad_break or ident, hop to another in the list that is in the middle of a song. Two honest limits: the classification is a reading of the announced text, not of the audio, and some stations announce nothing at all during their breaks.
GET/v1/stations GET/v1/now-playing?station_ids= no key · 20 stations per call 100 from Developer
"Where am I being played?"
An independent artist or a small label has no idea which internet stations play their records. The airplay report answers it: plays of an artist grouped by station, by country or by day, for the last 30 days. It is not certified airplay monitoring and no royalty collector will accept it as evidence. It is, however, a true picture of which stations announced your song and when, and that is more than most artists get today. A page per artist, a weekly mail, done.
GET/v1/search/artists GET/v1/artists/{id}/airplay key · pro
Charts without the streaming lens
Streaming charts say what people chose. Radio charts say what editors and DJs chose for them, in each country, and the two disagree in interesting ways. The most played songs of the last 24 hours, 7 or 30 days, worldwide or per country, need no key. Our own charts pages are built from them nightly. A newsletter "what Dutch radio played this week", or a detector for songs that rise on radio before they rise anywhere else, is a cron job away.
GET/v1/charts/tracks GET/v1/charts/artists no key
A monitor for the people who run stations
Broadcasters rarely watch their own title line, and it breaks quietly: an encoder that sends the stream URL instead of a title, a playout system that stopped updating at 02:00, a station that announces nothing for hours. One batch call over your own stations shows each one's current line, how it was classified and when it was last confirmed. For a network, the event stream pushes every change of every listed station to one dashboard, as it happens.
GET/v1/now-playing?station_ids= no key GET/v1/stream?station_ids= key · developer
"What did I just hear?" in the car
You know the station and roughly the time, and the song is gone. Play history has it: what a station played, newest first, with an estimated start and end for each title. A voice skill, a car-radio companion app, or a bookmark button that stores "this station, now" and resolves it later. The timestamps are when the station announced the title, give or take the 20 to 60 seconds between two checks.
GET/v1/stations/{id}/history key · developer 10 days, 30 on Pro
Ask an AI agent
"Which Austrian stations are playing jazz right now, and what did Ö1 play this morning?" The MCP server wraps the API as tools, so Claude, or any client that speaks the protocol, can answer questions like that against live data instead of guessing. It is a .NET tool on NuGet and listed in the official MCP registry; a key goes into one environment variable and the agent takes it from there.
Tuneping.Mcp on NuGet · com.tuneping/mcp in the registry
Tracklists for shows and podcasts
A DJ with a weekly show spends an hour after each one typing the tracklist for the website. The history of the station between 20:00 and 22:00 is that list, with times. The raw title-change feed goes one step further and keeps everything the station sent, including idents, junk and the lines nobody could parse, which is what you want when the show is the thing you are documenting and not just the songs in it.
GET/v1/stations/{id}/history key · developer GET/v1/stations/{id}/title-changes key · pro
Research on what radio actually plays
How concentrated is airplay in a country? How much domestic music does its radio play, and does it change by hour? How fast does a new release reach the small stations? These are old questions in media studies, usually answered from a handful of stations by hand. Exports give the play events of the whole index as CSV or NDJSON, country by country, for the plan's history depth, which turns a term of coding into a query.
POST/v1/exports key · business
A "playing now on" box for a band's website
Under the tour dates: "Playing right now on Radio X, Radio Y." One request, one list, a link per station. Our song pages have exactly that box, and so can anyone's, without a key, as long as the page says where the data comes from. On the free tier that is a link reading "Data by Tuneping", and that is the whole price.
GET/v1/now-playing/search no key attribution
A record button that waits for the song
All of the above see the song. One thing records it. Tapelark, the recorder this index grew out of, is getting the search above as a tab and the wishlist as a "record the next play" button, with the audio staying entirely on your own computer. That is a note of its own: Search for a song, find the station playing it, press record.
in the works
What you cannot build
The index is made of metadata only, so a few things are out of scope for good. Nothing here touches audio: there is no recording, no relaying, no fingerprinting, and there never will be, on any plan. The titles are what stations choose to announce, in the spelling they choose, and about 23,000 of the 58,000 checked stations announce one; the rest send nothing useful, and no API call changes that. A play is detected from an announcement, which makes it a good observation and a poor piece of legal evidence. History reaches back 10 days on Developer and 30 on Pro and Business, and the index is young, so the long views come as the data accumulates.
Where to start
The live calls need no key, with 1,000 requests a day per address and the attribution link. A free key comes by e-mail in a minute and makes the limits yours instead of your network's. The API reference has every parameter and every error, and if you build one of these, write to [email protected]: it goes on this site.