setlist.fm API: Get tour song statistics
Finds the songs an artist played most on a named tour or in a year on setlist.fm, with concert counts and cover credits. Without a filter it uses the most recent tour with published song statistics.
Unofficial. Not affiliated with or endorsed by setlist.fm.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Tour optional
tour Tour name, for example M72 World Tour. Leave blank to use the most recent tour with song statistics.
M72 World Tour
- Year optional
year Concert year instead of a tour, for example 2025.
Not set
Whole number.
- Artist, required
artist Artist or band name, for example Metallica.
Metallica
Input as JSON
{ "tour": "M72 World Tour", "artist": "Metallica"}Output
{ "tour": "M72 World Tour", "year": null, "songs": [ { "song_link": "https://www.setlist.fm/stats/songs/metallica-3bd680c8.html?songid=3b97fc90" , "song_title": "Kirk and Rob Doodle", "times_played": 89, "original_artist": null, "share_of_concerts_percent": 89.9 }, { "song_link": "https://www.setlist.fm/stats/songs/metallica-3bd680c8.html?songid=5bd6fb14" , "song_title": "Creeping Death", "times_played": 64, "original_artist": null, "share_of_concerts_percent": 64.6 }, { "song_link": "https://www.setlist.fm/stats/songs/metallica-3bd680c8.html?songid=bd6dd5a" , "song_title": "Enter Sandman", "times_played": 64, "original_artist": null, "share_of_concerts_percent": 64.6 } ], "artist": "Metallica", "statistics_link": "https://www.setlist.fm/stats/metallica-3bd680c8.html?tour=3dff98b" , "concerts_counted": 99}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"setlist.fm/get_tour_song_stats","input":{"tour":"M72 World Tour","artist":"Metallica"}}' # 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": "setlist.fm/get_tour_song_stats" , "input": { "tour": "M72 World Tour", "artist": "Metallica" }})# 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": "setlist.fm/get_tour_song_stats" , "input": { "tour": "M72 World Tour", "artist": "Metallica" } }), 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 setlist.fm/get_tour_song_stats# with {"tour":"M72 World Tour","artist":"Metallica"}"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": { "tour": { "type": "string", "description": "Tour name, for example M72 World Tour. Leave blank to use the most recent tour with song statistics." }, "year": { "type": "integer", "description": "Concert year instead of a tour, for example 2025." }, "artist": { "type": "string", "description": "Artist or band name, for example Metallica." } }}Output schema
{ "type": "object", "required": [ "artist", "tour", "year", "concerts_counted", "statistics_link", "songs" ], "properties": { "tour": { "type": [ "string", "null" ], "description": "Tour used, or null if filtered by year." }, "year": { "type": [ "integer", "null" ], "description": "Year used, or null if filtered by tour." }, "songs": { "type": "array", "items": { "type": "object", "required": [ "song_title", "times_played", "share_of_concerts_percent", "original_artist", "song_link" ], "properties": { "song_link": { "type": "string", "description": "Page showing statistics for this song." }, "song_title": { "type": "string" }, "times_played": { "type": "integer" }, "original_artist": { "type": [ "string", "null" ], "description": "Original artist for a cover, otherwise null." }, "share_of_concerts_percent": { "type": "number", "description": "Times played divided by setlists counted, capped at 100%." } }, "additionalProperties": false }, "description": "Songs in descending order by number of performances." }, "artist": { "type": "string", "description": "Artist name on setlist.fm." }, "statistics_link": { "type": "string", "description": "Tour or year statistics page." }, "concerts_counted": { "type": "integer", "description": "Setlists listed by setlist.fm for this tour or year." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
setlist.fm/get_tour_song_stats- Returns
- artist, tour or year, concerts counted, statistics link, songs with play counts, share of concerts and original artist
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 setlist.fm/get_tour_song_stats with the inputs above.
Ask your agent
- Which songs did Metallica play most often on the M72 World Tour, and how many shows were counted?
- Pull the most-played songs from Taylor Swift's Eras Tour on setlist.fm, including what percentage of concerts each one appeared in
- What were Pearl Jam's most frequently performed songs in 2024? Flag any covers and who originally wrote them.
- I'm going to see Coldplay soon — what songs have they been playing most on their latest tour?
- Check setlist.fm for Bruce Springsteen's song play counts for 2023 and tell me how often each track showed up across the concerts
See more
All setlist.fm methodsGet one artist's concert details and songs from setlist.fm by date or city. With only a city, returns the most recent matching concert there. Start times are local clock times because the pages do not supply a timezone.
setlist.fm/get_concert_setlistGets 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_datesLooks up a Last.fm artist by name and returns listening statistics, profile, top tracks and albums, similar artists, and upcoming events.
last.fm/get_artistReturns an artist's Billboard Hot 100 song history or Billboard 200 album history: chart totals (entries, No. 1 hits, top 10 hits) and each title's debut, peak and weeks on chart, most recent debut first.
billboard.com/get_artist_chart_historyLists 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_songsFinds a Spotify song by title (optionally narrowed by artist), track link, URI or track ID and returns its public play count and details. Without an artist, the most-played exact title match wins. Previews and ISRC may be unavailable for some tracks.
open.spotify.com/get_songReturns the PGA Tour season schedule for a year, with dates, venue, purse, status, winners and defending champions.
pgatour.com/get_scheduleFinds upcoming Ticketmaster-listed concerts, sports, theater and other events by keyword, optionally by city, country, category and date range, with dates, venues, prices when shown and links. Partner-only listings without a Ticketmaster link are excluded; very large searches cover only the first 800 listings.
ticketmaster.com/search_events