GTFS Feed Architecture & Fundamentals
The relational data model, validation rules, timezone semantics, coordinate reference systems, and versioning practices — the architectural foundations every GTFS pipeline rests on.
Read the overviewParse, normalize, and validate fragmented GTFS static feeds. Extract route geometries, calculate headways, and map stop networks. Integrate GTFS-RT real-time streams with static schedules and build scalable data pipelines and dashboards.
A reference site for transit analysts, urban tech developers, Python GIS engineers, and mobility platform teams who treat transit data as a real data product — versioned, validated, and observable.
New to GTFS or the site? These six guides give you the strongest foundation before diving into implementation detail.
The relational data model, validation rules, timezone semantics, coordinate reference systems, and versioning practices — the architectural foundations every GTFS pipeline rests on.
Read the overviewEnd-to-end ingestion patterns with pandas, partridge, polars, and gtfs-kit; memory-efficient batch processing, error logging, frequency expansion, and schedule harmonization.
Read the overviewCommon GTFS validation failures, their remediation patterns, and how to wire validation into ingestion and CI/CD pipelines with Python.
See validation guidesIANA timezone resolution, DST transitions, 24+ hour GTFS time semantics, and correct UTC alignment for multi-agency schedule aggregation.
Tackle timezonesPolars streaming, Dask distributed DataFrames, and PyArrow-backed Parquet partitioning — handling multi-gigabyte metropolitan feeds on commodity hardware.
Work out what runs todayDecode protobuf feeds and merge VehiclePositions, TripUpdates, and ServiceAlerts with static schedules — live vehicle tracking, delay propagation, and arrival prediction.
Go real-timeService calendars, fares and station interiors, the two kinds of trip linking, and whether a real-time feed is actually working. Each is a full topic with runnable Python and the failure modes real agency feeds produce.
Expanding calendar.txt patterns into real dates, applying
calendar_dates.txt exceptions in the right order, and finding the
gaps and expiry dates that make a feed stop describing service.
The v1 zone rules, what Fares v2 can express that they cannot, and the
pathways.txt graph that turns a station from a point into a
navigable interior with honest interchange times.
transfers.txt describes what a rider may do; block_id
describes what a vehicle does. Conflating them charges riders for changes they
never made and invents connections nobody can make.
Staleness, trip match rate, fleet coverage and outage detection — the four measurements that tell you a live feed has quietly stopped updating while its endpoint keeps returning 200.
Check it is really liveTwenty-four topics and eighty-four pages in total. Each track collects in-depth guides plus focused how-tos — start at an overview and follow the links into specific implementation patterns.
Relational structure, validation rules, timezone normalization, and coordinate systems — the architectural fundamentals behind every reliable GTFS pipeline.
Production-grade ingestion with pandas, partridge, polars, and gtfs-kit. Memory-efficient batch processing, schedule normalization, and automated quality checks.
Decode GTFS-Realtime protobuf feeds and merge VehiclePositions, TripUpdates, and ServiceAlerts with static schedules — live tracking, delay propagation, and arrival prediction in Python.
These step-by-step tutorials go beyond theory — runnable Python, edge cases from real agency feeds, and production-tested remediation patterns.
Step-by-step: schema checks, FK validation, and wiring results into a CI pipeline.
Correct handling of 24+ hour GTFS times, DST transitions, and IANA timezone resolution.
Dtype downcast, categorical encoding, and chunked reading — bring 2 GB feeds into memory safely.
Materialize headway-based service into concrete departure timestamps for routing and analytics.
Apply real-time TripUpdate delays to scheduled stop_times.txt and propagate them across a trip's remaining stops.
Linear-referencing with shapely to compute shape_dist_traveled and each stop's off-shape distance.
Turn weekly patterns and exception rows into the date-indexed service map every other calendar question resolves against.
Order a block's trips per service day and catch the overlaps and teleports no schema validator reports.
Catch the feed that keeps answering and stops updating — the failure HTTP monitoring cannot see.