parkrun.com API: Get parkrun event results
Gets the latest or a dated public parkrun event result, with finishers in position order. If a name matches several events, the closest directory name match is used.
Unofficial. Not affiliated with or endorsed by parkrun.com.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Date optional
date Run date in YYYY-MM-DD format, for example 2026-09-19. Defaults to the latest run.
2026-09-19
- Event, required
event Name of the parkrun, for example Bushy or Albert Park.
Bushy
- Max Results optional
max_results Maximum number of finishing runners to return, for example 100. Defaults to 500.
2000
Whole number from 1 to 2000. Default
500.
Input as JSON
{ "date": "2026-09-19", "event": "Bushy", "max_results": 2000}Output
{ "date": "2026-09-19", "runners": [ { "club": null, "note": null, "time": "15:29", "gender": "Male", "position": 1, "runner_name": "Dylan EVANS", "age_category": "SM30-34", "time_seconds": 929, "runner_page_link": "https://www.parkrun.org.uk/bushy/parkrunner/2748711" , "age_grade_percent": 84.28, "parkrunner_number": 2748711 }, { "club": "Stadium Runners", "note": "First Timer!", "time": "15:52", "gender": "Male", "position": 2, "runner_name": "Luc BURNIP", "age_category": "SM25-29", "time_seconds": 952, "runner_page_link": "https://www.parkrun.org.uk/bushy/parkrunner/901692" , "age_grade_percent": 81.3, "parkrunner_number": 901692 }, { "club": null, "note": null, "time": "16:02", "gender": "Male", "position": 3, "runner_name": "Tom LOVEGROVE", "age_category": "VM35-39", "time_seconds": 962, "runner_page_link": "https://www.parkrun.org.uk/bushy/parkrunner/76094" , "age_grade_percent": 83.26, "parkrunner_number": 76094 } ], "event_name": "Bushy parkrun", "run_number": 1108, "results_page_link": "https://www.parkrun.org.uk/bushy/results/2026-09-19/" , "number_of_finishers": 1591}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"parkrun.com/get_event_results","input":{"date":"2026-09-19","event":"Bushy","max_results":2000}}' # 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": "parkrun.com/get_event_results" , "input": { "date": "2026-09-19", "event": "Bushy", "max_results": 2000 }})# 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": "parkrun.com/get_event_results" , "input": { "date": "2026-09-19", "event": "Bushy", "max_results": 2000 } }), 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 parkrun.com/get_event_results# with {"date":"2026-09-19","event":"Bushy","max_results":2000}"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": [ "event" ], "properties": { "date": { "type": "string", "description": "Run date in YYYY-MM-DD format, for example 2026-09-19. Defaults to the latest run." }, "event": { "type": "string", "description": "Name of the parkrun, for example Bushy or Albert Park." }, "max_results": { "type": "integer", "default": 500, "maximum": 2000, "minimum": 1, "description": "Maximum number of finishing runners to return, for example 100. Defaults to 500." } }}Output schema
{ "type": "object", "required": [ "event_name", "date", "run_number", "number_of_finishers", "results_page_link", "runners" ], "properties": { "date": { "type": "string", "format": "date" }, "runners": { "type": "array", "items": { "type": "object", "required": [ "position", "runner_name", "time", "age_category", "age_grade_percent", "gender", "club", "note", "runner_page_link", "time_seconds", "parkrunner_number" ], "properties": { "club": { "type": [ "string", "null" ] }, "note": { "type": [ "string", "null" ] }, "time": { "type": [ "string", "null" ] }, "gender": { "type": [ "string", "null" ] }, "position": { "type": "integer" }, "runner_name": { "type": "string" }, "age_category": { "type": [ "string", "null" ] }, "time_seconds": { "type": [ "integer", "null" ], "x-fous-developer": true }, "runner_page_link": { "type": [ "string", "null" ] }, "age_grade_percent": { "type": [ "number", "null" ] }, "parkrunner_number": { "type": [ "integer", "null" ], "x-fous-developer": true } }, "additionalProperties": false } }, "event_name": { "type": "string" }, "run_number": { "type": "integer" }, "results_page_link": { "type": "string" }, "number_of_finishers": { "type": "integer" } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
parkrun.com/get_event_results- Returns
- event name, date, run number, finisher count, results page link, runners (position, name, time, age category, age grade, gender, club, note, profile 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 parkrun.com/get_event_results with the inputs above.
Ask your agent
- Who finished first at Bushy parkrun this past Saturday, and what was their time?
- Pull the full results for Albert Park parkrun on 2025-03-15 — I need every finisher with age grade and club.
- Show me the top 50 finishers from the latest Hackney Marshes run on parkrun.com.
- I ran Newy parkrun on 2024-11-02; can you get the results list so I can find my position and age category?
- Fetch the most recent parkrun.com results for Cannon Hill, limited to the first 100 runners, including run number and total finisher count.
See more
Lists upcoming or past UFC events with fight cards, venue, start time and completed bout results, or returns one event by name. Upcoming events come soonest first and past events newest first.
ufc.com/list_eventsGets Premier League fixtures and results in a date range, with kickoff times in your chosen time zone. Returns up to 380 matches.
premierleague.com/get_fixtures_and_resultsLists featured launches in Product Hunt's daily leaderboard order for a given US Pacific day, with each product's website when its public page shows one.
producthunt.com/list_launchesFinds upcoming public Meetup events by topic and city, sorted by start time. Only events that mention the topic are included; external costs and undisclosed venues may not be shown.
meetup.com/search_eventsReturns the main-race finishing order and fastest lap for a Formula 1 Grand Prix. Defaults to the most recent completed race in the current season.
formula1.com/get_race_resultsList EONET natural events with latest observations in the past number of days, most recent first. A country or region filter matches reported event locations against mapped boundaries; locations and ongoing status are approximate, and not all events have a reported size or strength.
nasa.gov/list_natural_eventsFinds public Eventbrite events in a city or online, with optional keywords, date range, category and free-only filtering, ordered by start time.
eventbrite.com/search_eventsFinds upcoming concerts in a city between two dates on Songkick. Each concert includes its artists, venue, festival name and ticket link.
songkick.com/search_concerts