Feeds
Open transit data for Great Britain.
Great Britain’s public transport as GTFS, rebuilt every night from the sources the industry publishes, validated, and released as plain zips you can bookmark or script against.
gtfs.zip
The standard feed. Stops where passengers can board and alight, and nothing else — the shape every routing engine and trip planner expects.
- Drops straight into OpenTripPlanner
- Smaller, faster to load
- Splits and joins resolved
- Every trip drawn as a line
- Trips
- 293,830
- Stop times
- 3,012,565
- Shapes
- 13,062
gtfs‑passing‑points.zip
The same trips, plus every location a train runs through without stopping — junctions, loops and timing points included.
- Trace a route across the network
- Path and capacity work
- Not for passenger journey planning
- Trips
- 293,830
- Stop times
- 3,656,317
- Shapes
- 13,062
gtfs‑national‑rail‑only.zip
The standard feed without the services National Rail does not hold authority over — no tube, no Metro, no ferries, no scheduled buses, and no replacement buses TfL runs.
- For a feed merged with other sources
- Where those sources describe the metro better
- Same identifiers as the other two
- Trips
- 279,779
- Stop times
- 2,939,549
Every link resolves to the most recent release, so it can be bookmarked or scripted against. The first two hold the same trips and differ only in their stop times; the third holds fewer trips than either.
How a feed gets published
1 · Download
The most recent full refresh of the DTD timetable and every incremental published since, plus the fares refresh the station groups come from.
2 · Build
Three builds from gtfs.config.yaml and its National Rail only variant. Stations get their real coordinates and names from NaPTAN.
3 · Validate
Each feed goes through the MobilityData validator against a pinned baseline. Any of them failing stops the whole release.
4 · Compare, then release
A feed with more than a 5% swing in trips against yesterday needs a human. Otherwise all three are attached to a dated release.
A build that fails is not published, so a missing night means the build was stopped rather than that a degraded feed went out. Releases are pruned to the last thirty days plus the earliest release of each month, so it stays possible to say what the feed looked like in April.
Not a feed, but published with them
Transfer patterns are every route through the network, found in advance, so a journey planner reads them instead of searching. One file for the country, or one per station — a query only ever fetches where it departs from.
What else is on a release
Four JSON files, as separate assets rather than inside the zips, because they describe the feed rather than being part of it.
validation.json- the validator's report, including every accepted error
feed-meta.json- what was built, from what, and when
enrichment-report.json- what each external source matched and missed
provenance.json- every field an external source wrote, and every write that lost
The decisions the feed makes
No identifier in the feed is a three-letter station code. Times run past 24:00:00. A train that divides carries a quoted stop_headsign. Five things break a consumer written against the specification alone, and they are all on one page.
The same feed, byte for byte
cif2gtfs produces what is published here from the feed files, with no database and no server. Pin --today and the same input always gives the same bytes.
$ cif2gtfs build --source RJTTFxxx.ZIP --out gtfs.zipSources and licences
- Rail Delivery Group
- Rail Settlement Plan data licence
- Department for Transport
- Open Government Licence v3.0
Read from the build rather than written here. Attribution is a condition of the Open Government Licence, so this list is the build's to state and not this page's. Report anything it gets wrong.