GTFS Schedule Validation Report

This report was generated by the Canonical GTFS Schedule validator, version 7.1.0 at 2026-01-23T15:16:39Z,
for the dataset file:///shared/detroit-dot.zip. No country code was provided.

Use this report alongside our documentation.

Summary

Agencies included


  • Detroit Department of Transportation

Feed Info


Publisher Name:
Detroit Department of Transportation
Feed Email:
N/A
Feed Language:
English
Feed Start Date:
2026-01-26
Feed End Date:
2026-05-10

Files included


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

Counts


  • Agencies: 1
  • Blocks: 425
  • Routes: 37
  • Shapes: 107
  • Stops: 5115
  • Trips: 5847

Specification Compliance report

507 notices reported (42 errors, 465 warnings, 0 infos)

Notice Code Severity Total
block_trips_with_overlapping_stop_times ERROR 42

block_trips_with_overlapping_stop_times

Trips with the same block id have overlapping stop times.

You can see more about this notice here.

csvRowNumberA (?) The row number from `trips.txt` of the first faulty trip. tripIdA (?) The id of first faulty trip. serviceIdA (?) The service id of the first faulty trip. csvRowNumberB (?) The row number from `trips.txt` of the second faulty trip. tripIdB (?) The id of the other faulty trip. serviceIdB (?) The service id of the other faulty trip. blockId (?) The `trips.block_id` of the overlapping trip. intersection (?) The overlapping period.
4800 "4448070" "1" 201 "2599070" "1" "900-1" "20260131"
201 "2599070" "1" 4870 "306070" "1" "900-1" "20260131"
4870 "306070" "1" 434 "3467070" "1" "900-1" "20260131"
434 "3467070" "1" 636 "3745070" "1" "900-1" "20260131"
434 "3467070" "1" 658 "2590070" "1" "900-1" "20260131"
658 "2590070" "1" 184 "1005070" "1" "900-1" "20260131"
184 "1005070" "1" 4820 "4171070" "1" "900-1" "20260131"
4820 "4171070" "1" 458 "5743070" "1" "900-1" "20260131"
458 "5743070" "1" 4890 "1726070" "1" "900-1" "20260131"
4890 "1726070" "1" 303 "5256070" "1" "900-1" "20260131"
303 "5256070" "1" 614 "778070" "1" "900-1" "20260131"
303 "5256070" "1" 664 "309070" "1" "900-1" "20260131"
664 "309070" "1" 424 "1668070" "1" "900-1" "20260131"
424 "1668070" "1" 4837 "5157070" "1" "900-1" "20260131"
4560 "230070" "1" 4877 "4017070" "1" "900-1" "20260131"
4560 "230070" "1" 628 "1816070" "1" "900-1" "20260131"
628 "1816070" "1" 4678 "5896070" "1" "900-1" "20260131"
4678 "5896070" "1" 684 "4809070" "1" "900-1" "20260131"
4083 "5578070" "1" 393 "159070" "1" "900-2" "20260131"
393 "159070" "1" 4760 "5497070" "1" "900-2" "20260131"
4760 "5497070" "1" 257 "1253070" "1" "900-2" "20260131"
257 "1253070" "1" 4700 "2990070" "1" "900-2" "20260131"
4700 "2990070" "1" 336 "1007070" "1" "900-2" "20260131"
336 "1007070" "1" 4075 "1310070" "1" "900-2" "20260131"
4075 "1310070" "1" 187 "1408070" "1" "900-2" "20260131"
187 "1408070" "1" 4086 "4902070" "1" "900-2" "20260131"
4086 "4902070" "1" 387 "1515070" "1" "900-2" "20260131"
387 "1515070" "1" 4776 "3412070" "1" "900-2" "20260131"
4776 "3412070" "1" 222 "4306070" "1" "900-2" "20260131"
222 "4306070" "1" 4727 "2531070" "1" "900-2" "20260131"
4670 "5069070" "1" 4068 "2527070" "1" "900-2" "20260131"
4564 "125070" "1" 4109 "4482070" "1" "900-2" "20260131"
4668 "1252070" "1" 4798 "4396070" "1" "900-2" "20260131"
3765 "2062020" "3" 678 "3578020" "3" "900-202" "20260126"
3779 "2888020" "3" 601 "3689020" "3" "900-202" "20260126"
673 "1498020" "3" 3761 "584020" "3" "900-202" "20260126"
3761 "584020" "3" 4806 "3248020" "3" "900-202" "20260126"
4806 "3248020" "3" 4620 "5624020" "3" "900-202" "20260126"
4620 "5624020" "3" 4875 "4312020" "3" "900-202" "20260126"
4875 "4312020" "3" 4538 "4143020" "3" "900-202" "20260126"
4538 "4143020" "3" 599 "3252020" "3" "900-202" "20260126"
4684 "2779020" "3" 667 "825020" "3" "900-202" "20260126"
fast_travel_between_consecutive_stops WARNING 225

fast_travel_between_consecutive_stops

A transit vehicle moves too fast between two consecutive stops.

The speed threshold depends on route type:

Route type Description Threshold, km/h
0 Light rail 100
1 Subway 150
2 Rail 500
3 Bus 150
4 Ferry 80
5 Cable tram 30
6 Aerial lift 50
7 Funicular 50
11 Trolleybus 150
12 Monorail 150
- Unknown 200

You can see more about this notice here.

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

tripCsvRowNumber (?) The row number of the problematic trip. tripId (?) `trip_id` of the problematic trip. routeId (?) `route_id` of the problematic trip. speedKph (?) Travel speed (km/h). distanceKm (?) Distance between stops (km). csvRowNumber1 (?) The row number of the first stop time. stopSequence1 (?) `stop_sequence` of the first stop. stopId1 (?) `stop_id` of the first stop. stopName1 (?) `stop_name` of the first stop. departureTime1 (?) `departure_time` of the first stop. csvRowNumber2 (?) The row number of the second stop time. stopSequence2 (?) `stop_sequence` of the second stop. stopId2 (?) `stop_id` of the second stop. stopName2 (?) `stop_name` of the second stop. arrivalTime2 (?) `arrival_time` of the second stop.
2854 "1170010" "32" 214.30891977842376 0.3571815329640396 92547 2 "4073" "Mack & Lannoo" "07:30:11" 92548 3 "5007" "Mack & Warren" "07:30:17"
2854 "1170010" "32" 226.58399408844033 0.3146999917895005 92548 3 "5007" "Mack & Warren" "07:30:17" 92549 4 "4041" "Mack & Canyon" "07:30:22"
2854 "1170010" "32" 174.9189767370325 0.43729744184258124 92549 4 "4041" "Mack & Canyon" "07:30:22" 92550 5 "5008" "Mack & Radnor" "07:30:31"
2854 "1170010" "32" 152.69241624341862 0.21207280033808143 92551 6 "4037" "Mack & Marseilles" "07:30:38" 92552 7 "4030" "Mack & University" "07:30:43"
2854 "1170010" "32" 183.33044555021124 0.15277537129184268 92552 7 "4030" "Mack & University" "07:30:43" 92553 8 "4029" "Mack & Hereford" "07:30:46"
2854 "1170010" "32" 176.35751810071596 0.2939291968345266 92553 8 "4029" "Mack & Hereford" "07:30:46" 92554 9 "4026" "Mack & Woodhall" "07:30:52"
2854 "1170010" "32" 263.42155503293264 0.21951796252744385 92554 9 "4026" "Mack & Woodhall" "07:30:52" 92555 10 "5235" "Mack & Bluehill" "07:30:55"
2856 "1462010" "32" 214.30891977842376 0.3571815329640396 115761 2 "4073" "Mack & Lannoo" "09:30:11" 115762 3 "5007" "Mack & Warren" "09:30:17"
2856 "1462010" "32" 226.58399408844033 0.3146999917895005 115762 3 "5007" "Mack & Warren" "09:30:17" 115763 4 "4041" "Mack & Canyon" "09:30:22"
2856 "1462010" "32" 174.9189767370325 0.43729744184258124 115763 4 "4041" "Mack & Canyon" "09:30:22" 115764 5 "5008" "Mack & Radnor" "09:30:31"
2856 "1462010" "32" 152.69241624341862 0.21207280033808143 115765 6 "4037" "Mack & Marseilles" "09:30:38" 115766 7 "4030" "Mack & University" "09:30:43"
2856 "1462010" "32" 183.33044555021124 0.15277537129184268 115766 7 "4030" "Mack & University" "09:30:43" 115767 8 "4029" "Mack & Hereford" "09:30:46"
2856 "1462010" "32" 176.35751810071596 0.2939291968345266 115767 8 "4029" "Mack & Hereford" "09:30:46" 115768 9 "4026" "Mack & Woodhall" "09:30:52"
2856 "1462010" "32" 263.42155503293264 0.21951796252744385 115768 9 "4026" "Mack & Woodhall" "09:30:52" 115769 10 "5235" "Mack & Bluehill" "09:30:55"
2774 "1898010" "32" 186.97358207880723 0.15581131839900603 150710 139 "490" "Mack & Cadieux" "16:18:00" 150711 140 "4024" "Mack & Notre Dame" "16:18:03"
2774 "1898010" "32" 164.07611840970176 0.22788349779125244 150711 140 "4024" "Mack & Notre Dame" "16:18:03" 150712 141 "4025" "Mack & Woodhall" "16:18:08"
2774 "1898010" "32" 167.7134118587961 0.13976117654899675 150712 141 "4025" "Mack & Woodhall" "16:18:08" 150713 142 "4027" "Mack & Neff" "16:18:11"
2774 "1898010" "32" 158.51463239335803 0.30822289632041844 150713 142 "4027" "Mack & Neff" "16:18:11" 150714 143 "5233" "Mack & University" "16:18:18"
2774 "1898010" "32" 178.60744591428417 0.3472922559444414 150714 143 "5233" "Mack & University" "16:18:18" 150715 144 "4038" "Mack & Washington" "16:18:25"
2774 "1898010" "32" 189.76948590057168 0.1581412382504764 150715 144 "4038" "Mack & Washington" "16:18:25" 150716 145 "4039" "Mack & Lincoln" "16:18:28"
2774 "1898010" "32" 196.98848477017322 0.38303316483089234 150717 146 "4040" "Mack & Fisher" "16:18:33" 150718 147 "4042" "Mack & Cloverly" "16:18:40"
2774 "1898010" "32" 165.88811154167502 0.18432012393519445 150718 147 "4042" "Mack & Cloverly" "16:18:40" 150719 148 "4043" "Mack & Calvin" "16:18:44"
2849 "2782010" "32" 214.30891977842376 0.3571815329640396 219555 2 "4073" "Mack & Lannoo" "13:30:11" 219556 3 "5007" "Mack & Warren" "13:30:17"
2849 "2782010" "32" 226.58399408844033 0.3146999917895005 219556 3 "5007" "Mack & Warren" "13:30:17" 219557 4 "4041" "Mack & Canyon" "13:30:22"
2849 "2782010" "32" 174.9189767370325 0.43729744184258124 219557 4 "4041" "Mack & Canyon" "13:30:22" 219558 5 "5008" "Mack & Radnor" "13:30:31"
2849 "2782010" "32" 152.69241624341862 0.21207280033808143 219559 6 "4037" "Mack & Marseilles" "13:30:38" 219560 7 "4030" "Mack & University" "13:30:43"
2849 "2782010" "32" 183.33044555021124 0.15277537129184268 219560 7 "4030" "Mack & University" "13:30:43" 219561 8 "4029" "Mack & Hereford" "13:30:46"
2849 "2782010" "32" 176.35751810071596 0.2939291968345266 219561 8 "4029" "Mack & Hereford" "13:30:46" 219562 9 "4026" "Mack & Woodhall" "13:30:52"
2849 "2782010" "32" 263.42155503293264 0.21951796252744385 219562 9 "4026" "Mack & Woodhall" "13:30:52" 219563 10 "5235" "Mack & Bluehill" "13:30:55"
2795 "3211010" "32" 186.97358207880723 0.15581131839900603 253538 139 "490" "Mack & Cadieux" "18:17:00" 253539 140 "4024" "Mack & Notre Dame" "18:17:03"
2795 "3211010" "32" 164.07611840970176 0.22788349779125244 253539 140 "4024" "Mack & Notre Dame" "18:17:03" 253540 141 "4025" "Mack & Woodhall" "18:17:08"
2795 "3211010" "32" 167.7134118587961 0.13976117654899675 253540 141 "4025" "Mack & Woodhall" "18:17:08" 253541 142 "4027" "Mack & Neff" "18:17:11"
2795 "3211010" "32" 158.51463239335803 0.30822289632041844 253541 142 "4027" "Mack & Neff" "18:17:11" 253542 143 "5233" "Mack & University" "18:17:18"
2795 "3211010" "32" 178.60744591428417 0.3472922559444414 253542 143 "5233" "Mack & University" "18:17:18" 253543 144 "4038" "Mack & Washington" "18:17:25"
2795 "3211010" "32" 189.76948590057168 0.1581412382504764 253543 144 "4038" "Mack & Washington" "18:17:25" 253544 145 "4039" "Mack & Lincoln" "18:17:28"
2795 "3211010" "32" 196.98848477017322 0.38303316483089234 253545 146 "4040" "Mack & Fisher" "18:17:33" 253546 147 "4042" "Mack & Cloverly" "18:17:40"
2795 "3211010" "32" 165.88811154167502 0.18432012393519445 253546 147 "4042" "Mack & Cloverly" "18:17:40" 253547 148 "4043" "Mack & Calvin" "18:17:44"
2789 "2729010" "32" 186.97358207880723 0.15581131839900603 215684 139 "490" "Mack & Cadieux" "08:13:00" 215685 140 "4024" "Mack & Notre Dame" "08:13:03"
2789 "2729010" "32" 164.07611840970176 0.22788349779125244 215685 140 "4024" "Mack & Notre Dame" "08:13:03" 215686 141 "4025" "Mack & Woodhall" "08:13:08"
2789 "2729010" "32" 167.7134118587961 0.13976117654899675 215686 141 "4025" "Mack & Woodhall" "08:13:08" 215687 142 "4027" "Mack & Neff" "08:13:11"
2789 "2729010" "32" 158.51463239335803 0.30822289632041844 215687 142 "4027" "Mack & Neff" "08:13:11" 215688 143 "5233" "Mack & University" "08:13:18"
2789 "2729010" "32" 178.60744591428417 0.3472922559444414 215688 143 "5233" "Mack & University" "08:13:18" 215689 144 "4038" "Mack & Washington" "08:13:25"
2789 "2729010" "32" 189.76948590057168 0.1581412382504764 215689 144 "4038" "Mack & Washington" "08:13:25" 215690 145 "4039" "Mack & Lincoln" "08:13:28"
2789 "2729010" "32" 196.98848477017322 0.38303316483089234 215691 146 "4040" "Mack & Fisher" "08:13:33" 215692 147 "4042" "Mack & Cloverly" "08:13:40"
2789 "2729010" "32" 165.88811154167502 0.18432012393519445 215692 147 "4042" "Mack & Cloverly" "08:13:40" 215693 148 "4043" "Mack & Calvin" "08:13:44"
2845 "893010" "32" 214.30891977842376 0.3571815329640396 70880 2 "4073" "Mack & Lannoo" "20:30:11" 70881 3 "5007" "Mack & Warren" "20:30:17"
2845 "893010" "32" 226.58399408844033 0.3146999917895005 70881 3 "5007" "Mack & Warren" "20:30:17" 70882 4 "4041" "Mack & Canyon" "20:30:22"
2845 "893010" "32" 174.9189767370325 0.43729744184258124 70882 4 "4041" "Mack & Canyon" "20:30:22" 70883 5 "5008" "Mack & Radnor" "20:30:31"
2845 "893010" "32" 152.69241624341862 0.21207280033808143 70884 6 "4037" "Mack & Marseilles" "20:30:38" 70885 7 "4030" "Mack & University" "20:30:43"
2845 "893010" "32" 183.33044555021124 0.15277537129184268 70885 7 "4030" "Mack & University" "20:30:43" 70886 8 "4029" "Mack & Hereford" "20:30:46"
leading_or_trailing_whitespaces WARNING 224

leading_or_trailing_whitespaces

The value in CSV file has leading or trailing whitespaces.

This notice is emitted for values protected with double quotes since whitespaces for non-protected values are trimmed automatically by CSV parser.

The validator strips whitespaces from protected values. We do not see any use case when such a whitespace may be needed. On the other hand, some real-world feeds use trailing whitespaces for some values and omit them for the others. This is causing the largest problem when a primary key and a foreign key differ just by a whitespace: it is clear that they are intended to be the same, that is why we always strip whitespaces.

You can see more about this notice here.

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

filename (?) The name of the faulty file. csvRowNumber (?) The row of the faulty record. fieldName (?) Faulty record's field name. fieldValue (?) Faulty value.
"trips.txt" 2744 "trip_headsign" " Moross & Mack"
"trips.txt" 2745 "trip_headsign" " Moross & Mack"
"trips.txt" 2746 "trip_headsign" " Moross & Mack"
"trips.txt" 2747 "trip_headsign" " Moross & Mack"
"trips.txt" 2748 "trip_headsign" " Moross & Mack"
"trips.txt" 2749 "trip_headsign" " Moross & Mack"
"trips.txt" 2750 "trip_headsign" " Moross & Mack"
"trips.txt" 2751 "trip_headsign" " Moross & Mack"
"trips.txt" 2752 "trip_headsign" " Moross & Mack"
"trips.txt" 2753 "trip_headsign" " Moross & Mack"
"trips.txt" 2754 "trip_headsign" " Moross & Mack"
"trips.txt" 2755 "trip_headsign" " Moross & Mack"
"trips.txt" 2756 "trip_headsign" " Moross & Mack"
"trips.txt" 2757 "trip_headsign" " Moross & Mack"
"trips.txt" 2758 "trip_headsign" " Moross & Mack"
"trips.txt" 2759 "trip_headsign" " Moross & Mack"
"trips.txt" 2760 "trip_headsign" " Moross & Mack"
"trips.txt" 2761 "trip_headsign" " Moross & Mack"
"trips.txt" 2762 "trip_headsign" " Moross & Mack"
"trips.txt" 2763 "trip_headsign" " Moross & Mack"
"trips.txt" 2764 "trip_headsign" " Moross & Mack"
"trips.txt" 2765 "trip_headsign" " Moross & Mack"
"trips.txt" 2766 "trip_headsign" " Moross & Mack"
"trips.txt" 2767 "trip_headsign" " Moross & Mack"
"trips.txt" 2768 "trip_headsign" " Moross & Mack"
"trips.txt" 2769 "trip_headsign" " Moross & Mack"
"trips.txt" 2770 "trip_headsign" " Moross & Mack"
"trips.txt" 2771 "trip_headsign" " Moross & Mack"
"trips.txt" 2772 "trip_headsign" " Moross & Mack"
"trips.txt" 2773 "trip_headsign" " Moross & Mack"
"trips.txt" 2774 "trip_headsign" " Moross & Mack"
"trips.txt" 2775 "trip_headsign" " Moross & Mack"
"trips.txt" 2776 "trip_headsign" " Moross & Mack"
"trips.txt" 2777 "trip_headsign" " Moross & Mack"
"trips.txt" 2778 "trip_headsign" " Moross & Mack"
"trips.txt" 2779 "trip_headsign" " Moross & Mack"
"trips.txt" 2780 "trip_headsign" " Moross & Mack"
"trips.txt" 2781 "trip_headsign" " Moross & Mack"
"trips.txt" 2782 "trip_headsign" " Moross & Mack"
"trips.txt" 2783 "trip_headsign" " Moross & Mack"
"trips.txt" 2784 "trip_headsign" " Moross & Mack"
"trips.txt" 2785 "trip_headsign" " Moross & Mack"
"trips.txt" 2786 "trip_headsign" " Moross & Mack"
"trips.txt" 2787 "trip_headsign" " Moross & Mack"
"trips.txt" 2788 "trip_headsign" " Moross & Mack"
"trips.txt" 2789 "trip_headsign" " Moross & Mack"
"trips.txt" 2790 "trip_headsign" " Moross & Mack"
"trips.txt" 2791 "trip_headsign" " Moross & Mack"
"trips.txt" 2792 "trip_headsign" " Moross & Mack"
"trips.txt" 2793 "trip_headsign" " Moross & Mack"
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
missing_recommended_field WARNING 3

missing_recommended_field

A recommended field is missing.

The given field has no value in some input row, even though values are recommended.

You can see more about this notice here.

filename (?) The name of the faulty file. csvRowNumber (?) The row of the faulty record. fieldName (?) The name of the missing field.
"fare_attributes.txt" 2 "agency_id"
"fare_attributes.txt" 3 "agency_id"
"fare_attributes.txt" 4 "agency_id"
stop_without_stop_time WARNING 10

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.
1081 "5445" "Clairmount & Linwood"
2172 "3212" "Junction & Christiancy"
2179 "3220" "Junction & Toledo"
2188 "3233" "35th & I-94 Service Dr"
2189 "3234" "35th & Horatio"
2191 "3238" "Junction & Devereaux"
2212 "3268" "Junction & Porter"
2682 "940" "Junction & I-75 Service Dr"
3819 "1505" "Junction & McGraw"
4951 "4846" "Junction & Vernor"
trip_coverage_not_active_for_next7_days WARNING 1

trip_coverage_not_active_for_next7_days

Trips data should be valid for at least the next seven days.

This notice is triggered if the date range where a significant number of trips are running ends in less than 7 days.

You can see more about this notice here.

currentDate (?) Current date (YYYYMMDD format). serviceWindowStartDate (?) The start date of the majority service window. serviceWindowEndDate (?) The end date of the majority service window.
"20260123" "20260126" "20260509"
unused_shape WARNING 1

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.
"shp-11-57" 6855