Curated
Back S @stemma 2 min read
sports

IronStats: Inside the Triathlon Data Platform

Bruno Kuntz shares how a lack of stats tools and scouting rivals inspired the project.

Passionate about spreadsheets and analytics, Bruno Kuntz turned rival scouting into a global triathlon database. On Café com Tri, he details the creation and mechanics behind IronStats.

Checking the start list to research age group competitors is a common habit among amateur and professional triathletes alike. For Bruno Kuntz, however, this curiosity turned into a dedicated system. A self-described numbers and spreadsheet enthusiast, he has always analyzed every detail of his races: whether his T1 transition was slower than average, how his swim split compared to previous years, and what his realistic chances were for a podium finish or a World Championship slot in his age group.

PUBLICIDADE (GAM) — 1250x250

The void left by Endurance Data

The turning point to build IronStats came when one of triathlon's leading references for consolidated race results, Endurance Data, stopped updating its database in 2023. A frequent user of the tool since his first Ironman 70.3 races in 2022, Bruno realized the global community would be left without a structured archive to compare splits and age-group performances.

IronStats: Inside the Triathlon Data Platform

Automation and global data scraping

Without access to private APIs from the Ironman organization, the solution was to develop custom scripts to process public results published on the official race website. During the initial setup phase, it took three to four days of continuous scraping to compile data from global circuit events dating back to 2017.

With the historical archive consolidated, ongoing maintenance became streamlined. After each race weekend, the scripts automatically parse and update athlete profiles and finish times. From this central dataset, IronStats generates comparative metrics, weather forecasts, and start list analytics for triathletes across all categories.

PUBLICIDADE (GAM) — 1250x250