# Radio Browser

> Find internet radio from a workflow. Radio Browser is a community-built directory of about sixty thousand live stations from every country, searchable by genre, place, language and audio quality, and every result comes with a link that plays. No account or API key required.

App · Music & Podcasts · 9 actions. Web page: https://docs.lodol.com/docs/integrations/radio-browser

## Actions

### Find stations

Search about sixty thousand internet radio stations by genre, country, region, language, name and audio quality, and get back stations that are actually playing - streams that have stopped working are left out. Every station comes back with a URL you can play straight away, its logo, its homepage and a one-line description, so a message or a player can be built from the result without any further steps. No account or API key required.

**Inputs**

- Station name contains (`name`, text): Optional. Part of the station's name. Capitals do not matter. Leave it empty to search by genre and place alone.
- Genres (`genres`, text): Optional. The genres and moods stations are tagged with. Pick as many as you like: a station has to carry every one of them, so one genre is a wide search and two is a narrow one. The list shows the most-used genres with the number of stations behind each, and you can type any other.
- Country (`country`, text): Optional. Leave it empty to search everywhere. Pick a country from the list, or type its name or two-letter code. A country that matches nothing is reported with the nearest names rather than quietly returning no stations.
- Region (`region`, text): Optional. The state, province or city a station is filed under. Choose a country first and this lists that country's regions with the number of stations in each. Contributors type these by hand, so the same place can appear more than once (Germany has both Bavaria and Bayern) - part of a name matches them all.
- Language (`language`, text): Optional. The language a station broadcasts in. Pick one from the list, or type its name or two-letter code. Stations that broadcast in several languages match on any of them.
- Audio format (`codec`, text): Optional. Leave it empty for any format. Worth setting only when whatever will play the stream is fussy - MP3 is the safest choice for older players and hardware. One of: `MP3` (MP3: plays everywhere), `AAC` (AAC: smaller than MP3 at the same quality), `AAC+` (AAC+: better again at low bitrates), `OGG` (OGG Vorbis), `FLAC` (FLAC: lossless, and rare).
- Minimum quality (kbps) (`min_bitrate`, number): Optional. The lowest bitrate to accept, in kbps. 128 is ordinary music quality and 64 is fine for speech. Some stations have never reported a bitrate, and setting this leaves those out. From 0 to 2000.
- Only secure (HTTPS) streams (`https_only`, true/false): Many stations still stream over plain HTTP, which browsers block on a secure page. Turn this on when the stream has to play inside a website or an app that requires HTTPS. Default: `false`.
- Include stations that are offline (`include_offline`, true/false): Radio Browser tests every stream daily and about one station in ten is not currently playing. Those are left out by default. Turn this on to see them too - useful when you are checking whether a particular station has come back. Default: `false`.
- Order (`sort_by`, text): Optional. Most voted for by default, which is the closest thing the directory has to 'best'. Trending finds what is gaining listeners now, and Random is how you get a different station each run. One of: `votes` (Most voted for), `listeners` (Most tuned into today), `trending` (Trending: gaining listeners fastest), `updated` (Recently added or updated), `quality` (Highest audio quality), `name` (Name (A to Z)), `random`. Default: `votes`.
- How many to return (`limit`, number): Optional. How many stations to return, from 1 to 200. 20 by default. From 1 to 200. Default: `20`.
- Skip (`offset`, number): Optional. How many matches to skip before the ones you want, for paging through a large result. Leave it empty to start at the top. From 0 to 100000. Default: `0`.

**Outputs**

- `count` (number): How many stations came back.
- `filter_summary` (text): Those filters as a phrase.
- `filters` (object): What was actually searched for, after names were resolved: the country Radio Browser matched, the genres as it stores them, and every other filter.
- `has_more` (true/false): Whether there are further matches beyond the ones returned. Raise the limit, or use Skip to page through them.
- `limit` (number): How many were asked for.
- `offset` (number): How many matches were skipped.
- `sort_by` (text): The order that was used.
- `sort_label` (text): That order, in words.
- `stations` (list): The stations that matched, in the chosen order.
- `summary` (text): What the search found, in one sentence.
- `unmatched_genres` (list): When nothing matched, the genres no station carries - which is usually why. Empty otherwise.

**Example output**

```json
{
  "count": 1,
  "filter_summary": "pop stations in The United Kingdom Of Great Britain And Northern Ireland",
  "filters": {
    "codec": null,
    "country": "The United Kingdom Of Great Britain And Northern Ireland",
    "country_code": "GB",
    "genres": [
      "pop"
    ],
    "https_only": false,
    "include_offline": false,
    "language": null,
    "min_bitrate": null,
    "name": null,
    "region": null
  },
  "has_more": true,
  "limit": 20,
  "offset": 0,
  "sort_by": "votes",
  "sort_label": "Most voted for",
  "stations": [
    {
      "bitrate_kbps": 101,
      "click_trend": 12,
      "clicks_last_24h": 84,
      "codec": "AAC+",
      "country": "The United Kingdom Of Great Britain And Northern Ireland",
      "country_code": "GB",
      "distance_km": null,
      "genres": [
        "bbc",
        "pop",
        "rock"
      ],
      "genres_text": "bbc, pop, rock",
      "has_ssl_error": false,
      "homepage": "https://www.bbc.co.uk/sounds/play/live/bbc_radio_one",
      "is_hls": true,
      "is_online": true,
      "language_codes": [
        "en"
      ],
      "languages": [
        "english"
      ],
      "languages_text": "english",
      "last_changed_at": "2026-04-18T08:43:08Z",
      "last_checked_at": "2026-09-10T15:38:31Z",
      "last_played_at": "2026-09-15T08:39:08Z",
      "last_working_at": "2026-09-10T15:38:31Z",
      "latitude": 51.507755,
      "logo_url": "https://cdn-profiles.tunein.com/s24939/images/logod.png",
      "longitude": -0.128316,
      "name": "BBC Radio 1",
      "region": "London",
      "region_code": null,
      "station_id": "f7fd408e-02a5-49a1-8c03-078727e97e8f",
      "stream_url": "http://stream.live.vc.bbcmedia.co.uk/bbc_radio_one",
      "submitted_url": "http://a.files.bbci.co.uk/bbc_radio_one.m3u8",
      "summary": "BBC Radio 1 - London, The United Kingdom Of Great Britain And Northern Ireland | bbc, pop, rock | AAC+ 101 kbps",
      "votes": 151
    }
  ],
  "summary": "Found 1 pop stations in The United Kingdom Of Great Britain And Northern Ireland (more available).",
  "unmatched_genres": []
}
```

### Get a station

Look up one station by its id and get its current details with the fields at the top level: where to play it, its logo, its homepage, its genres, its audio quality and whether it was still playing at the last daily check. Use this to refresh a station you saved earlier, or to check that a favourite is still up. It does not count a listen - Get a station's stream link is the one that does. No account or API key required.

**Inputs**

- Station (`station_id`, text, required): The station to look up. Use the station_id from Find stations, List top stations or Get a station: it is the id Radio Browser gives each station, and it stays the same as long as the station is in the directory.

**Outputs**

- `bitrate_kbps` (number): Its bitrate in kbps, or null when the station has never reported one. Higher is better quality and more bandwidth.
- `click_trend` (number): How much that has changed over the last two days. Positive means it is gaining listeners.
- `clicks_last_24h` (number): How many people tuned into it in the last 24 hours.
- `codec` (text): The audio format, e.g. "MP3" or "AAC+", or null when the last check could not tell.
- `country` (text): The country it broadcasts from.
- `country_code` (text): Its two-letter country code, e.g. "DE".
- `distance_km` (number): How far away it is, when the directory recorded a distance. Normally null.
- `genres` (list): The genres it is tagged with, e.g. ["jazz", "blues"].
- `genres_text` (text): The same genres on one line, for writing into a message.
- `has_ssl_error` (true/false): Whether the last check hit a certificate problem on the stream.
- `homepage` (text): The station's own website, or null.
- `is_hls` (true/false): Whether it streams as HLS. Some simple players cannot play HLS.
- `is_online` (true/false): Whether the stream was playing at Radio Browser's last daily check. Offline stations are left out of results unless asked for.
- `language_codes` (list): Those languages as codes.
- `languages` (list): The languages it broadcasts in.
- `languages_text` (text): The same languages on one line.
- `last_changed_at` (text): When its details were last edited (UTC).
- `last_checked_at` (text): When Radio Browser last tested the stream (UTC).
- `last_played_at` (text): When somebody last tuned into it (UTC), or null.
- `last_working_at` (text): When it was last found playing (UTC).
- `latitude` (number): Where it broadcasts from, or null if unknown.
- `logo_url` (text): The station's logo, or null if it has none.
- `longitude` (number): Where it broadcasts from, or null if unknown.
- `name` (text): The station's name.
- `region` (text): The state, province or city it is filed under, or null.
- `region_code` (text): The ISO code for that region, e.g. "DE-BY", or null.
- `station_id` (text): Radio Browser's id for this station. Pass it to Get a station's stream link, Get a station or Vote for a station.
- `stream_url` (text): The URL to play. Radio Browser has already followed any playlist file or redirect the station submitted, so this is the audio itself.
- `submitted_url` (text): The URL the station was submitted with, which is often a playlist file rather than the audio. Use stream_url to play.
- `summary` (text): The station on one line - name, where it is, its genres and its quality - ready to put in a message.
- `votes` (number): How many people have voted for it, all time.

**Example output**

```json
{
  "bitrate_kbps": 101,
  "click_trend": 12,
  "clicks_last_24h": 84,
  "codec": "AAC+",
  "country": "The United Kingdom Of Great Britain And Northern Ireland",
  "country_code": "GB",
  "distance_km": null,
  "genres": [
    "bbc",
    "pop",
    "rock"
  ],
  "genres_text": "bbc, pop, rock",
  "has_ssl_error": false,
  "homepage": "https://www.bbc.co.uk/sounds/play/live/bbc_radio_one",
  "is_hls": true,
  "is_online": true,
  "language_codes": [
    "en"
  ],
  "languages": [
    "english"
  ],
  "languages_text": "english",
  "last_changed_at": "2026-04-18T08:43:08Z",
  "last_checked_at": "2026-09-10T15:38:31Z",
  "last_played_at": "2026-09-15T08:39:08Z",
  "last_working_at": "2026-09-10T15:38:31Z",
  "latitude": 51.507755,
  "logo_url": "https://cdn-profiles.tunein.com/s24939/images/logod.png",
  "longitude": -0.128316,
  "name": "BBC Radio 1",
  "region": "London",
  "region_code": null,
  "station_id": "f7fd408e-02a5-49a1-8c03-078727e97e8f",
  "stream_url": "http://stream.live.vc.bbcmedia.co.uk/bbc_radio_one",
  "submitted_url": "http://a.files.bbci.co.uk/bbc_radio_one.m3u8",
  "summary": "BBC Radio 1 - London, The United Kingdom Of Great Britain And Northern Ireland | bbc, pop, rock | AAC+ 101 kbps",
  "votes": 151
}
```

### Get a station's stream link

Get the link to play a station, and tell Radio Browser that somebody is listening. Those listens are what the directory's popularity charts are built from, so this is the action to use whenever a workflow is about to play a stream, hand it to a player or send it to somebody - it is how the station gets credit for the listen. No account or API key required.

**Inputs**

- Station (`station_id`, text, required): The station to play. Use the station_id from Find stations, List top stations or Get a station: it is the id Radio Browser gives each station, and it stays the same as long as the station is in the directory.

**Outputs**

- `name` (text): Its name.
- `play_counted` (true/false): Always true: asking for the link counted one listen towards the station's popularity.
- `station_id` (text): The station that was asked for.
- `stream_url` (text): The URL to play.
- `summary` (text): The station and its link on one line.

**Example output**

```json
{
  "name": "BBC Radio 1",
  "play_counted": true,
  "station_id": "f7fd408e-02a5-49a1-8c03-078727e97e8f",
  "stream_url": "http://stream.live.vc.bbcmedia.co.uk/bbc_radio_one",
  "summary": "BBC Radio 1 is playing at http://stream.live.vc.bbcmedia.co.uk/bbc_radio_one"
}
```

### List countries

List every country with stations in the directory and how many each has, busiest first. Use it to see where there is radio to find, to pick a country for each run of a workflow, or to get the two-letter code a search needs. No account or API key required.

**Inputs**

- Contains (`contains`, text): Optional. Only countries whose name contains this. Capitals and accents do not matter. Leave it empty for the whole list.
- Order (`sort_by`, text): Optional. Busiest first by default, which puts the ones worth picking at the top. One of: `stations` (Most stations first), `name` (Name (A to Z)). Default: `stations`.
- How many to return (`limit`, number): Optional. How many rows to return, from 1 to 500. 50 by default. From 1 to 500. Default: `50`.

**Outputs**

- `contains` (text): The text that was filtered on, or null.
- `count` (number): How many rows came back.
- `countries` (list): The countries, busiest first by default.
- `limit` (number): How many were asked for.
- `matched_count` (number): How many matched before the limit was applied.
- `sort_by` (text): The order that was used.
- `sort_label` (text): That order, in words.
- `summary` (text): What the listing holds, in one sentence.
- `total_count` (number): How many countries Radio Browser knows in all.

**Example output**

```json
{
  "contains": null,
  "count": 1,
  "countries": [
    {
      "country": "The United States Of America",
      "country_code": "US",
      "station_count": 8173,
      "summary": "The United States Of America (US): 8,173 stations"
    }
  ],
  "limit": 50,
  "matched_count": 241,
  "sort_by": "stations",
  "sort_label": "Most stations first",
  "summary": "Showing 1 of 241 countries.",
  "total_count": 241
}
```

### List genres

List the genres and moods stations are tagged with, with the number of stations behind each - over twelve thousand of them, from 'jazz' to 'italo disco'. Use it to see what a search can be narrowed by, to pick a different genre for each run, or to check the exact spelling of one before searching. No account or API key required.

**Inputs**

- Contains (`contains`, text): Optional. Only genres whose name contains this. Capitals and accents do not matter. Leave it empty for the whole list.
- Order (`sort_by`, text): Optional. Busiest first by default, which puts the ones worth picking at the top. One of: `stations` (Most stations first), `name` (Name (A to Z)). Default: `stations`.
- How many to return (`limit`, number): Optional. How many rows to return, from 1 to 500. 50 by default. From 1 to 500. Default: `50`.

**Outputs**

- `contains` (text): The text that was filtered on, or null.
- `count` (number): How many rows came back.
- `genres` (list): The genres, busiest first by default.
- `limit` (number): How many were asked for.
- `matched_count` (number): How many matched before the limit was applied.
- `sort_by` (text): The order that was used.
- `sort_label` (text): That order, in words.
- `summary` (text): What the listing holds, in one sentence.
- `total_count` (number): How many genres Radio Browser knows in all.

**Example output**

```json
{
  "contains": "jazz",
  "count": 1,
  "genres": [
    {
      "genre": "jazz",
      "genre_label": "Jazz",
      "station_count": 1245,
      "summary": "jazz: 1,245 stations"
    }
  ],
  "limit": 50,
  "matched_count": 82,
  "sort_by": "stations",
  "sort_label": "Most stations first",
  "summary": "Showing 1 of 82 genres containing 'jazz'.",
  "total_count": 12231
}
```

### List languages

List the languages stations broadcast in and how many use each, busiest first. Use it to find the exact language name a search needs, or to build a workflow that picks a different language each time. No account or API key required.

**Inputs**

- Contains (`contains`, text): Optional. Only languages whose name contains this. Capitals and accents do not matter. Leave it empty for the whole list.
- Order (`sort_by`, text): Optional. Busiest first by default, which puts the ones worth picking at the top. One of: `stations` (Most stations first), `name` (Name (A to Z)). Default: `stations`.
- How many to return (`limit`, number): Optional. How many rows to return, from 1 to 500. 50 by default. From 1 to 500. Default: `50`.

**Outputs**

- `contains` (text): The text that was filtered on, or null.
- `count` (number): How many rows came back.
- `languages` (list): The languages, busiest first by default.
- `limit` (number): How many were asked for.
- `matched_count` (number): How many matched before the limit was applied.
- `sort_by` (text): The order that was used.
- `sort_label` (text): That order, in words.
- `summary` (text): What the listing holds, in one sentence.
- `total_count` (number): How many languages Radio Browser knows in all.

**Example output**

```json
{
  "contains": null,
  "count": 1,
  "languages": [
    {
      "language": "english",
      "language_code": "en",
      "language_label": "English",
      "station_count": 13355,
      "summary": "English: 13,355 stations"
    }
  ],
  "limit": 50,
  "matched_count": 661,
  "sort_by": "stations",
  "sort_label": "Most stations first",
  "summary": "Showing 1 of 661 languages.",
  "total_count": 661
}
```

### List regions

List the states, provinces and cities inside a country, with the number of stations in each - the way to find local radio for one place rather than a whole country. Contributors type these by hand, so the same place can appear under more than one spelling; the counts show which one is actually used. No account or API key required.

**Inputs**

- Country (`country`, text): The country whose regions you want. Pick one from the list, or type its name or two-letter code. Leave it empty to list regions worldwide, which mixes every country's spellings together.
- Contains (`contains`, text): Optional. Only regions whose name contains this. Capitals and accents do not matter. Leave it empty for the whole list.
- Order (`sort_by`, text): Optional. Busiest first by default, which puts the ones worth picking at the top. One of: `stations` (Most stations first), `name` (Name (A to Z)). Default: `stations`.
- How many to return (`limit`, number): Optional. How many rows to return, from 1 to 500. 50 by default. From 1 to 500. Default: `50`.

**Outputs**

- `contains` (text): The text that was filtered on, or null.
- `count` (number): How many rows came back.
- `country` (text): The country these regions are in, or null if the whole world was listed.
- `country_code` (text): That country's two-letter code, or null.
- `limit` (number): How many were asked for.
- `matched_count` (number): How many matched before the limit was applied.
- `regions` (list): The regions, busiest first by default.
- `sort_by` (text): The order that was used.
- `sort_label` (text): That order, in words.
- `summary` (text): What the listing holds, in one sentence.
- `total_count` (number): How many regions the chosen country has in all, or the whole world if no country was chosen.

**Example output**

```json
{
  "contains": null,
  "count": 1,
  "country": "Germany",
  "country_code": "DE",
  "limit": 50,
  "matched_count": 177,
  "regions": [
    {
      "country": "Germany",
      "region": "Berlin",
      "station_count": 356,
      "summary": "Berlin, Germany: 356 stations"
    }
  ],
  "sort_by": "stations",
  "sort_label": "Most stations first",
  "summary": "Showing 1 of 177 regions in Germany.",
  "total_count": 177
}
```

### List top stations

Get the directory's own charts in one step, with no filters to fill in: the most voted for of all time, the most tuned into in the last 24 hours, whatever somebody has just started playing anywhere in the world, or the stations added and updated most recently. Good for a daily 'what people are listening to' post, and for finding new stations without knowing what to search for. No account or API key required.

**Inputs**

- Chart (`rank_by`, text): Which chart to read. Most voted for is the steady all-time favourite list; the other three change through the day. One of: `votes` (Most voted for, all time), `listeners` (Most tuned into in the last 24 hours), `played` (Played most recently, anywhere in the world), `updated` (Added or updated most recently). Default: `votes`.
- How many to return (`limit`, number): Optional. How many stations to return, from 1 to 200. 10 by default. From 1 to 200. Default: `10`.
- Include stations that are offline (`include_offline`, true/false): Radio Browser tests every stream daily and about one station in ten is not currently playing. Those are left out by default. Turn this on to see them too - useful when you are checking whether a particular station has come back. Default: `false`.

**Outputs**

- `count` (number): How many stations came back.
- `has_more` (true/false): Whether the chart holds more stations than were returned.
- `include_offline` (true/false): Whether stations that are not currently playing were included.
- `limit` (number): How many were asked for.
- `rank_by` (text): The chart that was read.
- `rank_label` (text): That chart, in words.
- `stations` (list): The chart, best first, or most recent first.
- `summary` (text): What the chart holds, in one sentence.

**Example output**

```json
{
  "count": 1,
  "has_more": true,
  "include_offline": false,
  "limit": 10,
  "rank_by": "votes",
  "rank_label": "Most voted for",
  "stations": [
    {
      "bitrate_kbps": 101,
      "click_trend": 12,
      "clicks_last_24h": 84,
      "codec": "AAC+",
      "country": "The United Kingdom Of Great Britain And Northern Ireland",
      "country_code": "GB",
      "distance_km": null,
      "genres": [
        "bbc",
        "pop",
        "rock"
      ],
      "genres_text": "bbc, pop, rock",
      "has_ssl_error": false,
      "homepage": "https://www.bbc.co.uk/sounds/play/live/bbc_radio_one",
      "is_hls": true,
      "is_online": true,
      "language_codes": [
        "en"
      ],
      "languages": [
        "english"
      ],
      "languages_text": "english",
      "last_changed_at": "2026-04-18T08:43:08Z",
      "last_checked_at": "2026-09-10T15:38:31Z",
      "last_played_at": "2026-09-15T08:39:08Z",
      "last_working_at": "2026-09-10T15:38:31Z",
      "latitude": 51.507755,
      "logo_url": "https://cdn-profiles.tunein.com/s24939/images/logod.png",
      "longitude": -0.128316,
      "name": "BBC Radio 1",
      "region": "London",
      "region_code": null,
      "station_id": "f7fd408e-02a5-49a1-8c03-078727e97e8f",
      "stream_url": "http://stream.live.vc.bbcmedia.co.uk/bbc_radio_one",
      "submitted_url": "http://a.files.bbci.co.uk/bbc_radio_one.m3u8",
      "summary": "BBC Radio 1 - London, The United Kingdom Of Great Britain And Northern Ireland | bbc, pop, rock | AAC+ 101 kbps",
      "votes": 151
    }
  ],
  "summary": "1 station, most voted for."
}
```

### Vote for a station

Cast a vote for a station. Votes are how this community-built directory ranks itself, and a station your workflows play regularly is one worth voting for. Radio Browser counts one vote every ten minutes from one place - for any station, not one each - and quietly ignores the rest, so a busy workspace will often find a vote was not counted. This step checks the station's total before and after and tells you which happened, rather than taking the service's word for it. No account or API key required.

**Inputs**

- Station (`station_id`, text, required): The station to vote for. Use the station_id from Find stations, List top stations or Get a station: it is the id Radio Browser gives each station, and it stays the same as long as the station is in the directory.

**Outputs**

- `name` (text): Its name.
- `previous_votes` (number): How many it had before this step ran.
- `station_id` (text): The station that was voted for.
- `summary` (text): What happened, in one sentence.
- `voted` (true/false): Whether the vote was actually counted. False when a vote was already cast from here within the last ten minutes, which is not a failure - it is the directory's own limit.
- `votes` (number): How many votes the station has now.

**Example output**

```json
{
  "name": "BBC Radio 1",
  "previous_votes": 151,
  "station_id": "f7fd408e-02a5-49a1-8c03-078727e97e8f",
  "summary": "Voted for BBC Radio 1, now on 152 votes.",
  "voted": true,
  "votes": 152
}
```
