# parkrun API

> parkrun returns event results and finisher data, available as a workflow and API.

parkrun returns finishers in position order for an event. Get event results needs an event name and returns the latest result or a result for a specified date, with a maximum number of runners.

- Page: https://fous.com/tools/parkrun
- Handle: `@parkrun`
- Category: [Sports](https://fous.com/tools/category/sports)
- Source website: https://parkrun.com
- Last verified: Sep 29, 2026

## Methods

### Get event results

Operation `get_event_results`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get the latest or a dated public parkrun event result, including finishers in position order. If a name matches several events, the closest directory name match is used.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `date` | string | no | `"2026-09-26"` | Run date in YYYY-MM-DD format, for example 2026-09-19. Defaults to the latest run. |
| `event` | string | yes | `"Albert Melbourne"` | Name of the parkrun, for example Bushy or Albert Park. |
| `max_results` | integer | no | `3` | Maximum number of finishing runners to return, for example 100. Defaults to 500. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "event"
  ],
  "properties": {
    "date": {
      "type": "string",
      "format": "date",
      "description": "Run date in YYYY-MM-DD format, for example 2026-09-19. Defaults to the latest run.",
      "examples": [
        "2026-09-26",
        "2026-09-19"
      ]
    },
    "event": {
      "type": "string",
      "description": "Name of the parkrun, for example Bushy or Albert Park.",
      "examples": [
        "Albert Melbourne",
        "Bushy"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 500,
      "maximum": 2000,
      "minimum": 1,
      "description": "Maximum number of finishing runners to return, for example 100. Defaults to 500.",
      "x-fous-developer": true,
      "examples": [
        3,
        5,
        2
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "date": "2026-09-26",
      "event": "Albert Melbourne",
      "max_results": 3
    },
    {
      "date": "2026-09-19",
      "event": "Bushy",
      "max_results": 5
    },
    {
      "event": "Bushy",
      "max_results": 2
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `date` | string | `"2026-09-26"` |  |
| `runners` | array |  |  |
| `runners[].club` | string or null | `"Hercules Wimbledon AC"` |  |
| `runners[].note` | string or null | `"First Timer!"` |  |
| `runners[].time` | string or null | `"16:20"` |  |
| `runners[].gender` | string or null | `"Male"` |  |
| `runners[].position` | integer | `1` |  |
| `runners[].runner_name` | string | `"Jonny EARL"` |  |
| `runners[].age_category` | string or null | `"VM40-44"` |  |
| `runners[].time_seconds` | integer or null | `980` |  |
| `runners[].runner_page_link` | string or null | `"https://www.parkrun.com.au/albertmelbourne/parkrunner/216955"` |  |
| `runners[].age_grade_percent` | number or null | `84.8` |  |
| `runners[].parkrunner_number` | integer or null | `216955` |  |
| `event_name` | string | `"Albert parkrun, Melbourne"` |  |
| `run_number` | integer | `708` |  |
| `results_page_link` | string | `"https://www.parkrun.com.au/albertmelbourne/results/2026-09-26/"` |  |
| `number_of_finishers` | integer | `577` |  |

**Example input**

```json
{
  "date": "2026-09-26",
  "event": "Albert Melbourne",
  "max_results": 3
}
```

**Example output**

```json
{
  "date": "2026-09-26",
  "runners": [
    {
      "club": "Hercules Wimbledon AC",
      "note": null,
      "time": "16:20",
      "gender": "Male",
      "position": 1,
      "runner_name": "Jonny EARL",
      "age_category": "VM40-44",
      "time_seconds": 980,
      "runner_page_link": "https://www.parkrun.com.au/albertmelbourne/parkrunner/216955",
      "age_grade_percent": 84.8,
      "parkrunner_number": 216955
    },
    {
      "club": null,
      "note": null,
      "time": null,
      "gender": null,
      "position": 2,
      "runner_name": "Unknown",
      "age_category": null,
      "time_seconds": null,
      "runner_page_link": "https://www.parkrun.com.au/albertmelbourne/parkrunner/2214",
      "age_grade_percent": null,
      "parkrunner_number": 2214
    },
    {
      "club": "Melbourne University AC",
      "note": null,
      "time": "16:45",
      "gender": "Male",
      "position": 3,
      "runner_name": "Josh DOHERTY",
      "age_category": "SM25-29",
      "time_seconds": 1005,
      "runner_page_link": "https://www.parkrun.com.au/albertmelbourne/parkrunner/5084692",
      "age_grade_percent": 77.01,
      "parkrunner_number": 5084692
    }
  ],
  "event_name": "Albert parkrun, Melbourne",
  "run_number": 708,
  "results_page_link": "https://www.parkrun.com.au/albertmelbourne/results/2026-09-26/",
  "number_of_finishers": 577
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@parkrun",
  "visibility": "public",
  "operation": "get_event_results",
  "version": 1,
  "input": {
    "date": "2026-09-26",
    "event": "Albert Melbourne",
    "max_results": 3
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@parkrun\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_event_results\",\n  \"version\": 1,\n  \"input\": {\n    \"date\": \"2026-09-26\",\n    \"event\": \"Albert Melbourne\",\n    \"max_results\": 3\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@parkrun",
  "visibility": "public",
  "operation": "get_event_results",
  "version": 1,
  "input": {
    "date": "2026-09-26",
    "event": "Albert Melbourne",
    "max_results": 3
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/parkrun`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `get_event_results`: Get event results. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-parkrun https://api.fous.com/mcp/tools/parkrun --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Compare finish times across event dates
- Review runner positions and age grades
- Track the number of finishers at an event
- Find runner clubs and age categories

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this parkrun tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a parkrun account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from parkrun.com when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 29, 2026.

### What were the latest results at an event?

Use Get event results with the event name; it defaults to the latest run.

### How can I get results for a specific date?

Use Get event results with the event name and a date in YYYY-MM-DD format.

### Can I limit how many finishers are returned?

Yes. Get event results accepts a maximum number of finishing runners and defaults to 500.

## Related

- [Formula 1 API](https://fous.com/tools/formula-1.md): Formula 1 provides official calendars with session times and venues, completed race results defaulting to the latest current-season race, and driver and team standings through the last completed race.
- [UFC API](https://fous.com/tools/ufc.md): UFC provides events, fight cards, locations, start times, completed bout results, and fighter profiles with records, rankings, and statistics; upcoming events are soonest first and past events newest first.
- [Premier League API](https://fous.com/tools/premier-league.md): Premier League provides current/chosen-season tables and recent form, date-range fixtures/results (up to 380), player profiles and stats, and seasonal leaders; older-season stats may be limited.
- [ATP Tour API](https://fous.com/tools/atp-tour.md): ATP Tour provides official men's tennis rankings as of their latest publication and tournament results, including champions, for a specified year or most recent listed edition.
- [PGA Tour API](https://fous.com/tools/pga-tour.md): PGA Tour provides official schedules and scores, defaulting to the latest available stroke-play event; unannounced purses and unavailable defending champions may be missing.
- [ElectionGuide API](https://fous.com/tools/electionguide.md): ElectionGuide provides worldwide election dates and information, including upcoming elections and referendums within six months and the latest held national election or referendum in a specified year, with results when published.
- [Meetup API](https://fous.com/tools/meetup.md): Find local groups and public events.
- [Google Search API](https://fous.com/tools/google-search.md): Google Search returns public web, image, job, event, related-question, and autocomplete results in Google’s order, with answers and details when available; results may be fewer, omit information, or be empty.
- [All Sports tools](https://fous.com/tools/category/sports)
