Most “best races” lists are editorial guesses with sponsor logos nearby. We built BestRaces on a different premise: if you’re going to call something the best, you should have to show your work.
The formula
Every race in our index gets a composite score out of 100, built from four components:
| Component | Weight | What it measures |
|---|---|---|
| Field | 30% | Who shows up — field size relative to the distance |
| History | 20% | Longevity; races that endure are races that deliver |
| Credentials | 25% | USATF certification, Boston-qualifier status, and similar externally verifiable marks |
| Character | 25% | Course and event distinctiveness — the things runners actually remember |
Trail races and ultras score on their own curve. Comparing a mountain 50K’s field size to a big-city marathon’s tells you nothing about either, so we don’t.
The weights aren’t hidden in a PDF — they render on our methodology page directly from the same data file that computes the rankings. If we ever change the formula, that page changes with it, automatically. We can’t quietly tune the math.
What money can’t do here
Race directors can claim their listing, correct facts, and get a verified badge — free. What a claim can never do is move a score. The database itself enforces this: ranking fields are locked server-side against any edit path a director (or a payment) could reach. It isn’t a policy we promise to follow; it’s a constraint we can’t override.
Some registration links on the site earn us a referral fee. Those fees flow from links, never into scores, and the disclosure sits in our footer on every page.
Where the data comes from
The index currently covers 4,875 US races across marathons, halfs, 10Ks, 5Ks, and trail events, synced weekly from public registration data and corrected by verified race directors. Field sizes count the headline distance, not the whole race weekend — a distinction most lists get wrong.
Listing a race and ranking it are two different things, and we keep them separate. Public registration data reliably gives us a race’s name, place, date and distance; it almost never gives us field size or founding year. A race only earns a score once enough of the formula above has actually been measured for it — until then it stays listed and searchable, with no score, no position and no bib number. An unmeasured signal is left out of the arithmetic entirely rather than counted as a zero, because scoring an unknown as zero would claim a race has no history when the truth is that we haven’t checked. The current count of what is ranked versus merely listed is on the methodology page, computed on every build.
Think a score is off? Every race page shows its component breakdown, so you can see exactly where we’re wrong and tell us. That’s the point.