gb‑transit

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.

Covers
11/09/202611/12/2026
Trips
293,830
Built from
RJTTC955.ZIP
Built
11 Sept 2026, 09:47

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.

Transfer patterns →

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
Before you write the importer

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.

Rather build your own

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

How it works →

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