HYROX Race Results Scraper avatar

HYROX Race Results Scraper

Pricing

$0.90 / 1,000 race entries

Go to Apify Store
HYROX Race Results Scraper

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é

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

2

Monthly active users

9.4 hours

Issues response

8 hours ago

Last modified

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.

🧾 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.

  1. Open the Actor input.
  2. Enter exact source-season numbers, events, and race formats from the official timing portal. Add gender, day, age group, or standings choices when needed.
  3. Choose Summary or Detailed splits, then choose whether to include non-finishers.
  4. Run the Actor and open the results link 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

FieldTypeWhat it does
seasonsarray of stringsRequired 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.
eventsarray of stringsRequired exact event names in the selected seasons. The UI prefills 2025 Valencia. The same name can exist in more than one season.
raceFormatsarray of stringsRequired 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.
gendersarray of stringsOptional Men, Women, or Mixed choices. Omit or leave empty for every available gender.
raceDaysarray of stringsOptional 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.
ageGroupsarray of stringsOptional exact Youngstars age labels, such as 8-9 YRS. Omit or leave empty for all available Youngstars age groups. Applies only to Youngstars.
standingsarray of stringsOptional 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.
detailLevelstringRequired summary for core fields or detailed for published station and running-leg splits. The UI prefills summary; there is no schema default.
includeNonFinishersbooleanAdds published disqualified entrants and entrants with no recorded result alongside ranked finishers. Omission means false.
maxItemsintegerLeave 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

FieldTypeWhat it does
resultslinkOpens 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.

FieldTypeWhat it does
seasonstringShows the official label for the selected source season, such as 24/25, 25/26, or 26/27. It is not a calendar year.
eventNamestringShows the HYROX event name.
raceDatedate stringShows the published race date when available.
divisionstringShows the division label exactly as the portal publishes it, often with the race day.
raceCodestringShows the portal's own code for the one race this result belongs to. See Identifiers.
genderstringShows Men, Women, or Mixed when the portal publishes it.
ageGroupstringShows the published age-group category when available.
entryNamestringShows the published participant or team name.
nationalitystringShows the published nationality or country value.
bibstringShows the published bib number or label.
resultIdstringShows the portal's own code for this participant or team result. See Identifiers.
resultStatusstringShows the published status: finished, didNotFinish, disqualified, or noResult.
disqualificationReasonstringShows the published disqualification reason when available.
overallRankintegerShows the published overall rank when available.
ageGroupRankintegerShows the published age-group rank when available.
finishTimestringShows the published finish time in the source time format when available.
runningTotalTimestringShows the published running-total time when available.
transitionTimestringShows published Roxzone Time when available. It is not the sum of station times.
penaltiesstringShows published penalty labels and values for stations or running legs when available.
bonusesstringShows published bonus labels and values for stations or running legs when available.
sourceResultUrlURL stringLinks 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.

FieldTypeWhat it does
seasonstringShows the official label for the selected source season, such as 24/25, 25/26, or 26/27. It is not a calendar year.
eventNamestringShows the HYROX event name.
raceDatedate stringShows the published race date when available.
divisionstringShows the division label exactly as the portal publishes it, often with the race day.
raceCodestringShows the portal's own code for the one race this result belongs to. See Identifiers.
genderstringShows Men, Women, or Mixed when the portal publishes it.
ageGroupstringShows the published age-group category when available.
entryNamestringShows the published participant or team name.
nationalitystringShows the published nationality or country value.
bibstringShows the published bib number or label.
resultIdstringShows the portal's own code for this participant or team result. See Identifiers.
resultStatusstringShows the published status: finished, didNotFinish, disqualified, or noResult.
disqualificationReasonstringShows the published disqualification reason when available.
overallRankintegerShows the published overall rank when available.
ageGroupRankintegerShows the published age-group rank when available.
finishTimestringShows the published finish time in the source time format when available.
runningTotalTimestringShows the published running-total time when available.
transitionTimestringShows published Roxzone Time when available. It is not the sum of station times.
penaltiesstringShows published penalty labels and values for stations or running legs when available.
bonusesstringShows published bonus labels and values for stations or running legs when available.
stationSplitsarray of objectsLists published station splits in race order.
stationSplits[].stationNumberintegerShows the station's position in the race.
stationSplits[].stationNamestringShows the published station name.
stationSplits[].splitTimestringShows the station split time.
runningLegSplitsarray of objectsLists published running-leg splits in race order.
runningLegSplits[].legNumberintegerShows the running leg's position in the race.
runningLegSplits[].splitTimestringShows the running-leg split time.
sourceResultUrlURL stringLinks 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

  • division is the label exactly as the portal publishes it. Newer seasons often add the race day, such as HYROX - Sunday, HYROX PRO DOUBLES - Wednesday, or HYROX - Sat, 23 May. Older seasons have no day, such as HYROX, HYROX PRO, or HYROX DOUBLES. Overall lists read like HYROX - Overall. Youngstars labels carry an age range, such as HYROX YOUNGSTARS 8-9 YRS. The label is not the same as the text you enter, and it is never changed.
  • gender is Men, Women, or Mixed. The portal publishes gender only through its Men, Women, and Mixed list filters. The Actor fills gender only when exactly one filter lists the entry. Mixed appears for mixed doubles and for relay teams listed under Mixed. Some relay teams are listed under Men or Women.
  • gender is 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 leave genders empty.
  • raceDate is filled only when the division label carries a date, such as HYROX - 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.

  • raceCode is the portal's code for one race: one division on one race day. H_LR3MS4JI123A is HYROX - Sunday and HDP_LR3MS4JI1236 is HYROX PRO DOUBLES - Wednesday. The portal's Overall list is its own race with its own code, such as H_AMS26_OVERALL. Code shapes change by season.
  • resultId is 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 _AMS in LR3MS4JI456204_AMS. The suffix depends on the event and standings. The same person in a single-day race has the plain LR3MS4JI456204.
  • 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. Use eventName to group by event.
  • To match the same result across runs, even with different or overlapping inputs, use season, raceCode, and resultId together. 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)

  • seasons now takes exact HYROX season numbers, such as 7 for 24/25, 8 for 25/26, and 9 for 26/27. Calendar-year aliases such as 2025 are no longer accepted because one year can span two seasons. Update saved inputs to use the season number for the races you want.
  • The divisions input is removed. Use raceFormats for exact format names, with separate genders, raceDays, ageGroups, and standings choices when needed. Update saved inputs to keep each choice separate so a missing day or format cannot select a different race.
  • events now 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 season output now shows the HYROX season label, such as 24/25, instead of the submitted year. Update consumers that expect a calendar year or use season to match rows across runs.
  • nationality, bib, and stationSplits[].stationName are 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, and resultId are 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 maxItems to limit how many result rows a run saves. Use 0 or leave it blank to collect all available rows.
  • Penalty and bonus text now uses the top-level penalties and bonuses fields. The fields stationSplits[].penaltyTime and stationSplits[].bonusTime are 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[].runningTotalTime and runningLegSplits[].runningTotalTime are removed. They were calculated from the run splits and have no per-split replacement. The row-level runningTotalTime still 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 maxItems use 128 MB by default. Detailed or unlimited runs use 256 MB by default.
  • Reliability improvements.

v0.1 (20-10-2026)

  • Added raceCode and resultId to each result, so you can match results across runs.
  • Documented the valid values for gender and division, 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 🫡

Made with ❤️ by Maxime Dupré