Veredus Analytics

The measured shape of British & Irish racing

84 courses measured so far from open geodata — track geometry from OpenStreetMap, terrain from Copernicus EU-DEM. Total climb per circuit, undulation, elevation range, the position and severity of every turn. Measured, not quoted.

It's free, under an open licence. Download it, build on it, republish it — just credit the sources.

What the measurements show

Everyone in racing "knows" Epsom is a rollercoaster and Chester is a wall-of-death. The dataset puts numbers on the folklore — and occasionally disagrees with it.

Steepest courses

Height difference between each course's lowest and highest points.

Chepstow46.6 mEpsom43.3 mGoodwood35.6 mSalisbury33.8 mTowcester32.7 mClonmel32.4 mFfos Las29.2 mPontefract27.3 mBeverley27.1 mWexford27.0 m
Steepest courses
RankCourseElevation range (m)
1Chepstow46.6 m
2Epsom43.3 m
3Goodwood35.6 m
4Salisbury33.8 m
5Towcester32.7 m
6Clonmel32.4 m
7Ffos Las29.2 m
8Pontefract27.3 m
9Beverley27.1 m
10Wexford27.0 m
Most undulating
Tramore13.8 m/kmChepstow12.9 m/kmEpsom12.2 m/kmTowcester11.4 m/kmWexford10.6 m/kmGoodwood10.5 m/kmHexham10.3 m/kmSligo10.3 m/kmPlumpton10.0 m/kmCartmel9.8 m/km
Most undulating
RankCourseElevation change (m/km)
1Tramore13.8 m/km
2Chepstow12.9 m/km
3Epsom12.2 m/km
4Towcester11.4 m/km
5Wexford10.6 m/km
6Goodwood10.5 m/km
7Hexham10.3 m/km
8Sligo10.3 m/km
9Plumpton10.0 m/km
10Cartmel9.8 m/km
Tightest tracks

Shortest complete circuits — closed loops only.

Chester1658 mSligo1720 mFakenham1723 mTramore1755 mKilbeggan1809 mPlumpton1830 mNewton Abbot1913 mRoscommon1932 mTralee1961 mKillarney1989 m
Tightest tracks
RankCourseCircuit length (m)
1Chester1658 m
2Sligo1720 m
3Fakenham1723 m
4Tramore1755 m
5Kilbeggan1809 m
6Plumpton1830 m
7Newton Abbot1913 m
8Roscommon1932 m
9Tralee1961 m
10Killarney1989 m
Longest straights
Chepstow1820 mAscot1730 mYarmouth1690 mDoncaster1650 mNewbury1640 mNewcastle-AW1640 mNewmarket-July1330 mCork1290 mRedcar1280 mEpsom1260 m
Longest straights
RankCourseLongest straight (m)
1Chepstow1820 m
2Ascot1730 m
3Yarmouth1690 m
4Doncaster1650 m
5Newbury1640 m
6Newcastle-AW1640 m
7Newmarket-July1330 m
8Cork1290 m
9Redcar1280 m
10Epsom1260 m

The shape of every course

Elevation sampled around each circuit, drawn to a shared vertical scale — flat tracks read flat. Curves are stored for 83 of the 84 measured courses so far; the rest are being backfilled.

Aintree
Ascot
Ayr
Ballinrobe
Bangor-on-Dee
Bath
Bellewstown
Beverley
Carlisle
Cartmel
Catterick
Chelmsford-AW
Cheltenham
Chepstow
Chester
Clonmel
Cork
Doncaster
Down Royal
Downpatrick
Dundalk-AW
Epsom
Exeter
Fairyhouse
Fakenham
Ffos Las
Fontwell
Galway
Goodwood
Gowran Park
Hamilton
Haydock
Hereford
Hexham
Huntingdon
Kempton-AW
Kilbeggan
Killarney
Leicester
Leopardstown
Limerick
Lingfield
Listowel
Ludlow
Market Rasen
Musselburgh
Naas
Navan
Newbury
Newcastle-AW
Newmarket-July
Newton Abbot
Nottingham
Perth
Plumpton
Pontefract
Punchestown
Redcar
Ripon
Roscommon
Salisbury
Sandown
Sedgefield
Sligo
Southwell-AW
Stratford
Taunton
Thirsk
Thurles
Tipperary
Towcester
Tralee
Tramore
Uttoxeter
Warwick
Wetherby
Wexford
Wincanton
Windsor
Wolverhampton-AW
Worcester
Yarmouth
York
Elevation range by course
CourseElevation range (m)
Aintree14.9
Ascot23.4
Ayr12.6
Ballinrobe13.9
Bangor-on-Dee3.1
Bath16.2
Bellewstown8.7
Beverley27.7
Carlisle22.2
Cartmel19.1
Catterick10.3
Chelmsford-AW9.6
Cheltenham22.6
Chepstow47.8
Chester8.0
Clonmel32.9
Cork2.6
Doncaster7.8
Down Royal9.7
Downpatrick12.4
Dundalk-AW4.6
Epsom45.2
Exeter24.5
Fairyhouse11.7
Fakenham6.1
Ffos Las31.5
Fontwell16.9
Galway19.5
Goodwood38.7
Gowran Park22.1
Hamilton23.0
Haydock14.3
Hereford12.1
Hexham27.3
Huntingdon7.9
Kempton-AW7.3
Kilbeggan8.0
Killarney9.3
Leicester15.8
Leopardstown25.5
Limerick27.2
Lingfield8.5
Listowel4.2
Ludlow9.7
Market Rasen10.9
Musselburgh2.9
Naas14.8
Navan17.7
Newbury15.4
Newcastle-AW15.3
Newmarket-July13.1
Newton Abbot4.2
Nottingham12.3
Perth4.1
Plumpton19.5
Pontefract27.8
Punchestown15.4
Redcar8.1
Ripon4.1
Roscommon16.0
Salisbury35.0
Sandown23.1
Sedgefield6.2
Sligo22.8
Southwell-AW5.1
Stratford4.0
Taunton15.1
Thirsk5.6
Thurles11.6
Tipperary9.5
Towcester33.5
Tralee16.1
Tramore26.7
Uttoxeter10.0
Warwick15.5
Wetherby9.5
Wexford27.5
Wincanton9.6
Windsor6.8
Wolverhampton-AW5.4
Worcester7.5
Yarmouth3.9
York8.5

What's in the dataset

One row per measured course — 84 courses, dataset v2026.07.

The dataset covers courses with racing in our corpus since 1988, including Towcester, which closed in 2018. Where one venue races under more than one course record (turf and all-weather eras, renamed venues), the circuit is measured once and attributed to the record with the venue's most recent racing — never duplicated.

Not measured yet: the Curragh, Brighton and Laytown can't currently be traced from OpenStreetMap (Laytown is raced on a beach, so it may never be), and Kelso's trace is awaiting re-mapping. If you improve the OpenStreetMap coverage of any of these tracks, we'll measure them — the pipeline is sitting ready.

FieldMeaning
circuitLengthMMeasured circuit length (or track length for open, non-looping courses)
turnCount / turns[]Every turn: position, angle, radius, severity (Tight <150 m radius, Moderate <300 m, Sweeping otherwise)
longestStraightMLongest straight
totalClimbMTotal climb per circuit
undulationIndexMPerKmMetres of elevation change per km — the "bumpiness" number
elevationRangeMHeight difference between the course's lowest and highest points
elevationProfile[]Elevation sampled around the circuit — the course's shape

Positions are metres from the survey origin, not the winning post. Full conventions ship in the data dictionary inside the download.

Download

One zip: course-topology.csv (one row per course), course-topology.json (full structure, including turns and elevation profiles) and a data dictionary with the conventions and licence. Generated live from the same data as the API — it can't go stale.

Or take it straight from the API — no key required:

curl https://api.veredusanalytics.com/api/v1/open-data/course-topology

Quickstart

Five lines to the steepest courses in Britain and Ireland:

import pandas as pd
import requests

data = requests.get("https://api.veredusanalytics.com/api/v1/open-data/course-topology").json()
df = pd.json_normalize(data["courses"])
print(df.nlargest(5, "topology.elevationRangeM")[["name", "topology.elevationRangeM"]])

How it was measured

Track centrelines are extracted from OpenStreetMap geometry, resampled, and draped over Copernicus EU-DEM terrain elevation. Turns are detected from curvature; severity is classified by radius. No figures are copied from courses' own materials — everything is computed from the geodata, which is why we say measured, not quoted.

Read the full methodology →

Licence & attribution

Licence: ODbL 1.0 (Open Database Licence). You may copy, redistribute, and build on this dataset, including commercially, provided you attribute and share derived databases alike.

Contains data © OpenStreetMap contributors (ODbL) and Copernicus EU-DEM. Please attribute: "Course topology data © Veredus Analytics, from OpenStreetMap and Copernicus EU-DEM, under ODbL."

Full licence details: Data licences

More where this came from

A data insight most days — measurements, league tables, the point-in-time picture behind each race. No tips, ever.

This dataset is the free slice of Veredus Analytics. The rest is 178 point-in-time features per runner across 530,000+ UK & Irish races since 1988 — in the browser from £14.99/mo, or over the API.

Racecourse Elevation & Topology Data — Free Open Dataset | Veredus Analytics