Public Transit & GTFS
A timetable is a graph that changes every minute.
GTFS looks like the easiest data on this site — a zip of CSV files — and it is the one where the most numbers come out plausibly wrong. A trip does not name its dates, a time can be 25:10:00, and the travel time between two places depends on the minute you leave. These guides read a feed properly, resolve its calendar to a date, measure frequency per route and direction, clip and map it, route across it with a connection scan, draw isochrones and walking catchments, count the population served, and read the realtime feeds that correct it — with the fixes for times past midnight, empty dates, straight-line routes and travel times that flatter the network.
The calendar guide at step two is the turn in this path. Before it, a feed is a set of tables; after it, every count is for a date, and the holiday that removes one timetable and adds another stops being a trap. Everything later — frequency, routing, isochrones, population served — is computed on one resolved service day.
Start here
The cornerstone guide — the whole workflow end to end. Everything after it goes deeper into one part of it.
Step 1 GTFS explained: the tables behind every transit feed gtfs explained Begin the path →The full path, in order
The concepts underneath the work, then each task, then the errors that task produces. Work down, or jump to the step you need.
- GTFS service calendars explained: calendar, calendar_dates and the service day gtfs calendar_dates explained 🧭 Concept
- Transit frequency and headways explained transit headway frequency 🧭 Concept
- Transit accessibility explained: why travel time depends on the minute you leave transit accessibility travel time 🧭 Concept
- GTFS Realtime explained: trip updates, vehicle positions and alerts gtfs realtime explained 🧭 Concept
- How to read a GTFS feed in Python read gtfs python ⚙️ How-To
- How to find the trips running on a given date in GTFS gtfs trips on date ⚙️ How-To
- How to map transit routes and stops from GTFS shapes map gtfs routes python ⚙️ How-To
- How to calculate service frequency at every stop from GTFS gtfs stop frequency python ⚙️ How-To
- How to clip a GTFS feed to a study area clip gtfs feed ⚙️ How-To
- How to build walking catchments around transit stops transit stop walking catchment ⚙️ How-To
- How to compute transit travel times from GTFS in Python transit travel time python gtfs ⚙️ How-To
- How to draw a transit isochrone from a GTFS feed transit isochrone python ⚙️ How-To
- How to measure the population served by frequent transit population near frequent transit ⚙️ How-To
- How to read GTFS Realtime vehicle positions and delays in Python gtfs realtime python ⚙️ How-To
- GTFS times after 24:00 break time parsing gtfs time 24:00 🔧 Fix
- GTFS routes draw as straight lines between stops gtfs shapes straight lines 🔧 Fix
- A GTFS query returns no trips, or the wrong trips, on a date gtfs no trips on date 🔧 Fix
- Transit travel times come out too short transit travel time too short 🔧 Fix
- stop_times.txt is too big to load comfortably gtfs stop_times memory 🔧 Fix
Topics this path covers
A path is a route; a topic is everything the site has on a subject. Open a topic to see the guides this path skips.