metro — Source Data Validation Report

This report was generated by the Canonical GTFS Schedule validator, version 8.0.1 at 2026-08-14T23:24:02Z,
for the dataset file:///shared/metro_95501872.zip. No country code was provided.

Use this report alongside our documentation.

Summary

Agencies included


  • Metropolitan Transit Authority of Harris County

Feed Info


Publisher Name:
Metropolitan Transit Authority of Harris County
Feed Email:
N/A
Feed Language:
English
Feed Start Date:
2026-02-22
Feed End Date:
2026-06-06

Files included


  1. agency.txt
  2. calendar.txt
  3. calendar_dates.txt
  4. direction_names_exceptions.txt
  5. fare_attributes.txt
  6. fare_rules.txt
  7. feed_info.txt
  8. routes.txt
  9. shapes.txt
  10. stop_times.txt
  11. stops.txt
  12. trips.txt

Counts


  • Agencies: 1
  • Blocks: 2097
  • Routes: 115
  • Shapes: 345
  • Stops: 8793
  • Trips: 21878

Specification Compliance report

18517 notices reported (0 errors, 18465 warnings, 52 infos)

Notice Code Severity Total
equal_shape_distance_diff_coordinates_distance_below_threshold WARNING 209

equal_shape_distance_diff_coordinates_distance_below_threshold

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

When sorted by shape.shape_pt_sequence, the values for shape_dist_traveled must increase along a shape. Two consecutive points with equal values for shape_dist_traveled and small difference of coordinates (greater than 0 but less than 1.11 m distance) result in a warning.

You can see more about this notice here.

Only the first 50 of 209 affected records are displayed below.

shapeId (?) The id of the faulty shape. csvRowNumber (?) The row number from `shapes.txt`. shapeDistTraveled (?) The faulty record's `shape_dist_traveled` value. shapePtSequence (?) The faulty record's `shapes.shape_pt_sequence`. prevCsvRowNumber (?) The row number from `shapes.txt` of the previous shape point. prevShapeDistTraveled (?) The previous shape point's `shape_dist_traveled` value. prevShapePtSequence (?) The previous record's `shapes.shape_pt_sequence`. actualDistanceBetweenShapePoints (?) Actual distance traveled along the shape from the first shape point to the previous shape point.
"282391" 64785 10.9931 319 64784 10.9931 318 0.8765795519686573
"282391" 64787 11.1301 321 64786 11.1301 320 0.2898363522485931
"282388" 62595 7.8402 210 62594 7.8402 209 0.730082908055616
"282388" 62597 7.9342 212 62596 7.9342 211 0.8964515412160818
"282388" 62607 8.5974 222 62606 8.5974 221 0.4848381379273324
"282388" 62609 8.6924 224 62608 8.6924 223 0.24241874129528518
"282385" 61175 1.9855 79 61174 1.9855 78 0.34727757049293073
"282385" 61177 2.0066 81 61176 2.0066 80 0.8913326695258973
"282386" 61859 7.8372 209 61858 7.8372 208 0.730082908055616
"282386" 61861 7.9312 211 61860 7.9312 210 0.8964515412160818
"282386" 61871 8.5944 221 61870 8.5944 220 0.4848381379273324
"282386" 61873 8.6895 223 61872 8.6895 222 0.24241874129528518
"282383" 61008 13.4028 432 61007 13.4028 431 0.8913326695258973
"282383" 61010 13.424 434 61009 13.424 433 0.34727757049293073
"282381" 60089 13.6642 447 60088 13.6642 446 0.5794930981245809
"282381" 60575 28.7057 933 60574 28.7057 932 0.3473163511290764
"282490" 125553 23.9188 597 125552 23.9188 596 0.8019709323313938
"282490" 125555 23.957 599 125554 23.957 598 0.910287130758971
"282489" 124724 23.7292 636 124723 23.7292 635 0.8019709323313938
"282489" 124726 23.7674 638 124725 23.7674 637 0.910287130758971
"282486" 122677 7.666 193 122676 7.666 192 0.910287130758971
"282486" 122679 7.7042 195 122678 7.7042 194 0.8019709323313938
"282487" 123503 7.666 193 123502 7.666 192 0.910287130758971
"282487" 123505 7.7042 195 123504 7.7042 194 0.8019709323313938
"282482" 120458 0.563 16 120457 0.563 15 0.8688910665071186
"282483" 121265 0.563 16 121264 0.563 15 0.8688910665071186
"282505" 138202 8.2787 330 138201 8.2787 329 0.6741158313982515
"282505" 138204 8.3318 332 138203 8.3318 331 0.11119510090982554
"282506" 139698 28.4608 754 139697 28.4608 753 0.11119510090982554
"282506" 139700 28.514 756 139699 28.514 755 0.6741158313982515
"282614" 210528 18.6654 500 210527 18.6654 499 0.31037172525509554
"282614" 210530 18.6838 502 210529 18.6838 501 0.6671706068736016
"282612" 208847 13.6879 207 208846 13.6879 206 0.6671706068736016
"282612" 208849 13.7063 209 208848 13.7063 208 0.31037172525509554
"282297" 2014 18.5078 462 2013 18.5078 461 0.9509043783899461
"282297" 2016 18.5908 464 2015 18.5908 463 0.8831004446865949
"282439" 92065 4.2907 157 92064 4.2907 156 0.6741139532422422
"282439" 92067 4.3057 159 92066 4.3057 158 0.6741139718746043
"282439" 92636 21.4497 728 92635 21.4497 727 0.11119510161714974
"282439" 92638 21.5017 730 92637 21.5017 729 0.8305998312103255
"282437" 90635 23.0825 705 90634 23.0825 704 0.6741139718746043
"282437" 90637 23.0975 707 90636 23.0975 706 0.6741139532422422
"282438" 91485 23.0825 705 91484 23.0825 704 0.6741139718746043
"282438" 91487 23.0975 707 91486 23.0975 706 0.6741139532422422
"282556" 173071 16.1526 486 173070 16.1526 485 0.772182476847723
"282556" 173073 16.1701 488 173072 16.1701 487 0.4848672432962581
"282436" 89507 23.0825 705 89506 23.0825 704 0.6741139718746043
"282436" 89509 23.0975 707 89508 23.0975 706 0.6741139532422422
"282433" 87740 14.4943 304 87739 14.4943 303 0.6268377435519649
"282433" 87743 14.6473 307 87742 14.6473 306 0.6846260228030563
feed_expiration_date7_days WARNING 1

feed_expiration_date7_days

Dataset should be valid for at least the next 7 days.

The dataset expiration date defined in feed_info.txt is in seven days or less. At any time, the published GTFS dataset should be valid for at least the next 7 days.

You can see more about this notice here.

csvRowNumber (?) The row number of the faulty record. currentDate (?) Current date (YYYYMMDD format). feedEndDate (?) Feed end date (YYYYMMDD format). suggestedExpirationDate (?) Suggested expiration date (YYYYMMDD format).
2 "20260814" "20260606" "20260821"
missing_feed_contact_email_and_url WARNING 1

missing_feed_contact_email_and_url

Best Practices for feed_info.txt suggest providing at least one of feed_contact_email and feed_contact_url.

You can see more about this notice here.

csvRowNumber (?) The row number of the validated record.
2
mixed_case_recommended_field WARNING 18171

mixed_case_recommended_field

This field has customer-facing text and should use Mixed Case (should contain upper and lower case letters).

This field contains customer-facing text and should use Mixed Case (upper and lower case letters) to ensure good readability when displayed to riders. Avoid the use of abbreviations throughout the feed (e.g. St. for Street) unless a location is called by its abbreviated name (e.g. “JFK Airport”). Abbreviations may be problematic for accessibility by screen reader software and voice user interfaces.

Good examples:
Field Text Dataset
"Schwerin, Hauptbahnhof" Verkehrsverbund Berlin-Brandenburg
"Red Hook/Atlantic Basin" NYC Ferry
"Campo Grande Norte" Carris
Bad examples:
Field Text
"GALLERIA MALL"
"3427 GG 17"
"21 Clark Rd Est"

You can see more about this notice here.

Only the first 50 of 18171 affected records are displayed below.

filename (?) Name of the faulty file. fieldName (?) Name of the faulty field. fieldValue (?) Faulty value. csvRowNumber (?) The row number of the faulty record.
"routes.txt" "route_long_name" "DOWNTOWN DIRECT" 113
"routes.txt" "route_long_name" "METRORAIL RED LINE" 114
"routes.txt" "route_long_name" "METRORAIL GREEN LINE" 115
"routes.txt" "route_long_name" "METRORAIL PURPLE LINE" 116
"trips.txt" "trip_headsign" "TMC TC" 2
"trips.txt" "trip_headsign" "TMC TC" 3
"trips.txt" "trip_headsign" "TMC TC" 4
"trips.txt" "trip_headsign" "TMC TC" 5
"trips.txt" "trip_headsign" "TMC TC" 6
"trips.txt" "trip_headsign" "TMC TC" 7
"trips.txt" "trip_headsign" "TMC TC" 8
"trips.txt" "trip_headsign" "TMC TC" 9
"trips.txt" "trip_headsign" "TMC TC" 10
"trips.txt" "trip_headsign" "TMC TC" 11
"trips.txt" "trip_headsign" "TMC TC" 12
"trips.txt" "trip_headsign" "TMC TC" 13
"trips.txt" "trip_headsign" "TMC TC" 14
"trips.txt" "trip_headsign" "TMC TC" 15
"trips.txt" "trip_headsign" "TMC TC" 16
"trips.txt" "trip_headsign" "TMC TC" 17
"trips.txt" "trip_headsign" "TMC TC" 18
"trips.txt" "trip_headsign" "TMC TC" 19
"trips.txt" "trip_headsign" "TMC TC" 20
"trips.txt" "trip_headsign" "TMC TC" 21
"trips.txt" "trip_headsign" "TMC TC" 22
"trips.txt" "trip_headsign" "TMC TC" 23
"trips.txt" "trip_headsign" "TMC TC" 24
"trips.txt" "trip_headsign" "TMC TC" 25
"trips.txt" "trip_headsign" "TMC TC" 26
"trips.txt" "trip_headsign" "TMC TC" 27
"trips.txt" "trip_headsign" "TMC TC" 28
"trips.txt" "trip_headsign" "TMC TC" 29
"trips.txt" "trip_headsign" "TMC TC" 30
"trips.txt" "trip_headsign" "TMC TC" 31
"trips.txt" "trip_headsign" "TMC TC" 32
"trips.txt" "trip_headsign" "TMC TC" 33
"trips.txt" "trip_headsign" "TMC TC" 34
"trips.txt" "trip_headsign" "TMC TC" 35
"trips.txt" "trip_headsign" "TMC TC" 36
"trips.txt" "trip_headsign" "TMC TC" 37
"trips.txt" "trip_headsign" "TMC TC" 38
"trips.txt" "trip_headsign" "TMC TC" 39
"trips.txt" "trip_headsign" "TMC TC" 40
"trips.txt" "trip_headsign" "TMC TC" 41
"trips.txt" "trip_headsign" "TMC TC" 42
"trips.txt" "trip_headsign" "TMC TC" 43
"trips.txt" "trip_headsign" "TMC TC" 44
"trips.txt" "trip_headsign" "TMC TC" 45
"trips.txt" "trip_headsign" "TMC TC" 46
"trips.txt" "trip_headsign" "TMC TC" 47
same_name_and_description_for_stop WARNING 56

same_name_and_description_for_stop

Same name and description for stop.

The GTFS spec defines stops.txt stop_description as:

Description of the location that provides useful, quality information. Do not simply duplicate the name of the location.

You can see more about this notice here.

Only the first 50 of 56 affected records are displayed below.

csvRowNumber (?) The row number of the faulty record. stopId (?) The id of the faulty record. stopDesc (?) The faulty record's `stop_desc`.
557 "929" "ALMEDA MALL"
1436 "2360" "HOUSTON NORTHWEST HOSPITAL"
1437 "2361" "HOUSTON NORTHWEST HOSPITAL"
4545 "6809" "LSC UNIVERSITY PARK 2"
7097 "10567" "HOBBY AIRPORT"
7169 "10694" "LSC NORTH HARRIS 1"
7329 "11030" "WHEELER STATION (BUS)"
7414 "25001" "FANNIN SOUTH STN NB"
7417 "25005" "SMITH LANDS STN NB"
7418 "25006" "SMITH LANDS STN SB"
7421 "25009" "DRYDEN/TMC STN NB"
7422 "25010" "DRYDEN/TMC STN SB"
7425 "25013" "HERMANN PARK/RICE U STN NB"
7426 "25014" "HERMANN PARK/RICE U STN SB"
7427 "25015" "MUSEUM DISTRICT STN NB"
7428 "25016" "MUSEUM DISTRICT STN SB"
7429 "25017" "WHEELER STN NB"
7430 "25018" "WHEELER STN SB"
7431 "25019" "ENSEMBLE/HCC STN NB"
7432 "25020" "ENSEMBLE/HCC STN SB"
7433 "25021" "MCGOWEN STN NB"
7434 "25022" "MCGOWEN STN SB"
7437 "25025" "BELL STN NB"
7438 "25026" "BELL STN SB"
7439 "25027" "MAIN STREET SQUARE STN NB"
7440 "25028" "MAIN STREET SQUARE STN SB"
7441 "25029" "PRESTON STN NB"
7442 "25030" "PRESTON STN SB"
7443 "25031" "UH-DOWNTOWN STN NB"
7444 "25032" "UH-DOWNTOWN STN SB"
7445 "11303" "MEMORIAL HERMANN SOUTHEAST"
7481 "11380" "ALMEDA MALL"
7625 "11608" "HCC SOUTH CAMPUS"
7950 "25002" "FANNIN SOUTH STN SB"
8011 "25039" "MOODY PARK NB"
8012 "25041" "CAVALCADE NB"
8013 "25043" "LINDALE PARK NB"
8019 "25044" "LINDALE PARK SB"
8020 "25040" "MOODY PARK SB"
8021 "25042" "CAVALCADE SB"
8026 "25049" "CENTRAL STN MAIN SB"
8027 "25050" "CENTRAL STN MAIN NB"
8030 "25058" "EADO STADIUM STN WB"
8042 "25072" "LEELAND THIRD WARD NB"
8043 "25071" "LEELAND THIRD WARD SB"
8044 "25075" "ELGIN THIRD WARD SB"
8045 "25076" "ELGIN THIRD WARD NB"
8046 "25077" "ROBERTSON STADIUM UH TSU SB"
8047 "25078" "ROBERTSON STADIUM UH TSU NB"
8048 "25080" "UH SOUTH UNIVERSITY OAKS NB"
stop_too_far_from_shape WARNING 1

stop_too_far_from_shape

Stop too far from trip shape.

Per GTFS Best Practices, route alignments (in shapes.txt) should be within 100 meters of stop locations which a trip serves. This potentially indicates a problem with the location of the stop or the path of the shape.

You can see more about this notice here.

tripCsvRowNumber (?) The row number of the faulty record from `trips.txt`. shapeId (?) The id of the shape that is referred to. tripId (?) The id of the trip that is referred to. stopTimeCsvRowNumber (?) The row number of the faulty record from `stop_times.txt`. stopId (?) The id of the stop that is referred to. stopName (?) The name of the stop that is referred to. match (?) Latitude and longitude pair of the location. geoDistanceToShape (?) Distance from stop to shape.
4994 "282469" "11613973" 392479 "83" "North Shepherd Park & Ride" [29.876984,-95.41425500000001] 108.70955057508498
stop_too_far_from_shape_using_user_distance WARNING 3

stop_too_far_from_shape_using_user_distance

Stop time too far from shape.

A stop time entry that is a large distance away from the location of the shape in shapes.txt as defined by shape_dist_traveled values.

You can see more about this notice here.

tripCsvRowNumber (?) The row number of the faulty record from `trips.txt`. shapeId (?) The id of the shape that is referred to. tripId (?) The id of the trip that is referred to. stopTimeCsvRowNumber (?) The row number of the faulty record from `stop_times.txt`. stopId (?) The id of the stop that is referred to. stopName (?) The name of the stop that is referred to. match (?) Latitude and longitude pair of the location. geoDistanceToShape (?) Distance from stop to shape.
5029 "282471" "11614008" 395041 "83" "North Shepherd Park & Ride" [29.876984,-95.41425500000001] 108.70955057508498
4738 "282456" "11613136" 377831 "13222" "Airport Blvd @ Park South View" [29.64358000000001,-95.38333000000002] 185.4480956487263
4424 "282443" "11612108" 352504 "4928" "Jensen Dr @ Skippy St" [29.85372923118595,-95.33976600012859] 170.82446629762458
stop_without_stop_time WARNING 6

stop_without_stop_time

A stop in stops.txt is not referenced by any stop_times.stop_id.

Such stops are not used by any trip and normally do not provide user value. This notice may indicate a typo in stop_times.txt.

You can see more about this notice here.

csvRowNumber (?) The row number of the faulty record. stopId (?) The id of the faulty stop. stopName (?) The name of the faulty stop.
4790 "7076" "Knox St @ Rachel St"
4791 "7080" "De Priest St @ Dillard St"
8683 "13108" "North Freeway @ West Rd"
8686 "13111" "SH 6 @ Wal Mart"
8724 "13164" "Shepherd Dr @ Mayfair Park Apt"
8725 "13165" "Ringold St @ Lawn St"
unused_shape WARNING 17

unused_shape

Shape is not used in GTFS file trips.txt.

All records defined by GTFS shapes.txt should be used in trips.txt.

You can see more about this notice here.

shapeId (?) The faulty record's id. csvRowNumber (?) The row number of the faulty record.
"282637" 215676
"282638" 215921
"282639" 216161
"282640" 216289
"282641" 216410
"282642" 216717
"282643" 216798
"282644" 216898
"282645" 217089
"282646" 217380
"282648" 217470
"282653" 218487
"282654" 218752
"282656" 219063
"282657" 219443
"282658" 219603
"282659" 219953
big_gap_in_service INFO 12

big_gap_in_service

A service has a gap of more than 13 days between active service dates.

You can see more about this notice here.

serviceId (?) The service_id that has the gap. gapStartDate (?) The first day of the gap. gapEndDate (?) The last day of the gap. gapDurationDays (?) The number of days in the gap.
"606" "2026-12-18" "2027-01-08" 20
"806" "2026-03-03" "2026-04-07" 34
"806" "2026-04-07" "2026-05-05" 27
"806" "2026-05-05" "2026-06-02" 27
"806" "2026-06-02" "2026-07-07" 34
"806" "2026-07-07" "2026-08-04" 27
"806" "2026-08-04" "2026-09-01" 27
"806" "2026-09-01" "2026-10-06" 34
"806" "2026-10-06" "2026-11-03" 27
"806" "2026-11-03" "2026-12-01" 27
"806" "2026-12-01" "2027-01-05" 34
"806" "2027-01-05" "2027-02-02" 27
service_window_outside_feed_period INFO 3

service_window_outside_feed_period

A service window is not covered by the feed's validity period.

You can see more about this notice here.

serviceId (?) The service_id whose active window extends outside the feed validity period. serviceWindowStartDate (?) The first active date of the service window. serviceWindowEndDate (?) The last active date of the service window. daysBeforeFeedStart (?) Number of days the service window extends before feed_start_date (0 if none). daysAfterFeedEnd (?) Number of days the service window extends after feed_end_date (0 if none).
"4" "2026-02-28" "2027-02-06" 0 245
"5" "2026-02-22" "2027-01-31" 0 239
"6" "2026-02-23" "2027-02-05" 0 244
trip_headsign_matches_intermediate_stop INFO 35

trip_headsign_matches_intermediate_stop

Trip headsign matches the name of an intermediate stop, not the last stop.

The trip_headsign matches the stop_name of a stop that is not the last stop of the trip. This may confuse passengers boarding after that stop, since the headsign suggests the vehicle is heading to a stop it has already passed.

You can see more about this notice here.

csvRowNumber (?) The row number of the faulty record in `trips.txt`. tripId (?) The id of the trip with the problematic headsign. tripHeadsign (?) The headsign value that matches an intermediate stop name. stopId1 (?) The id of the intermediate stop whose name matches the headsign. stopSequence (?) The stop_sequence value of the intermediate stop that matches the headsign. stopId2 (?) The id of the actual last stop of the trip.
4770 "11613250" "HOBBY AIRPORT" "10567" 49 "13195"
4771 "11613251" "HOBBY AIRPORT" "10567" 49 "13195"
4772 "11613249" "HOBBY AIRPORT" "10567" 49 "13195"
4773 "11613252" "HOBBY AIRPORT" "10567" 49 "13195"
4774 "11613248" "HOBBY AIRPORT" "10567" 49 "13195"
4775 "11613253" "HOBBY AIRPORT" "10567" 49 "13195"
4776 "11613247" "HOBBY AIRPORT" "10567" 49 "13195"
4777 "11613254" "HOBBY AIRPORT" "10567" 49 "13195"
4778 "11613246" "HOBBY AIRPORT" "10567" 49 "13195"
4779 "11613255" "HOBBY AIRPORT" "10567" 49 "13195"
4780 "11613245" "HOBBY AIRPORT" "10567" 49 "13195"
4781 "11613256" "HOBBY AIRPORT" "10567" 49 "13195"
4782 "11613244" "HOBBY AIRPORT" "10567" 49 "13195"
4783 "11613257" "HOBBY AIRPORT" "10567" 49 "13195"
4784 "11613243" "HOBBY AIRPORT" "10567" 49 "13195"
4785 "11613258" "HOBBY AIRPORT" "10567" 49 "13195"
4786 "11613242" "HOBBY AIRPORT" "10567" 49 "13195"
4787 "11613259" "HOBBY AIRPORT" "10567" 49 "13195"
4788 "11613241" "HOBBY AIRPORT" "10567" 49 "13195"
4789 "11613260" "HOBBY AIRPORT" "10567" 49 "13195"
4790 "11613240" "HOBBY AIRPORT" "10567" 49 "13195"
4791 "11613261" "HOBBY AIRPORT" "10567" 49 "13195"
4792 "11613239" "HOBBY AIRPORT" "10567" 49 "13195"
4793 "11613262" "HOBBY AIRPORT" "10567" 49 "13195"
4794 "11613238" "HOBBY AIRPORT" "10567" 49 "13195"
4795 "11613263" "HOBBY AIRPORT" "10567" 49 "13195"
4796 "11613237" "HOBBY AIRPORT" "10567" 49 "13195"
4797 "11613264" "HOBBY AIRPORT" "10567" 49 "13195"
4798 "11613236" "HOBBY AIRPORT" "10567" 49 "13195"
4799 "11613265" "HOBBY AIRPORT" "10567" 49 "13195"
4800 "11613235" "HOBBY AIRPORT" "10567" 49 "13195"
4801 "11613266" "HOBBY AIRPORT" "10567" 49 "13195"
4802 "11613234" "HOBBY AIRPORT" "10567" 49 "13195"
4803 "11613267" "HOBBY AIRPORT" "10567" 49 "13195"
4804 "11613233" "HOBBY AIRPORT" "10567" 49 "13195"
unknown_column INFO 1

unknown_column

A column name is unknown.

You can see more about this notice here.

filename (?) The name of the faulty file. fieldName (?) The name of the unknown column. index (?) The index of the faulty column.
"trips.txt" "ots_trip_short_name" 11
unknown_file INFO 1

unknown_file

A file is unknown.

You can see more about this notice here.

filename (?) The name of the unknown file.
"direction_names_exceptions.txt"