HYROX Race Results Scraper
Pricing
$0.90 / 1,000 race entries
HYROX Race Results Scraper
Collect published HYROX race results from the official timing portal. Choose seasons, events, divisions, and summary or detailed splits. Get rankings, times, participant details, result status, and official result links when available in a dataset.
Pricing
$0.90 / 1,000 race entries
Rating
0.0
(0)
Developer
Maxime Dupré
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
2
Monthly active users
9.4 hours
Issues response
8 hours ago
Last modified
Categories
Share
🏁 HYROX race results for focused analysis
Coaches, athletes, sports analysts, and developers can collect the complete published HYROX race results for selected seasons, events, and divisions. Each row keeps participant or team context, ranks, times, result status, and official source links when available, with detailed station and running-leg splits when the source publishes them. Use the rows for performance analysis, ranking tools, and downstream data workflows.
- Review published ranks and times with HYROX results.
- Collect 2026 race data with HYROX results 2026.
- Collect Phoenix race data with HYROX Phoenix results.
- Compare team standings with HYROX doubles results.
- Look at the PRO format with HYROX PRO results.
- Study station and running-leg times with HYROX split times.
- Check team relay entries with HYROX relay results.
- Include published non-finishers with HYROX results with non-finishers.
🧾 Published HYROX result rows
Each row represents one published participant or team result from the public HYROX timing portal. It can include the event, division, race date, gender, age group, nationality, bib, rank, time, result status, and official result link when available. Detailed runs can also include station and running-leg split arrays. Penalty and bonus labels and values stay on the result row when HYROX publishes them.
▶️ Choose the race scope and detail level
Run one shared scope at a time. Pick exact source-season numbers and event names from the official timing portal. Select format, gender, and race day in separate fields. Supported formats include Standard, PRO, Doubles, PRO Doubles, Team Relay, Adaptive, and Youngstars. Choose summary for core fields or detailed for station and running-leg splits when the source publishes them. Turn on non-finishers to include published disqualified entrants and entrants with no recorded result.
- Open the Actor input.
- Enter exact source-season numbers, events, and race formats from the official timing portal. Add gender, day, age group, or standings choices when needed.
- Choose
SummaryorDetailed splits, then choose whether to include non-finishers. - Run the Actor and open the
resultslink in the Output tab.
⚙️ Input
Each run checks the selected events in each selected source season. Event names and race choices must match the portal exactly, including spelling, case, and spaces. Invalid choices are reported in the run log and produce no rows for that choice. Independent valid choices can still return rows. Access failures and valid choices with no eligible results have separate messages.
Choose summary results or detailed results with station and running-leg splits when the official source publishes them. Turn on includeNonFinishers to add published disqualified entrants and entrants with no recorded result.
Input fields
| Field | Type | What it does |
|---|---|---|
seasons | array of strings | Required source-season numbers, such as 7 for 24/25, 8 for 25/26, or 9 for 26/27. Calendar-year aliases such as 2025 are invalid. The UI prefills 7; there is no schema default. |
events | array of strings | Required exact event names in the selected seasons. The UI prefills 2025 Valencia. The same name can exist in more than one season. |
raceFormats | array of strings | Required exact format names without gender or day, such as HYROX, HYROX PRO, HYROX DOUBLES, or HYROX PRO DOUBLES. Other exact published format names are accepted. The UI prefills HYROX PRO DOUBLES. |
genders | array of strings | Optional Men, Women, or Mixed choices. Omit or leave empty for every available gender. |
raceDays | array of strings | Optional exact day labels, such as Saturday. Include the full day and date if the portal shows both. Omit or leave empty for all available race days. The UI prefills Saturday. Unavailable days are reported, not replaced. |
ageGroups | array of strings | Optional exact Youngstars age labels, such as 8-9 YRS. Omit or leave empty for all available Youngstars age groups. Applies only to Youngstars. |
standings | array of strings | Optional Overall or Week standings. Omit or leave empty for race-day results. With standings but no race days selected, collect the chosen standings only. Add race days to collect those days as well. Availability depends on the event and format. |
detailLevel | string | Required summary for core fields or detailed for published station and running-leg splits. The UI prefills summary; there is no schema default. |
includeNonFinishers | boolean | Adds published disqualified entrants and entrants with no recorded result alongside ranked finishers. Omission means false. |
maxItems | integer | Leave this empty or enter 0 to collect all result rows until HYROX has no more. A positive number stops at that many rows or earlier if HYROX has no more results. The prefilled 20 is only a starter. If you omit this field, the run has no row limit. One limit covers all selected seasons, events, formats, genders, days, age groups, and standings. |
Example input
This input matches a successful current-beta run.
{"seasons": ["7"],"events": ["2025 Valencia"],"raceFormats": ["HYROX PRO DOUBLES"],"raceDays": ["Saturday"],"detailLevel": "summary","maxItems": 20}
🧾 Output
Open the results output link to read the default dataset. Rows use the HYROX result schema. Detailed rows can also include station and running-leg split arrays. Split values, penalties, and bonuses appear only when HYROX publishes them.
Output link
| Field | Type | What it does |
|---|---|---|
results | link | Opens the collected HYROX race results in the default dataset view. |
Summary result rows
Summary rows contain the core result fields below. A field is omitted when the official source does not publish it. Summary rows do not include stationSplits or runningLegSplits.
| Field | Type | What it does |
|---|---|---|
season | string | Shows the official label for the selected source season, such as 24/25, 25/26, or 26/27. It is not a calendar year. |
eventName | string | Shows the HYROX event name. |
raceDate | date string | Shows the published race date when available. |
division | string | Shows the division label exactly as the portal publishes it, often with the race day. |
raceCode | string | Shows the portal's own code for the one race this result belongs to. See Identifiers. |
gender | string | Shows Men, Women, or Mixed when the portal publishes it. |
ageGroup | string | Shows the published age-group category when available. |
entryName | string | Shows the published participant or team name. |
nationality | string | Shows the published nationality or country value. |
bib | string | Shows the published bib number or label. |
resultId | string | Shows the portal's own code for this participant or team result. See Identifiers. |
resultStatus | string | Shows the published status: finished, didNotFinish, disqualified, or noResult. |
disqualificationReason | string | Shows the published disqualification reason when available. |
overallRank | integer | Shows the published overall rank when available. |
ageGroupRank | integer | Shows the published age-group rank when available. |
finishTime | string | Shows the published finish time in the source time format when available. |
runningTotalTime | string | Shows the published running-total time when available. |
transitionTime | string | Shows published Roxzone Time when available. It is not the sum of station times. |
penalties | string | Shows published penalty labels and values for stations or running legs when available. |
bonuses | string | Shows published bonus labels and values for stations or running legs when available. |
sourceResultUrl | URL string | Links to the official source result page when available. |
This is a genuine summary row from a successful current-beta run.
{"season": "24/25","eventName": "2025 Valencia","division": "HYROX PRO DOUBLES - Saturday","entryName": "Moore, Daniel (GBR) / Moore, Daniel (GBR) / Clarke, Markel (GBR) / Clarke, Markel (GBR)","resultStatus": "finished","sourceResultUrl": "https://results.hyrox.com/season-7/?content=detail&fpid=search&pid=search&idp=LR3MS4JI2B1805&lang=EN_CAP&event=HDP_LR3MS4JIA01&pidp=ranking_nav&search%5Bsex%5D=M&search%5Bage_class%5D=%25&search%5Bnation%5D=%25&search%5Bname%5D=%25&search%5Bfirstname%5D=%25&search_event=HDP_LR3MS4JIA01&event_main_group=2025+Valencia","nationality": "GBR","bib": "190025","raceCode": "HDP_LR3MS4JIA01","resultId": "LR3MS4JI2B1805","ageGroup": "MU29","overallRank": 30,"ageGroupRank": 9,"finishTime": "01:26:59"}
Detailed result rows
Detailed rows use the complete field set below when the source publishes each value. Nested paths show the fields inside each split object.
| Field | Type | What it does |
|---|---|---|
season | string | Shows the official label for the selected source season, such as 24/25, 25/26, or 26/27. It is not a calendar year. |
eventName | string | Shows the HYROX event name. |
raceDate | date string | Shows the published race date when available. |
division | string | Shows the division label exactly as the portal publishes it, often with the race day. |
raceCode | string | Shows the portal's own code for the one race this result belongs to. See Identifiers. |
gender | string | Shows Men, Women, or Mixed when the portal publishes it. |
ageGroup | string | Shows the published age-group category when available. |
entryName | string | Shows the published participant or team name. |
nationality | string | Shows the published nationality or country value. |
bib | string | Shows the published bib number or label. |
resultId | string | Shows the portal's own code for this participant or team result. See Identifiers. |
resultStatus | string | Shows the published status: finished, didNotFinish, disqualified, or noResult. |
disqualificationReason | string | Shows the published disqualification reason when available. |
overallRank | integer | Shows the published overall rank when available. |
ageGroupRank | integer | Shows the published age-group rank when available. |
finishTime | string | Shows the published finish time in the source time format when available. |
runningTotalTime | string | Shows the published running-total time when available. |
transitionTime | string | Shows published Roxzone Time when available. It is not the sum of station times. |
penalties | string | Shows published penalty labels and values for stations or running legs when available. |
bonuses | string | Shows published bonus labels and values for stations or running legs when available. |
stationSplits | array of objects | Lists published station splits in race order. |
stationSplits[].stationNumber | integer | Shows the station's position in the race. |
stationSplits[].stationName | string | Shows the published station name. |
stationSplits[].splitTime | string | Shows the station split time. |
runningLegSplits | array of objects | Lists published running-leg splits in race order. |
runningLegSplits[].legNumber | integer | Shows the running leg's position in the race. |
runningLegSplits[].splitTime | string | Shows the running-leg split time. |
sourceResultUrl | URL string | Links to the official source result page when available. |
This is a genuine detailed row from a successful current-beta run.
{"season": "24/25","eventName": "2025 Valencia","division": "HYROX PRO - Saturday","entryName": "Arazola López, Daniel (ESP)","resultStatus": "finished","sourceResultUrl": "https://results.hyrox.com/season-7/?content=detail&fpid=search&pid=search&idp=LR3MS4JI2B1928&lang=EN_CAP&event=HPRO_LR3MS4JIA01&pidp=ranking_nav&search%5Bsex%5D=M&search%5Bage_class%5D=%25&search%5Bnation%5D=%25&search%5Bname%5D=%25&search%5Bfirstname%5D=%25&search_event=HPRO_LR3MS4JIA01&event_main_group=2025+Valencia","nationality": "ESP","bib": "191012","raceCode": "HPRO_LR3MS4JIA01","resultId": "LR3MS4JI2B1928","ageGroup": "45-49","overallRank": 46,"ageGroupRank": 3,"finishTime": "01:16:43","stationSplits": [{"stationNumber": 1,"stationName": "1000m SkiErg","splitTime": "00:04:10"},{"stationNumber": 2,"stationName": "50m Sled Push","splitTime": "00:04:40"},{"stationNumber": 3,"stationName": "50m Sled Pull","splitTime": "00:05:14"},{"stationNumber": 4,"stationName": "80m Burpee Broad Jump","splitTime": "00:03:42"},{"stationNumber": 5,"stationName": "1000m Row","splitTime": "00:04:27"},{"stationNumber": 6,"stationName": "200m Farmers Carry","splitTime": "00:01:58"},{"stationNumber": 7,"stationName": "100m Sandbag Lunges","splitTime": "00:06:04"},{"stationNumber": 8,"stationName": "Wall Balls","splitTime": "00:07:07"}],"runningLegSplits": [{"legNumber": 1,"splitTime": "00:04:07"},{"legNumber": 2,"splitTime": "00:04:06"},{"legNumber": 3,"splitTime": "00:04:11"},{"legNumber": 4,"splitTime": "00:04:17"},{"legNumber": 5,"splitTime": "00:04:21"},{"legNumber": 6,"splitTime": "00:04:17"},{"legNumber": 7,"splitTime": "00:04:19"},{"legNumber": 8,"splitTime": "00:04:43"}]}
Non-finisher rows use the same fields. Their resultStatus can be disqualified or noResult, and disqualificationReason, ranks, and times are present only when the source publishes them.
Exact race choices
Use raceFormats, genders, raceDays, ageGroups, and standings as separate choices. The old divisions input is replaced by these fields. Do not put a phrase such as PRO Women or HYROX PRO - Friday in raceFormats.
For example, source season 7 (24/25) and source season 8 (25/26) both have an event named 2025 Valencia. They contain different races. Choose the season first, then copy the exact event name and race choices for that season. A typo such as 2026 Valenciaa cannot select 2025 Valencia.
Formats and race days depend on the event and season. Open https://results.hyrox.com/season-8/?pid=start and change season-8 to the source season you want. Youngstars can have its own event name, such as 2026 Amsterdam - Youngstars. Add that exact name under events and use HYROX YOUNGSTARS under raceFormats. Youngstars has Men and Women but no Mixed.
What you get back
divisionis the label exactly as the portal publishes it. Newer seasons often add the race day, such asHYROX - Sunday,HYROX PRO DOUBLES - Wednesday, orHYROX - Sat, 23 May. Older seasons have no day, such asHYROX,HYROX PRO, orHYROX DOUBLES. Overall lists read likeHYROX - Overall. Youngstars labels carry an age range, such asHYROX YOUNGSTARS 8-9 YRS. The label is not the same as the text you enter, and it is never changed.genderisMen,Women, orMixed. The portal publishes gender only through its Men, Women, and Mixed list filters. The Actor fillsgenderonly when exactly one filter lists the entry.Mixedappears for mixed doubles and for relay teams listed under Mixed. Some relay teams are listed underMenorWomen.genderis left out when the portal does not publish it. Some events list every entry under every gender, such as the 2022 London team relay. A gender choice returns no entrants there, so leavegendersempty.raceDateis filled only when the division label carries a date, such asHYROX - Sat, 23 May.
Identifiers
Use these to match results across runs.
Each row carries the portal's own codes. They come straight from the result link and are never built by the Actor.
raceCodeis the portal's code for one race: one division on one race day.H_LR3MS4JI123AisHYROX - SundayandHDP_LR3MS4JI1236isHYROX PRO DOUBLES - Wednesday. The portal's Overall list is its own race with its own code, such asH_AMS26_OVERALL. Code shapes change by season.resultIdis the portal's code for one participant or team result. It is unique within one race, not across races or seasons. Combined standings can use a suffix, such as_AMSinLR3MS4JI456204_AMS. The suffix depends on the event and standings. The same person in a single-day race has the plainLR3MS4JI456204.- The portal has no code for a whole event. One event has many race codes, and parts shared by many events, like
LR3MS4JI, are not event codes. UseeventNameto group by event. - To match the same result across runs, even with different or overlapping inputs, use
season,raceCode, andresultIdtogether. Both codes are left out when the result link does not carry them.
💳 Pricing
Billable event
Each saved published participant or team entry is billed as one Race entry. The current price is shown in the Actor's pricing panel.
🔌 Integrations
After a run, open the results output link to read the default dataset. Use Apify's dataset API or export options to pass the published rows to analysis and other data workflows.
Video guide
❓ FAQ
Why can a detailed row have missing splits or totals?
HYROX can leave a split, running total, or Roxzone Time blank. Those values stay unavailable in both detail levels; the Actor does not calculate replacements. transitionTime is the published Roxzone Time.
Why can a doubles name repeat?
The Actor keeps the published member names, including repeats. It does not merge people by display name.
How do I get the latest HYROX race results for 2026?
Choose the source season that contains the event, then enter its exact event name and race format. A calendar year is not a source-season number: season 8 is 25/26, and season 9 is 26/27. Run with summary or detailed results, depending on the fields you need.
How do I collect results for one event and division?
Enter the exact source-season number, event name, and race format. Add a gender or exact race day in its own field when needed. The run checks each choice without replacing unavailable values.
What is the difference between summary and detailed results?
Summary rows provide the core participant, rank, and time fields. Detailed rows add station and running-leg split arrays when the official source publishes them.
Can I include disqualified entrants and entrants with no recorded result?
Yes. Turn on includeNonFinishers to include those published statuses alongside ranked finishers. The Actor does not infer why an entrant has no recorded result.
Which HYROX division formats are supported?
The input accepts exact format names such as HYROX, HYROX PRO, HYROX DOUBLES, HYROX PRO DOUBLES, HYROX TEAM RELAY, HYROX ADAPTIVE, and HYROX YOUNGSTARS when published. See Exact race choices for the separate gender, day, age group, and standings fields.
How do I match the same result across runs?
Use season, raceCode, and resultId together. The portal has no whole-event code, so the Actor does not invent one.
Does the Actor show live race tracking?
No. It collects published results from the public HYROX timing portal and does not provide live tracking, forecasts, or coaching recommendations.
Can an incomplete large collection resume?
Yes. The Actor can continue an incomplete collection from saved progress.
What happens when the source does not publish a field?
That field is omitted or left unavailable in the row. The Actor keeps source-published values and does not guess missing facts.
📝 Changelog
v2.0 (24-10-2026)
seasonsnow takes exact HYROX season numbers, such as7for24/25,8for25/26, and9for26/27. Calendar-year aliases such as2025are no longer accepted because one year can span two seasons. Update saved inputs to use the season number for the races you want.- The
divisionsinput is removed. UseraceFormatsfor exact format names, with separategenders,raceDays,ageGroups, andstandingschoices when needed. Update saved inputs to keep each choice separate so a missing day or format cannot select a different race. eventsnow requires an exact event name in each selected season. Invalid names and unavailable choices are reported without selecting another race. Other valid selections can still return results.- The
seasonoutput now shows the HYROX season label, such as24/25, instead of the submitted year. Update consumers that expect a calendar year or useseasonto match rows across runs. nationality,bib, andstationSplits[].stationNameare now left out when HYROX does not publish them. Allow these keys to be missing in saved rows. There is no replacement for a missing value.- Result links,
raceCode, andresultIdare checked against the selected season, event, and race day. Results from a different race are not returned as a match.
v1.0 (23-10-2026)
- Set
maxItemsto limit how many result rows a run saves. Use0or leave it blank to collect all available rows. - Penalty and bonus text now uses the top-level
penaltiesandbonusesfields. The fieldsstationSplits[].penaltyTimeandstationSplits[].bonusTimeare removed because HYROX reports these labels for the result, not one station. Update consumers to read the top-level fields. - The per-split fields
stationSplits[].runningTotalTimeandrunningLegSplits[].runningTotalTimeare removed. They were calculated from the run splits and have no per-split replacement. The row-levelrunningTotalTimestill shows the result's overall running time. Update consumers that used the removed fields. - Event warnings name a submitted event when it has no match, or the resolved event when the selected options return no results. Access failures keep a separate warning.
- Summary runs with a positive
maxItemsuse 128 MB by default. Detailed or unlimited runs use 256 MB by default. - Reliability improvements.
v0.1 (20-10-2026)
- Added
raceCodeandresultIdto each result, so you can match results across runs. - Documented the valid values for
genderanddivision, and how to find the right division for an event. - Faster result collection.
v0.0 (28-09-2026)
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Bassmaster Tournament Results & Standings Scraper for tournament standings, ranks, weights, payouts, and source links.
- Olympedia Olympic Results Scraper for Olympic event placements, medals, and round results.
- HYROX Race Results Scraper to compare published HYROX results and splits.
- Mikatiming Marathon Results Scraper for marathon finish times and course splits.
- MarathonGuide Road Race Results Scraper for road-race finish times and age-group ranks.
Made with ❤️ by Maxime Dupré