{
  "agency_count": 87,
  "average_score": 54.8,
  "common_fixes": [
    {
      "agencies": 70,
      "code": "scorecard_wheelchair_boarding_unknown",
      "fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "agencies": 50,
      "code": "scorecard_wheelchair_accessible_unknown",
      "fix": "Set wheelchair_accessible on every trip (most small-agency fleets are 100% accessible, so this is often a single default)."
    },
    {
      "agencies": 33,
      "code": "scorecard_feed_expired",
      "fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "agencies": 27,
      "code": "scorecard_no_fare_data",
      "fix": "Add fare_attributes.txt (or Fares v2 files) with your fare structure. If your service is fare-free, ask to have it marked fare-free instead."
    },
    {
      "agencies": 13,
      "code": "trip_distance_exceeds_shape_distance",
      "fix": "Review the rule documentation for 'trip_distance_exceeds_shape_distance' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "agencies": 13,
      "code": "scorecard_missing_headsigns",
      "fix": "Populate trip_headsign to match what the bus displays."
    },
    {
      "agencies": 7,
      "code": "scorecard_rt_vehicle_positions_unreachable",
      "fix": "Check the vehicle positions endpoint with your AVL vendor; it should return a fresh GTFS-Realtime protobuf on every request."
    },
    {
      "agencies": 7,
      "code": "scorecard_rt_trip_updates_unreachable",
      "fix": "Check the trip updates endpoint with your AVL vendor; it should return a fresh GTFS-Realtime protobuf on every request."
    },
    {
      "agencies": 6,
      "code": "scorecard_rt_trip_coverage",
      "fix": "Check with your AVL vendor that every vehicle assignment flows into TripUpdates, including school-day and tripper runs."
    },
    {
      "agencies": 3,
      "code": "scorecard_missing_feed_info_dates",
      "fix": "Add feed_info.txt with feed_start_date and feed_end_date to your export."
    },
    {
      "agencies": 3,
      "code": "equal_shape_distance_diff_coordinates",
      "fix": "Review the rule documentation for 'equal_shape_distance_diff_coordinates' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "agencies": 2,
      "code": "expired_calendar",
      "fix": "Remove past service periods the next time you export the feed."
    },
    {
      "agencies": 2,
      "code": "mixed_case_recommended_field",
      "fix": "Use mixed case for stop names and headsigns (e.g. 'Main St & 2nd Ave', not 'MAIN ST & 2ND AVE')."
    },
    {
      "agencies": 2,
      "code": "scorecard_rt_service_alerts_unreachable",
      "fix": "Check the service alerts endpoint with your AVL vendor; it should return a fresh GTFS-Realtime protobuf on every request."
    },
    {
      "agencies": 2,
      "code": "equal_shape_distance_diff_coordinates_distance_below_threshold",
      "fix": "Review the rule documentation for 'equal_shape_distance_diff_coordinates_distance_below_threshold' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "agencies": 2,
      "code": "missing_feed_contact_email_and_url",
      "fix": "Review the rule documentation for 'missing_feed_contact_email_and_url' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "agencies": 2,
      "code": "scorecard_no_feed_contact",
      "fix": "Add feed_contact_email to feed_info.txt."
    }
  ],
  "expired": {
    "lapsed": 13,
    "stale": 20,
    "total": 33
  },
  "generated_at": "2026-07-09T09:08:55+00:00",
  "grade_distribution": {
    "A": 6,
    "B": 1,
    "C": 11,
    "D": 22,
    "F": 47
  },
  "members": [
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -1651,
      "expiry_status": "stale",
      "grade": "F",
      "id": "adirondack-trailways-pine-hill-trailways",
      "name": "Adirondack Trailways Pine Hill Trailways",
      "needs_attention": true,
      "score": 2.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -1651,
      "expiry_status": "stale",
      "grade": "F",
      "id": "new-york-trailways",
      "name": "New York Trailways",
      "needs_attention": true,
      "score": 14.6,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -2016,
      "expiry_status": "stale",
      "grade": "F",
      "id": "steuben-area-rides",
      "name": "Steuben Area Rides",
      "needs_attention": true,
      "score": 18.2,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -921,
      "expiry_status": "stale",
      "grade": "F",
      "id": "greater-glens-falls-transit",
      "name": "Greater Glens Falls Transit",
      "needs_attention": true,
      "score": 20.2,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -1651,
      "expiry_status": "stale",
      "grade": "F",
      "id": "herkimer-oneida-counties-transportation-study-hocts",
      "name": "Herkimer-Oneida Counties Transportation Study (HOCTS)",
      "needs_attention": true,
      "score": 24.9,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -190,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "steuben-county-transit",
      "name": "Steuben County Transit",
      "needs_attention": true,
      "score": 26.5,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -754,
      "expiry_status": "stale",
      "grade": "F",
      "id": "niagara-frontier-transportation-authority-nfta",
      "name": "Niagara Frontier Transportation Authority (NFTA)",
      "needs_attention": true,
      "score": 29.7,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -921,
      "expiry_status": "stale",
      "grade": "F",
      "id": "gloversville-transit-services",
      "name": "Gloversville Transit Services",
      "needs_attention": true,
      "score": 30.2,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -312,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "westchester-county-bee-line-system-wcdot-2353",
      "name": "Westchester County Bee-Line System (WCDOT)",
      "needs_attention": true,
      "score": 30.4,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -55,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "gloversville-transit-system",
      "name": "Gloversville Transit System",
      "needs_attention": true,
      "score": 32.2,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -190,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "suffolk-county-transit",
      "name": "Suffolk County Transit",
      "needs_attention": true,
      "score": 32.5,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -466,
      "expiry_status": "stale",
      "grade": "F",
      "id": "cortland-county-public-transportation",
      "name": "Cortland County Public Transportation",
      "needs_attention": true,
      "score": 32.8,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -921,
      "expiry_status": "stale",
      "grade": "F",
      "id": "ny-waterway",
      "name": "NY Waterway",
      "needs_attention": true,
      "score": 33.0,
      "shapes_status": "at_risk",
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -190,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "yates-transit-service",
      "name": "Yates Transit Service",
      "needs_attention": true,
      "score": 34.7,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -39,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "clinton-county-public-transit-ccpt",
      "name": "Clinton County Public Transit (CCPT)",
      "needs_attention": true,
      "score": 35.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -1286,
      "expiry_status": "stale",
      "grade": "F",
      "id": "c-tran-305",
      "name": "C TRAN",
      "needs_attention": true,
      "score": 37.2,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -1925,
      "expiry_status": "stale",
      "grade": "F",
      "id": "regional-transit-service",
      "name": "Regional Transit Service",
      "needs_attention": true,
      "score": 37.6,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -1286,
      "expiry_status": "stale",
      "grade": "F",
      "id": "broome-county-transit-b-c-transit",
      "name": "Broome County Transit (B.C. Transit)",
      "needs_attention": true,
      "score": 38.2,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -5852,
      "expiry_status": "stale",
      "grade": "F",
      "id": "regional-transit-service-seneca-rts-seneca",
      "name": "Regional Transit Service Seneca (RTS Seneca)",
      "needs_attention": true,
      "score": 38.8,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 9 day(s)",
      "days_until_expiry": 9,
      "expiry_status": "expiring_soon",
      "grade": "F",
      "id": "hornell-area-transit",
      "name": "Hornell Area Transit",
      "needs_attention": true,
      "score": 39.0,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export with a validity window that reaches at least 60 days out."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -190,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "newburgh-beacon-shuttle-leprechaun-lines",
      "name": "Newburgh Beacon Shuttle (Leprechaun Lines)",
      "needs_attention": true,
      "score": 40.1,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -70,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "st-lawrence-county-public-transit",
      "name": "St Lawrence County Public Transit",
      "needs_attention": true,
      "score": 40.4,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -39,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "otsego-express-public-transportation",
      "name": "Otsego Express Public Transportation",
      "needs_attention": true,
      "score": 40.6,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -190,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "corning-erwin-area-transit-system-ceats",
      "name": "Corning Erwin Area Transit System (CEATS)",
      "needs_attention": true,
      "score": 40.9,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -1651,
      "expiry_status": "stale",
      "grade": "F",
      "id": "jfk-airtrain",
      "name": "JFK Airtrain",
      "needs_attention": true,
      "score": 41.8,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -190,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "access-allegany",
      "name": "Access Allegany",
      "needs_attention": true,
      "score": 42.0,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -1184,
      "expiry_status": "stale",
      "grade": "F",
      "id": "academy-bus",
      "name": "Academy Bus",
      "needs_attention": true,
      "score": 42.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -1765,
      "expiry_status": "stale",
      "grade": "F",
      "id": "village-of-cooperstown-trolly-system",
      "name": "Village of Cooperstown Trolly System",
      "needs_attention": true,
      "score": 44.7,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -190,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "watertown-citibus",
      "name": "Watertown Citibus",
      "needs_attention": true,
      "score": 45.7,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -921,
      "expiry_status": "stale",
      "grade": "F",
      "id": "schuyler-county-transit",
      "name": "Schuyler County Transit",
      "needs_attention": true,
      "score": 45.9,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -738,
      "expiry_status": "stale",
      "grade": "F",
      "id": "kiryas-joel-area-transit",
      "name": "Kiryas Joel Area Transit",
      "needs_attention": true,
      "score": 50.7,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -906,
      "expiry_status": "stale",
      "grade": "F",
      "id": "middletown-area-transit-2324",
      "name": "Middletown Area Transit",
      "needs_attention": true,
      "score": 51.7,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -906,
      "expiry_status": "stale",
      "grade": "F",
      "id": "transit-orange-newburgh-local-transit",
      "name": "Transit Orange / Newburgh Local Transit",
      "needs_attention": true,
      "score": 55.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 30 day(s)",
      "days_until_expiry": 30,
      "expiry_status": "expiring_soon",
      "grade": "F",
      "id": "st-lawrence-county-public-transit-2611",
      "name": "St Lawrence County Public Transit",
      "needs_attention": true,
      "score": 55.5,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 53 day(s)",
      "days_until_expiry": 53,
      "expiry_status": "current",
      "grade": "F",
      "id": "franklin-county-public-transportation",
      "name": "Franklin County Public Transportation",
      "needs_attention": true,
      "score": 57.1,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -9,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "broome-county-transit-b-c-transit-2079",
      "name": "Broome County Transit (B.C. Transit)",
      "needs_attention": true,
      "score": 57.6,
      "shapes_status": "at_risk",
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-export the feed with a calendar that reaches further out, and set feed_info feed_end_date past your next service change."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 59 day(s)",
      "days_until_expiry": 59,
      "expiry_status": "current",
      "grade": "D",
      "id": "centro",
      "name": "Centro",
      "needs_attention": true,
      "score": 61.2,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 59 day(s)",
      "days_until_expiry": 59,
      "expiry_status": "current",
      "grade": "D",
      "id": "rochester-genesee-regional-transportation-authority-rgrta",
      "name": "Rochester-Genesee Regional Transportation Authority (RGRTA)",
      "needs_attention": true,
      "score": 62.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Check the trip updates endpoint with your AVL vendor; it should return a fresh GTFS-Realtime protobuf on every request."
    },
    {
      "annual_trips": null,
      "attention_reason": "Score changed sharply on 2026-06-23",
      "days_until_expiry": 58,
      "expiry_status": "current",
      "grade": "D",
      "id": "metropolitan-transit-authority-mta-510",
      "name": "NYC Bus Company",
      "needs_attention": true,
      "score": 62.5,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Check the trip updates endpoint with your AVL vendor; it should return a fresh GTFS-Realtime protobuf on every request."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 30 day(s)",
      "days_until_expiry": 30,
      "expiry_status": "expiring_soon",
      "grade": "D",
      "id": "watertown-citibus-2881",
      "name": "Watertown Citibus",
      "needs_attention": true,
      "score": 63.7,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 59 day(s)",
      "days_until_expiry": 59,
      "expiry_status": "current",
      "grade": "D",
      "id": "rochester-genesee-regional-transportation-authority-rgrta-533",
      "name": "Rochester-Genesee Regional Transportation Authority (RGRTA)",
      "needs_attention": true,
      "score": 64.7,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Check the trip updates endpoint with your AVL vendor; it should return a fresh GTFS-Realtime protobuf on every request."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 60 day(s)",
      "days_until_expiry": 60,
      "expiry_status": "current",
      "grade": "D",
      "id": "metropolitan-transit-authority-mta-516",
      "name": "NYC Subway",
      "needs_attention": true,
      "score": 65.5,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Check the trip updates endpoint with your AVL vendor; it should return a fresh GTFS-Realtime protobuf on every request."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service window shortened unexpectedly on 2026-07-02",
      "days_until_expiry": 38,
      "expiry_status": "current",
      "grade": "D",
      "id": "metropolitan-transit-authority-mta",
      "name": "Long Island Rail Road",
      "needs_attention": true,
      "score": 66.4,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Check the trip updates endpoint with your AVL vendor; it should return a fresh GTFS-Realtime protobuf on every request."
    },
    {
      "annual_trips": null,
      "attention_reason": "Score changed sharply on 2026-06-23",
      "days_until_expiry": 58,
      "expiry_status": "current",
      "grade": "D",
      "id": "metropolitan-transit-authority-mta-512",
      "name": "Brooklyn Bus",
      "needs_attention": true,
      "score": 68.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": "Score changed sharply on 2026-06-23",
      "days_until_expiry": 58,
      "expiry_status": "current",
      "grade": "D",
      "id": "metropolitan-transit-authority-mta-528",
      "name": "Bronx Bus",
      "needs_attention": true,
      "score": 68.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": "Score changed sharply on 2026-06-23",
      "days_until_expiry": 58,
      "expiry_status": "current",
      "grade": "D",
      "id": "metropolitan-transit-authority-mta-514",
      "name": "Staten Island Bus",
      "needs_attention": true,
      "score": 68.4,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": "Score changed sharply on 2026-06-23",
      "days_until_expiry": 58,
      "expiry_status": "current",
      "grade": "D",
      "id": "metropolitan-transit-authority-mta-520",
      "name": "Queens Bus",
      "needs_attention": true,
      "score": 68.7,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": "Score changed sharply on 2026-06-23",
      "days_until_expiry": 58,
      "expiry_status": "current",
      "grade": "D",
      "id": "metropolitan-transit-authority-mta-513",
      "name": "Manhattan Bus",
      "needs_attention": true,
      "score": 69.6,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service window shortened unexpectedly on 2026-06-25",
      "days_until_expiry": 170,
      "expiry_status": "current",
      "grade": "C",
      "id": "metro-north-railroad",
      "name": "Metro-North Railroad",
      "needs_attention": true,
      "score": 71.5,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Check the vehicle positions endpoint with your AVL vendor; it should return a fresh GTFS-Realtime protobuf on every request."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 37 day(s)",
      "days_until_expiry": 37,
      "expiry_status": "current",
      "grade": "C",
      "id": "tompkins-consolidated-area-transit-inc",
      "name": "Tompkins Consolidated Area Transit Inc",
      "needs_attention": true,
      "score": 73.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 60 day(s)",
      "days_until_expiry": 60,
      "expiry_status": "current",
      "grade": "C",
      "id": "metropolitan-transit-authority-mta-511",
      "name": "NYC Subway Supplemented",
      "needs_attention": true,
      "score": 73.7,
      "shapes_status": "at_risk",
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service window shortened unexpectedly on 2026-06-25",
      "days_until_expiry": 170,
      "expiry_status": "current",
      "grade": "C",
      "id": "mta",
      "name": "Metro-North Railroad",
      "needs_attention": true,
      "score": 77.2,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Add fare_attributes.txt (or Fares v2 files) with your fare structure. If your service is fare-free, ask to have it marked fare-free instead."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 51 day(s)",
      "days_until_expiry": 51,
      "expiry_status": "current",
      "grade": "A",
      "id": "capital-district-transportation-authority-cdta",
      "name": "Capital District Transportation Authority (CDTA)",
      "needs_attention": true,
      "score": 91.0,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Remove past service periods the next time you export the feed."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": null,
      "expiry_status": "unknown",
      "grade": "F",
      "id": "staten-island-ferry",
      "name": "Staten Island Ferry",
      "needs_attention": false,
      "score": 26.2,
      "shapes_status": null,
      "snapshot_date": "2026-06-27",
      "top_fix": "Add feed_start_date and feed_end_date to feed_info.txt and include calendar end dates in your export."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 1636,
      "expiry_status": "current",
      "grade": "F",
      "id": "adirondack-trailways-nyp",
      "name": "Adirondack Trailways NYP",
      "needs_attention": false,
      "score": 42.5,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Review the rule documentation for 'trip_distance_exceeds_shape_distance' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 1636,
      "expiry_status": "current",
      "grade": "F",
      "id": "adirondack-trailways-adp",
      "name": "Adirondack Trailways ADP",
      "needs_attention": false,
      "score": 45.1,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Review the rule documentation for 'trip_distance_exceeds_shape_distance' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 65,
      "expiry_status": "current",
      "grade": "F",
      "id": "nassau-inter-county-express-nice-bus",
      "name": "Nassau Inter-County Express (NICE Bus)",
      "needs_attention": false,
      "score": 46.1,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Review the rule documentation for 'trip_distance_exceeds_shape_distance' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 357,
      "expiry_status": "current",
      "grade": "F",
      "id": "lewis-county-public-transportation",
      "name": "Lewis County Public Transportation",
      "needs_attention": false,
      "score": 49.9,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "F",
      "id": "sullivan-county-transit",
      "name": "Sullivan County Transit",
      "needs_attention": false,
      "score": 51.7,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "F",
      "id": "ulster-county-area-transit",
      "name": "Ulster County Area Transit",
      "needs_attention": false,
      "score": 53.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "F",
      "id": "chautauqua-area-regional-transit-system-carts",
      "name": "Chautauqua Area Regional Transit System (CARTS)",
      "needs_attention": false,
      "score": 54.2,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 176,
      "expiry_status": "current",
      "grade": "F",
      "id": "greene-county-transit",
      "name": "Greene County Transit",
      "needs_attention": false,
      "score": 54.8,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Review the rule documentation for 'trip_distance_exceeds_shape_distance' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 26838,
      "expiry_status": "current",
      "grade": "F",
      "id": "suffolk-county-transit-3115",
      "name": "Suffolk County Transit",
      "needs_attention": false,
      "score": 56.7,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 218,
      "expiry_status": "current",
      "grade": "F",
      "id": "birnie-bus",
      "name": "Birnie Bus",
      "needs_attention": false,
      "score": 58.8,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "D",
      "id": "chenango-first-transit",
      "name": "Chenango First Transit",
      "needs_attention": false,
      "score": 61.2,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 156,
      "expiry_status": "current",
      "grade": "D",
      "id": "north-country-express-transit",
      "name": "North Country Express Transit",
      "needs_attention": false,
      "score": 61.6,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Review the rule documentation for 'trip_distance_exceeds_shape_distance' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 267,
      "expiry_status": "current",
      "grade": "D",
      "id": "olean-area-transit-system",
      "name": "Olean Area Transit System",
      "needs_attention": false,
      "score": 62.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 68,
      "expiry_status": "current",
      "grade": "D",
      "id": "westchester-county-bee-line-system-wcdot",
      "name": "Westchester County Bee-Line System (WCDOT)",
      "needs_attention": false,
      "score": 62.5,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_accessible on every trip (most small-agency fleets are 100% accessible, so this is often a single default)."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "D",
      "id": "clarkstown-minitrans",
      "name": "Clarkstown MiniTrans",
      "needs_attention": false,
      "score": 63.1,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 218,
      "expiry_status": "current",
      "grade": "D",
      "id": "madison-county-transit",
      "name": "Madison County Transit",
      "needs_attention": false,
      "score": 63.1,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 9214,
      "expiry_status": "current",
      "grade": "D",
      "id": "dutchess-county",
      "name": "Dutchess County",
      "needs_attention": false,
      "score": 63.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "D",
      "id": "city-of-long-beach-transportation",
      "name": "City of Long Beach Transportation",
      "needs_attention": false,
      "score": 64.2,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "D",
      "id": "part-putnam-area-rapid-transit",
      "name": "PART Putnam Area Rapid Transit",
      "needs_attention": false,
      "score": 65.2,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 78,
      "expiry_status": "current",
      "grade": "D",
      "id": "city-of-mechanicville-public-transit",
      "name": "City of Mechanicville Public Transit",
      "needs_attention": false,
      "score": 65.9,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "C",
      "id": "leprechaun-lines",
      "name": "Leprechaun Lines",
      "needs_attention": false,
      "score": 70.2,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 177,
      "expiry_status": "current",
      "grade": "C",
      "id": "huntington-area-rapid-transit-hart",
      "name": "Huntington Area Rapid Transit (HART)",
      "needs_attention": false,
      "score": 73.8,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "C",
      "id": "rensselaer-county-yankee-trails",
      "name": "Rensselaer County (Yankee Trails)",
      "needs_attention": false,
      "score": 74.1,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 1307,
      "expiry_status": "current",
      "grade": "C",
      "id": "rochester-transit-service",
      "name": "Livingston County",
      "needs_attention": false,
      "score": 76.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 540,
      "expiry_status": "current",
      "grade": "C",
      "id": "ny-waterway-3192",
      "name": "NY Waterway",
      "needs_attention": false,
      "score": 76.4,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 540,
      "expiry_status": "current",
      "grade": "C",
      "id": "nyc-ferry",
      "name": "NYC Ferry",
      "needs_attention": false,
      "score": 77.0,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Check the vehicle positions endpoint with your AVL vendor; it should return a fresh GTFS-Realtime protobuf on every request."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 1271,
      "expiry_status": "current",
      "grade": "C",
      "id": "columbia-county-public-transportation-3116",
      "name": "Columbia County Public Transportation",
      "needs_attention": false,
      "score": 77.7,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 84,
      "expiry_status": "current",
      "grade": "B",
      "id": "hudson-link",
      "name": "Hudson Link",
      "needs_attention": false,
      "score": 82.7,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 114,
      "expiry_status": "current",
      "grade": "A",
      "id": "downtown-alliance",
      "name": "Downtown Alliance",
      "needs_attention": false,
      "score": 92.2,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 114,
      "expiry_status": "current",
      "grade": "A",
      "id": "downtown-alliance-519",
      "name": "Downtown Alliance",
      "needs_attention": false,
      "score": 92.2,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Set wheelchair_boarding to 1 (accessible) or 2 (not accessible) for every stop. A field survey can start with the busiest stops."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "A",
      "id": "roosevelt-island-operating-corporation-tramway-rioc-tramway",
      "name": "Roosevelt Island Operating Corporation Tramway (RIOC Tramway)",
      "needs_attention": false,
      "score": 92.9,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Review the rule documentation for 'equal_shape_distance_diff_coordinates_distance_below_threshold' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "A",
      "id": "roosevelt-island-operating-corporation-tramway-rioc-tramway-1109",
      "name": "Roosevelt Island Operating Corporation Tramway (RIOC Tramway)",
      "needs_attention": false,
      "score": 92.9,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Review the rule documentation for 'equal_shape_distance_diff_coordinates_distance_below_threshold' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 95,
      "expiry_status": "current",
      "grade": "A",
      "id": "boston-harbor-islands-ferry",
      "name": "Boston Harbor Islands Ferry",
      "needs_attention": false,
      "score": 98.2,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Remove past service periods the next time you export the feed."
    }
  ],
  "needs_attention": 53,
  "rollup": {
    "id": "new-york",
    "name": "New York agencies"
  },
  "schema_version": "1.7",
  "shapes_readiness": {
    "at_risk": 3,
    "not_measured": 67,
    "not_ready": 0,
    "ready": 17,
    "total": 87
  },
  "state_percentile": 41
}
