{
  "agency_count": 30,
  "average_score": 61.5,
  "common_fixes": [
    {
      "agencies": 21,
      "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": 19,
      "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": 16,
      "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": 6,
      "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": "missing_required_column",
      "fix": "Review the rule documentation for 'missing_required_column' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "agencies": 3,
      "code": "expired_calendar",
      "fix": "Remove past service periods the next time you export the feed."
    },
    {
      "agencies": 2,
      "code": "service_window_outside_feed_period",
      "fix": "Review the rule documentation for 'service_window_outside_feed_period' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "agencies": 2,
      "code": "trip_coverage_not_active_for_next7_days",
      "fix": "Trim past service periods the next time you export."
    },
    {
      "agencies": 2,
      "code": "invalid_phone_number",
      "fix": "Review the rule documentation for 'invalid_phone_number' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    },
    {
      "agencies": 2,
      "code": "scorecard_missing_headsigns",
      "fix": "Populate trip_headsign to match what the bus displays."
    },
    {
      "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": 8,
    "stale": 12,
    "total": 20
  },
  "generated_at": "2026-07-09T09:08:55+00:00",
  "grade_distribution": {
    "A": 3,
    "B": 3,
    "C": 3,
    "D": 3,
    "F": 18
  },
  "members": [
    {
      "annual_trips": null,
      "attention_reason": "Service data has expired",
      "days_until_expiry": -193,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "mountain-line-1148",
      "name": "Mountain Line",
      "needs_attention": true,
      "score": 28.3,
      "shapes_status": "ready",
      "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": "Service data has expired",
      "days_until_expiry": -573,
      "expiry_status": "stale",
      "grade": "F",
      "id": "cat-tran-shuttle-2206",
      "name": "Cat Tran Shuttle",
      "needs_attention": true,
      "score": 34.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": -1711,
      "expiry_status": "stale",
      "grade": "F",
      "id": "cat-tran-shuttle",
      "name": "Cat Tran Shuttle",
      "needs_attention": true,
      "score": 36.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": -1711,
      "expiry_status": "stale",
      "grade": "F",
      "id": "cat-tran-shuttle-146",
      "name": "Cat Tran Shuttle",
      "needs_attention": true,
      "score": 36.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": -1286,
      "expiry_status": "stale",
      "grade": "F",
      "id": "groome-transportation-arizona-shuttle",
      "name": "Groome Transportation - Arizona Shuttle",
      "needs_attention": true,
      "score": 44.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": -1286,
      "expiry_status": "stale",
      "grade": "F",
      "id": "groome-transportation-arizona-shuttle-156",
      "name": "Groome Transportation - Arizona Shuttle",
      "needs_attention": true,
      "score": 44.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": -418,
      "expiry_status": "stale",
      "grade": "F",
      "id": "suntran",
      "name": "SunTran",
      "needs_attention": true,
      "score": 47.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": -2747,
      "expiry_status": "stale",
      "grade": "F",
      "id": "city-of-sierra-vista",
      "name": "City of Sierra Vista",
      "needs_attention": true,
      "score": 48.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": -3476,
      "expiry_status": "stale",
      "grade": "F",
      "id": "verde-lynx",
      "name": "Verde Lynx",
      "needs_attention": true,
      "score": 51.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": -3476,
      "expiry_status": "stale",
      "grade": "F",
      "id": "verde-lynx-159",
      "name": "Verde Lynx",
      "needs_attention": true,
      "score": 51.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": -190,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "benson-area-transit",
      "name": "Benson 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": -190,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "benson-area-transit-229",
      "name": "Benson 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": -3476,
      "expiry_status": "stale",
      "grade": "F",
      "id": "roadrunner",
      "name": "RoadRunner",
      "needs_attention": true,
      "score": 52.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": -3476,
      "expiry_status": "stale",
      "grade": "F",
      "id": "roadrunner-644",
      "name": "RoadRunner",
      "needs_attention": true,
      "score": 52.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": -54,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "suntran-2354",
      "name": "SunTran",
      "needs_attention": true,
      "score": 55.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": -196,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "copper-mountain-transit",
      "name": "Copper Mountain Transit",
      "needs_attention": true,
      "score": 56.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": -70,
      "expiry_status": "lapsed",
      "grade": "F",
      "id": "city-of-show-low",
      "name": "City of Show Low",
      "needs_attention": true,
      "score": 57.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": "kingman-area-regional-transit",
      "name": "Kingman Area Regional Transit",
      "needs_attention": true,
      "score": 57.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": -555,
      "expiry_status": "stale",
      "grade": "D",
      "id": "city-of-coolidge",
      "name": "Cotton Express and Central Arizona Regional Transit",
      "needs_attention": true,
      "score": 64.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": -70,
      "expiry_status": "lapsed",
      "grade": "D",
      "id": "city-of-douglas",
      "name": "City of Douglas",
      "needs_attention": true,
      "score": 69.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": null,
      "days_until_expiry": 176,
      "expiry_status": "current",
      "grade": "D",
      "id": "yuma-county-intergovernmental-public-transportation-authority-ycipta",
      "name": "Yuma County Intergovernmental Public Transportation Authority (YCIPTA)",
      "needs_attention": false,
      "score": 69.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": 174,
      "expiry_status": "current",
      "grade": "C",
      "id": "mountain-line-transit",
      "name": "Mountain Line Transit",
      "needs_attention": false,
      "score": 76.6,
      "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": 145,
      "expiry_status": "current",
      "grade": "C",
      "id": "cottonwood-area-transit-cat",
      "name": "Cottonwood Area Transit (CAT)",
      "needs_attention": false,
      "score": 79.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": 145,
      "expiry_status": "current",
      "grade": "C",
      "id": "cottonwood-area-transit-cat-158",
      "name": "Cottonwood Area Transit (CAT)",
      "needs_attention": false,
      "score": 79.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": 108,
      "expiry_status": "current",
      "grade": "B",
      "id": "valley-metro-vm",
      "name": "Valley Metro (VM)",
      "needs_attention": false,
      "score": 80.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": null,
      "days_until_expiry": 175,
      "expiry_status": "current",
      "grade": "B",
      "id": "bullhead-area-transit-system",
      "name": "Bullhead Area Transit System",
      "needs_attention": false,
      "score": 85.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": "B",
      "id": "bullhead-area-transit-system-109",
      "name": "Bullhead Area Transit System",
      "needs_attention": false,
      "score": 85.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": 64,
      "expiry_status": "current",
      "grade": "A",
      "id": "grand-canyon-national-park",
      "name": "South Rim Shuttle",
      "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."
    },
    {
      "annual_trips": null,
      "attention_reason": null,
      "days_until_expiry": 550,
      "expiry_status": "current",
      "grade": "A",
      "id": "bisbee-bus",
      "name": "Bisbee Bus",
      "needs_attention": false,
      "score": 99.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": 418,
      "expiry_status": "current",
      "grade": "A",
      "id": "sedona-shuttle",
      "name": "Sedona Shuttle",
      "needs_attention": false,
      "score": 99.8,
      "shapes_status": null,
      "snapshot_date": "2026-07-09",
      "top_fix": "Review the rule documentation for 'service_window_outside_feed_period' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed."
    }
  ],
  "needs_attention": 20,
  "rollup": {
    "id": "arizona",
    "name": "Arizona agencies"
  },
  "schema_version": "1.7",
  "shapes_readiness": {
    "at_risk": 0,
    "not_measured": 25,
    "not_ready": 0,
    "ready": 5,
    "total": 30
  },
  "state_percentile": 65
}
