MileSplit APImilesplit.com ↗
Retrieve top-20 high school boys outdoor track and field rankings by state, event, and year from MileSplit. Covers relay teams and individual athletes.
What is the MileSplit API?
The MileSplit API exposes one endpoint, get_rankings, that returns up to 20 ranked entries for high school boys outdoor track and field events filtered by US state, event name, and year. Each response includes rank, team, and meet data; individual events additionally return athlete name, wind reading, and grade level. Coverage spans relay events like the 4x400m and individual sprints and distance races across all 50 states.
curl -X GET 'https://api.parse.bot/scraper/56c1c198-91ee-47af-88fa-30620f68ee68/get_rankings?year=2024&event=100m&state=CA' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace milesplit-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""MileSplit Rankings: fetch high school track & field rankings by state, event, year."""
from parse_apis.milesplit_rankings_api import MileSplit, Event, StateNotFound
client = MileSplit()
# List top rankings for California 100m in 2024, capped at 5 items
for ranking in client.rankings.list(state="CA", event=Event.M_100, year="2024", limit=5):
print(ranking.rank, ranking.team, ranking.athlete, ranking.meet)
# Relay event — athletes are absent; grab first result
relay = client.rankings.list(state="OH", event=Event.R_4X400, year="2023", limit=1).first()
if relay:
print(relay.rank, relay.team, relay.meet)
# Distance event with typed error handling
try:
for r in client.rankings.list(state="ZZ", event=Event.M_1600, year="2024", limit=3):
print(r.rank, r.team, r.grade)
except StateNotFound as exc:
print(f"State not found: {exc.state}")
print("exercised: rankings.list (individual / relay / error)")
Get the top 20 rankings for a specific high school boys outdoor track and field event in a given state and year. For relay events (e.g. 4x400m), returns team-level rankings with rank, team, and meet. For individual events (e.g. 100m, 1600m), returns athlete-level rankings including team, wind, and graduation year where available. Paginates as a single page of up to 20 entries.
| Param | Type | Description |
|---|---|---|
| year | string | Year for rankings (e.g. 2022, 2023, 2024). |
| event | string | Event name as it appears in MileSplit URLs. |
| state | string | Two-letter US state code (e.g. OH, CA, TX). Used as the MileSplit state subdomain. |
{
"type": "object",
"fields": {
"rankings": "array of Ranking entries, each containing rank, team, meet, and optionally athlete, wind, and grade for individual events"
},
"sample": {
"data": {
"rankings": [
{
"meet": "CIF Southern Section Division 3 Prelims",
"rank": "1",
"team": "Notre Dame - Sherman Oaks (SS)",
"wind": "0.79",
"grade": "2025",
"athlete": "Dijon Stanley"
},
{
"meet": "CIF State Track And Field Championships",
"rank": "4",
"team": "Mt. Miguel (SD)",
"wind": "2.3",
"grade": "2026",
"athlete": "Jaylen Thompson"
},
{
"meet": "CIF State Track And Field Championships",
"rank": "5",
"team": "Bakersfield (CS)",
"wind": "3.2",
"grade": "2026",
"athlete": "Marcus Lee"
}
]
},
"status": "success"
}
}About the MileSplit API
What the API Returns
The get_rankings endpoint returns a ranked list of up to 20 entries for a specific high school boys outdoor track and field event. You specify three parameters: state (two-letter US state code, e.g. OH, CA, TX), event (the event name as it appears in MileSplit URLs, e.g. 100m, 1600m, 4x400m), and year (e.g. 2022, 2023, 2024). All three parameters are optional, allowing flexible queries.
Response Fields by Event Type
For relay events (e.g. 4x400m, 4x100m), each ranking entry contains rank, team, and meet. For individual events (sprints, mid-distance, and distance), entries also include athlete (the competitor's name), wind (wind reading in m/s where applicable), and grade (the athlete's school grade). This distinction means your parsing logic should branch on whether athlete is present in the response.
Coverage and Scope
State coverage uses MileSplit's state subdomain structure, so any two-letter state code that MileSplit tracks is supported. Rankings reflect the top performances recorded for a given event, state, and season year — not real-time meet results. The data is scoped to boys outdoor track and field only; girls events and indoor seasons are not part of the current endpoint.
The MileSplit API is a managed, monitored endpoint for milesplit.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when milesplit.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official milesplit.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a state-by-state comparison tool showing which states produce the fastest 100m or 1600m athletes in a given year.
- Track a specific high school team's relay ranking across multiple years using the
teamandmeetfields. - Populate a recruiting database with top athletes per event, grade, and state using the
athleteandgradefields. - Generate historical trend reports on state performance by querying the same event and state across multiple
yearvalues. - Display meet-level context for each ranked performance using the
meetfield alongside rank and time. - Identify which meets consistently produce top-ranked relay teams by aggregating the
meetfield across states.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does MileSplit offer an official developer API?+
What does `get_rankings` return differently for relay events versus individual events?+
rank, team, and meet. For individual events, those same fields are present and the entry also includes athlete (the competitor's name), wind (wind reading in m/s), and grade (school grade). The presence of athlete in a response object is the reliable signal that an entry is individual rather than team-based.Does the API cover girls track and field events or indoor seasons?+
get_rankings endpoint scoped to that division. You can fork this API on Parse and revise it to add endpoints covering girls outdoor events or boys/girls indoor seasons.Is pagination supported — can I retrieve more than the top 20 results?+
get_rankings endpoint returns up to 20 entries per query. Deeper pagination beyond rank 20 is not supported in the current implementation. You can fork this API on Parse and revise it to add offset or page parameters if you need a larger result set.