metro — Source Data Validation Report

This report was generated by the Canonical GTFS Schedule validator, version 7.1.0 at 2026-06-11T08:20:46Z,
for the dataset file:///shared/metro_2fb3bc06.zip. No country code was provided.

Use this report alongside our documentation.

A new version of the Canonical GTFS Schedule validator is available! Please update to get the latest/best validation results.

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-06-07
Feed End Date:
2026-07-11

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: 2340
  • Routes: 115
  • Shapes: 347
  • Stops: 8800
  • Trips: 25018

Specification Compliance report

20032 notices reported (0 errors, 20030 warnings, 2 infos)

Notice Code Severity Total
equal_shape_distance_diff_coordinates_distance_below_threshold WARNING 210

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 210 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.
"284219" 29292 5.5325 154 29291 5.5325 153 0.730082908055616
"284219" 29294 5.6265 156 29293 5.6265 155 0.8964515412160818
"284339" 106673 13.9524 328 106672 13.9524 327 0.8767057875818797
"284339" 106675 14.0364 330 106674 14.0364 329 0.29462447070197967
"284459" 188554 17.98 417 188553 17.98 416 0.11119510161714974
"284459" 188556 18.032 419 188555 18.032 418 0.11119510090982554
"284459" 188765 32.0214 628 188764 32.0214 627 0.6671706068736016
"284459" 188767 32.0398 630 188766 32.0398 629 0.31037172525509554
"284337" 106024 14.2936 298 106023 14.2936 297 0.29462447070197967
"284337" 106026 14.3776 300 106025 14.3776 299 0.8767057875818797
"284337" 106128 19.6126 402 106127 19.6126 401 0.11119510090982554
"284337" 106130 19.6292 404 106129 19.6292 403 0.1931790031023086
"284458" 187422 17.98 417 187421 17.98 416 0.11119510161714974
"284458" 187424 18.032 419 187423 18.032 418 0.11119510090982554
"284457" 186220 2.5928 56 186219 2.5928 55 0.8688910665071186
"284457" 186433 13.3892 269 186432 13.3892 268 0.31037172525509554
"284457" 186435 13.4076 271 186434 13.4076 270 0.6671706068736016
"284457" 186637 27.2294 473 186636 27.2294 472 0.11119510161714974
"284457" 186639 27.2814 475 186638 27.2814 474 0.11119510090982554
"284456" 185134 2.5928 56 185133 2.5928 55 0.8688910665071186
"284456" 185796 32.2637 718 185795 32.2637 717 0.11119510161714974
"284456" 185798 32.3157 720 185797 32.3157 719 0.11119510090982554
"284455" 184607 15.5171 356 184606 15.5171 355 0.11119510161714974
"284455" 184609 15.5691 358 184608 15.5691 357 0.11119510090982554
"284455" 184787 28.6847 536 184786 28.6847 535 0.6671706068736016
"284455" 184789 28.7032 538 184788 28.7032 537 0.31037172525509554
"284454" 184207 35.5834 785 184206 35.5834 784 0.6671706068736016
"284454" 184209 35.6841 787 184208 35.6841 786 0.875064472103774
"284454" 184211 35.7834 789 184210 35.7834 788 0.22279956035403145
"284453" 182735 2.5928 56 182734 2.5928 55 0.8688910665071186
"284453" 182948 13.3892 269 182947 13.3892 268 0.31037172525509554
"284453" 182950 13.4076 271 182949 13.4076 270 0.6671706068736016
"284453" 183119 26.3418 440 183118 26.3418 439 0.11119510161714974
"284453" 183121 26.3938 442 183120 26.3938 441 0.11119510090982554
"284451" 181642 22.8823 334 181641 22.8823 333 0.6671706068736016
"284451" 181644 22.9007 336 181643 22.9007 335 0.31037172525509554
"284450" 181263 32.2095 685 181262 32.2095 684 0.6671706068736016
"284450" 181265 32.3102 687 181264 32.3102 686 0.875064472103774
"284450" 181267 32.4094 689 181266 32.4094 688 0.22279956035403145
"284207" 19978 14.0757 419 19977 14.0757 418 0.8688910665071186
"284449" 180024 2.5928 56 180023 2.5928 55 0.8688910665071186
"284449" 180237 13.3892 269 180236 13.3892 268 0.31037172525509554
"284449" 180239 13.4076 271 180238 13.4076 270 0.6671706068736016
"284447" 179199 38.9796 975 179198 38.9796 974 0.772182476847723
"284447" 179201 38.997 977 179200 38.997 976 0.4848672432962581
"284324" 95734 21.5181 704 95733 21.5181 703 0.5642969566137274
"284324" 95736 21.5521 706 95735 21.5521 705 0.14726385617687862
"284444" 176912 16.1526 486 176911 16.1526 485 0.772182476847723
"284444" 176914 16.1701 488 176913 16.1701 487 0.4848672432962581
"284322" 93306 4.2907 157 93305 4.2907 156 0.6741139532422422
feed_expiration_date30_days WARNING 1

feed_expiration_date30_days

Dataset should cover at least the next 30 days of service.

At any time, the GTFS dataset should cover at least the next 30 days of service, and ideally for as long as the operator is confident that the schedule will continue to be operated.

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 "20260611" "20260711" "20260711"
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 19734

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 19734 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.
"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
"trips.txt" "trip_headsign" "TMC TC" 48
"trips.txt" "trip_headsign" "TMC TC" 49
"trips.txt" "trip_headsign" "TMC TC" 50
"trips.txt" "trip_headsign" "TMC TC" 51
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"
1438 "2360" "HOUSTON NORTHWEST HOSPITAL"
1439 "2361" "HOUSTON NORTHWEST HOSPITAL"
4548 "6809" "LSC UNIVERSITY PARK 2"
7102 "10567" "HOBBY AIRPORT"
7174 "10694" "LSC NORTH HARRIS 1"
7334 "11030" "WHEELER STATION (BUS)"
7419 "25001" "FANNIN SOUTH STN NB"
7422 "25005" "SMITH LANDS STN NB"
7423 "25006" "SMITH LANDS STN SB"
7426 "25009" "DRYDEN/TMC STN NB"
7427 "25010" "DRYDEN/TMC STN SB"
7430 "25013" "HERMANN PARK/RICE U STN NB"
7431 "25014" "HERMANN PARK/RICE U STN SB"
7432 "25015" "MUSEUM DISTRICT STN NB"
7433 "25016" "MUSEUM DISTRICT STN SB"
7434 "25017" "WHEELER STN NB"
7435 "25018" "WHEELER STN SB"
7436 "25019" "ENSEMBLE/HCC STN NB"
7437 "25020" "ENSEMBLE/HCC STN SB"
7438 "25021" "MCGOWEN STN NB"
7439 "25022" "MCGOWEN STN SB"
7442 "25025" "BELL STN NB"
7443 "25026" "BELL STN SB"
7444 "25027" "MAIN STREET SQUARE STN NB"
7445 "25028" "MAIN STREET SQUARE STN SB"
7446 "25029" "PRESTON STN NB"
7447 "25030" "PRESTON STN SB"
7448 "25031" "UH-DOWNTOWN STN NB"
7449 "25032" "UH-DOWNTOWN STN SB"
7450 "11303" "MEMORIAL HERMANN SOUTHEAST"
7486 "11380" "ALMEDA MALL"
7630 "11608" "HCC SOUTH CAMPUS"
7955 "25002" "FANNIN SOUTH STN SB"
8016 "25039" "MOODY PARK NB"
8017 "25041" "CAVALCADE NB"
8018 "25043" "LINDALE PARK NB"
8024 "25044" "LINDALE PARK SB"
8025 "25040" "MOODY PARK SB"
8026 "25042" "CAVALCADE SB"
8031 "25049" "CENTRAL STN MAIN SB"
8032 "25050" "CENTRAL STN MAIN NB"
8035 "25058" "EADO STADIUM STN WB"
8047 "25072" "LEELAND THIRD WARD NB"
8048 "25071" "LEELAND THIRD WARD SB"
8049 "25075" "ELGIN THIRD WARD SB"
8050 "25076" "ELGIN THIRD WARD NB"
8051 "25077" "ROBERTSON STADIUM UH TSU SB"
8052 "25078" "ROBERTSON STADIUM UH TSU NB"
8053 "25080" "UH SOUTH UNIVERSITY OAKS NB"
stop_too_far_from_shape WARNING 2

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.
22973 "284437" "11772041" 1477657 "669" "Smith St @ Prairie St" [29.762091449394003,-95.36606048447321] 116.33963145668325
5202 "284352" "11768355" 411572 "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.
4946 "284337" "11767518" 396932 "13222" "Airport Blvd @ Park South View" [29.64358000000001,-95.38333000000002] 185.4480956487263
4614 "284326" "11766437" 368812 "4928" "Jensen Dr @ Skippy St" [29.85372923118595,-95.33976600012859] 170.82446629762458
5237 "284353" "11768390" 414142 "83" "North Shepherd Park & Ride" [29.876984,-95.41425500000001] 108.70955057508498
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.
4793 "7076" "Knox St @ Rachel St"
4794 "7080" "De Priest St @ Dillard St"
8689 "13108" "North Freeway @ West Rd"
8692 "13111" "SH 6 @ Wal Mart"
8730 "13164" "Shepherd Dr @ Mayfair Park Apt"
8731 "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.
"284523" 217028
"284524" 217273
"284525" 217513
"284526" 217641
"284527" 217762
"284528" 217953
"284529" 218053
"284530" 218134
"284531" 218441
"284533" 218606
"284534" 218696
"284539" 219839
"284541" 220104
"284542" 220415
"284543" 220575
"284544" 220955
"284545" 221144
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"