GTFS errors and fixes.
Plain-language guides to the validator notices and data gaps that affect riders most. Start with the code on your scorecard, then follow the steps and republish the feed.
Service dates and freshness
Fix: a service calendar has a gap longer than 13 days
One service_id has more than 13 days between dates when it runs. The gap can be intentional, such as a seasonal route, but it can also mean a new…
Validator rule: big_gap_in_service
Fix: service calendars that have already expired
calendar.txt (and calendar_dates.txt) define the date ranges your service runs. Some of those ranges have an end date in the past, so they describe…
Validator rule: expired_calendar
Fix: the feed expires within 30 days
feed_info.txt sets feed_end_date, and it falls within the next month. The data is not expired, but the window is closing.
Validator rule: feed_expiration_date30_days
Fix: the feed expires within 7 days
feed_info.txt sets feed_end_date, the last day this data is meant to be valid, and it is within the next week. The feed is about to expire.
Validator rule: feed_expiration_date7_days
Fix: the feed does not state its validity dates
feed_info.txt is where a feed states the window it is valid for, using feed_start_date and feed_end_date. This finding fires when those dates are…
Validator rule: scorecard_missing_feed_info_dates
Fix: the ServiceAlerts realtime feed failed during sampling
The scorecard tried to sample your GTFS-Realtime ServiceAlerts feed and it failed to return usable data during the sampling window.
Validator rule: scorecard_rt_service_alerts_unreachable
Fix: service calendars with no days switched on
A row in calendar.txt has monday through sunday all set to 0, so the service runs on no day of the week. Any trip tied to that calendar never runs. It…
Validator rule: service_has_no_active_day_of_the_week
Fix: service dates fall outside the feed's stated validity window
Two parts of the feed disagree about the dates it covers. feed_info.txt states a validity window with feed_start_date and feed_end_date, while the…
Validator rule: service_window_outside_feed_period
Accessibility
Fix: a station with no pathways.txt
Your stops.txt has at least one stop marked as a station (location_type
Validator rule: scorecard_station_no_pathways
Fix: trips do not state wheelchair accessibility
Your trips.txt does not set wheelchair_accessible for some or all trips, so the feed says "unknown" for whether the vehicle on that trip can carry a…
Validator rule: scorecard_wheelchair_accessible_unknown
Fix: stops do not state wheelchair accessibility
Your stops.txt does not set wheelchair_boarding for some or all stops, so the feed says "unknown" for whether a wheelchair user can board there.…
Validator rule: scorecard_wheelchair_boarding_unknown
Routes, stops, and shapes
Fix: remove a duplicated point from a route shape
Two consecutive rows in shapes.txt have the same latitude, longitude, and shape_dist_traveled. They describe the same point twice instead of moving…
Validator rule: equal_shape_distance_same_coordinates
Fix: a bus appears to travel impossibly fast between two stops
For some trips, the time between two consecutive stops in stop_times.txt is too short for the distance between them: the implied speed is faster than a…
Validator rule: fast_travel_between_consecutive_stops
Fix: impossibly fast travel between distant stops
Between two stops that are far apart, the scheduled times imply a speed no bus reaches. The usual causes: an arrival or departure time typed a minute…
Validator rule: fast_travel_between_far_stops
Fix: route color and text color don't contrast
routes.txt lets you set route_color (the route's background colour) and route_text_color (the colour of the route name drawn on it). The two are too…
Validator rule: route_color_contrast
Fix: some scheduled trips have no live predictions
During the sampling window, some trips that were scheduled to be running had no matching prediction in the TripUpdates feed. The feed itself is…
Validator rule: scorecard_rt_trip_coverage
Fix: the TripUpdates realtime feed failed during sampling
The scorecard tried to sample your GTFS-Realtime TripUpdates feed and it failed to return usable data during the sampling window.
Validator rule: scorecard_rt_trip_updates_unreachable
Fix: stop names are written in ALL CAPS
stops.txt writes some or all of your stop_name values in ALL CAPS, for example "MAIN ST & 2ND AVE" instead of "Main St & 2nd Ave".
Validator rule: scorecard_stop_names_all_caps
Fix: a stop sits far from the route line
Some stops sit far from the route line (the shapes.txt path) they belong to, based on the geometric distance between the stop and the shape.
Validator rule: stop_too_far_from_shape
Fix: a stop sits far from the route's drawn path
Your feed provides shape_dist_traveled values that tie stops to points along a route's shape in shapes.txt. For some trips a stop ends up far from the…
Validator rule: stop_too_far_from_shape_using_user_distance
Fix: stops that no trip ever serves
Some stops in stops.txt are never referenced in stop_times.txt, so no scheduled trip stops there. The stop exists in the feed but nothing arrives.
Validator rule: stop_without_stop_time
Fix: many trips do not run in the next 7 days
A large share of the trips in your feed are not scheduled to run on any of the next seven days. The trips exist in trips.txt, but their calendars place…
Validator rule: trip_coverage_not_active_for_next7_days
Fix: trips slightly longer than their drawn route shape
A trip's stops, laid end to end, travel slightly farther than the route line (shapes.txt) drawn for that trip. The gap is small, under the validator's…
Validator rule: trip_distance_exceeds_shape_distance_below_threshold
Fix: the feed contains route shapes no trip uses
shapes.txt defines geographic paths for routes, and your feed includes shapes that no trip in trips.txt references. They are dead weight left behind by…
Validator rule: unused_shape
Fares
Fix: a fare amount has the wrong number of decimals
A fare price in fare_attributes.txt (or a Fares v2 amount) has more or fewer decimal places than its currency allows. US dollars take two decimals, so…
Validator rule: invalid_currency_amount
Fix: the feed contains no fare information
The feed has no fare files, so it does not say what a trip costs. GTFS carries fares either in the classic fare_attributes.txt and fare_rules.txt, or…
Validator rule: scorecard_no_fare_data
Feed structure and publishing
Fix: the feed lists no contact
feed_info.txt has neither feed_contact_email nor feed_contact_url, so there is no way to reach whoever maintains the feed. Both are optional in the…
Validator rule: missing_feed_contact_email_and_url
Fix: recommended fields left empty
A file in the feed is missing a field the spec recommends, one apps rely on even though the feed still loads without it. Common examples: agency_lang…
Validator rule: missing_recommended_field
Fix: a recommended GTFS file is missing
GTFS has required files and recommended ones. This finding means a recommended file is absent from the feed. In practice it is almost always…
Validator rule: missing_recommended_file
Fix: a required column is missing from a file
A GTFS file is present but is missing a column the spec requires. The notice names the file and the column, for example routes.txt without route_type…
Validator rule: missing_required_column
Fix: stop times without a timepoint value
stop_times.txt has a timepoint column, but some rows leave it blank. The column says whether each arrival time is a real, scheduled checkpoint…
Validator rule: missing_timepoint_value
Fix: rider-facing names are in ALL CAPS or all lowercase
Some rider-facing text, usually stop names or trip headsigns, is written in a single case: MAIN ST & 2ND AVE or main st & 2nd ave instead of Main St &…
Validator rule: mixed_case_recommended_field
Fix: the feed has already expired
The scorecard works out the last day your feed actually covers service, taking the later of feed_info.txt's feed_end_date and the last date any…
Validator rule: scorecard_feed_expired
Fix: the feed expires within 30 days
The scorecard works out the last day your feed actually covers service, taking the later of feed_info.txt's feed_end_date and the last date any…
Validator rule: scorecard_feed_expiring_soon
Fix: flexible service with no booking rules
Your feed describes flexible, demand-responsive service (a service area or flexible stops, the GTFS-Flex extension to GTFS Schedule), but it has no…
Validator rule: scorecard_flex_no_booking_rules
Fix: trips don't say where they're headed
A trip's destination comes from trip_headsign in trips.txt (or stop_headsign in stop_times.txt for parts of a trip). Many of your trips leave it blank…
Validator rule: scorecard_missing_headsigns
Fix: the feed lists no technical contact
feed_info.txt is present but has neither feed_contact_email nor feed_contact_url, so there is no address to reach the people who maintain the feed.…
Validator rule: scorecard_no_feed_contact
Fix: the VehiclePositions realtime feed failed during sampling
The scorecard tried to sample your GTFS-Realtime VehiclePositions feed and it failed to return usable data during the sampling window.
Validator rule: scorecard_rt_vehicle_positions_unreachable
Fix: files contain columns that are not part of GTFS
A file in your feed has a column header that is not a field in the GTFS spec. Apps ignore columns they do not recognise, so these do no harm on their…
Validator rule: unknown_column
Fix: the feed contains a file that isn't part of GTFS
The zip contains a file whose name is not part of the GTFS spec. Apps ignore files they do not recognise, so an unknown file does no harm on its own.…
Validator rule: unknown_file