Veredus Analytics

The measured shape of British & Irish racing

86 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.

Epsom43.4 mGoodwood35.6 mSalisbury33.8 mTowcester32.7 mClonmel32.4 mPontefract27.3 mBeverley27.1 mWexford27.0 mLimerick26.9 mHexham26.8 m
Steepest courses
RankCourseElevation range (m)
1Epsom43.4 m
2Goodwood35.6 m
3Salisbury33.8 m
4Towcester32.7 m
5Clonmel32.4 m
6Pontefract27.3 m
7Beverley27.1 m
8Wexford27.0 m
9Limerick26.9 m
10Hexham26.8 m
Most undulating
Tramore13.8 m/kmSligo12.6 m/kmEpsom12.2 m/kmTowcester11.2 m/kmWexford10.6 m/kmGoodwood10.5 m/kmHexham10.3 m/kmClonmel10.3 m/kmPlumpton10.0 m/kmGowran Park9.9 m/km
Most undulating
RankCourseElevation change (m/km)
1Tramore13.8 m/km
2Sligo12.6 m/km
3Epsom12.2 m/km
4Towcester11.2 m/km
5Wexford10.6 m/km
6Goodwood10.5 m/km
7Hexham10.3 m/km
8Clonmel10.3 m/km
9Plumpton10.0 m/km
10Gowran Park9.9 m/km
Tightest tracks

Shortest complete circuits — closed loops only.

Wolverhampton-AW1579 mChelmsford-AW1657 mChester1658 mSligo1720 mFakenham1723 mTramore1755 mKilbeggan1809 mPlumpton1830 mSouthwell1909 mNewton Abbot1912 m
Tightest tracks
RankCourseCircuit length (m)
1Wolverhampton-AW1579 m
2Chelmsford-AW1657 m
3Chester1658 m
4Sligo1720 m
5Fakenham1723 m
6Tramore1755 m
7Kilbeggan1809 m
8Plumpton1830 m
9Southwell1909 m
10Newton Abbot1912 m
Longest straights
Ascot1730 mYarmouth1680 mDoncaster1650 mNewbury1640 mNewmarket-July1330 mCork1290 mEpsom1250 mThirsk1230 mGoodwood1220 mHaydock1220 m
Longest straights
RankCourseLongest straight (m)
1Ascot1730 m
2Yarmouth1680 m
3Doncaster1650 m
4Newbury1640 m
5Newmarket-July1330 m
6Cork1290 m
7Epsom1250 m
8Thirsk1230 m
9Goodwood1220 m
10Haydock1220 m

No Cheltenham? The famous hill is real — but Cheltenham's current trace stitches the venue's several courses and gallops into one loop, so its measurements are provisional and sit out the league tables until its racing circuits carry their own trusted traces. Goodwood's open 6f-straight-plus-loop is measured — but with no closed circuit it can never enter Tightest tracks. The methodology page has the detail.

The shape of every course

Elevation sampled around each circuit, drawn to a shared vertical scale — flat tracks read flat. Curves are stored for 85 of the 86 measured courses; the rest carry no curve until their tracks are re-mapped in OpenStreetMap.

Elevation range by course
CourseElevation range (m)
Aintree14.9
Ascot23.4
Ayr12.6
Ballinrobe13.9
Bangor-on-Dee3.0
Bath16.4
Bellewstown8.8
Beverley27.7
Carlisle22.2
Cartmel19.1
Catterick10.3
Chelmsford-AW7.9
Cheltenham22.6
Chepstow18.3
Chester8.0
Clonmel32.9
Cork2.6
Doncaster7.8
Down Royal9.8
Downpatrick12.4
Dundalk-AW4.6
Epsom45.2
Exeter24.5
Fairyhouse6.1
Fakenham6.1
Ffos Las9.5
Fontwell16.9
Galway17.6
Goodwood38.7
Gowran Park22.1
Hamilton23.0
Haydock14.3
Hereford12.1
Hexham27.3
Huntingdon7.9
Kempton-AW6.0
Kilbeggan8.0
Killarney9.2
Leicester15.8
Leopardstown25.5
Limerick27.2
Lingfield8.5
Lingfield-AW7.4
Listowel4.0
Ludlow9.8
Market Rasen10.9
Musselburgh2.9
Naas14.8
Navan17.7
Newbury15.4
Newcastle-AW13.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
Southwell5.5
Southwell-AW5.4
Stratford4.0
Taunton15.1
Thirsk5.6
Thurles11.6
Tipperary9.5
Towcester33.4
Tralee16.1
Tramore26.7
Uttoxeter10.0
Warwick15.4
Wetherby9.5
Wexford27.5
Wincanton9.6
Windsor6.8
Wolverhampton-AW2.6
Worcester7.5
Yarmouth3.9
York7.2

What's in the dataset

One row per measured course — 86 courses, dataset v2026.08.

The dataset covers courses with racing in our full historical dataset 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 224 point-in-time features per runner across 420,000+ UK & Irish races since 1988 — in the browser from £14.99/mo. Developer API opening soon — register interest.

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