Athletic APIathletic.net ↗
Access athletic.net data via API: athlete profiles, meet results, team rosters, XC/TF rankings, and state coverage across the US.
What is the Athletic API?
The Athletic.net API exposes 7 endpoints covering cross country and track & field data from athletic.net, including athlete profiles, meet results, team rosters, and rankings. The get_meet_results endpoint returns individual placements, team scores, and division breakdowns for any indexed meet, while get_athlete_profile surfaces full race history with distances, times, and season IDs across multiple years.
curl -X GET 'https://api.parse.bot/scraper/4645a8ef-1028-446c-9864-2a1c305b5cf8/search?query=Nike+Cross+Nationals' \ -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 athletic-net-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.
"""Walkthrough: Athletic.net SDK — search meets, fetch results, explore athletes."""
from parse_apis.athletic_net_api import AthleticNet, Sport, Gender, ResourceNotFound
client = AthleticNet()
# Search for a well-known cross country meet
for result in client.searchresults.search(query="Nike Cross Nationals", limit=3):
print(result.textsuggest, result.type, result.score)
# Construct a meet by ID and list its divisions
meet = client.meet(id=248003)
for div in meet.divisions.list(limit=5):
print(div.div_name, div.gender, div.meters)
# Get race results for a specific division within that meet
top_result = meet.results(div_id="984426", sport=Sport.XC, limit=1).first()
if top_result:
print(top_result.first_name, top_result.last_name, top_result.result, top_result.place)
# Look up the top finisher's full profile
try:
athlete = client.athletes.get(athlete_id=str(top_result.athlete_id), sport=Sport.XC)
print(athlete.first_name, athlete.last_name, athlete.gender, athlete.age)
except ResourceNotFound as exc:
print(f"Athlete not found: {exc}")
# View top rankings for a division by gender
for ranked in client.rankedathletes.top(div_id="74938", gender=Gender.MALE, limit=3):
print(ranked.rank, ranked.athlete_name, ranked.team_name, ranked.state)
# Get a team roster
team = client.team(id=7721)
for entry in team.roster(year="2024", limit=3):
print(entry.name, entry.gender)
print("exercised: searchresults.search / meet.divisions.list / meet.results / athletes.get / rankedathletes.top / team.roster")Full-text search across athletes, teams, and meets by keyword. Returns matching results with type classification (Team, XCMeet, TFMeet, Athlete) and relevance scores. Results are ordered by score descending. No pagination — returns up to ~10 best matches.
| Param | Type | Description |
|---|---|---|
| queryrequired | string | Search keyword, supports single and multi-word queries. |
{
"type": "object",
"fields": {
"results": "array of search result objects with id_db, type, textsuggest, subtext, score",
"num_found": "integer total number of matches"
},
"sample": {
"data": {
"results": [
{
"type": "Team",
"id_db": "67595",
"score": 8350.503,
"subtext": "Portland, Oregon",
"textsuggest": "NXN Nike Cross Nationals"
}
],
"num_found": 142
},
"status": "success"
}
}About the Athletic API
What the API Covers
The API gives structured access to athletic.net's US high school and open cross country (XC) and track & field (TF) data. The search endpoint performs full-text lookup across athletes, teams, and meets, returning typed results (Team, XCMeet, TFMeet, Athlete) with relevance scores. The get_states endpoint returns the complete list of supported US states, Canadian provinces, and world countries — useful for building geographic filters.
Meet Data
Meet metadata is retrieved through get_meet_info, which accepts a meet_id and an optional sport parameter (xc or tf) and returns fields like Name, MeetDate, Location, HasResults, and SeasonID, plus an array of divisions (xcDivisions) each with a DivName, DistanceDisplay, Meters, and IDMeetDiv. That IDMeetDiv value feeds directly into get_meet_results, which returns per-athlete placements (Place, Result, SortValue, FirstName, LastName, Grade), participating team metadata, and team score standings with Points.
Athlete and Team Data
get_athlete_profile merges identity fields (IDAthlete, FirstName, LastName, Gender) with a full resultsXC array that includes IDResult, Result, SortValue, Place, MeetID, Distance, and SeasonID — covering multiple seasons in a single response. Team affiliations are returned in an allTeams object keyed by school ID. get_team_roster accepts a team_id and optional year and returns each athlete's ID, Name, Gender, and mugshot URL.
Rankings
The get_top_rankings endpoint retrieves ranked athletes for a given div_id and optional gender filter. Each entry in the rankings array includes rank, AthleteID, AthleteName, Result, TeamName, State, MeetName, and ResultDate. The distance object on the response identifies which event the rankings cover.
The Athletic API is a managed, monitored endpoint for athletic.net — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when athletic.net 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 athletic.net 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?+
- Track an individual athlete's XC race history and time progression across seasons using
resultsXCfields fromget_athlete_profile. - Build a meet recap tool by combining
get_meet_infodivision metadata withget_meet_resultsplacements and team scores. - Populate a state or regional leaderboard using
get_top_rankingsfiltered by division and gender. - Generate team rosters with athlete IDs for a given season year via
get_team_roster. - Power a search-as-you-type feature for finding athletes, teams, or meets using the
searchendpoint's relevance-scored results. - Cross-reference athletes across meets by matching
AthleteIDvalues fromget_meet_resultswith full profiles fromget_athlete_profile. - Build a geographic meet finder by combining
get_statescountry/state codes with meet location fields fromget_meet_info.
| 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 athletic.net have an official developer API?+
What does `get_meet_results` actually return, and how do I get the right `div_id`?+
resultsXC) with fields like Place, Result, FirstName, LastName, Grade, and SchoolName, plus a teamScores array with team placements and Points. The div_id comes from the IDMeetDiv field inside the xcDivisions (or tfDivisions) array returned by get_meet_info for that meet.Does `get_athlete_profile` include track & field results?+
resultsXC array covers cross country results with distances and times. The sport parameter accepts tf, but track & field result fields are not currently surfaced in the documented response shape. You can fork this API on Parse and revise it to add a resultsTF response mapping.Does the `search` endpoint support pagination?+
num_found indicates the total number of matches on the source, but the API does not expose a page or offset parameter. You can fork this API on Parse and revise it to add pagination support if your use case requires deeper result sets.Does the API cover college or international track & field competitions?+
get_states does include Canadian provinces and world country codes, and some open meets appear in the data, but dedicated college-level or international competition coverage is not currently part of the API. You can fork it on Parse and revise to add endpoints targeting those competition types if they appear in the underlying data.