Mikatiming Marathon Results Scraper
Independent tool. Trademarks referenced on this page are the property of their respective owners and are used only to identify the public website this tool reads. No affiliation or endorsement.
Mikatiming Marathon Results Scraper
Scrape finisher results and split times from Boston Marathon and other mikatiming-powered races. Extracts placement, finish times, 5K–40K splits, and runner demographics — the full dataset used by pacing analytics and coaching tools.
What it scrapes
The mikatiming platform powers race results for several major marathons:
- Boston Marathon —
results.baa.org - Berlin Marathon —
results.scc-events.com(same platform) - Tokyo Marathon and other Abbott WMM events using mikatiming infrastructure
For each finisher, the scraper collects:
| Field | Description |
|---|---|
race_name |
Race name including year |
race_year |
Integer year |
bib |
Runner bib number |
runner_name |
Full name (Last, First) |
age_group |
Age division (e.g. 18-39, 40-44) |
state |
Runner home state/province |
club |
Running club or team |
finisher_place_overall |
Overall finish placement |
finisher_place_gender |
Placement within gender division |
finisher_place_age_group |
Placement within age group division |
net_time |
Chip time (HH:MM:SS) |
gross_time |
Gun time (HH:MM:SS) |
5k_split through 40k_split |
Cumulative split times at each checkpoint |
half_split |
Half marathon split (21.1K) |
pace_per_km |
Average pace (min/mile as reported by mikatiming) |
Use cases
- Pacing analytics — full 5K-through-40K split ladders for training plan modeling
- Coaching SaaS — historical finishing data for runners by age group and event
- Race research — compare performance across years, divisions, and events
- Academic sports science — population-level marathon finishing data
Input
| Parameter | Type | Description |
|---|---|---|
baseUrl |
string | Base URL of the mikatiming results site (e.g. https://results.baa.org/2024/) |
eventId |
string | Mikatiming event identifier from the URL's ?event= parameter (e.g. 2024_boston) |
maxItems |
integer | Maximum finisher records to scrape. Set 0 for all finishers. Default: 10 |
Boston Marathon example
{
"baseUrl": "https://results.baa.org/2024/",
"eventId": "2024_boston",
"maxItems": 100
}
The eventId value appears in the site URL when you navigate to the results list: ?event=2024_boston.
How it works
The scraper uses a two-level hierarchical crawl:
- Listing pages — iterates the finisher list at
?pid=list&page=N(25 runners per page, sequential pagination) - Detail pages — fetches each runner's
?content=detail&idp=<ID>page to extract the full dataset including all splits
Polite crawling at 2 concurrent requests, with automatic rate-limit backoff.
Notes
- The BAA results page does not expose gender, city, or country fields for all runners — these fields will be null for entries where the data is not published.
- Split times are cumulative from gun start (standard marathon split convention).
- The
pace_per_kmfield actually reports min/mile (as labeled by mikatiming) — the field name reflects the spec; the values are min/mile. - Boston 2024 has approximately 25,500 finishers across 1,022 listing pages. Use
maxItemsto cap output during testing.