Skip to content

MobilityData canonical GTFS Schedule validator rules

181 of 181 rules

CodeDescriptionSeverityCategory
attribution_without_roleAttribution with no role.WARNINGintegrity
bidirectional_exit_gatePathway is bidirectional and has mode 7 (exit gate).ERRORsemantic
big_gap_in_serviceA service has a gap of more than 13 days between active service dates.INFOcurrency
block_trips_with_overlapping_stop_timesTrips with the same block id have overlapping stop times.ERRORsemantic
csv_parsing_failedParsing of a CSV file failed.ERRORstructure
decreasing_or_equal_stop_time_distanceDecreasing or equal `shape_dist_traveled` in `stop_times.txt`.ERRORsemantic
decreasing_shape_distanceDecreasing `shape_dist_traveled` in `shapes.txt`.ERRORsemantic
duplicate_fare_mediaTwo distinct fare media have the same fare media name and type.WARNINGquality
duplicate_geo_json_keyA key in `locations.geojson` is duplicated.ERRORstructure
duplicate_geography_idGeography id is duplicated across multiple files.ERRORintegrity
duplicate_keyDuplicated entity.ERRORintegrity
duplicate_route_nameTwo distinct routes have either the same `route_short_name`, the same `route_long_name`, or the same combination of `route_short_name` and `route_long_name`.WARNINGquality
duplicated_columnDuplicated column in CSV.ERRORstructure
empty_column_nameA column name is empty.ERRORstructure
empty_fileA CSV file is empty.ERRORstructure
empty_rowA row in the input file has only spaces.WARNINGstructure
equal_shape_distance_diff_coordinatesTwo consecutive points have equal `shape_dist_traveled` and different lat/lon coordinates in `shapes.txt` and the distance between the two points is greater than the 1.11m.ERRORsemantic
equal_shape_distance_diff_coordinates_distance_below_thresholdTwo consecutive points have equal `shape_dist_traveled` and different lat/lon coordinates in `shapes.txt` and the distance between the two points is greater than 0 but less than 1.11m.WARNINGsemantic
equal_shape_distance_same_coordinatesTwo consecutive points have equal `shape_dist_traveled` and the same lat/lon coordinates in `shapes.txt`.WARNINGquality
expired_calendarDataset should not contain date ranges for services that have already expired.WARNINGcurrency
fare_product_with_multiple_default_rider_categoriesThis notice is generated when a fare product is associated with multiple rider categories that are marked as default.ERRORsemantic
fare_transfer_rule_duration_limit_type_without_duration_limitA row from GTFS file `fare_transfer_rules.txt` has a defined `duration_limit_type` field but no `duration_limit` specified.ERRORintegrity
fare_transfer_rule_duration_limit_without_typeA row from GTFS file `fare_transfer_rules.txt` has a defined `duration_limit` field but no `duration_limit_type` specified.ERRORintegrity
fare_transfer_rule_invalid_transfer_countA row from GTFS file `fare_transfer_rules.txt` has a defined `transfer_count` with an invalid value.ERRORformat
fare_transfer_rule_missing_transfer_countA row from `fare_transfer_rules.txt` has `from_leg_group_id` equal to `to_leg_group_id`, but has no `transfer_count` specified.integrity
fare_transfer_rule_with_forbidden_transfer_countA row from `fare_transfer_rules.txt` has `from_leg_group_id` not equal to `to_leg_group_id`, but has `transfer_count` specified.ERRORintegrity
fare_transfer_rule_without_transfer_countA row from `fare_transfer_rules.txt` has `from_leg_group_id` equal to `to_leg_group_id`, but has no `transfer_count` specified.ERRORintegrity
fast_travel_between_consecutive_stopsA transit vehicle moves too fast between two consecutive stops.WARNINGplausibility
fast_travel_between_far_stopsA transit vehicle moves too fast between two far stops.WARNINGplausibility
feed_expiration_date30_daysDataset should cover at least the next 30 days of service.WARNINGcurrency
feed_expiration_date7_daysDataset should be valid for at least the next 7 days.WARNINGcurrency
feed_info_lang_and_agency_lang_mismatchMismatching feed and agency language fields.WARNINGsemantic
feed_valid_beyond_total_service_windowThe feed is valid 14 days beyond its total service window.INFOcurrency
forbidden_arrival_or_departure_timeThe arrival or departure times are provided alongside pickup or drop-off windows in `stop_times.txt`.ERRORintegrity
forbidden_continuous_pickup_drop_offContinuous pickup or drop-off are forbidden when routes.continuous_pickup or routes.continuous_drop_off are 0, 2 or 3 and stop_times.start_pickup_drop_off_window or stop_times.end_pickup_drop_off_window are defined for any trip of this route.ERRORintegrity
forbidden_drop_off_typepickup_drop_off_window fields are forbidden when the drop_off_type is regularly scheduled (0).ERRORintegrity
forbidden_geography_idA stop_time entry has more than one geographical id defined.ERRORintegrity
forbidden_pickup_typepickup_drop_off_window fields are forbidden when the pickup_type is regularly scheduled (0) or must be coordinated with the driver (3).ERRORintegrity
forbidden_prior_day_booking_field_valueA forbidden field value is present for a prior-day booking rule in `booking_rules.txt`ERRORintegrity
forbidden_prior_notice_start_day`prior_notice_start_day` value is forbidden when `prior_notice_duration_max` is set.ERRORintegrity
forbidden_prior_notice_start_time`prior_notice_start_time` value is forbidden when `prior_notice_start_day` value is not set in booking_rules.txt.ERRORintegrity
forbidden_real_time_booking_field_valueA forbidden field value is present for a real-time booking rule in `booking_rules.txt`.ERRORintegrity
forbidden_same_day_booking_field_valueA forbidden field value is present for a same-day booking rule in `booking_rules.txt`.ERRORintegrity
forbidden_shape_dist_traveledA stop_time entry has a `shape_dist_traveled` without a `stop_id` value.ERRORintegrity
foreign_key_violationWrong foreign key.ERRORintegrity
future_calendarAll services in the feed start in the future; no service covers today's date.INFOcurrency
future_feedThe feed covers the future only.INFOcurrency
geo_json_duplicated_elementDuplicated elements in locations.geojson file.ERRORstructure
geo_json_unknown_elementUnknown elements in locations.geojson file.INFOstructure
i_o_errorError in IO operation.ERRORruntime
inconsistent_agency_langInconsistent language among agencies.WARNINGsemantic
inconsistent_agency_timezoneInconsistent Timezone among agencies.ERRORsemantic
inconsistent_route_type_for_block_idA block should have the same route mode.WARNINGsemantic
inconsistent_route_type_for_in_seat_transferAn in-seat transfer should occur in the same route mode.WARNINGsemantic
invalid_characterThis field contains invalid characters, such as the replacement character ("\uFFFD").ERRORformat
invalid_colorA field contains an invalid color value.ERRORformat
invalid_currencyA field contains a wrong currency code.ERRORformat
invalid_currency_amountA currency amount field has a value that does not match the format of its corresponding currency code field.ERRORformat
invalid_dateA field cannot be parsed as date.ERRORformat
invalid_emailA field contains a malformed email address.ERRORformat
invalid_floatA field cannot be parsed as a floating point number.ERRORformat
invalid_geometryA polygon in `locations.geojson` is unparsable or invalid.ERRORformat
invalid_input_files_in_subfolderAt least 1 GTFS file is in a subfolder.ERRORpackage
invalid_integerA field cannot be parsed as an integer.ERRORformat
invalid_language_codeA field contains a wrong language code.ERRORformat
invalid_phone_numberA field contains a malformed phone number.ERRORformat
invalid_pickup_drop_off_windowThe pickup/drop-off window in `stop_times.txt` is invalid.ERRORsemantic
invalid_prior_notice_duration_minAn invalid `prior_notice_duration_min` value is present in a booking rule.ERRORsemantic
invalid_row_lengthInvalid csv row length.ERRORstructure
invalid_timeA field cannot be parsed as time.ERRORformat
invalid_timezoneA field cannot be parsed as a timezone.ERRORformat
invalid_urlA field contains a malformed URL.ERRORformat
leading_or_trailing_whitespacesThe value in CSV file has leading or trailing whitespaces.WARNINGstructure
location_with_unexpected_stop_timeA location in `stops.txt` that is not a stop is referenced by some `stop_times.stop_id`.ERRORsemantic
location_without_parent_stationA location that must have `parent_station` field does not have it.ERRORintegrity
malformed_jsonA JSON file is malformed.ERRORstructure
missing_bike_allowanceFerry trips should include bike allowance information.WARNINGquality
missing_calendar_and_calendar_date_filesMissing GTFS files `calendar.txt` and `calendar_dates.txt`.ERRORpackage
missing_feed_contact_email_and_urlBest Practices for `feed_info.txt` suggest providing at least one of `feed_contact_email` and `feed_contact_url`.WARNINGquality
missing_feed_info_dateOne of `feed_start_date` or `feed_end_date` is specified, but not both.WARNINGintegrity
missing_level_id`stops.level_id` is conditionally required.ERRORintegrity
missing_pickup_drop_off_booking_rule_idpickup_booking_rule_id is recommended when pickup_type=2 and drop_off_booking_rule_id is recommended when drop_off_type=2.WARNINGintegrity
missing_pickup_or_drop_off_windowEither the start or end pickup/drop-off window is missing in `stop_times.txt`.ERRORintegrity
missing_prior_day_booking_field_valueThe `prior_notice_last_day` and the `prior_notice_last_time` values are required for prior day `booking_type` in booking_rules.txt.integrity
missing_prior_notice_duration_min`prior_notice_duration_min` value is required for same day `booking_type` in booking_rules.txt.ERRORintegrity
missing_prior_notice_last_dayThe `prior_notice_last_day` is required when booking_type=2 (prior day booking) is specified in booking_rules.txt.ERRORintegrity
missing_prior_notice_last_timeThe `prior_notice_last_time` is required when booking_type=2 (prior day booking) is specified in booking_rules.txt.ERRORintegrity
missing_prior_notice_start_time`prior_notice_start_time` value is required when `prior_notice_start_day` value is set in booking_rules.txt.ERRORintegrity
missing_recommended_columnA recommended column is missing in the input file.quality
missing_recommended_fieldA recommended field is missing.WARNINGquality
missing_recommended_fileA recommended file is missing.WARNINGquality
missing_required_agency_idAgency id is required when there are multiple agencies.ERRORintegrity
missing_required_columnA required column is missing in the input file.ERRORstructure
missing_required_elementA required element is missing in `locations.geojson`.ERRORstructure
missing_required_fieldA required field is missing.ERRORstructure
missing_required_fileA required file is missing.ERRORpackage
missing_stop_name`stops.stop_name` is required for `location_type` equal to `0`, `1`, or `2`.ERRORintegrity
missing_stop_times_recordOnly one stop_times record is found where two are required.ERRORsemantic
missing_timepoint_value`stop_times.timepoint` value is missing for a record.WARNINGintegrity
missing_trip_edgeMissing trip edge `arrival_time` or `departure_time`.ERRORsemantic
mixed_case_recommended_fieldThis field has customer-facing text and should use Mixed Case (should contain upper and lower case letters).WARNINGquality
more_than_one_entityMore than one row in CSV.WARNINGstructure
new_line_in_valueNew line or carriage return in a value in CSV file.ERRORstructure
non_ascii_or_non_printable_charNon ascii or non printable char in ID field.WARNINGquality
number_out_of_rangeOut of range value.ERRORformat
overlapping_frequencyTrip frequencies overlap.ERRORsemantic
overlapping_zone_and_pickup_drop_off_windowTwo entities have overlapping pickup/drop-off windows and zones.ERRORsemantic
pathway_dangling_generic_nodeA generic node has only one incident location in a pathway graph.WARNINGsemantic
pathway_loopA pathway starts and ends at the same location.WARNINGsemantic
pathway_to_platform_with_boarding_areasA pathway has an endpoint that is a platform which has boarding areas.ERRORsemantic
pathway_to_stop_with_access_outside_of_station_pathwaysA pathway has an endpoint that is a stop with stop_access=1, which should be accessible outside of the station's pathways.ERRORsemantic
pathway_to_wrong_location_typeA pathway has an endpoint that is a station.ERRORsemantic
pathway_unreachable_locationA location is not reachable at least in one direction: from the entrances or to the exits.ERRORsemantic
platform_without_parent_stationA platform has no `parent_station` field set.INFOintegrity
point_near_originA point is too close to origin `(0, 0)`.ERRORplausibility
point_near_poleA point is too close to the North or South Pole.ERRORplausibility
prior_notice_last_day_after_start_dayPrior notice last day should not be greater than the prior notice start day in booking_rules.txt.ERRORsemantic
route_both_short_and_long_name_missingBoth `route_short_name` and `route_long_name` are missing for a route.ERRORintegrity
route_color_contrastInsufficient route color contrast.WARNINGquality
route_long_name_contains_short_nameLong name should not contain short name for a single route.WARNINGquality
route_networks_specified_in_more_than_one_fileIndicates that route network identifiers are specified across multiple files.ERRORintegrity
route_short_name_too_longShort name of a route is too long (more than 12 characters).WARNINGquality
runtime_exception_in_loader_errorRuntimeException while loading GTFS dataset in memory.ERRORruntime
runtime_exception_in_validator_errorRuntimeException while validating GTFS archive.ERRORruntime
same_name_and_description_for_routeSame name and description for route.WARNINGquality
same_name_and_description_for_stopSame name and description for stop.WARNINGquality
same_route_and_agency_urlSame `routes.route_url` and `agency.agency_url`.WARNINGquality
same_stop_and_agency_urlSame `stops.stop_url` and `agency.agency_url`.WARNINGquality
same_stop_and_route_urlSame `stops.stop_url` and `routes.route_url`.WARNINGquality
service_extends_far_in_the_futureA service end date is more than 2 years in the future.INFOcurrency
service_has_no_active_day_of_the_weekA service is not valid for any day of the week.WARNINGsemantic
service_window_outside_feed_periodA service window is not covered by the feed's validity period.INFOcurrency
single_shape_pointThe shape within `shapes.txt` contains a single shape point.WARNINGsemantic
start_and_end_range_equalTwo date or time fields are equal.ERRORsemantic
start_and_end_range_out_of_orderTwo date or time fields are out of order.ERRORsemantic
station_with_parent_stationA station has `parent_station` field set.ERRORintegrity
stop_access_specified_for_incorrect_locationA location that is not a stop has stop_access specified.ERRORintegrity
stop_access_specified_for_stop_with_no_parent_stationA stop without a value for parent station has stop_access specified.ERRORintegrity
stop_has_too_many_matches_for_shapeStop entry that has many potential matches to the trip's path of travel, as defined by the shape entry in `shapes.txt`.WARNINGplausibility
stop_time_timepoint_without_times`arrival_time` or `departure_time` not specified for timepoint.ERRORintegrity
stop_time_with_arrival_before_previous_departure_timeBackwards time travel between stops in `stop_times.txt`ERRORsemantic
stop_time_with_only_arrival_or_departure_timeMissing `stop_times.arrival_time` or `stop_times.departure_time`.ERRORintegrity
stop_too_far_from_shapeStop too far from trip shape.WARNINGplausibility
stop_too_far_from_shape_using_user_distanceStop time too far from shape.WARNINGplausibility
stop_without_location`stop_lat` and/or `stop_lon` is missing for stop with `location_type` equal to`0`, `1`, or `2`ERRORintegrity
stop_without_stop_timeA stop in `stops.txt` is not referenced by any `stop_times.stop_id`.WARNINGquality
stop_without_zone_idStop without value for `stops.zone_id` contained in a route with a zone-dependent fare rule.INFOintegrity
stops_match_shape_out_of_orderTwo stop entries are different than their arrival-departure order defined by `shapes.txt`.WARNINGplausibility
thread_execution_errorExecutionException during multithreaded validationERRORruntime
timeframe_only_start_or_end_time_specifiedA row from `timeframes.txt` was found with only one of `start_time` and `end_time` specified.ERRORintegrity
timeframe_overlapTwo entries in `timeframes.txt` with the same `timeframe_group_id` and `service_id` have overlapping time intervals.ERRORsemantic
timeframe_start_or_end_time_greater_than_twenty_four_hoursA time in `timeframes.txt` is greater than `24:00:00`.ERRORformat
too_many_rowsA CSV file has too many rows.ERRORstructure
transfer_distance_above_2_kmThe transfer distance from stop to stop in `transfers.txt` is larger than 2 km.INFOplausibility
transfer_distance_too_largeThe transfer distance from stop to stop in `transfers.txt` is larger than 10 km.WARNINGplausibility
transfer_with_invalid_stop_location_typeA stop id field from GTFS file `transfers.txt` references a stop that has a `location_type` other than 0 or 1 (aka Stop/Platform or Station).ERRORintegrity
transfer_with_invalid_trip_and_routeA trip id field from GTFS file `transfers.txt` references a route that does not match its `trips.txt` `route_id`.ERRORintegrity
transfer_with_invalid_trip_and_stopA trip id field from GTFS file `transfers.txt` references a stop that is not included in the referenced trip's stop-times.ERRORintegrity
transfer_with_suspicious_mid_trip_in_seatA trip id field from GTFS file `transfers.txt` with an in-seat transfer type references a stop that is not in the expected position in the trip's stop-times.WARNINGplausibility
translation_foreign_key_violationAn entity with the given `record_id` and `record_sub_id` cannot be found in the referenced table.ERRORintegrity
translation_unexpected_valueA field in a translations row has value but must be empty.ERRORintegrity
translation_unknown_table_nameA translation references an unknown or missing GTFS table.WARNINGintegrity
trip_coverage_not_active_for_next7_daysTrips data should be valid for at least the next seven days.WARNINGcurrency
trip_distance_exceeds_shape_distanceThe distance between the last shape point and last stop point is greater than or equal to the 11.1m threshold.ERRORsemantic
trip_distance_exceeds_shape_distance_below_thresholdThe distance between the last shape point and last stop point is greater than 0 but less than the 11.1m threshold.WARNINGsemantic
trip_headsign_matches_intermediate_stopTrip headsign matches the name of an intermediate stop, not the last stop.INFOquality
trip_with_shape_dist_traveled_but_no_shape_distancesA trip has shape_dist_traveled values in stop_times.txt but the shape referenced by the trip's shape_id does not have shape_dist_traveled values on all of its points in shapes.txt.INFOsemantic
u_r_i_syntax_errorA string could not be parsed as a URI reference.ERRORformat
unexpected_enum_valueAn enum has an unexpected value.WARNINGformat
unknown_columnA column name is unknown.INFOstructure
unknown_fileA file is unknown.INFOpackage
unsorted_stop_timesStop times are not sorted by trip_id and stop_sequence.INFOquality
unsupported_feature_typeAn unsupported feature type is used in the `locations.geojson` file.ERRORstructure
unsupported_geo_json_typeAn unsupported GeoJSON type is used in the `locations.geojson` file.ERRORstructure
unsupported_geometry_typeA GeoJSON feature has an unsupported geometry type in `locations.geojson`.ERRORstructure
unusable_tripTrips must have more than one stop to be usable.WARNINGsemantic
unused_parent_stationUnused parent station.quality
unused_shapeShape is not used in GTFS file `trips.txt`.WARNINGquality
unused_stationUnused station.INFOquality
unused_tripTrip is not be used in `stop_times.txt`WARNINGquality
wrong_parent_location_typeIncorrect type of the parent location.ERRORintegrity

Co-financed by the Connecting Europe Facility of the European Union