About Swimrun Watch

How it works

We've imported race results data from several sources (list further down) and mashed it together. On top of this we compile top lists, let users play with the data and so on.

Race selection

We are targeting competitive racing and hence focus primarily on bigger races attracting top athletes. We currently only import the most competitive distance and leave sprint races and such aside.

How do I get included?

You are likely to be included if you have a big race where participants race in teams and your data has splits in a format that is easily read by a computer program.

We do not type the teams and times into our database manually. We use a computer program and it prefers plain text (like CSV) or HTML on a single page, although we can do subpages too with a little work. Simplistic Excels (like Breca's new format) are acceptable. We don't support PDFs. Also, it has to be data complete including team name, team member names, category/gender and times in seconds granularity. We calculate diff times and positions on our own. If you use a major timing system like EST Mika or EQ just make their results presentation available and we can read from there. Splits allow us to do a full presentation with course, checkpoints and splits comparison making it much more interesting for users.

We focus on competitive racing. World of Swimrun has a much more complete list of races.

Data sources



  • Official race Google Maps KML: GPS routes & stations (which we rearrange and decorate).
  • Loose GPX files (Strava stalking): alternate source of race course GPS route data.


All imports are manually triggered — no standing integrations.


Andreas Ribbefjord

Created by Andreas Ribbefjord (blog, Twitter). Interview by ÖTILLÖ Magazine.

Thanks to our partners


Errors may occur and we will not be liable for any consequence. Errors may be reported by Twitter direct message.

Future plans

Current state of ideas notes as of . We make no promises that what is tossed around here is ever going to be implemented.

To do

* Import historical races even though they do not offer splits.
* Bug or faulty data: Utö 2018: Team Garmin 21st place at T01.
* Trivia top list: Athletes: Rising stars.
* Races map: Actual criteria for what races go onto the map.
* Athletes: Folkhälsan years don't group in chart.
* Frontend merge of checkpoints with the same coordinates.
* Splits: special lists: negative/positive split, strong runners/swimmers.
* Splits: Strava-like pace comparison chart (like marathonsplits.com).
* Splits: Course vert and split vert comparison. (Helena)
* Splits: split diff color on route instead of separate straight line.
* Fastest ever: Import Ångaloppet 2015 to be able to produce a fastest-ever list.
* Fastest ever: Import Ångaloppet 2016, which was on an alternative course.
* Fastest ever: Import Engadin 2017 to be able to produce a fastest-ever list.
* Admin interface for merging athletes doubles with different spelling.
* Athletes: effort profiling of "fast start" or "slow finish" or similar. (Maskinen)
* Combine identical chart values which are of different categories.
* Race stats: maybe reintroduce after improving accuracy and making them more interesting.
* WC legs: add fastest and slowest splits automatically from most recent results.
* Splits: Table row hovering should highlight segment on map.
* Automatic matching mechanisms for finding a race partner?
* Athlete chart: meaty legends dwarf the chart on mobile.
* Prevent double simultaneous requests to /data/stations/.
* With a slow Internet connection, Splits page may not have loaded results in time for comparison.
* Bug: DNS shows as DNF.
* Bug: Bleiente Schwimmlauf missing finish split (and 8 and 9) shows as DNF at ÖTILLÖ Swimrun 1000 Lakes 2016.
* Utö 2018 Pre finish timing station is not displayed.
* http://swimrun.watch/splits/otillo-wc-2016 Not sure Swimrunshop.com last split error is a bug at this point. Maybe faulty data (Värdshus--Solvik agg splits mixup?).
* Uploading of GPX files for in-depth comparison. (Helena) (Connect to Strava?)
* Inner workings: Host sites within a single but beefier droplet? Nginx or equivalent. Maybe not since one overloaded site would bring down the others.
* Inner workings: Evade need for "([0-9\.]+),([0-9\.]+) => \2,\1".
* Inner workings: Evade need for "truncate -s 0 Front\swimrun.db".

Possible imports

* Cape Torpedo: Looks ok. http://live.mobii.com/Result/RenderEngine?DisplayId=34b64fae-2bff-4f57-a892-cc58e2c150de&EventId=241213f4-270a-465a-9bae-c0245afe3663&RaceId=45aa58ce-5a98-4448-aeb4-d57af638a8ba&CourseId=5960ba6c-e117-4360-8312-26f154fa54a8&autoRefresh=true&noImage=false&showVip=false&showCyFlag=false&defaultGCResult=false&mobiiProfile=false
* Costa Brava: Looks ok. https://app.evorama.com/api/v1/live/swimrun https://app.evorama.com/ca/live/swimrun
* Stockholm Swimrun 2017 & 2018 (splits require per-line request). Too much work?

Deemed not parsable:

* Webscorer (Swimrun Australia, Katrineholm swimrun, Tjolöholm swimrun): No splits.
* Rockman: PDF, no athlete names.
* Gravity: PDF, no splits, no athlete names.
* Reunion: Just images.