{
  "agency_count": 36,
  "average_score": 52.3,
  "common_fixes": [
    {
      "agencies": 28,
      "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": 21,
      "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": 13,
      "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": 11,
      "code": "stop_time_timepoint_without_times",
      "fix": "Review the rule documentation for 'stop_time_timepoint_without_times' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "agencies": 7,
      "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": 4,
      "code": "scorecard_missing_headsigns",
      "fix": "Populate trip_headsign to match what the bus displays."
    },
    {
      "agencies": 4,
      "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": 4,
      "code": "scorecard_missing_feed_info_dates",
      "fix": "Add feed_info.txt with feed_start_date and feed_end_date to your export."
    },
    {
      "agencies": 2,
      "code": "decreasing_or_equal_stop_time_distance",
      "fix": "Re-generate shape distances in your export; flag to your vendor if it persists."
    },
    {
      "agencies": 2,
      "code": "missing_bike_allowance",
      "fix": "Review the rule documentation for 'missing_bike_allowance' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "agencies": 2,
      "code": "stop_without_stop_time",
      "fix": "Remove retired stops from the export, or add them back to the trips that should serve them."
    }
  ],
  "expired": {
    "lapsed": 3,
    "stale": 18,
    "total": 21
  },
  "generated_at": "2026-07-09T09:08:55+00:00",
  "grade_distribution": {
    "A": 1,
    "B": 2,
    "C": 5,
    "D": 3,
    "F": 25
  },
  "members": [
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -2170,
      "expiry_status": "stale",
      "grade": "F",
      "id": "allegany-county-transit",
      "name": "Allegany County Transit",
      "needs_attention": true,
      "score": 25.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": -1778,
      "expiry_status": "stale",
      "grade": "F",
      "id": "charles-county-vango",
      "name": "Charles County VanGo",
      "needs_attention": true,
      "score": 25.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": -1778,
      "expiry_status": "stale",
      "grade": "F",
      "id": "cecil-transit",
      "name": "Cecil Transit",
      "needs_attention": true,
      "score": 26.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": -1743,
      "expiry_status": "stale",
      "grade": "F",
      "id": "washington-county-transit",
      "name": "Washington County Transit",
      "needs_attention": true,
      "score": 29.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": -1809,
      "expiry_status": "stale",
      "grade": "F",
      "id": "calvert-county-public-transportation",
      "name": "Calvert County Public Transportation",
      "needs_attention": true,
      "score": 30.9,
      "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": -1803,
      "expiry_status": "stale",
      "grade": "F",
      "id": "annapolis-transit",
      "name": "Annapolis Transit",
      "needs_attention": true,
      "score": 31.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": -1594,
      "expiry_status": "stale",
      "grade": "F",
      "id": "delmarva-community-transit",
      "name": "Delmarva Community Transit",
      "needs_attention": true,
      "score": 31.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": -1286,
      "expiry_status": "stale",
      "grade": "F",
      "id": "harford-transit-link",
      "name": "Harford Transit LINK",
      "needs_attention": true,
      "score": 32.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": -496,
      "expiry_status": "stale",
      "grade": "F",
      "id": "frederick-county-transit",
      "name": "Frederick County TransIT",
      "needs_attention": true,
      "score": 34.3,
      "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": -2239,
      "expiry_status": "stale",
      "grade": "F",
      "id": "ocean-city-transportation",
      "name": "Ocean City Transportation",
      "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": -1620,
      "expiry_status": "stale",
      "grade": "F",
      "id": "carroll-transit-system",
      "name": "Carroll Transit System",
      "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": -2381,
      "expiry_status": "stale",
      "grade": "F",
      "id": "shore-transit",
      "name": "Shore Transit",
      "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": -1984,
      "expiry_status": "stale",
      "grade": "F",
      "id": "saint-mary-s-transit-system",
      "name": "Saint Mary\u02bcs Transit System",
      "needs_attention": true,
      "score": 42.6,
      "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": -1984,
      "expiry_status": "stale",
      "grade": "F",
      "id": "st-mary-s-transit-system-sts",
      "name": "St. Mary's Transit System (STS)",
      "needs_attention": true,
      "score": 42.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": "bwi-thurgood-marshall-airport-bwi-shuttle",
      "name": "BWI Thurgood Marshall Airport (BWI) Shuttle",
      "needs_attention": true,
      "score": 46.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": -48,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "shore-transit-3149",
      "name": "Shore Transit",
      "needs_attention": true,
      "score": 49.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": -1592,
      "expiry_status": "stale",
      "grade": "F",
      "id": "charm-city-circulator",
      "name": "Charm City Circulator",
      "needs_attention": true,
      "score": 49.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": -646,
      "expiry_status": "stale",
      "grade": "F",
      "id": "bethesda-circulator",
      "name": "Bethesda Circulator",
      "needs_attention": true,
      "score": 49.9,
      "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 expires in 58 day(s)",
      "days_until_expiry": 58,
      "expiry_status": "current",
      "grade": "F",
      "id": "montgomery-county-department-of-transportation-ride-on",
      "name": "Montgomery County Department of Transportation (Ride On)",
      "needs_attention": true,
      "score": 51.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Re-generate shape distances in your export; flag to your vendor if it persists."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -9,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "regional-transportation-agency-of-central-maryland-rta-489",
      "name": "Regional Transportation Agency of Central Maryland (RTA)",
      "needs_attention": true,
      "score": 55.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 30 day(s)",
      "days_until_expiry": 30,
      "expiry_status": "expiring_soon",
      "grade": "F",
      "id": "frederick-county-transit-2432",
      "name": "Frederick County TransIT",
      "needs_attention": true,
      "score": 58.3,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Review the rule documentation for 'stop_time_with_arrival_before_previous_departure_time' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 30 day(s)",
      "days_until_expiry": 30,
      "expiry_status": "expiring_soon",
      "grade": "F",
      "id": "cecil-transit-3034",
      "name": "Cecil Transit",
      "needs_attention": true,
      "score": 58.7,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Review the rule documentation for 'empty_file' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -2016,
      "expiry_status": "stale",
      "grade": "F",
      "id": "queen-anne-s-county-ride",
      "name": "Queen Anne's County Ride",
      "needs_attention": true,
      "score": 59.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": -9,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "regional-transportation-agency-of-central-maryland-rta",
      "name": "Regional Transportation Agency of Central Maryland (RTA)",
      "needs_attention": true,
      "score": 59.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 44 day(s)",
      "days_until_expiry": 44,
      "expiry_status": "current",
      "grade": "D",
      "id": "maryland-transit-administration",
      "name": "Local Bus",
      "needs_attention": true,
      "score": 67.1,
      "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": "Score fell 4.2 points since 2026-07-08",
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "C",
      "id": "maryland-transit-administration-469",
      "name": "Light Rail",
      "needs_attention": true,
      "score": 70.7,
      "shapes_status": "ready",
      "snapshot_date": "2026-07-09",
      "top_fix": "Add feed_info.txt with feed_start_date and feed_end_date to your export."
    },
    {
      "annual_trips": null,
      "attention_reason": "Service data expires in 30 day(s)",
      "days_until_expiry": 30,
      "expiry_status": "expiring_soon",
      "grade": "C",
      "id": "towson-loop",
      "name": "Towson Loop",
      "needs_attention": true,
      "score": 70.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": "Service data expires in 54 day(s)",
      "days_until_expiry": 54,
      "expiry_status": "current",
      "grade": "C",
      "id": "prince-george-s-county-the-bus",
      "name": "Prince George's County (The Bus)",
      "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": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "F",
      "id": "maryland-transit-administration-467",
      "name": "Commuter Bus",
      "needs_attention": false,
      "score": 54.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": "maryland-transit-administration-468",
      "name": "MARC Train",
      "needs_attention": false,
      "score": 60.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": 1272,
      "expiry_status": "current",
      "grade": "D",
      "id": "saint-mary-s-transit-system-2268",
      "name": "Saint Mary\u02bcs Transit System",
      "needs_attention": false,
      "score": 66.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": "C",
      "id": "maryland-transit-administration-metro-subway",
      "name": "Metro SubwayLink",
      "needs_attention": false,
      "score": 75.3,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Add feed_info.txt with feed_start_date and feed_end_date to your export."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 176,
      "expiry_status": "current",
      "grade": "C",
      "id": "washington-county-transit-2286",
      "name": "Washington County Transit",
      "needs_attention": false,
      "score": 78.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": 114,
      "expiry_status": "current",
      "grade": "B",
      "id": "harbor-connector",
      "name": "Harbor Connector",
      "needs_attention": false,
      "score": 81.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": null,
      "days_until_expiry": 114,
      "expiry_status": "current",
      "grade": "B",
      "id": "harbor-connector-618",
      "name": "Harbor Connector",
      "needs_attention": false,
      "score": 81.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": null,
      "days_until_expiry": 83,
      "expiry_status": "current",
      "grade": "A",
      "id": "annapolis-transit-2285",
      "name": "Annapolis Transit",
      "needs_attention": false,
      "score": 93.6,
      "shapes_status": null,
      "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."
    }
  ],
  "needs_attention": 28,
  "rollup": {
    "id": "maryland",
    "name": "Maryland agencies"
  },
  "schema_version": "1.7",
  "shapes_readiness": {
    "at_risk": 0,
    "not_measured": 27,
    "not_ready": 0,
    "ready": 9,
    "total": 36
  },
  "state_percentile": 26
}
