{
  "agency": {
    "id": "cincinnati-metro",
    "name": "Cincinnati Metro",
    "subdivision_code": "US-OH",
    "subdivision_name": "Ohio"
  },
  "categories": {
    "completeness": {
      "details": {
        "accessibility": {
          "measures": "presence_not_usability",
          "score": 100.0,
          "stops_marked_accessible_pct": 2.2,
          "stops_marked_not_accessible_pct": 97.8,
          "stops_stated_pct": 100.0,
          "trips_stated_pct": 100.0
        },
        "accessibility_measures": "presence_not_usability",
        "cemv": {
          "declared": false,
          "supported": false
        },
        "components": {
          "contact": 15.0,
          "fares": 15.0,
          "headsigns": 15.0,
          "stop_names": 1.0,
          "wheelchair_stops": 25.0,
          "wheelchair_trips": 15.0
        },
        "fare_free": false,
        "fares": {
          "applied": true,
          "has_leg_rules": false,
          "has_products": false,
          "has_transfer_rules": false,
          "model": "legacy",
          "product_count": 0
        },
        "flex": {
          "booking_reachable": false,
          "booking_rule_count": 0,
          "has_booking_rules": false,
          "has_flex": false
        },
        "has_fares": true,
        "headsign_applicable_trips": 10859,
        "headsign_loop_exempt_trips": 0,
        "headsign_pct": 100.0,
        "headsign_scored_pct": 100.0,
        "headsign_stop_headsign_trips": 0,
        "mixed_case_stop_name_pct": 6.7,
        "pathways": {
          "has_entrances": false,
          "has_levels": false,
          "has_pathways": false,
          "has_stations": false,
          "has_step_free": false,
          "pathway_count": 0
        },
        "stops": 3513,
        "translations": {
          "feed_lang": "en",
          "has_translations": false,
          "languages": [],
          "translated_tables": [],
          "translation_count": 0
        },
        "trips": 10859,
        "unmeasured_components": [],
        "wheelchair_accessible_pct": 100.0,
        "wheelchair_boarding_pct": 100.0,
        "wheelchair_marked_accessible_pct": 2.2,
        "wheelchair_marked_not_accessible_pct": 97.8
      },
      "findings": [
        {
          "code": "scorecard_stop_names_all_caps",
          "consequence": {
            "absences": [
              "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
              "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
            ],
            "code": "scorecard_stop_names_all_caps",
            "line": "Fixing this covers 3,279 of 3,513 stops, about 93% of them.",
            "reach": {
              "affected": 3279,
              "basis": "stops",
              "basis_label": "stops",
              "reason": "",
              "share": 0.9334,
              "total": 3513,
              "total_source": "geo.stop_count"
            },
            "ridership": {
              "annual_rider_trips": null,
              "ntd_id": "50012",
              "reason": "not_joined_here"
            },
            "served_area_need": {
              "reason": "not_joined_here",
              "scale": "us_acs",
              "tier": null
            }
          },
          "count": 3279,
          "effort": "Often a bulk fix in your scheduling software.",
          "fix": "Rename stops to mixed case where the language has letter case (for example, 'Central Station').",
          "owner": "Likely your export tool",
          "points": 14.0,
          "severity": "INFO",
          "what": "About 3279 stop names are written in ALL CAPS.",
          "why": "Mixed-case names are easier to read in apps and are read more naturally by screen readers."
        }
      ],
      "name": "completeness",
      "score": 86.0,
      "status": "measured",
      "summary": "100% of stops state wheelchair accessibility (2% marked accessible, 98% marked not accessible). This measures what the feed publishes, not whether a stop is physically usable. Fare data is published.",
      "weight": 0.25
    },
    "correctness": {
      "details": {
        "distinct_codes": 9,
        "instances_by_severity": {
          "ERROR": 0,
          "INFO": 3,
          "WARNING": 13767
        },
        "validator_version": "8.0.1"
      },
      "findings": [
        {
          "code": "equal_shape_distance_same_coordinates",
          "consequence": {
            "absences": [
              "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
              "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
            ],
            "code": "equal_shape_distance_same_coordinates",
            "line": "This is a validator notice, and the validator decides what each instance covers, so no share of the network can be read from it here.",
            "reach": {
              "affected": null,
              "basis": "none",
              "basis_label": null,
              "reason": "validator_notice",
              "share": null,
              "total": null,
              "total_source": null
            },
            "ridership": {
              "annual_rider_trips": null,
              "ntd_id": "50012",
              "reason": "not_joined_here"
            },
            "served_area_need": {
              "reason": "not_joined_here",
              "scale": "us_acs",
              "tier": null
            }
          },
          "count": 10404,
          "effort": "Usually one export setting.",
          "fix": "Turn on shape cleanup in your export tool, or drop the repeated points from shapes.txt.",
          "owner": "Likely your export tool",
          "points": 8.0,
          "severity": "WARNING",
          "what": "Some route lines list the same point twice in a row.",
          "why": "Repeated points don't hurt riders, but they can skew distance math and hint at a shaky export."
        },
        {
          "code": "mixed_case_recommended_field",
          "consequence": {
            "absences": [
              "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
              "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
            ],
            "code": "mixed_case_recommended_field",
            "line": "This is a validator notice, and the validator decides what each instance covers, so no share of the network can be read from it here.",
            "reach": {
              "affected": null,
              "basis": "none",
              "basis_label": null,
              "reason": "validator_notice",
              "share": null,
              "total": null,
              "total_source": null
            },
            "ridership": {
              "annual_rider_trips": null,
              "ntd_id": "50012",
              "reason": "not_joined_here"
            },
            "served_area_need": {
              "reason": "not_joined_here",
              "scale": "us_acs",
              "tier": null
            }
          },
          "count": 3297,
          "effort": "Often a bulk fix in your scheduling software.",
          "fix": "Use mixed case for stop names and headsigns (e.g. 'Main St & 2nd Ave', not 'MAIN ST & 2ND AVE').",
          "owner": "Likely your export tool",
          "points": 8.0,
          "severity": "WARNING",
          "what": "Some rider-facing names are in ALL CAPS or all lowercase.",
          "why": "ALL-CAPS stop and headsign names are harder to read in apps and are read awkwardly by screen readers."
        },
        {
          "code": "missing_recommended_field",
          "consequence": {
            "absences": [
              "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
              "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
            ],
            "code": "missing_recommended_field",
            "line": "This is a validator notice, and the validator decides what each instance covers, so no share of the network can be read from it here.",
            "reach": {
              "affected": null,
              "basis": "none",
              "basis_label": null,
              "reason": "validator_notice",
              "share": null,
              "total": null,
              "total_source": null
            },
            "ridership": {
              "annual_rider_trips": null,
              "ntd_id": "50012",
              "reason": "not_joined_here"
            },
            "served_area_need": {
              "reason": "not_joined_here",
              "scale": "us_acs",
              "tier": null
            }
          },
          "count": 56,
          "effort": "A field at a time; not urgent.",
          "fix": "Review the flagged fields and fill in the ones your riders would use.",
          "owner": "",
          "points": 8.0,
          "severity": "WARNING",
          "what": "Some files leave out fields that GTFS asks for but does not require.",
          "why": "Recommended fields like agency_phone or stop descriptions make the feed more useful to riders and trip planners."
        },
        {
          "code": "equal_shape_distance_diff_coordinates_distance_below_threshold",
          "consequence": {
            "absences": [
              "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
              "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
            ],
            "code": "equal_shape_distance_diff_coordinates_distance_below_threshold",
            "line": "This is a validator notice, and the validator decides what each instance covers, so no share of the network can be read from it here.",
            "reach": {
              "affected": null,
              "basis": "none",
              "basis_label": null,
              "reason": "validator_notice",
              "share": null,
              "total": null,
              "total_source": null
            },
            "ridership": {
              "annual_rider_trips": null,
              "ntd_id": "50012",
              "reason": "not_joined_here"
            },
            "served_area_need": {
              "reason": "not_joined_here",
              "scale": "us_acs",
              "tier": null
            }
          },
          "count": 8,
          "effort": "Varies.",
          "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.",
          "owner": "",
          "points": 6.0,
          "severity": "WARNING",
          "what": "Equal shape distance diff coordinates distance below threshold (flagged by the MobilityData validator).",
          "why": "See the linked rule for what this affects."
        },
        {
          "code": "stop_too_far_from_shape",
          "consequence": {
            "absences": [
              "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
              "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
            ],
            "code": "stop_too_far_from_shape",
            "line": "This is a validator notice, and the validator decides what each instance covers, so no share of the network can be read from it here.",
            "reach": {
              "affected": null,
              "basis": "none",
              "basis_label": null,
              "reason": "validator_notice",
              "share": null,
              "total": null,
              "total_source": null
            },
            "ridership": {
              "annual_rider_trips": null,
              "ntd_id": "50012",
              "reason": "not_joined_here"
            },
            "served_area_need": {
              "reason": "not_joined_here",
              "scale": "us_acs",
              "tier": null
            }
          },
          "count": 1,
          "effort": "A few minutes per flagged stop.",
          "fix": "Check the flagged stops' coordinates and the route shape in your scheduling software; re-snap whichever is misplaced.",
          "owner": "Likely your export tool",
          "points": 4.0,
          "severity": "WARNING",
          "what": "Some stops sit far from the route line they belong to.",
          "why": "Trip planners may draw the transit vehicle route through the wrong path or point riders to the wrong boarding location."
        },
        {
          "code": "trip_coverage_not_active_for_next7_days",
          "consequence": {
            "absences": [
              "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
              "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
            ],
            "code": "trip_coverage_not_active_for_next7_days",
            "line": "This is a validator notice, and the validator decides what each instance covers, so no share of the network can be read from it here.",
            "reach": {
              "affected": null,
              "basis": "none",
              "basis_label": null,
              "reason": "validator_notice",
              "share": null,
              "total": null,
              "total_source": null
            },
            "ridership": {
              "annual_rider_trips": null,
              "ntd_id": "50012",
              "reason": "not_joined_here"
            },
            "served_area_need": {
              "reason": "not_joined_here",
              "scale": "us_acs",
              "tier": null
            }
          },
          "count": 1,
          "effort": "One setting in most export tools.",
          "fix": "Trim past service periods the next time you export.",
          "owner": "Likely your export tool",
          "points": 4.0,
          "severity": "WARNING",
          "what": "Many of the feed's trips don't run at all in the next 7 days.",
          "why": "It usually means old service periods are still in the export, making the feed bigger and harder to check."
        },
        {
          "code": "future_calendar",
          "consequence": {
            "absences": [
              "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
              "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
            ],
            "code": "future_calendar",
            "line": "This is a validator notice, and the validator decides what each instance covers, so no share of the network can be read from it here.",
            "reach": {
              "affected": null,
              "basis": "none",
              "basis_label": null,
              "reason": "validator_notice",
              "share": null,
              "total": null,
              "total_source": null
            },
            "ridership": {
              "annual_rider_trips": null,
              "ntd_id": "50012",
              "reason": "not_joined_here"
            },
            "served_area_need": {
              "reason": "not_joined_here",
              "scale": "us_acs",
              "tier": null
            }
          },
          "count": 1,
          "effort": "Varies.",
          "fix": "Review the rule documentation for 'future_calendar' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed.",
          "owner": "",
          "points": 0.5,
          "severity": "INFO",
          "what": "Future calendar (flagged by the MobilityData validator).",
          "why": "See the linked rule for what this affects."
        },
        {
          "code": "future_feed",
          "consequence": {
            "absences": [
              "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
              "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
            ],
            "code": "future_feed",
            "line": "This is a validator notice, and the validator decides what each instance covers, so no share of the network can be read from it here.",
            "reach": {
              "affected": null,
              "basis": "none",
              "basis_label": null,
              "reason": "validator_notice",
              "share": null,
              "total": null,
              "total_source": null
            },
            "ridership": {
              "annual_rider_trips": null,
              "ntd_id": "50012",
              "reason": "not_joined_here"
            },
            "served_area_need": {
              "reason": "not_joined_here",
              "scale": "us_acs",
              "tier": null
            }
          },
          "count": 1,
          "effort": "Varies.",
          "fix": "Review the rule documentation for 'future_feed' at https://gtfs-validator.mobilitydata.org/rules.html and check the flagged rows in your feed.",
          "owner": "",
          "points": 0.5,
          "severity": "INFO",
          "what": "Future feed (flagged by the MobilityData validator).",
          "why": "See the linked rule for what this affects."
        },
        {
          "code": "unknown_column",
          "consequence": {
            "absences": [
              "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
              "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
            ],
            "code": "unknown_column",
            "line": "This is a validator notice, and the validator decides what each instance covers, so no share of the network can be read from it here.",
            "reach": {
              "affected": null,
              "basis": "none",
              "basis_label": null,
              "reason": "validator_notice",
              "share": null,
              "total": null,
              "total_source": null
            },
            "ridership": {
              "annual_rider_trips": null,
              "ntd_id": "50012",
              "reason": "not_joined_here"
            },
            "served_area_need": {
              "reason": "not_joined_here",
              "scale": "us_acs",
              "tier": null
            }
          },
          "count": 1,
          "effort": "A quick look at the flagged files.",
          "fix": "Check the flagged column names for misspellings of standard GTFS fields; remove them if they are vendor extras.",
          "owner": "",
          "points": 0.5,
          "severity": "INFO",
          "what": "Some files contain columns that are not part of the GTFS spec.",
          "why": "Harmless to riders, but apps ignore these columns and they can hide typos in real column names."
        }
      ],
      "name": "correctness",
      "score": 60.5,
      "status": "measured",
      "summary": "The MobilityData validator flagged 9 kinds of issue across 13770 instances (0 error, 13767 warning, 3 informational).",
      "weight": 0.35
    },
    "freshness": {
      "details": {
        "days_until_expiry": 59,
        "effective_expiry_date": "2026-12-05",
        "expiry_limited_by": "both",
        "feed_end_date": "2026-12-05",
        "feed_start_date": "2026-10-04",
        "feed_version": "gtfs_20261004-20261205_20260929",
        "has_feed_info": true,
        "last_service_date": "2026-12-05",
        "seasonal_boundary": false,
        "service_horizon_review_years": 10,
        "service_horizon_status": "within_review_threshold",
        "service_type": "fixed"
      },
      "findings": [],
      "name": "freshness",
      "score": 98.3,
      "status": "measured",
      "summary": "Service data covers the next 59 days.",
      "weight": 0.2
    },
    "realtime": {
      "details": {
        "alerts_content": {
          "alerts": 61,
          "ended_over_30_days_ago": 0,
          "with_cause_and_effect": 16,
          "with_description": 61,
          "with_header_text": 61,
          "with_informed_entity": 61
        },
        "configured_kinds": [
          "trip_updates",
          "vehicle_positions",
          "service_alerts"
        ],
        "coverage_pct": 100.0,
        "covered_trips": 118,
        "drift": {
          "median_seconds": 0,
          "observations": 14197,
          "on_time_share_pct": 87.2,
          "p90_abs_seconds": 360
        },
        "kinds_configured": 3,
        "kinds_reachable": 3,
        "reachable_kinds": [
          "trip_updates",
          "vehicle_positions",
          "service_alerts"
        ],
        "rt_freshness": "fresh",
        "samples": 9,
        "scheduled_trips_in_window": 118,
        "vehicles_checked": 367,
        "vehicles_on_route_pct": 98.4,
        "worst_lag_seconds": 16
      },
      "findings": [],
      "name": "realtime",
      "score": 99.8,
      "status": "measured",
      "summary": "Sampled 9 times: 3 of 3 configured feeds healthy; 100.0% of scheduled trips had live predictions; 98.4% of vehicles on their route; predictions ran a median of 0s behind schedule.",
      "weight": 0.2
    }
  },
  "confidence": {
    "feed_age_days": 0,
    "fetch_source": "origin",
    "level": "high",
    "measured_categories": 4,
    "notes": [
      "All four score categories were measured this run.",
      "Realtime was sampled in one bounded window of 9 snapshots.",
      "The feed was downloaded from the configured feed URL. Publisher ownership of that URL is not verified."
    ],
    "rt_windows": 1,
    "total_categories": 4
  },
  "conformance": {
    "awarded": true,
    "criteria": [
      {
        "detail": "Passes validation with no errors.",
        "key": "valid",
        "met": true
      },
      {
        "detail": "Service data covers the next 59 days.",
        "key": "current",
        "met": true
      },
      {
        "detail": "States wheelchair access on 100% of stops and 100% of trips.",
        "key": "accessible",
        "met": true
      }
    ],
    "status": "awarded",
    "summary": "This feed earns the conformance mark: valid, current, and stating wheelchair access on nearly every stop and trip.",
    "version": 2
  },
  "feed": {
    "license_note": "No stated data license in the Mobility Database; verify before publishing.",
    "reachable": true,
    "sha256": "8659499fee51453f15e7971ad1e743e77b1388cce8782e447f25ebf69672f195",
    "size_bytes": 6766627,
    "source_provenance": "unverified",
    "static_url": "https://www.go-metro.com/uploads/GTFS/google_transit_info.zip"
  },
  "fetch": {
    "final_url": "https://www.go-metro.com/wp-content/uploads/2024/12/google_transit-1.zip",
    "max_attempts": 4,
    "reader_archive_profile": "raw-v1",
    "source": "origin",
    "user_agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36"
  },
  "generated_at": "2026-10-07T00:00:00+00:00",
  "geo": {
    "bbox": [
      -84.79405,
      39.06428,
      -84.25999,
      39.35649
    ],
    "lat": 39.15116,
    "lon": -84.50832,
    "stop_count": 3513
  },
  "mode_profile": {
    "ferry_only": false,
    "graded": false,
    "has_ferry": false,
    "is_multimodal": true,
    "measured": true,
    "modes": [
      {
        "key": "tram",
        "label": "Tram / light rail",
        "route_count": 1,
        "trip_count": 478,
        "trip_share_pct": 4.4
      },
      {
        "key": "bus",
        "label": "Bus",
        "route_count": 52,
        "trip_count": 10381,
        "trip_share_pct": 95.6
      }
    ],
    "primary_mode": "bus",
    "primary_mode_label": "Bus",
    "route_count": 53,
    "trip_count": 10859
  },
  "ntd_id_alignment": {
    "detail": "Your feed's agency_id is METRO; your National Transit Database ID is 50012. A feed that serves several agencies (a shared regional feed) can legitimately carry more than one agency_id. The values do not need to equal the five-digit NTD ID, so this difference is allowed and carries no score.",
    "feed_agency_ids": [
      "METRO"
    ],
    "fix": "Confirm that P-50 crosswalks agency_id METRO to NTD ID 50012, and keep the feed value stable. Do not change it solely to make the two values equal.",
    "ntd_id": "50012",
    "status": "mismatch"
  },
  "ntd_readiness": {
    "pillars": [
      {
        "detail": "Published at a public URL.",
        "key": "published",
        "status": "ready"
      },
      {
        "detail": "Passes validation with no errors.",
        "key": "valid",
        "status": "ready"
      },
      {
        "detail": "Service data covers the next 59 days.",
        "key": "current",
        "status": "ready"
      },
      {
        "detail": "agency.txt provides agency_id. For RY2026, keep one stable value for each NTD reporter represented in the feed and crosswalk each value on the P-50 form.",
        "key": "agency_id",
        "status": "ready"
      }
    ],
    "status": "ready",
    "summary": "Published at a public URL, valid, current, and identified with agency_id: the four feed checks for RY2026 all hold here. Only your own D-10 and P-50 filings make that official; this is a heads-up, not a determination."
  },
  "overall": {
    "grade": "B",
    "margin_to_lower_band": 2.3,
    "margin_to_next_band": 7.7,
    "score": 82.3
  },
  "recommendations": [
    {
      "category": "accessibility",
      "code": "scorecard_route_color_low_contrast",
      "count": 25,
      "effort": "A per-route color setting in your scheduling software.",
      "fix": "Adjust route_color or route_text_color so each pair clears 4.5:1. Often switching the text between black and white is enough.",
      "owner": "Likely your export tool",
      "points": 0.0,
      "severity": "WARNING",
      "what": "25 route badge(s) pair a color and text color below the WCAG 4.5:1 contrast bar (1, 10, 11, 16, 20, and more).",
      "why": "Riders with low vision struggle to read a low-contrast route badge. It also washes out on a phone screen in sunlight at the stop."
    },
    {
      "category": "accessibility",
      "code": "scorecard_stop_name_needs_tts",
      "count": 3374,
      "effort": "A short text field per affected stop; start with the busiest.",
      "fix": "Add tts_stop_name with the spoken form, e.g. 'Main Street and Second Avenue', for the affected stops.",
      "owner": "",
      "points": 0.0,
      "severity": "INFO",
      "what": "3374 stop name(s) use abbreviations or symbols a screen reader may mispronounce, with no spoken form set (\"3RD ST 508\", \"3RD ST 640\", \"3rd ST. WEST OF BRENT SPENCE BRIDGE\", and more).",
      "why": "A screen reader speaks the raw name. 'Main St & 2nd Ave' can come out as 'Main saint', or lose the ampersand."
    }
  ],
  "routability": {
    "boardable_stops": 3513,
    "findings": [],
    "orphan_stops": 0,
    "single_stop_trips": 0,
    "trips_total": 10859
  },
  "route_map": {
    "drawn_route_count": 53,
    "has_shapes": true,
    "path": "data/artifacts/cincinnati-metro/geometry.geojson",
    "route_count": 53,
    "routes": [
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "1",
        "label": "1",
        "long": "Mt. Adams",
        "short": "1",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "10",
        "label": "10",
        "long": "Erie Avenue",
        "short": "10",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "68C9F2",
        "color_name": "teal",
        "has_shape": true,
        "id": "100",
        "label": "100",
        "long": "Streetcar - OTR - Banks",
        "short": "100",
        "text_color": "000000",
        "type_label": "Tram / light rail"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "11",
        "label": "11",
        "long": "Madison Road",
        "short": "11",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "12",
        "label": "12",
        "long": "Madisonville Commuter",
        "short": "12",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "16",
        "label": "16",
        "long": "Spring Grove / Daly",
        "short": "16",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "F68923",
        "color_name": "orange",
        "has_shape": true,
        "id": "17",
        "label": "17",
        "long": "Hamilton Avenue",
        "short": "17",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "FF8000",
        "color_name": "orange",
        "has_shape": true,
        "id": "19",
        "label": "19",
        "long": "Colerain Avenue",
        "short": "19",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "2",
        "label": "2",
        "long": "Madeira Commuter",
        "short": "2",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "20",
        "label": "20",
        "long": "Winton Road",
        "short": "20",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "21",
        "label": "21",
        "long": "Harrison Avenue",
        "short": "21",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "22",
        "label": "22",
        "long": "Glenway / Madison",
        "short": "22",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "23",
        "label": "23X",
        "long": "Forest Park Express",
        "short": "23X",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "24",
        "label": "24",
        "long": "MLK / Beechmont",
        "short": "24",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "25",
        "label": "25",
        "long": "Mt. Lookout Commuter",
        "short": "25",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "27",
        "label": "27",
        "long": "Beekman / Linn",
        "short": "27",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "28",
        "label": "28",
        "long": "East End",
        "short": "28",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "29",
        "label": "29X",
        "long": "Milford Express",
        "short": "29X",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "3",
        "label": "3X",
        "long": "Montgomery Express",
        "short": "3X",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "30",
        "label": "30",
        "long": "Beechmont Commuter",
        "short": "30",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "31",
        "label": "31",
        "long": "Taft / McMillan",
        "short": "31",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "32",
        "label": "32",
        "long": "West 8th Street",
        "short": "32",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "F68923",
        "color_name": "orange",
        "has_shape": true,
        "id": "33",
        "label": "33",
        "long": "Glenway Avenue",
        "short": "33",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "36",
        "label": "36",
        "long": "Price Hill / Uptown",
        "short": "36",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "37",
        "label": "37",
        "long": "MLK / Westwood Northern",
        "short": "37",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "38",
        "label": "38",
        "long": "Uptown Commuter",
        "short": "38",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "F68923",
        "color_name": "orange",
        "has_shape": true,
        "id": "4",
        "label": "4",
        "long": "Montgomery Road",
        "short": "4",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "40",
        "label": "40",
        "long": "Montana Commuter",
        "short": "40",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "41",
        "label": "41",
        "long": "North Bend Road",
        "short": "41",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "F68923",
        "color_name": "orange",
        "has_shape": true,
        "id": "43",
        "label": "43",
        "long": "Reading Road",
        "short": "43",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "46",
        "label": "46",
        "long": "Avondale",
        "short": "46",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "47",
        "label": "47",
        "long": "Avondale - Oakley",
        "short": "47",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "49",
        "label": "49",
        "long": "Fairmount",
        "short": "49",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "5",
        "label": "5",
        "long": "Blue Ash",
        "short": "5",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "50",
        "label": "50",
        "long": "River Road Commuter",
        "short": "50",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "F68923",
        "color_name": "orange",
        "has_shape": true,
        "id": "51",
        "label": "51",
        "long": "Westwood - Avondale",
        "short": "51",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "52",
        "label": "52X",
        "long": "Harrison Express",
        "short": "52X",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "53",
        "label": "53",
        "long": "St. Bernard - Oakley",
        "short": "53",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "6",
        "label": "6",
        "long": "Queen City Avenue",
        "short": "6",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "61",
        "label": "61",
        "long": "Galbraith Road",
        "short": "61",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "64",
        "label": "64",
        "long": "Westwood",
        "short": "64",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "65",
        "label": "65",
        "long": "Western Hills",
        "short": "65",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "67",
        "label": "67",
        "long": "Kemper Road",
        "short": "67",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "70",
        "label": "70",
        "long": "UC Connector",
        "short": "70",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "71",
        "label": "71X",
        "long": "Kings Island Express",
        "short": "71X",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "74",
        "label": "74X",
        "long": "Colerain Express",
        "short": "74X",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "75",
        "label": "75X",
        "long": "Anderson Express",
        "short": "75X",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "77",
        "label": "77",
        "long": "Delhi",
        "short": "77",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "F68923",
        "color_name": "orange",
        "has_shape": true,
        "id": "78",
        "label": "78",
        "long": "Vine Street",
        "short": "78",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "8",
        "label": "8",
        "long": "Blue Ash / Silverton Commuter",
        "short": "8",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "81",
        "label": "81",
        "long": "Mt. Washington Commuter",
        "short": "81",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "C2D231",
        "color_name": "yellow",
        "has_shape": true,
        "id": "82",
        "label": "82X",
        "long": "Eastgate Express",
        "short": "82X",
        "text_color": "000000",
        "type_label": "Bus"
      },
      {
        "color": "2A75B0",
        "color_name": "teal",
        "has_shape": true,
        "id": "90",
        "label": "M+",
        "long": "MetroPlus",
        "short": "M+",
        "text_color": "000000",
        "type_label": "Bus"
      }
    ],
    "stop_count": 3513,
    "stop_points_capped": true
  },
  "rubric_version": "1.4",
  "schema_version": "1.19",
  "scoring_profile": {
    "id": "gtfs-scorecard-1.4",
    "provenance": "GTFS Scorecard's project-authored weights, deductions, thresholds, grade bands, and fix ranking, informed by the California Transit Data Guidelines and the MobilityData gtfs-validator. It is not a worldwide standard or a compliance determination.",
    "rubric_version": "1.4"
  },
  "shapes_readiness": {
    "detail": "All 10859 trips have a shape in shapes.txt.",
    "status": "ready",
    "total_trips": 10859,
    "trips_with_shape": 10859
  },
  "snapshot_date": "2026-10-07",
  "top_fixes": [
    {
      "code": "equal_shape_distance_same_coordinates",
      "consequence": {
        "absences": [
          "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
          "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
        ],
        "code": "equal_shape_distance_same_coordinates",
        "line": "This is a validator notice, and the validator decides what each instance covers, so no share of the network can be read from it here.",
        "reach": {
          "affected": null,
          "basis": "none",
          "basis_label": null,
          "reason": "validator_notice",
          "share": null,
          "total": null,
          "total_source": null
        },
        "ridership": {
          "annual_rider_trips": null,
          "ntd_id": "50012",
          "reason": "not_joined_here"
        },
        "served_area_need": {
          "reason": "not_joined_here",
          "scale": "us_acs",
          "tier": null
        }
      },
      "count": 10404,
      "effort": "Usually one export setting.",
      "fix": "Turn on shape cleanup in your export tool, or drop the repeated points from shapes.txt.",
      "owner": "Likely your export tool",
      "points": 8.0,
      "rank": 1,
      "severity": "WARNING",
      "what": "Some route lines list the same point twice in a row.",
      "why": "Repeated points don't hurt riders, but they can skew distance math and hint at a shaky export."
    },
    {
      "code": "mixed_case_recommended_field",
      "consequence": {
        "absences": [
          "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
          "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
        ],
        "code": "mixed_case_recommended_field",
        "line": "This is a validator notice, and the validator decides what each instance covers, so no share of the network can be read from it here.",
        "reach": {
          "affected": null,
          "basis": "none",
          "basis_label": null,
          "reason": "validator_notice",
          "share": null,
          "total": null,
          "total_source": null
        },
        "ridership": {
          "annual_rider_trips": null,
          "ntd_id": "50012",
          "reason": "not_joined_here"
        },
        "served_area_need": {
          "reason": "not_joined_here",
          "scale": "us_acs",
          "tier": null
        }
      },
      "count": 3297,
      "effort": "Often a bulk fix in your scheduling software.",
      "fix": "Use mixed case for stop names and headsigns (e.g. 'Main St & 2nd Ave', not 'MAIN ST & 2ND AVE').",
      "owner": "Likely your export tool",
      "points": 8.0,
      "rank": 2,
      "severity": "WARNING",
      "what": "Some rider-facing names are in ALL CAPS or all lowercase.",
      "why": "ALL-CAPS stop and headsign names are harder to read in apps and are read awkwardly by screen readers."
    },
    {
      "code": "missing_recommended_field",
      "consequence": {
        "absences": [
          "This record does not store annual rider-trips. The agency page and its reports add them from the ridership snapshot and name its date.",
          "This record does not store transit need. The agency page and its reports add it from the need overlays and name their date."
        ],
        "code": "missing_recommended_field",
        "line": "This is a validator notice, and the validator decides what each instance covers, so no share of the network can be read from it here.",
        "reach": {
          "affected": null,
          "basis": "none",
          "basis_label": null,
          "reason": "validator_notice",
          "share": null,
          "total": null,
          "total_source": null
        },
        "ridership": {
          "annual_rider_trips": null,
          "ntd_id": "50012",
          "reason": "not_joined_here"
        },
        "served_area_need": {
          "reason": "not_joined_here",
          "scale": "us_acs",
          "tier": null
        }
      },
      "count": 56,
      "effort": "A field at a time; not urgent.",
      "fix": "Review the flagged fields and fill in the ones your riders would use.",
      "owner": "",
      "points": 8.0,
      "rank": 3,
      "severity": "WARNING",
      "what": "Some files leave out fields that GTFS asks for but does not require.",
      "why": "Recommended fields like agency_phone or stop descriptions make the feed more useful to riders and trip planners."
    }
  ],
  "validator_version": "8.0.1"
}
