Technical writing
DOT National Transit Database: The Federal Ridership and Finance Data Behind Every US Bus and Rail System
Every bus route, every subway line, every commuter rail train in the United States that receives federal funding leaves a statistical trail in a single federal database. The National Transit Database—maintained by the Federal Transit Administration under the Department of Transportation—collects ridership counts, operating expenses, capital expenditures, fare revenue, and fleet inventory from approximately 800 transit agencies every year. It is the primary data source for federal formula grants, the DOT annual public transportation fact book, and transit performance benchmarking across every mode from heavy rail to ferry boat to demand-response paratransit.
The NTD Program and Reporting Requirements
The National Transit Database was established under the Urban Mass Transportation Act and codified in 49 U.S.C. § 5335, which requires every recipient of FTA financial assistance to report to the NTD as a condition of receiving federal funds. The FTA administers the program through its Office of Budget and Policy, and the data is published annually on the NTD data portal at transit.dot.gov/ntd/ntd-data.
Reporting is mandatory for any transit agency that receives funds under FTA grant programs: Urbanized Area Formula Grants (Section 5307), Rural Area Formula Grants (Section 5311), Capital Investment Grants (Section 5309), and the Elderly Individuals and Individuals with Disabilities program (Section 5310), among others. Agencies that do not receive FTA funds are not required to report but may submit voluntarily. In practice, virtually every significant public transit operator in the United States is an NTD reporter because FTA funding is integral to US public transit finance. Annual reports are due October 31 for the preceding fiscal year (October 1 through September 30).
The approximately 800 reporting agencies span the full spectrum of US transit: the New York MTA and its billions of annual riders, single-county rural transit systems operating a handful of demand-response vans, airport connector rail, ferry systems, and everything in between. The NTD categorizes agencies by urbanized area size, distinguishing large urbanized areas (population 200,000 or more), small urbanized areas (50,000 to 199,999), and rural areas (under 50,000). Each category has different reporting requirements, with large urbanized area agencies subject to the most comprehensive data collection.
Modes reported to the NTD include: motor bus (MB), heavy rail/subway (HR), light rail (LR), commuter rail (CR), demand response/paratransit (DR), vanpool (VP), ferry boat (FB), trolleybus (TB), streetcar rail (SR), bus rapid transit (RB), and several smaller categories including monorail, inclined plane, and cable car. Agencies operating multiple modes file separate data for each mode-type-of-service combination, allowing disaggregated analysis of bus versus rail performance within a single agency.
Key Metrics: UPT, VRM, and Operating Finance
The NTD collects a standardized set of performance and financial metrics for each agency-mode combination. Understanding the precise definitions of these metrics is essential for accurate analysis, as the transit industry uses several terms that are easy to conflate.
Unlinked Passenger Trips (UPT) is the primary ridership metric: each boarding of a revenue vehicle is counted as one unlinked passenger trip, regardless of whether the passenger transfers to another vehicle to complete their journey. A commuter who rides a bus to a subway station and then takes the subway to their destination generates two UPTs—one for each boarding. This is the transit equivalent of the airline industry's “enplanements.” UPT is the metric used in Section 5307 formula grant calculations and is the standard for transit ridership comparisons. The NYC MTA subway system alone generates approximately 1.1 billion UPT per year in normal (pre-COVID) operations, making it by far the largest single transit operation in the country. All US heavy rail systems combined generate approximately 3 billion UPT annually in non-crisis years; all US bus systems combined generate approximately 4 billion UPT.
Vehicle Revenue Miles (VRM) measures the miles that vehicles travel while in revenue service—available to carry passengers, with the fare box on. Deadhead miles (traveling between a garage and the start of a route, or between routes) are excluded. VRM is the denominator for operating cost efficiency metrics, most importantly operating expense per vehicle revenue mile (OE/VRM), which allows cost comparisons across agencies of different sizes and modes. Heavy rail systems typically run higher OE/VRM than bus systems because of the fixed infrastructure costs, but carry far more passengers per vehicle, so their cost per UPT can be competitive.
Vehicle Revenue Hours (VRH) is the hours-based counterpart to VRM: hours of revenue service rather than miles. For slow urban environments where vehicles travel few miles per hour due to traffic, VRH can be a more meaningful productivity metric than VRM.
Operating expenses are reported in total and by function (vehicle operations, vehicle maintenance, non-vehicle maintenance, general administration). The NTD collects expenses by object class (labor, fringe benefits, services, materials and supplies, utilities, casualty and liability costs, taxes, purchased transportation, miscellaneous). This granularity allows analysis of labor cost as a fraction of total operating expense, which typically runs 60 to 75 percent for directly operated service.
Fare revenue and fare recovery ratio measure the degree to which fare revenue covers operating costs. A fare recovery ratio of 100 percent would mean the agency's fares cover all operating costs—a standard no major US transit agency meets. NYC MTA subway typically achieves fare recovery ratios of 50 to 60 percent in strong ridership years. Most US bus systems recover 20 to 35 percent of operating costs from fares. The remainder is covered by local tax subsidies, state operating assistance, and federal formula grants.
| Metric | Definition | Primary Use |
|---|---|---|
| UPT | Each vehicle boarding counted separately | Section 5307 formula grants; ridership benchmarking |
| VRM | Miles operated in revenue service (excludes deadhead) | Section 5307 formula grants; cost per VRM |
| VRH | Hours of revenue service | Productivity analysis in congested environments |
| Operating Expense | Total cost of running the service | OE/UPT and OE/VRM efficiency ratios |
| Capital Expense | Vehicle purchases, infrastructure, equipment | Fleet renewal tracking; federal capital grant compliance |
| Fare Revenue | Revenue from passengers paying fares | Fare recovery ratio; system financial health |
| Fleet Count | Active revenue vehicles by type | Vehicle Inventory spreadsheet; average fleet age |
The 2023 NTD full-year total across all modes and agencies was approximately 10.4 billion unlinked passenger trips—a substantial recovery from the COVID collapse but still well below the 2019 pre-pandemic peak of approximately 15.7 billion UPT. The gap between 2023 actuals and 2019 levels represents roughly 5.3 billion trips per year that have not returned, a figure with direct implications for farebox revenue and the fiscal sustainability of agencies that sized their operations to pre-pandemic demand.
COVID Collapse and Federal Emergency Relief
No analysis of NTD data from 2020 onward can be conducted without accounting for the COVID-19 pandemic, which produced the most catastrophic ridership collapse in recorded US transit history. The NTD data captures this collapse with precision: system-wide UPT fell more than 60 percent in 2020 relative to 2019.
Heavy rail was the worst-affected mode. The NYC MTA subway—which carried approximately 1.8 billion UPT in 2019—fell to roughly 600 million UPT in 2020, a decline of 67 percent. The subway is disproportionately dependent on Manhattan office commuters and tourism; both collapsed simultaneously. Commuter rail suffered similarly: Long Island Rail Road and Metro-North ridership fell 80 to 85 percent at the worst point in spring 2020, as office workers shifted to remote work and stopped commuting entirely.
Congress responded with three rounds of emergency transit relief embedded in pandemic legislation. The CARES Act (March 2020) provided $25 billion in transit emergency relief, distributed by formula based on 2018 NTD data. The Coronavirus Response and Relief Supplemental Appropriations Act (CRRSAA, December 2020) added $14 billion. The American Rescue Plan Act (ARP, March 2021) provided an additional $30 billion. The total of approximately $69 billion in emergency transit aid—roughly eight times the annual federal formula grant program—was distributed with conditions preventing agencies from laying off workers and requiring that the funds be spent on operating expenses (unlike normal federal transit grants, which are restricted to capital uses). Many agencies ran nearly empty trains and buses through 2020 and into 2021, burning through the emergency relief to maintain service levels and workforces in anticipation of ridership returning.
The post-COVID recovery documented in NTD data has been uneven across modes and service types. Suburban and rural bus systems recovered faster than urban heavy rail, because their riders were less concentrated in the office commuter segment. Systems oriented toward essential workers—healthcare, service sector, retail—saw ridership return more quickly than systems dependent on downtown office commutes. As of 2023 NTD data, mode-level recovery ratios relative to 2019 were approximately: heavy rail at 85 percent of 2019 levels; bus (motor bus) at 75 percent; commuter rail at 70 percent; light rail at 80 percent; demand response paratransit at 90 percent. Vanpool showed the weakest recovery—reflecting the shift to remote and hybrid work that has permanently reduced the suburban commute market that vanpool primarily served.
The fiscal cliff created by the emergency relief exhaustion became a dominant policy concern by 2024 and 2025. Agencies that had used ARP funds to avoid service cuts and layoffs during the recovery period faced the prospect of those funds running out while ridership remained below pre-pandemic levels—meaning farebox revenue was insufficient to cover the operating costs that had been sustained through federal relief. The NTD fare recovery ratio data, combined with operating expense growth driven by labor cost escalation and inflation, makes the financial stress of the post-COVID transit sector visible in granular detail.
Service Data and Agency Profiles
The NTD maintains a profile for each reporting agency that functions as a standardized agency snapshot, updated annually. Key profile fields include: NTD ID (a unique numeric identifier), Urbanized Area Census (UACE) code, service area population, modes operated, total vehicle count by mode, and average fleet age. The agency profile data enables cross-sectional analysis comparing agencies of similar size or service area characteristics.
The Vehicle Inventory spreadsheet is one of the most detailed components of the NTD annual database: it lists every revenue vehicle by type (bus, articulated bus, rail car, van, etc.), manufacturer, model year, and fuel type (diesel, compressed natural gas, hybrid electric, battery electric, hydrogen fuel cell). This dataset enables analysis of fleet electrification progress across the industry—how quickly agencies are replacing diesel buses with battery electric vehicles, which manufacturers dominate which market segments, and the average age of fleets by mode and agency size. Average fleet age matters for federal capital grant prioritization: older fleets are more expensive to maintain and are a signal of deferred capital investment.
Service data fields in the NTD capture both scheduled and actual service delivery: scheduled trips, actual trips operated, and trip cancellations. The ratio of actual to scheduled trips is an operational reliability metric. Major transit systems struggled with this metric during 2021 and 2022 as agencies attempted to restore pre-pandemic service schedules while facing operator shortages caused by COVID-era workforce reductions and pandemic-related absenteeism. WMATA (Washington Metropolitan Area Transit Authority) and MBTA (Massachusetts Bay Transportation Authority) faced particular scrutiny from federal safety oversight for both service reliability and safety incidents during this period.
Major agencies by annual ridership and operating budget illustrate the scale range within the NTD reporting universe:
| Agency | Primary Modes | Approx. Operating Budget | Notes |
|---|---|---|---|
| NYC MTA | HR, CR, MB, SR | ~$18B | Largest US transit system; NYC subway, LIRR, Metro-North |
| LA Metro | LR, MB, RB | ~$3.5B | Los Angeles; major rail expansion program underway |
| CTA | HR, MB | ~$2.0B | Chicago Transit Authority; the “L” heavy rail system |
| WMATA | HR, MB | ~$2.2B | Washington DC Metro; multi-state compact |
| SEPTA | HR, CR, LR, MB, SR | ~$1.8B | Philadelphia; most modal diversity of any US agency |
| MBTA | HR, CR, LR, MB, FB | ~$2.2B | Boston; oldest US subway system |
| BART | HR | ~$0.9B | San Francisco Bay Area Rapid Transit |
| MARTA | HR, MB | ~$0.6B | Metropolitan Atlanta Rapid Transit Authority |
| TriMet/MAX | LR, MB | ~$0.6B | Portland; MAX light rail corridor system |
| DART | LR, CR, MB, VP | ~$0.8B | Dallas Area Rapid Transit; largest light rail network by miles |
Section 5307 Formula Grants and NTD-Driven Funding
The NTD is not merely a reporting requirement—it is the statistical foundation for how the federal government distributes transit funding. The primary mechanism is FTA's Section 5307 Urbanized Area Formula Grant program, which distributes approximately $5 billion per year to urbanized area transit systems. The formula is structured around two inputs: bus service (measured by bus VRM) and rail service (measured by rail VRM and rail fixed guideway route miles), combined in a 50/50 mix that attempts to equalize the treatment of bus-dominant and rail-dominant systems.
Specifically, the Section 5307 formula for urbanized areas with populations of 200,000 or more allocates funding based on a population factor (50 percent), a population density factor (to favor dense urban environments with high transit demand), and NTD service measures: bus VRM, bus passenger miles traveled, and for rail systems, fixed guideway route miles and vehicle revenue miles. Because NTD data directly determines how much each agency receives, errors or manipulations in NTD reporting carry financial consequences—the FTA conducts periodic data quality reviews and can reduce formula apportionments for agencies that report inaccurate data.
The Section 5311 Rural Area Formula Grant uses NTD rural transit reporting analogously for systems serving areas with populations under 50,000. Rural transit systems have lighter reporting requirements but still must submit core operating and ridership data to participate in the formula.
The Capital Investment Grant (CIG) program—known as “New Starts” for new rail lines and “Core Capacity” for expansion of existing systems—is a separate competitive process that does not directly use NTD formula metrics. New Starts applications require detailed ridership projections that must be consistent with existing NTD reporting; applicant agencies with strong NTD ridership histories have an advantage in demonstrating demand. The Infrastructure Investment and Jobs Act (the Bipartisan Infrastructure Law) enacted in November 2021 increased total transit formula and discretionary funding to approximately $91 billion over five years—the largest federal transit investment in US history—and introduced new formula categories including a Carbon Reduction program and a Safe Streets and Roads for All program with transit-relevant components.
Data Access: NTD Portal, Monthly Reports, and Excel Databases
NTD data is published at transit.dot.gov/ntd/ntd-data. The annual database is distributed as a set of Excel spreadsheets, each covering a different data module:
| Spreadsheet | Contents |
|---|---|
| Revenue Vehicle Inventory | Every revenue vehicle by type, year, manufacturer, fuel type |
| Service | UPT, VRM, VRH by agency and mode |
| Fare Revenue | Fare revenue and non-fare revenue by agency |
| Expenses | Operating and capital expenses by function and object class |
| Funding | Federal, state, and local funding sources by agency |
| Agency Profiles | NTD ID, UACE code, service area, primary modes |
| Fixed Guideway | Route miles, directional route miles by mode (rail only) |
The FTA also publishes monthly ridership reports, released approximately six weeks after the end of each month. The monthly file provides UPT and VRM by agency and mode for the current month and the same month of the prior year, enabling near-real-time tracking of ridership trends and year-over-year recovery. The monthly data product is available from transit.dot.gov/ntd/data-product/monthly-module-adjusted-data-release.
The NTD does not provide a fully RESTful API in the manner of FRED or Census Bureau data services. Data access is through structured Excel files available for direct download. The Bureau of Transportation Statistics' National Transportation Statistics annual compendium includes NTD-derived aggregate transit statistics alongside highway, aviation, and freight data. The Federal Reserve's FRED does not mirror NTD ridership data directly, but BTS Transportation Statistics publishes aggregate transit series that FRED links to for select national indicators.
Python: Downloading NTD Data and Computing COVID Recovery by Mode and Agency
The following script downloads NTD annual service spreadsheets for 2019 (pre-COVID baseline) and 2023 (most recent full year), computes year-over-year recovery ratios by mode, ranks the top 20 agencies by absolute ridership shortfall, and identifies which modes recovered best and worst relative to their 2019 levels. The script handles the NTD Excel file structure, which varies slightly between years, by detecting column names rather than assuming fixed positions.
import requests
import pandas as pd
import io
# NTD Monthly Ridership Data
# Portal: https://transit.dot.gov/ntd/ntd-data
#
# The FTA publishes monthly ridership Excel files approximately six weeks after
# each month ends. The file contains Unlinked Passenger Trips (UPT) and Vehicle
# Revenue Miles (VRM) by agency and mode for the current and prior years.
#
# Download URL for the latest monthly Excel file:
# https://www.transit.dot.gov/sites/fta.dot.gov/files/2024-02/January%202024%20Complete%20Monthly%20Ridership%20%28with%20adjustments%20and%20estimates%29_240207.xlsx
#
# Because the filename encodes the release date, we use the stable redirect from
# the NTD data portal. In practice, retrieve the current URL from:
# https://transit.dot.gov/ntd/data-product/monthly-module-adjusted-data-release
#
# For a reproducible workflow, we use the annual NTD database Excel files, which
# are consistently structured and available at stable URLs by year.
# Annual database download page: https://transit.dot.gov/ntd/ntd-data
#
# We download the annual Service spreadsheet (which contains UPT and VRM)
# for 2019 (pre-COVID baseline) and 2023 (most recent full year),
# compute year-over-year recovery ratios by mode and agency,
# and rank the top 20 agencies by absolute ridership shortfall.
BASE_URL = "https://www.transit.dot.gov/sites/fta.dot.gov/files"
# Annual NTD service data spreadsheets (UPT and VRM by agency and mode).
# The filenames below reflect the FTA naming convention as of the 2024 data release.
# Check transit.dot.gov/ntd/ntd-data for updated paths if links break.
NTD_FILES = {
2019: BASE_URL + "/2024-01/2019_Service.xlsx",
2023: BASE_URL + "/2024-01/2023_Service.xlsx",
}
MODE_LABELS = {
"MB": "Motor Bus",
"HR": "Heavy Rail (Subway)",
"LR": "Light Rail",
"CR": "Commuter Rail",
"DR": "Demand Response (Paratransit)",
"VP": "Vanpool",
"FB": "Ferry Boat",
"TB": "Trolleybus",
"SR": "Streetcar Rail",
"YR": "Hybrid Rail",
"MG": "Monorail/Automated Guideway",
"AR": "Alaska Railroad",
"CC": "Cable Car",
"IP": "Inclined Plane",
"PB": "Publico",
"RB": "Bus Rapid Transit",
}
frames = {}
for year, url in NTD_FILES.items():
print(f"Downloading {year} NTD Service data...")
try:
resp = requests.get(url, timeout=180)
resp.raise_for_status()
except Exception as exc:
print(f" {year}: download failed -- {exc}")
continue
# The NTD annual service spreadsheet has a consistent structure:
# sheet named "UPT" (or the workbook may use "Service") with columns:
# NTD ID, Agency, City, State, Mode, TOS (type of service), UPT, VRM, VRH
# Some years have slight header variations; we try multiple sheet names.
xls = pd.ExcelFile(io.BytesIO(resp.content))
target_sheet = None
for candidate in ["UPT", "Service", "Annual Service", xls.sheet_names[0]]:
if candidate in xls.sheet_names:
target_sheet = candidate
break
df = pd.read_excel(xls, sheet_name=target_sheet, engine="openpyxl")
# Normalize column names: strip whitespace, uppercase
df.columns = [str(c).strip().upper() for c in df.columns]
# Identify UPT and VRM columns (may appear as "UPT", "UNLINKED PASSENGER TRIPS", etc.)
upt_col = next((c for c in df.columns if "UPT" in c or "UNLINKED" in c), None)
vrm_col = next((c for c in df.columns if "VRM" in c or "VEHICLE REVENUE MILES" in c), None)
mode_col = next((c for c in df.columns if c in ("MODE", "MODE CODE")), "MODE")
agency_col = next((c for c in df.columns if "AGENCY" in c or "ORGANIZATION" in c), "AGENCY")
ntdid_col = next((c for c in df.columns if "NTD" in c and "ID" in c), "NTD ID")
if upt_col is None or vrm_col is None:
print(f" {year}: could not identify UPT/VRM columns. Columns: {list(df.columns)}")
continue
# Coerce numeric columns
df[upt_col] = pd.to_numeric(df[upt_col], errors="coerce")
df[vrm_col] = pd.to_numeric(df[vrm_col], errors="coerce")
# Drop rows with no UPT (header rows, totals rows, etc.)
df = df.dropna(subset=[upt_col])
frames[year] = df.rename(columns={
upt_col: "UPT",
vrm_col: "VRM",
mode_col: "MODE",
agency_col: "AGENCY",
ntdid_col: "NTDID",
})
print(f" {year}: {len(frames[year]):,} agency-mode rows loaded.")
if 2019 not in frames or 2023 not in frames:
raise SystemExit("Could not load both 2019 and 2023 data. Check NTD file URLs.")
# --- Agency-level ridership recovery ---
# Aggregate UPT by agency (NTD ID) across all modes for each year
def agg_agency(df):
return (
df.groupby(["NTDID", "AGENCY"], as_index=False)["UPT"]
.sum()
.rename(columns={"UPT": "UPT_TOTAL"})
)
agency_2019 = agg_agency(frames[2019])
agency_2023 = agg_agency(frames[2023])
merged = agency_2019.merge(
agency_2023[["NTDID", "UPT_TOTAL"]],
on="NTDID",
suffixes=("_2019", "_2023"),
how="inner",
)
merged["RECOVERY_RATIO"] = merged["UPT_TOTAL_2023"] / merged["UPT_TOTAL_2019"]
merged["UPT_SHORTFALL"] = merged["UPT_TOTAL_2019"] - merged["UPT_TOTAL_2023"]
# Top 20 agencies by absolute ridership shortfall (2023 vs 2019)
top20_shortfall = (
merged.sort_values("UPT_SHORTFALL", ascending=False)
.head(20)[["AGENCY", "UPT_TOTAL_2019", "UPT_TOTAL_2023", "RECOVERY_RATIO", "UPT_SHORTFALL"]]
.reset_index(drop=True)
)
print("
Top 20 agencies by absolute ridership shortfall (2023 vs 2019):")
print(top20_shortfall.to_string(index=False))
# --- Mode-level recovery ratios ---
def agg_mode(df):
return (
df.groupby("MODE", as_index=False)["UPT"]
.sum()
.rename(columns={"UPT": "UPT_TOTAL"})
)
mode_2019 = agg_mode(frames[2019])
mode_2023 = agg_mode(frames[2023])
mode_merged = mode_2019.merge(
mode_2023[["MODE", "UPT_TOTAL"]],
on="MODE",
suffixes=("_2019", "_2023"),
how="outer",
).fillna(0)
mode_merged["RECOVERY_RATIO"] = (
mode_merged["UPT_TOTAL_2023"] / mode_merged["UPT_TOTAL_2019"].replace(0, float("nan"))
)
mode_merged["MODE_LABEL"] = mode_merged["MODE"].map(MODE_LABELS).fillna(mode_merged["MODE"])
mode_merged = mode_merged.sort_values("UPT_TOTAL_2019", ascending=False)
print("
Mode-level recovery ratios (2023 vs 2019):")
for _, row in mode_merged.iterrows():
ratio = row["RECOVERY_RATIO"]
ratio_str = str(round(ratio * 100, 1)) + "%" if pd.notna(ratio) else "N/A"
print(
" "
+ str(row["MODE_LABEL"]).ljust(30)
+ " 2019 UPT: " + str(int(row["UPT_TOTAL_2019"])).rjust(14)
+ " 2023 UPT: " + str(int(row["UPT_TOTAL_2023"])).rjust(14)
+ " Recovery: " + ratio_str
)
# Modes with best and worst recovery
recovered = mode_merged.dropna(subset=["RECOVERY_RATIO"])
best = recovered.loc[recovered["RECOVERY_RATIO"].idxmax()]
worst = recovered.loc[recovered["RECOVERY_RATIO"].idxmin()]
print("
Best-recovering mode: " + str(best["MODE_LABEL"]) + " (" + str(round(best["RECOVERY_RATIO"] * 100, 1)) + "% of 2019)")
print("Worst-recovering mode: " + str(worst["MODE_LABEL"]) + " (" + str(round(worst["RECOVERY_RATIO"] * 100, 1)) + "% of 2019)")
Several implementation notes. The NTD annual service spreadsheets use a consistent but slightly varying column naming convention across years—the script detects UPT, VRM, mode, agency, and NTD ID columns by substring match rather than hardcoded names. The NTD ID is the stable cross-year identifier for each agency; agency names can change over time (mergers, renaming), making NTD ID essential for longitudinal matching. The mode labels follow the FTA two-character mode codes: MB for motor bus, HR for heavy rail, LR for light rail, CR for commuter rail, DR for demand response, VP for vanpool, FB for ferry boat. The recovery ratio is computed as 2023 UPT divided by 2019 UPT; values above 1.0 indicate modes that have exceeded pre-COVID levels, while values below 1.0 indicate continuing shortfall. The absolute ridership shortfall (2019 UPT minus 2023 UPT) identifies which agencies have lost the most riders in raw terms—typically dominated by large urban heavy rail systems whose pre-pandemic ridership was concentrated in the downtown office commute market that recovered slowest.
Related writing
For BTS airline on-time performance data—the ATOP database, the five delay categories, T-100 capacity statistics, Form 41 carrier financials, the COVID airline crisis, and how to download and analyze flight-level delay records in Python: BTS Airline On-Time Performance: The Federal Data Behind Every Flight Delay →
For FHWA highway data—the National Bridge Inventory, Highway Performance Monitoring System pavement conditions, AADT traffic counts, Vehicle Miles Traveled, the Freight Analysis Framework, and the Highway Trust Fund solvency problem: FHWA Highway Data: The Federal Dataset Behind Bridge Conditions, Pavement Quality, and Traffic Counts →