C3DB Building Note 01: a field guide to climbing federation databases
My rant about what on earth is going on with the databases (or the lack thereof) of the mountaineering federations of this planet.
C3DB stands for the Complete Comp Climbing Database. It's not complete by any means, but I've tried to gather as much data as I could.
I recently finished the IFSC media account application and was finally granted access to its "media database," which turned out to hold essentially… nothing more than public pages. It's all understandable. The sport is so new, the federation so short on funding, and engineers are kinda expensive. At the same time, though, I keep feeling that Sport Climbing is exactly the type of discipline that needs research on fairness, ideally backed by real data. I do plan to take on one of those projects once I have the free time (aka once I get laid off…). So I thought to myself: why not put my Claude subscription to better use and build a DB for my own use?
I did the data collection, i.e., the web scraping part, while watching the boulder and lead World Cups, and it turned into a pretty funny process. What follows is my scraping diary, or more honestly, my rant about what on earth is going on with the databases (or the lack thereof) of these mountaineering federations on the planet.
One disclaimer first. I'm reviewing data publishing engineering and nothing else. This says nothing about how well a federation runs its events or how strong its athletes are. The standards are pretty simple. Is there a real API, or does "HTML counts too" apply? Can you enumerate the events, or do you have to excavate them one at a time? How honest are the data structures? How deep does the history run? How many skills does my poor scraping agent need to have to not come back empty-handed?
Here's the pecking order, from most to least civilized.
1. JMSCA (Japan)
I didn't expect this, or, well, I had no idea what to expect, because Japanese IT can range from the coding miracles of Nintendo to building everything with spreadsheets. JMSCA has a pretty decent API post-2022. Every competition was logged, from Boulder and Lead Japan Cup to prefecture-level and university events. IT LABELS THE BOULDERING RULE SYSTEM CHANGES AND HAS A SOCKET.IO FOR REAL-TIME SCORES. (You will see very soon why I am describing this like it's a technical wonder.) You find bouldering v1 to v4. IFSC please learn this from the Japanese! Before 2022 though, it was basically the IT jokes that I heard about: mountains of HTML. The archive runs from 2000 to 2026 across 161 events, the second deepest history in the whole survey, beaten only by IFSC, but those events only have the final score recorded. I suspect there are PDF files of detailed results that I didn't find. The romaji hides in the URL, since athlete pages show only kanji, so you dig the transliteration out of the slug. Even older events? ONLY PDFs, many of them scans, currently sitting in the raw lake waiting for the VLM. Apparently, the funding post Tokyo Olympics was doing a bit of good!
(JPCA, Japan para climbing, was another story. This is a bit sad. Can they just be part of the JMSCA system? Every competition gets its own standalone Google Sites page, with filenames scrambled differently each year. The 2022 to 2024 pages are text-layer PDFs and still salvageable. But the 2025 series went straight to scanned image PDFs.)
2. CMA (China)
China's CMA takes the second spot, and I didn't see that coming. Outside the speed discipline, China does not have the strongest team. climbingchina.net quietly hosts an unauthenticated in-domain JSON API with a clean three-layer structure: getMatchInfo, then getMatchRecordList, then getMatchRecordInfo. The matchid space is small and dense, running from roughly 1 to 220, so a single sweep gets you the full set. Each athlete row carries a stable cmaid, a birth year, a provincial team, and round-by-round scores. (Birth year, by the way, is a thing the French and the British don't even acknowledge exists. I will talk about this later.) I have only minor criticism, especially when the job was done after I figured out some of the climbing powerhouses (eyeing FFME, France). Relay and team rows cram multiple cmaids into one comma-jammed cell, which we simply gave up parsing. Combined events hand over a total score with no per-discipline placement.
3. IFSC
IFSC, at ifsc.results.info, is quite the industry benchmark. This is not necessarily a compliment because the bar is quite low. It's a genuinely REST-ish JSON API, and it even supports ETag and 304. That's pretty nice. Vertical Life's work. They have a bunch of ghost events though. The Arco 2011 and Paris 2012 qualification groups were built as standalone events (676, 677, 739, 740), complete with phantom FINAL rankings. I failed to filter them the first time, and I handed out a few medals that never happened. The self-reported body stats were funny as hell. Heights mix millimeters and centimeters. You have a 1710cm giant and placeholder athletes with 1cm. When I tried to compute the ape index I saw a couple Guinness World Records. Boulders have two zones for the Paris combined format, so in later seasons a single zone gets mirrored into both a low_zone and a zone field, so z1 is identical to z2. The legacy data is a mess, but it's understandable. Anything before 2007 has no athlete_id, so the names run around naked. Still, I get ascent-level detail, Cup rankings going back to 1991, and venue country codes after 2021. Again, Olympics magic!
4. USAC (USA)
USAC, USA Climbing, made the biggest glow-up of anyone. In its past life, meaning 2024 and earlier on climb8a, it was a wall of HTML result pages. In its current life, 2025 onward on usac.results.info, it simply bought the same Vertical Life backend IFSC uses. Overnight it had ascent detail, real dates, birth dates, heights, and arm spans. Solving an engineering problem with money, respect, and good news for me. However, the data entries were kinda jokes. Typos everywhere.
5. FFME (France)
FFME, France, is the dinosaur-era web engineering exhibit. I think this is an attestation of the long history of the federation. The result pages are server-rendered HTML. The best part is that there's no enumerable directory of any kind. The result query frontend is written in NextApp Echo3, a late-2000s Java AJAX framework that was abandoned long ago. I thought I didn't recognize it because, as someone mostly only prototyping machine learning models, I am in no sense a good full-stack engineer, but when I brought the question to my younger colleagues, they didn't know about this shit either lol. It assembles pages live in the browser through its own protocol, so the scraper side sees a blank page. The result id space itself is something we pried out of that Echo3 frontend by force. Collection turned into counting from 6800 up to 13700, knocking on one id at a time, with everything below 7000 being empty templates. Then the 2024 MyCompet migration decoupled the calendar's NUMÉRO from the result page id. Now dates and venues can only be fuzzy matched, and precise hits land about a quarter of the time. 23 events still have no date, and a pile of {year}-01-01 placeholders fills the gaps. Birth information is nonexistent. Across 5,140 French athletes, birth_year coverage is precisely zero percent. The youth categories do run from U9 to U20, so at least you can guess the age. Falls are written as "Chute," decimals use commas, and qualification difficulty crams two routes into one cell as "8a / 25+." To its credit, France carries the largest volume of any national source, at 38,304 rows. Boulder tops, zones, and attempts are all there, along with lead difficulty and height and speed times. Wonderful content, buried in a miserable container.
6. BMC (Britain)
BMC, Britain, is Joomla plus PDFs. Results hang one PDF at a time under /{cat}/{edition}/{docid}-{slug}/file. The edition slug is spelled differently every year, so you BFS the whole site to find them. Then comes the layout lottery. Three disciplines, three different name formats. The PDFs sometimes have no gender marker at all. That's why 64 percent of British athletes sit in the database with unknown gender. Youth final filenames don't name the discipline. Anyway, it's good that we are living in the age of LLM. Otherwise, what in the NLP hell should I do with these?
7. KAF (Korea)
KAF, Korea, is meme-worthy. kaf.or.kr runs on GNUBOARD, an ancient Korean forum engine. A competition result is a post in board section game_31. The result itself is a PDF attachment named 리드/볼더/스피드 crossed with 남/여, one file each. For some mysterious reason, downloads are hotlink-protected. You visit the post page to get a PHPSESSID, then hit download.php with the right Referer. Skip that and it hands you an HTML warning page cosplaying as a PDF. The on-site search is broken, verified, so enumeration means paging through the entire board by hand. That hardened into one methodology of ours: never trust a federation's own search box.
Off the chart: PZS (Slovenia)
Off the main chart, PZS, Slovenia, wins the most unreachable award. Of course I should involve Slovenia, the motherland of the great Janja Garnbret. It doesn't welcome me, however! Post-2025, isksp.pzs.si runs ClimbComp, and a single endpoint, Dogodek_GetDataForGrid, spits out clean JSON with the best data structure in the entire survey. Then, it slams the door. Even a Slovenian VPN can't get in. VERY SAD!