Database

Gravel Rankings

Ranked by ORI Score โ€” an Elo-style rating computed from every graded gravel race in the database, weighted by how much that race counts. Full methodology below.

Current ยท Last 12 Months2026202520242023202220212019
EliteAmateur
Elite Men
1๐Ÿ‡บ๐Ÿ‡ธ Keegan Swenson1105 ORI Score
13 races
2๐Ÿ‡บ๐Ÿ‡ธ Alexey Vermeulen1090 ORI Score
8 races
3๐Ÿ‡จ๐Ÿ‡ฟ Petr Vakoc1075 ORI Score
9 races
4๐Ÿ‡ณ๐Ÿ‡ด Simen Nordahl Svendsen1062 ORI Score
6 races
5๐Ÿ‡ฆ๐Ÿ‡บ Brendan Johnston1060 ORI Score
8 races
6๐Ÿ‡ฟ๐Ÿ‡ฆ Matthew Beers1058 ORI Score
8 races
7๐Ÿ‡บ๐Ÿ‡ธ Payson Mcelveen1058 ORI Score
7 races
8๐Ÿ‡บ๐Ÿ‡ธ Peter Stetina1054 ORI Score
13 races
9๐Ÿ‡ฆ๐Ÿ‡บ Lachlan Morton1054 ORI Score
7 races
10๐Ÿ‡บ๐Ÿ‡ธ Griffin Easter1054 ORI Score
13 races
11๐Ÿ‡บ๐Ÿ‡ธ Chad Haga1044 ORI Score
7 races
12๐Ÿ‡บ๐Ÿ‡ธ Cole Paton1043 ORI Score
6 races
13๐Ÿ‡บ๐Ÿ‡ธ Alex Wild1042 ORI Score
9 races
14๐Ÿ‡บ๐Ÿ‡ธ Alex Howes1036 ORI Score
10 races
15๐Ÿ‡บ๐Ÿ‡ธ Russell Finsterwald1032 ORI Score
8 races
16๐Ÿ‡จ๐Ÿ‡ฆ Sean Fincham1031 ORI Score
8 races
17๐Ÿ‡บ๐Ÿ‡ธ Lance Haidet1030 ORI Score
12 races
18๐Ÿ‡จ๐Ÿ‡ฆ Adam Roberge1030 ORI Score
11 races
19๐Ÿ‡บ๐Ÿ‡ธ Andrew Dillman1027 ORI Score
10 races
20๐Ÿ‡บ๐Ÿ‡ธ Zach Calton1025 ORI Score
9 races
21๐Ÿ‡บ๐Ÿ‡ธ Tobin Ortenblad1025 ORI Score
12 races
22๐Ÿ‡บ๐Ÿ‡ธ Finn Gullickson1024 ORI Score
8 races
23๐Ÿ‡ฎ๐Ÿ‡น Ethan Overson1024 ORI Score
9 races
24๐Ÿ‡จ๐Ÿ‡ฆ Julien Gagne1023 ORI Score
5 races
25๐Ÿ‡บ๐Ÿ‡ธ Innokenty Zavyalov1022 ORI Score
8 races
Elite Women
1๐Ÿ‡บ๐Ÿ‡ธ Sofia Gomez Villafane1099 ORI Score
12 races
2๐Ÿ‡บ๐Ÿ‡ธ Melisa Rollins1080 ORI Score
7 races
3๐Ÿ‡บ๐Ÿ‡ธ Paige Onweller1073 ORI Score
7 races
4๐Ÿ‡บ๐Ÿ‡ธ Cecily Decker1071 ORI Score
12 races
5๐Ÿ‡บ๐Ÿ‡ธ Lauren De Crescenzo1066 ORI Score
9 races
6๐Ÿ‡บ๐Ÿ‡ธ Lauren Stephens1058 ORI Score
8 races
7๐Ÿ‡บ๐Ÿ‡ธ Sarah Lange1055 ORI Score
7 races
8๐Ÿ‡ณ๐Ÿ‡ฑ Geerike Schreurs1051 ORI Score
5 races
9๐Ÿ‡บ๐Ÿ‡ธ Erin Huck1050 ORI Score
6 races
10๐Ÿ‡ต๐Ÿ‡ฑ Karolina Migon1049 ORI Score
7 races
11๐Ÿ‡บ๐Ÿ‡ธ Alexis Skarda1048 ORI Score
11 races
12๐Ÿ‡จ๐Ÿ‡ฆ Haley Smith1045 ORI Score
7 races
13๐Ÿ‡บ๐Ÿ‡ธ Hannah Otto1043 ORI Score
9 races
14๐Ÿ‡บ๐Ÿ‡ธ Heather Jackson1043 ORI Score
9 races
15๐Ÿ‡บ๐Ÿ‡ธ Michaela Thompson1042 ORI Score
7 races
16๐Ÿ‡บ๐Ÿ‡ธ Jenna Rinehart1039 ORI Score
11 races
17๐Ÿ‡บ๐Ÿ‡ธ Sarah Sturm1037 ORI Score
7 races
18๐Ÿ‡บ๐Ÿ‡ธ Deanna Mayles1035 ORI Score
9 races
19๐Ÿ‡บ๐Ÿ‡ธ Crystal Anthony1031 ORI Score
10 races
20๐Ÿ‡ช๐Ÿ‡ธ Morgan Aguirre1028 ORI Score
5 races
21๐Ÿ‡บ๐Ÿ‡ธ Emma Grant1025 ORI Score
6 races
22๐Ÿ‡บ๐Ÿ‡ธ Flavia Oliveira Parks1025 ORI Score
9 races
23๐Ÿ‡บ๐Ÿ‡ธ Erin Osborne1022 ORI Score
6 races
24๐Ÿ‡บ๐Ÿ‡ธ Emily Newsom1021 ORI Score
13 races
25๐Ÿ‡ฆ๐Ÿ‡บ Cassia Boglio1018 ORI Score
7 races
Methodology

How the ORI Score works

Every race is a chance to prove how you stack up โ€” not just against whoever else showed up that day, but against the entire sport. A rider who wins their age group at a small local race and a rider who wins their age group at Unbound accomplished very different things. Counting wins or podiums canโ€™t tell them apart. The ORI Score can, because it accounts for exactly who you raced and how much that race counts for.

An Elo rating, built race by race

Chess players have used Elo since 1960 to rate players who never all play each other, using only the games that actually happened. We apply the same math to racing. Every rider starts a ranking period at a baseline of 1000. Then, in chronological order, we replay that periodโ€™s races. For each finisher, we compare them โ€” one at a time โ€” against everyone else in their comparison field:

expected(you vs. rival) = 1 / (1 + 10^((rivalโ€™s score โˆ’ your score) / 400))

Thatโ€™s the probability, given current scores, that youโ€™d beat that specific rival. Average it across the whole field and you get your expected result for that race โ€” essentially, what your rating predicted youโ€™d finish. Then we look at what actually happened:

actual(you) = (finishers behind you) / (total finishers โˆ’ 1)

1st of 50 scores a perfect 1.00; last place scores 0.00. Your rating then moves by:

change = K ร— field-size factor ร— race weight ร— (actual โˆ’ expected)

Beat your prediction and your score climbs; underperform it โ€” even finishing near the front of a field your rating predicted youโ€™d win โ€” and it drops. K is a flat 32 for every race. The field-size factor discounts tiny fields โ€” a 2-person race moves your score far less than a 50-person field would โ€” so an empty parking lot doesnโ€™t count the same as a real championship. The race weight is the ORI Grade below.

Race weight: not every race counts the same

Every graded race carries an ORI Grade โ€” HC, 1, 2, or 3 โ€” reflecting its depth of field and standing in the sport. A strong result at an HC race moves your score more than the identical result at a Grade 3 race would.

HC ร—2.0ย ย ย Grade 1 ร—1.5ย ย ย Grade 2 ร—1.0ย ย ย Grade 3 ร—0.75

Two kinds of ranking period

Current is a rolling window covering your last twelve months of racing โ€” it updates continuously and always reflects recent form. Calendar Year rankings lock in once a year is fully over, as a permanent record of how that season played out. Every rider starts both kinds of period at the 1000 baseline โ€” a Calendar Year ranking is a clean, independent snapshot, not a continuation of the year before, and the Current window resets the same way as it rolls forward.

Only your best 5 results count โ€” but you need at least 5

You need at least 5 results in a division within a period to be ranked at all โ€” enough races to say something real about where you stand. Once you clear that bar, only your 5 best results (the ones that moved your score up the most) count toward your final score for that period; the race count shown next to your score is your full qualifying total, not just those 5.

Elite and Amateur: same math, different comparison basis

For an Eliteresult, youโ€™re scored on your place within the Elite/Pro field itself. For an Amateuror Open result, youโ€™re scored on your place across the entire gender field for that race โ€” Elite, Amateur, and Open riders combined โ€” since thatโ€™s the truest measure of who you actually beat. A race with no Elite/Pro category at all counts as Open, and Open results count toward bothan Elite and an Amateur ranking: a rider with a mix of Elite, Amateur, and Open results in a period can hold both rankings simultaneously. Within Amateur, youโ€™re shown against your own age bracket โ€” assigned once per period, based on your age as of that period, not race by race.

Why this handles field quality automatically

A โ€œfield strengthโ€ number never needs to be computed separately โ€” itโ€™s built into the rating of everyone else on the start line. Beat a field of previously-unrated riders and your score barely moves. Beat a field that includes riders whoโ€™ve already proven themselves against Elite fields elsewhere, and it moves a lot. This is also how an amateur racing in an Open category at a small race that happens to include a pro or two gets full credit for it โ€” the proโ€™s rating (built from their Elite results elsewhere) raises that specific fieldโ€™s difficulty, which raises what the amateur earns for finishing near them.

Why we show a race count next to every score

Elites race the same small pool of people repeatedly across a period, so their ratings converge quickly and reliably. Amateurs in the same age bracket might only cross paths once or twice a year โ€” a score built on 5 races is a lot less certain than one built on 20. Read a fast-rising score with a low race count as promising, not proven.

Current scope & limitations (v2)

  • Gravel and select MTB endurance races that have been individually graded โ€” not every discipline or every race yet.
  • U23 and specialty categories (Single Speed, E-bike, Para, Tandem, Non-Binary) arenโ€™t rated yet โ€” different competitive context, deserving their own pools. Juniors are rated under a single โ€œ18 and underโ€ bucket, regardless of their exact sub-age.
  • DNF/DNS/DSQ results donโ€™t affect your score at all right now โ€” a deliberate simplification, not a permanent design choice.
  • Exact-tie finishes are broken arbitrarily rather than treated as a true tie โ€” a minor imprecision.
  • A small number of riders have duplicate profile records in our matching pipeline (the same person imported under two different IDs). Until thatโ€™s cleaned up, their race history โ€” and their score โ€” can be split across both.