SoundCloud API: List artist tracks
Lists a SoundCloud artist's public tracks in latest or SoundCloud popular order, with profile and track details. SoundCloud's popular list may contain fewer than 100 tracks (currently at most 30).
Unofficial. Not affiliated with or endorsed by SoundCloud.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Sort optional
sort Order by latest uploads or SoundCloud popular tracks, for example popular.
popular
One of
latest,popular. Defaultlatest.- Artist, required
artist Artist name, SoundCloud username, or profile link, for example Kygo.
Kygo
- Max Results optional
max_results Maximum number of tracks to return, for example 20.
100
Whole number from 1 to 100. Default
20.
Input as JSON
{ "sort": "popular", "artist": "Kygo", "max_results": 100}Output
{ "tracks": [ { "genre": "Electronic", "title": "The Weeknd & Daft Punk - Starboy (Kygo Remix)", "length": "4:05", "track_id": 292470749, "length_ms": 244632, "like_count": 389027, "play_count": 21521129, "track_link": "https://soundcloud.com/kygo/the-weeknd-daft-punk-starboy-kygo-remix" , "upload_date": "2016-11-10", "repost_count": 26592, "comment_count": 2296, "artwork_image_link": "https://i1.sndcdn.com/artworks-000192994435-0is7lt-large.jpg" }, { "genre": "Kygo", "title": "Ed Sheeran - I See Fire (Kygo Remix)", "length": "5:17", "track_id": 122899544, "length_ms": 316893, "like_count": 1176227, "play_count": 81546398, "track_link": "https://soundcloud.com/kygo/ed-sheeran-i-see-fire-kygo" , "upload_date": "2013-12-02", "repost_count": 142817, "comment_count": 13009, "artwork_image_link": "https://i1.sndcdn.com/artworks-000064260922-w3cv4b-large.jpg" }, { "genre": "Pop", "title": "It Ain't Me", "length": "3:41", "track_id": 307666366, "length_ms": 220813, "like_count": 55227, "play_count": 2234909, "track_link": "https://soundcloud.com/kygo/it-aint-me" , "upload_date": "2017-02-14", "repost_count": 3409, "comment_count": 210, "artwork_image_link": "https://i1.sndcdn.com/artworks-WKN18WQK8OZJ-0-large.jpg" } ], "user_id": 4360546, "profile_link": "https://soundcloud.com/kygo" , "follower_count": 1519561, "artist_display_name": "Kygo"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"soundcloud.com/list_artist_tracks","input":{"sort":"popular","artist":"Kygo","max_results":100}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "soundcloud.com/list_artist_tracks" , "input": { "sort": "popular", "artist": "Kygo", "max_results": 100 }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "soundcloud.com/list_artist_tracks" , "input": { "sort": "popular", "artist": "Kygo", "max_results": 100 } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run soundcloud.com/list_artist_tracks# with {"sort":"popular","artist":"Kygo","max_results":100}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "artist" ], "properties": { "sort": { "enum": [ "latest", "popular" ], "type": "string", "default": "latest", "description": "Order by latest uploads or SoundCloud popular tracks, for example popular." }, "artist": { "type": "string", "minLength": 1, "description": "Artist name, SoundCloud username, or profile link, for example Kygo." }, "max_results": { "type": "integer", "default": 20, "maximum": 100, "minimum": 1, "description": "Maximum number of tracks to return, for example 20." } }}Output schema
{ "type": "object", "required": [ "artist_display_name", "profile_link", "follower_count", "user_id", "tracks" ], "properties": { "tracks": { "type": "array", "items": { "type": "object", "required": [ "title", "play_count", "like_count", "repost_count", "comment_count", "length", "upload_date", "genre", "artwork_image_link", "track_link", "track_id", "length_ms" ], "properties": { "genre": { "type": [ "string", "null" ] }, "title": { "type": [ "string", "null" ] }, "length": { "type": [ "string", "null" ] }, "track_id": { "type": [ "integer", "null" ], "x-fous-developer": true }, "length_ms": { "type": [ "integer", "null" ], "x-fous-developer": true }, "like_count": { "type": [ "integer", "null" ] }, "play_count": { "type": [ "integer", "null" ] }, "track_link": { "type": "string" }, "upload_date": { "type": [ "string", "null" ] }, "repost_count": { "type": [ "integer", "null" ] }, "comment_count": { "type": [ "integer", "null" ] }, "artwork_image_link": { "type": [ "string", "null" ] } }, "additionalProperties": false } }, "user_id": { "type": "integer", "x-fous-developer": true }, "profile_link": { "type": "string" }, "follower_count": { "type": [ "integer", "null" ] }, "artist_display_name": { "type": "string" } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
soundcloud.com/list_artist_tracks- Returns
- artist name, profile link, followers, tracks with plays, likes, reposts, comments, length, upload date, genre, artwork, link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method soundcloud.com/list_artist_tracks with the inputs above.
Ask your agent
- What are the 10 most recent tracks Fred again.. has uploaded on SoundCloud, with play counts and upload dates?
- Show me Flume's most popular tracks along with likes, reposts, and comment counts
- I need the latest 50 uploads from soundcloud.com/odesza including genre, length, and artwork links
- Pull the top popular songs from Tame Impala's profile and tell me how many followers they have
- List the newest 25 tracks by Rufus Du Sol with plays and links to each track
See more
All SoundCloud methodsGets a public SoundCloud track and its stats from a title and optional artist, or from a track link. Search picks the artist's matching upload with the most plays; unavailable fields are null.
soundcloud.com/get_trackLists an artist's songs on Genius by popularity or newest release date, with featured artists, release dates, page views and song art. The artist can be given by name or by Genius artist link; dates or views may be unavailable.
genius.com/list_artist_songsLooks up a Last.fm artist by name and returns listening statistics, profile, top tracks and albums, similar artists, and upcoming events.
last.fm/get_artistFinds artists similar to a named artist on Last.fm, ordered by similarity. Similarity percentages are null because public pages do not show them.
last.fm/list_similar_artistsGets a Spotify artist's public profile from their name, artist link or ID: listeners, followers, world rank, top cities, popular tracks, latest release and release counts.
open.spotify.com/get_artistGets an artist's tracked Spotify streaming totals, most-streamed songs and albums from Kworb.
kworb.net/get_artist_stream_countsLists Bandcamp releases in a genre, sorted by best-selling or new arrivals and filtered by format. Physical-format prices come from the matching package when available.
bandcamp.com/list_releases_by_genreGets an artist's upcoming concerts and tour dates on Songkick, optionally filtered by country, with ticket links and start times when listed.
songkick.com/get_artist_tour_dates