GTFS Schedule Validation Report

This report was generated by the Canonical GTFS Schedule validator, version 7.1.0 at 2025-12-22T15:22:52Z,
for the dataset file:///shared/great-britain.zip. No country code was provided.

Use this report alongside our documentation.

Summary

Agencies included


Feed Info


Publisher Name:
GTFS.pro
Publisher URL:
https://gtfs.pro
Feed Email:
info@gtfs.pro
Feed Language:
English
Feed Start Date:
2000-05-22
Feed End Date:
2025-01-01

Files included


  1. agency.txt
  2. calendar.txt
  3. calendar_dates.txt
  4. feed_info.txt
  5. routes.txt
  6. shapes.txt
  7. stop_times.txt
  8. stops.txt
  9. trips.txt

Counts


  • Agencies: 861
  • Blocks: 0
  • Routes: 0
  • Shapes: 720
  • Stops: 394163
  • Trips: 1396993

Specification Compliance report

27956 notices reported (24 errors, 27932 warnings, 0 infos)

Notice Code Severity Total
invalid_character ERROR 1

invalid_character

This field contains invalid characters, such as the replacement character ("�").

Check that text was properly encoded in UTF-8 as required by GTFS.

You can see more about this notice here.

filename (?) The name of the file containing the invalid characters. csvRowNumber (?) The row number in the CSV file where the invalid characters were found. fieldName (?) The name of the field containing the invalid characters. fieldValue (?) The value of the field containing the invalid characters.
"routes.txt" 8903 "route_long_name" "Newmarket � Stetchworth - Dullingham - Newmarket"
stop_time_with_arrival_before_previous_departure_time ERROR 23

stop_time_with_arrival_before_previous_departure_time

Backwards time travel between stops in stop_times.txt

For a given trip_id, the arrival_time of (n+1)-th stoptime in sequence must not precede the departure_time of n-th stoptime in sequence in stop_times.txt.

You can see more about this notice here.

csvRowNumber (?) The row number of the faulty record. prevCsvRowNumber (?) The row of the previous stop time. tripId (?) The trip_id associated to the faulty record. arrivalTime (?) Arrival time at the faulty record. departureTime (?) Departure time at the previous stop time.
45281741 45281740 "2-d49b52cb3d80b5face43" "16:09:00" "16:12:00"
46278250 46278249 "2-faa6f5dbe38b78282ecc" "06:12:00" "06:12:30"
46765231 46765230 "2-21d173bda9d6e6482993" "25:26:00" "25:31:00"
45508028 45508027 "2-519f86f9982832d58982" "25:22:00" "25:24:00"
17863855 17863854 "1-afca28b2fe91f3c9035d" "32:37:00" "83:00:00"
45534691 45534690 "2-2d0b3e95cc6dea72e1d4" "06:12:00" "06:12:30"
46104316 46104315 "2-f4e12d631aae992201c6" "08:50:00" "08:50:30"
46414337 46414336 "2-9111daf31fa151a0286f" "13:16:00" "13:17:30"
46179435 46179434 "2-54d686b5296be7548029" "15:16:00" "15:17:30"
46414466 46414465 "2-8360cd4c1e1764343317" "15:16:00" "15:17:30"
45398906 45398905 "2-214b94806068511fefc5" "21:38:00" "21:39:00"
45594158 45594157 "2-a2892e18a4a3c1ebcead" "09:41:00" "09:41:30"
46414498 46414497 "2-309aab98702525e33e1c" "15:16:00" "15:17:30"
46414305 46414304 "2-2ece6024c1f926dfac66" "13:16:00" "13:17:30"
17865073 17865072 "1-f4e8f43cba1aafba763a" "24:26:00" "102:51:00"
47027400 47027399 "2-eff41e898cc9a2aaedaa" "08:50:00" "08:50:30"
46419505 46419504 "2-c8ce40f96a3ead58dd21" "21:38:00" "21:39:00"
17863810 17863809 "1-1f8bc2520007f7f07beb" "32:37:00" "83:00:00"
46179418 46179417 "2-292a19cb4ef0c1052b6d" "13:16:00" "13:17:30"
46419490 46419489 "2-86a98cd8a0ff838db707" "21:38:00" "21:39:00"
46028205 46028204 "2-3aeb6648d41adbf7a690" "16:20:00" "16:21:30"
46419472 46419471 "2-25615d06614ee6fdc19f" "21:38:00" "21:39:00"
46175997 46175996 "2-53656266242a07c7736d" "22:15:00" "22:16:00"
expired_calendar WARNING 16732

expired_calendar

Dataset should not contain date ranges for services that have already expired.

This warning takes into account the calendar_dates.txt file as well as the calendar.txt file.

You can see more about this notice here.

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

csvRowNumber (?) The row of the faulty record. serviceId (?) The service id of the faulty record.
2 "1-1"
3 "1-2"
4 "1-3"
5 "1-4"
6 "1-5"
7 "1-6"
8 "1-7"
9 "1-8"
10 "1-9"
11 "1-10"
12 "1-11"
13 "1-12"
14 "1-13"
15 "1-14"
16 "1-15"
17 "1-16"
18 "1-17"
19 "1-18"
20 "1-19"
21 "1-20"
22 "1-21"
23 "1-22"
24 "1-23"
25 "1-24"
26 "1-25"
27 "1-26"
28 "1-28"
29 "1-29"
30 "1-30"
31 "1-31"
32 "1-32"
33 "1-33"
34 "1-34"
35 "1-35"
36 "1-36"
37 "1-37"
38 "1-38"
39 "1-39"
40 "1-40"
41 "1-41"
42 "1-42"
43 "1-43"
44 "1-44"
45 "1-45"
46 "1-47"
47 "1-48"
48 "1-49"
49 "1-50"
50 "1-51"
51 "1-52"
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 "20251222" "20250101" "20251229"
mixed_case_recommended_field WARNING 6682

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 6682 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.
"agency.txt" "agency_name" "trentbarton" 49
"agency.txt" "agency_name" "morebus" 623
"agency.txt" "agency_name" "igo" 774
"routes.txt" "route_short_name" "roy" 505
"routes.txt" "route_long_name" "sixes" 519
"routes.txt" "route_long_name" "sixes" 520
"routes.txt" "route_long_name" "sixes" 521
"routes.txt" "route_long_name" "sixes" 522
"routes.txt" "route_long_name" "sixes" 523
"routes.txt" "route_long_name" "sixes" 524
"routes.txt" "route_long_name" "sixes" 525
"routes.txt" "route_long_name" "sixes" 526
"routes.txt" "route_short_name" "allestree" 527
"routes.txt" "route_short_name" "comet" 528
"routes.txt" "route_short_name" "the harlequin" 530
"routes.txt" "route_short_name" "ilkeston flyer" 531
"routes.txt" "route_short_name" "mickleover" 533
"routes.txt" "route_short_name" "83 DUPE" 838
"routes.txt" "route_short_name" "my15" 1312
"routes.txt" "route_long_name" "threes" 1316
"routes.txt" "route_long_name" "threes" 1317
"routes.txt" "route_long_name" "threes" 1318
"routes.txt" "route_long_name" "nines" 1319
"routes.txt" "route_long_name" "nines" 1320
"routes.txt" "route_short_name" "calverton" 1322
"routes.txt" "route_short_name" "connect" 1323
"routes.txt" "route_short_name" "cotgrave" 1324
"routes.txt" "route_short_name" "indigo" 1326
"routes.txt" "route_short_name" "keyworth" 1327
"routes.txt" "route_short_name" "mainline" 1328
"routes.txt" "route_short_name" "rainbow one" 1329
"routes.txt" "route_short_name" "red arrow" 1330
"routes.txt" "route_short_name" "rushcliffe villager" 1331
"routes.txt" "route_short_name" "skylink express" 1333
"routes.txt" "route_short_name" "two" 1334
"routes.txt" "route_short_name" "TAXI ONE" 4148
"routes.txt" "route_short_name" "72NL" 10590
"routes.txt" "route_short_name" "72SN" 10591
"routes.txt" "route_short_name" "72SS" 10592
"routes.txt" "route_short_name" "72SV" 10593
"routes.txt" "route_short_name" "72TW" 10595
"stops.txt" "stop_name" "post office" 1986
"stops.txt" "stop_name" "high school" 2177
"stops.txt" "stop_name" "police station" 2185
"stops.txt" "stop_name" "chapel" 2188
"stops.txt" "stop_name" "corner" 2358
"stops.txt" "stop_name" "surgery" 2362
"stops.txt" "stop_name" "shops" 2407
"stops.txt" "stop_name" "holiday camp" 2567
"stops.txt" "stop_name" "holiday camp" 2568
route_color_contrast WARNING 2

route_color_contrast

Insufficient route color contrast.

A route's color and route_text_color should be contrasting.

You can see more about this notice here.

routeId (?) The id of the faulty record. csvRowNumber (?) The row number of the faulty record. routeColor (?) The faulty record's HTML route color. routeTextColor (?) The faulty record's HTML route text color.
"1-S_SC_STWS_14_1-STWS" 5578 "#F49AC2" "#FFFFFF"
"1-SE_SC_SCEK_45_1-SCEK" 7731 "#B0D243" "#FFFFFF"
route_long_name_contains_short_name WARNING 5

route_long_name_contains_short_name

Long name should not contain short name for a single route.

In routes.txt, route_long_name should not contain the value for route_short_name, because when both are provided, they are often combined by transit applications. Note that only one of the two fields is required. If there is no short name used for a route, use route_long_name only.

Good examples:

route_short_name/route_long_name Dataset
"N"/"Judah" Muni San Fransisco
"6"/"ML King Jr Blvd" Trimet Portland Streetcar
"55"/"Boulevard Saint Laurent" STM Montreal
"1"/"Rangiora/Cashmere" Metro Christchurch

Bad examples:

route_short_name/route_long_name
"604"/"604"
"14"/"Route 14"
"2"/"Route 2: Bellows Falls In-Town"

You can see more about this notice here.

routeId (?) The id of the faulty record. csvRowNumber (?) The row number of the faulty record. routeShortName (?) The faulty record's `route_short_name`. routeLongName (?) The faulty record's `route_long_name`.
"1-35-WFF-c-y05-12-NWFF" 1554 "Woolwich Ferry" "Woolwich Ferry South Pier - Woolwich Ferry North Pier"
"1-HIATAXI-TXIS" 6241 "TAXI" "Taxi - Badluarach"
"1-17-SC4-_-y08-1-CATS" 8847 "Connecting Communities Suffolk Coastal East & West" "Connecting Communities Suffolk Coastal East & West (Sat service)"
"1-31-502-_-y10-1-DPCR" 9890 "Dartmouth Lower Ferry" "Dartmouth Lower Ferry - Kingswear"
"1-31-502-A-y10-1-DMHF" 9891 "Dartmouth Higher Ferry" "Dartmouth Higher Ferry - Kingswear"
route_short_name_too_long WARNING 2353

route_short_name_too_long

Short name of a route is too long (more than 12 characters).

You can see more about this notice here.

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

routeId (?) The id of the faulty record. csvRowNumber (?) The row number of the faulty record. routeShortName (?) The faulty record's `route_short_name`.
"1-derbs_ASCT_DC_110DC_-ASCT" 416 "Derbyshire Connect"
"1-derbs_NDTR_DP1_11DP1A-NDTR" 503 "Download Festival DP1"
"1-derbs_NDTR_DP2_11DP2A-NDTR" 504 "Download Festival DP2"
"1-derbs_TBTN_HQ_110HQA-TBTN" 530 "the harlequin"
"1-derbs_TBTN_IF_110IF_-TBTN" 531 "ilkeston flyer"
"1-leics_KBUS_SKY_12SKYA-KBUS" 999 "Skylink Derby"
"1-notts_OCNT_JS_180JS_-OCNT" 1277 "Jacksdale Shopper"
"1-notts_OCNT_SS_180SS_-OCNT" 1278 "Selston Shopper"
"1-notts_OCNT_US_180US_-OCNT" 1279 "Underwood Shopper"
"1-notts_TBTN_rv_180RV_-TBTN" 1331 "rushcliffe villager"
"1-notts_TBTN_sky_18SKY_-TBTN" 1332 "skylink Nottingham"
"1-notts_TBTN_skye_18SKYE-TBTN" 1333 "skylink express"
"1-1-HAM-_-y05-380112-LULD" 1450 "Hammersmith & City"
"1-1-WAC-_-y05-1985100-LULD" 1456 "Waterloo & City"
"1-31-TRS-_-y05-22-NTRS" 1549 "Thames River Sightseeing"
"1-35-WFF-c-y05-12-NWFF" 1554 "Woolwich Ferry"
"1-71-CAB-_-y05-22-EMIR" 2023 "London Cable Car"
"1-bucks_RACB_RCB_01RCB_-RACB" 6824 "Risborough Community Bus"
"1-essex_ARHE_PR_05PAR_-ARHE" 6938 "Colchester Park & Ride"
"1-essex_ARWT_5_05005R-ARWT" 6941 "Dengie DaRT 5"
"1-essex_ARWT_99_05099_-ARWT" 6942 "Dengie DaRT 99"
"1-essex_BAAS_NOVO_05NOVO-BAAS" 6945 "Novotel Stansted Hotel Shuttle"
"1-essex_BAAS_PREM_05PREM-BAAS" 6946 "Premier Inn and Holiday Inn Shuttle"
"1-essex_BDVC_BSS_05BSS_-BDVC" 6948 "Basildon Surgery Shuttle"
"1-essex_JETF_Tilb_05TILB-JETF" 7045 "Tilbury Ferry"
"1-essex_TEND_TCT1_05TCT1-TEND" 7126 "Colchester Hospital Hopper"
"1-essex_VECT_701_05701_-VECT" 7165 "Sandon Park & Ride"
"1-essex_VECT_702_05702A-VECT" 7166 "Chelmer Valley Park & Ride"
"1-herts_BSCT_STSH_07STSI-BSCT" 7215 "Stortford Shuttle"
"1-square_BAAG_SHTL_06HTL_-BAAG" 7982 "Inter-terminal Shuttle"
"1-square_CPDT_DS_060DS_-CPDT" 8218 "Detling Shopper"
"1-square_KCOL_CBS_06CBS_-KCOL" 8334 "Kent College Community Bus"
"1-square_NAUT_NF_060NF_-NAUT" 8423 "Shepperton - Weybridge Ferry"
"1-square_NVTR_PR_060PRB-NVTR" 8480 "Park and Ride"
"1-square_WCTR_WGS_06WGS_-WCTR" 8583 "Wisley Gardens Shuttle"
"1-17-B1-_-y08-1-HADC" 8837 "Connecting Communities Babergh - Lavenham Area"
"1-17-B2-_-y08-1-HADC" 8838 "Connecting Communities Babergh - Hadleigh Area"
"1-17-B3-_-y08-1-HADC" 8839 "Connecting Communities Babergh - Shotley Area"
"1-17-FH1-_-y08-2-VOLN" 8840 "Connecting Communities Forest Heath"
"1-17-NLB-_-y08-2-BBCT" 8842 "North Lowestoft Buzzabout"
"1-17-SC1-_-y08-1-CATS" 8844 "Connecting Communities Suffolk Coastal East"
"1-17-SC2-_-y08-2-CATS" 8845 "Connecting Communities Suffolk Coastal South"
"1-17-SC3-_-y08-1-CATS" 8846 "Connecting Communities Suffolk Coastal West"
"1-17-SC4-_-y08-1-CATS" 8847 "Connecting Communities Suffolk Coastal East & West"
"1-17-SE1-_-y08-3-VOLN" 8848 "Connecting Communities St Edmundsbury"
"1-17-WSH-_-y08-1-VOLN" 8849 "West Suffolk Hospital Ride"
"1-26-BT1-_-y08-6-BDRB" 8913 "Beccles Town Service"
"1-30-F1-_-y10-1-TBTJ" 9821 "Torpoint Ferry"
"1-30-F10-_-y10-5-KHFC" 9822 "Feock - Philleigh Ferry"
"1-30-F14-_-y10-3-FLFY" 9823 "Flushing - Falmouth Ferry"
same_name_and_description_for_stop WARNING 15

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.

csvRowNumber (?) The row number of the faulty record. stopId (?) The id of the faulty record. stopDesc (?) The faulty record's `stop_desc`.
393924 "2-3900BNDON1" "Entrance"
393925 "2-3900BNDON0" "Entrance"
393948 "2-3900BSTEDMS0" "Entrance"
393949 "2-3900BSTEDMS1" "Entrance"
393963 "2-3900SUDBURY0" "Entrance"
393988 "2-3900THUSTON0" "Entrance"
394001 "2-3900ELMSWEL0" "Entrance"
394024 "2-3900NEEDHAM0" "Entrance"
394050 "2-3900IPSWICH0" "Entrance"
394097 "2-3900MELTON0" "Entrance"
394104 "2-3900FLXSTOW0" "Entrance"
394114 "2-3900WCKHMMR0" "Entrance"
394142 "2-3900BRAMPTN0" "Entrance"
394144 "2-3900BECCLES0" "Entrance"
394156 "2-3900LOWSTFT0" "Entrance"
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.
"20251222" "20231016" "20231223"
unexpected_enum_value WARNING 2141

unexpected_enum_value

An enum has an unexpected value.

You can see more about this notice here.

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

filename (?) The name of the faulty file. csvRowNumber (?) The row number of the faulty record. fieldName (?) The name of the field where the error occurred. fieldValue (?) Faulty value.
"routes.txt" 2153 "route_type" 200
"routes.txt" 2154 "route_type" 200
"routes.txt" 2155 "route_type" 200
"routes.txt" 2156 "route_type" 200
"routes.txt" 2157 "route_type" 200
"routes.txt" 2158 "route_type" 200
"routes.txt" 2159 "route_type" 200
"routes.txt" 2160 "route_type" 200
"routes.txt" 2161 "route_type" 200
"routes.txt" 2162 "route_type" 200
"routes.txt" 2163 "route_type" 200
"routes.txt" 2164 "route_type" 200
"routes.txt" 2165 "route_type" 200
"routes.txt" 2166 "route_type" 200
"routes.txt" 2167 "route_type" 200
"routes.txt" 2168 "route_type" 200
"routes.txt" 2169 "route_type" 200
"routes.txt" 2170 "route_type" 200
"routes.txt" 2171 "route_type" 200
"routes.txt" 2172 "route_type" 200
"routes.txt" 2173 "route_type" 200
"routes.txt" 2174 "route_type" 200
"routes.txt" 2175 "route_type" 200
"routes.txt" 2176 "route_type" 200
"routes.txt" 2177 "route_type" 200
"routes.txt" 2178 "route_type" 200
"routes.txt" 2179 "route_type" 200
"routes.txt" 2180 "route_type" 200
"routes.txt" 2181 "route_type" 200
"routes.txt" 2182 "route_type" 200
"routes.txt" 2183 "route_type" 200
"routes.txt" 2184 "route_type" 200
"routes.txt" 2185 "route_type" 200
"routes.txt" 2186 "route_type" 200
"routes.txt" 2187 "route_type" 200
"routes.txt" 2188 "route_type" 200
"routes.txt" 2189 "route_type" 200
"routes.txt" 2190 "route_type" 200
"routes.txt" 2191 "route_type" 200
"routes.txt" 2192 "route_type" 200
"routes.txt" 2193 "route_type" 200
"routes.txt" 2194 "route_type" 200
"routes.txt" 2195 "route_type" 200
"routes.txt" 2196 "route_type" 200
"routes.txt" 2197 "route_type" 200
"routes.txt" 2198 "route_type" 200
"routes.txt" 2199 "route_type" 200
"routes.txt" 2200 "route_type" 200
"routes.txt" 2201 "route_type" 200
"routes.txt" 2202 "route_type" 200