{
 "updated": "2026-10-06T08:59:47Z",
 "tables": [
  {
   "name": "subway_segment_times",
   "description": "Daily run time of each directional subway segment (two stations in a row), weekday daytime trains, from 2021.",
   "source": "MTA subway GTFS-realtime feeds, archived April 2021 onward. Station names from MTA GTFS.",
   "license": "CC BY 4.0",
   "rows": 1646722,
   "bytes": 13062808,
   "columns": [
    {
     "name": "service_date",
     "type": "DATE",
     "description": "New York service date."
    },
    {
     "name": "a_stop",
     "type": "VARCHAR",
     "description": "GTFS stop ID of the first station (ends in N or S for direction)."
    },
    {
     "name": "b_stop",
     "type": "VARCHAR",
     "description": "GTFS stop ID of the next station."
    },
    {
     "name": "a_station",
     "type": "VARCHAR",
     "description": "Name of the first station."
    },
    {
     "name": "b_station",
     "type": "VARCHAR",
     "description": "Name of the next station."
    },
    {
     "name": "route_ids",
     "type": "VARCHAR",
     "description": "Routes that ran the segment that day, space separated."
    },
    {
     "name": "n_trips",
     "type": "BIGINT",
     "description": "Weekday daytime (6:00-21:59) trains counted."
    },
    {
     "name": "mean_seconds",
     "type": "DOUBLE",
     "description": "Trimmed mean (10th to 90th percentile) departure-to-departure time in seconds, including the stop at the second station."
    },
    {
     "name": "median_seconds",
     "type": "DOUBLE",
     "description": "Median time in seconds. Moves in steps of about 15 s, the feed refresh."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2021/month=04/2021-04.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2021/month=05/2021-05.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2021/month=06/2021-06.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2021/month=07/2021-07.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2021/month=08/2021-08.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2021/month=09/2021-09.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2021/month=10/2021-10.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2021/month=11/2021-11.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2021/month=12/2021-12.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2022/month=01/2022-01.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2022/month=02/2022-02.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2022/month=03/2022-03.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2022/month=04/2022-04.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2022/month=05/2022-05.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2022/month=06/2022-06.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2022/month=07/2022-07.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2022/month=08/2022-08.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2022/month=09/2022-09.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2022/month=10/2022-10.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2022/month=11/2022-11.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2022/month=12/2022-12.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2023/month=01/2023-01.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2023/month=02/2023-02.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2023/month=03/2023-03.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2023/month=04/2023-04.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2023/month=05/2023-05.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2023/month=06/2023-06.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2023/month=07/2023-07.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2023/month=08/2023-08.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2023/month=09/2023-09.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2023/month=10/2023-10.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2023/month=11/2023-11.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2023/month=12/2023-12.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2024/month=01/2024-01.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2024/month=02/2024-02.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2024/month=03/2024-03.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2024/month=04/2024-04.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2024/month=05/2024-05.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2024/month=06/2024-06.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2024/month=07/2024-07.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2024/month=08/2024-08.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2024/month=09/2024-09.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2024/month=10/2024-10.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2024/month=11/2024-11.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2024/month=12/2024-12.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2025/month=01/2025-01.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2025/month=02/2025-02.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2025/month=03/2025-03.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2025/month=04/2025-04.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2025/month=05/2025-05.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2025/month=06/2025-06.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2025/month=07/2025-07.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2025/month=08/2025-08.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2025/month=09/2025-09.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2025/month=10/2025-10.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2025/month=11/2025-11.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2025/month=12/2025-12.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2026/month=01/2026-01.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2026/month=02/2026-02.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2026/month=03/2026-03.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2026/month=04/2026-04.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2026/month=05/2026-05.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2026/month=06/2026-06.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2026/month=07/2026-07.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2026/month=08/2026-08.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2026/month=09/2026-09.parquet",
    "https://data.transitlab.nyc/v1/subway_segment_times/year=2026/month=10/2026-10.parquet"
   ]
  },
  {
   "name": "subway_slow_zones",
   "description": "Stretches of subway track that ran well over their usual time for days on end, with the hours lost by trains and riders.",
   "source": "Computed by TransitLab from subway_segment_times (method in https://transitlab.nyc/slow-zones).",
   "license": "CC BY 4.0",
   "rows": 10442,
   "bytes": 254491,
   "columns": [
    {
     "name": "a_stop",
     "type": "VARCHAR",
     "description": "GTFS stop ID where the segment starts."
    },
    {
     "name": "b_stop",
     "type": "VARCHAR",
     "description": "GTFS stop ID where it ends."
    },
    {
     "name": "segment",
     "type": "VARCHAR",
     "description": "Segment name, from station to station."
    },
    {
     "name": "routes",
     "type": "VARCHAR",
     "description": "Routes that ran it during the zone."
    },
    {
     "name": "start_date",
     "type": "DATE",
     "description": "First slow day."
    },
    {
     "name": "end_date",
     "type": "DATE",
     "description": "Last slow day."
    },
    {
     "name": "slow_days",
     "type": "BIGINT",
     "description": "Weekdays in the run counted slow."
    },
    {
     "name": "baseline_s",
     "type": "DOUBLE",
     "description": "Usual time in seconds (10th percentile over the prior 120 weekdays)."
    },
    {
     "name": "extra_s_median",
     "type": "DOUBLE",
     "description": "Median extra seconds per train on slow days."
    },
    {
     "name": "extra_s_max",
     "type": "DOUBLE",
     "description": "Largest daily extra seconds."
    },
    {
     "name": "extra_pct",
     "type": "DOUBLE",
     "description": "Median extra time as a percent of baseline."
    },
    {
     "name": "trains_per_day",
     "type": "BIGINT",
     "description": "Trains a day through the segment (6:00-21:59)."
    },
    {
     "name": "train_hours_lost",
     "type": "DOUBLE",
     "description": "Extra seconds times trains, in train-hours."
    },
    {
     "name": "riders_per_weekday",
     "type": "BIGINT",
     "description": "Riders passing through on a typical 2025 weekday daytime."
    },
    {
     "name": "rider_hours_lost",
     "type": "BIGINT",
     "description": "Extra seconds times riders, in rider-hours."
    },
    {
     "name": "usual_routes",
     "type": "VARCHAR",
     "description": "Routes that used the segment in the 60 weekdays before."
    },
    {
     "name": "kind",
     "type": "VARCHAR",
     "description": "slow zone, disruption, system-wide change, or service change."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/subway_slow_zones.parquet"
   ]
  },
  {
   "name": "subway_slow_zones_weekly",
   "description": "Hours lost to subway slow zones across the whole system, by week.",
   "source": "Computed by TransitLab from subway_slow_zones.",
   "license": "CC BY 4.0",
   "rows": 249,
   "bytes": 2853,
   "columns": [
    {
     "name": "week",
     "type": "DATE",
     "description": "Monday of the week."
    },
    {
     "name": "train_hours",
     "type": "DOUBLE",
     "description": "Train-hours lost in slow zones that week."
    },
    {
     "name": "rider_hours",
     "type": "DOUBLE",
     "description": "Rider-hours lost in slow zones that week."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/subway_slow_zones_weekly.parquet"
   ]
  },
  {
   "name": "bus_route_speeds",
   "description": "Bus speeds by route, direction and New York hour, one set of rows per day, from our live vehicle positions.",
   "source": "Computed by TransitLab from bus_vehicle_positions (method in notes/bus-speeds.md).",
   "license": "CC BY 4.0",
   "rows": 11120,
   "bytes": 120209,
   "columns": [
    {
     "name": "service_date",
     "type": "VARCHAR",
     "description": "New York date, YYYY-MM-DD."
    },
    {
     "name": "route_id",
     "type": "VARCHAR",
     "description": "Bus route."
    },
    {
     "name": "direction_id",
     "type": "INTEGER",
     "description": "GTFS direction (0 or 1)."
    },
    {
     "name": "hour",
     "type": "INTEGER",
     "description": "Hour of day, New York time (0-23)."
    },
    {
     "name": "meters",
     "type": "DOUBLE",
     "description": "Distance buses covered, in meters."
    },
    {
     "name": "seconds",
     "type": "DOUBLE",
     "description": "Time they took, in seconds (stops and lights count; layovers do not)."
    },
    {
     "name": "trips",
     "type": "INTEGER",
     "description": "Trips counted."
    },
    {
     "name": "intervals",
     "type": "INTEGER",
     "description": "Pairs of consecutive position reports counted."
    },
    {
     "name": "computed_at",
     "type": "TIMESTAMP",
     "description": "When we computed the row (UTC)."
    },
    {
     "name": "mph",
     "type": "DOUBLE",
     "description": "Speed: meters over seconds, in miles per hour."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/bus_route_speeds.parquet"
   ]
  },
  {
   "name": "bus_lanes",
   "description": "Stretches of bus route between two timepoint stops: speed, time lost to traffic, and how much has a bus lane.",
   "source": "MTA bus speeds between timepoints (data.ny.gov) and NYC DOT bus lanes, computed by TransitLab (notes/bus-lanes.md).",
   "license": "CC BY 4.0",
   "rows": 4219,
   "bytes": 152710,
   "columns": [
    {
     "name": "route_id",
     "type": "VARCHAR",
     "description": "Bus route."
    },
    {
     "name": "direction",
     "type": "VARCHAR",
     "description": "Direction letter (N, S, E, W)."
    },
    {
     "name": "a_name",
     "type": "VARCHAR",
     "description": "Timepoint stop where the stretch starts."
    },
    {
     "name": "b_name",
     "type": "VARCHAR",
     "description": "Timepoint stop where it ends."
    },
    {
     "name": "street",
     "type": "VARCHAR",
     "description": "Street, when both stops are on the same street."
    },
    {
     "name": "borough",
     "type": "VARCHAR",
     "description": "Borough."
    },
    {
     "name": "route_type",
     "type": "VARCHAR",
     "description": "Route type (local, SBS, express, ...)."
    },
    {
     "name": "miles",
     "type": "DOUBLE",
     "description": "Length in miles."
    },
    {
     "name": "mph",
     "type": "DOUBLE",
     "description": "Average daytime speed (7 am to 7 pm)."
    },
    {
     "name": "best_mph",
     "type": "DOUBLE",
     "description": "Speed in the route's fastest hour, a guide to a clear street."
    },
    {
     "name": "delay_min",
     "type": "DOUBLE",
     "description": "Minutes lost per bus against the fastest hour."
    },
    {
     "name": "buses_per_weekday",
     "type": "DOUBLE",
     "description": "Daytime buses on a weekday."
    },
    {
     "name": "bus_hours_lost",
     "type": "DOUBLE",
     "description": "Bus-hours lost on a weekday."
    },
    {
     "name": "lane_share",
     "type": "DOUBLE",
     "description": "Share of the stretch within 15 m of a DOT bus lane."
    },
    {
     "name": "covered",
     "type": "BOOLEAN",
     "description": "True if most of the stretch has a bus lane."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/bus_lanes.parquet"
   ]
  },
  {
   "name": "bus_lane_streets",
   "description": "Bus time lost to traffic, added up by street.",
   "source": "MTA bus speeds and NYC DOT bus lanes, computed by TransitLab (notes/bus-lanes.md).",
   "license": "CC BY 4.0",
   "rows": 270,
   "bytes": 12952,
   "columns": [
    {
     "name": "street_borough",
     "type": "VARCHAR",
     "description": "Borough of the street."
    },
    {
     "name": "street",
     "type": "VARCHAR",
     "description": "Street name."
    },
    {
     "name": "bus_hours_lost",
     "type": "DOUBLE",
     "description": "Bus-hours lost on a weekday."
    },
    {
     "name": "route_miles",
     "type": "DOUBLE",
     "description": "Route-miles of bus service on the street."
    },
    {
     "name": "buses_per_weekday",
     "type": "DOUBLE",
     "description": "Daytime buses on a weekday."
    },
    {
     "name": "routes",
     "type": "VARCHAR",
     "description": "Routes that use the street, space separated."
    },
    {
     "name": "riders_per_weekday",
     "type": "DOUBLE",
     "description": "Weekday boardings 7 am to 7 pm on those routes (context only)."
    },
    {
     "name": "lane_share",
     "type": "DOUBLE",
     "description": "Share of the street with a bus lane."
    },
    {
     "name": "mph",
     "type": "DOUBLE",
     "description": "Average daytime speed."
    },
    {
     "name": "hours_lost_per_mile",
     "type": "DOUBLE",
     "description": "Bus-hours lost per route-mile."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/bus_lane_streets.parquet"
   ]
  },
  {
   "name": "subway_stop_events",
   "description": "One row per train per station, written when the train leaves, from our own collector of the MTA subway feeds. Daily files.",
   "source": "MTA GTFS-realtime and elevator feeds, collected by TransitLab (https://transitlab.nyc)",
   "license": "CC BY 4.0 for our processing. The underlying MTA feeds carry the MTA's own data terms.",
   "rows": 398192,
   "bytes": 7542622,
   "columns": [
    {
     "name": "row_id",
     "type": "VARCHAR",
     "description": "Stable ID of the row. If a row appears twice, keep one."
    },
    {
     "name": "observed_at",
     "type": "TIMESTAMP",
     "description": "When we saw this (UTC)."
    },
    {
     "name": "event",
     "type": "VARCHAR",
     "description": "baseline (first sighting in an hour), added, changed or removed."
    },
    {
     "name": "feed",
     "type": "VARCHAR",
     "description": "MTA feed the train came from."
    },
    {
     "name": "trip_uid",
     "type": "VARCHAR",
     "description": "Our ID for the train trip."
    },
    {
     "name": "trip_id",
     "type": "VARCHAR",
     "description": "MTA trip ID."
    },
    {
     "name": "route_id",
     "type": "VARCHAR",
     "description": "Subway route."
    },
    {
     "name": "start_date",
     "type": "VARCHAR",
     "description": "Service date, YYYYMMDD."
    },
    {
     "name": "stop_id",
     "type": "VARCHAR",
     "description": "GTFS stop ID."
    },
    {
     "name": "arrival",
     "type": "TIMESTAMP",
     "description": "Scheduled or predicted arrival (UTC)."
    },
    {
     "name": "departure",
     "type": "TIMESTAMP",
     "description": "Scheduled or predicted departure (UTC)."
    },
    {
     "name": "first_seen",
     "type": "TIMESTAMP",
     "description": "First time the stop appeared in the feed (UTC)."
    },
    {
     "name": "last_seen",
     "type": "TIMESTAMP",
     "description": "Last time it appeared (UTC)."
    },
    {
     "name": "departed_at",
     "type": "TIMESTAMP",
     "description": "Feed time of the first snapshot without the stop, just after the train left (UTC)."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/subway_stop_events/year=2026/month=10/2026-10-04.parquet",
    "https://data.transitlab.nyc/v1/subway_stop_events/year=2026/month=10/2026-10-05.parquet"
   ]
  },
  {
   "name": "bus_vehicle_positions",
   "description": "Where each bus is, about every 30 seconds, from the MTA bus GTFS-realtime feed. Change events, daily files.",
   "source": "MTA GTFS-realtime and elevator feeds, collected by TransitLab (https://transitlab.nyc)",
   "license": "CC BY 4.0 for our processing. The underlying MTA feeds carry the MTA's own data terms.",
   "rows": 7822245,
   "bytes": 125850855,
   "columns": [
    {
     "name": "row_id",
     "type": "VARCHAR",
     "description": "Stable ID of the row. If a row appears twice, keep one."
    },
    {
     "name": "observed_at",
     "type": "TIMESTAMP",
     "description": "When we saw this (UTC)."
    },
    {
     "name": "event",
     "type": "VARCHAR",
     "description": "baseline (first sighting in an hour), added, changed or removed."
    },
    {
     "name": "vehicle_id",
     "type": "VARCHAR",
     "description": "Bus ID."
    },
    {
     "name": "vehicle_ts",
     "type": "TIMESTAMP",
     "description": "Time of the position report (UTC)."
    },
    {
     "name": "trip_id",
     "type": "VARCHAR",
     "description": "MTA trip ID."
    },
    {
     "name": "route_id",
     "type": "VARCHAR",
     "description": "Bus route."
    },
    {
     "name": "direction_id",
     "type": "INTEGER",
     "description": "GTFS direction (0 or 1)."
    },
    {
     "name": "start_date",
     "type": "VARCHAR",
     "description": "Service date, YYYYMMDD."
    },
    {
     "name": "lat",
     "type": "DOUBLE",
     "description": "Latitude."
    },
    {
     "name": "lon",
     "type": "DOUBLE",
     "description": "Longitude."
    },
    {
     "name": "bearing",
     "type": "DOUBLE",
     "description": "Heading in degrees."
    },
    {
     "name": "stop_id",
     "type": "VARCHAR",
     "description": "Stop the bus is at or heading to."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/bus_vehicle_positions/year=2026/month=10/2026-10-02.parquet",
    "https://data.transitlab.nyc/v1/bus_vehicle_positions/year=2026/month=10/2026-10-04.parquet",
    "https://data.transitlab.nyc/v1/bus_vehicle_positions/year=2026/month=10/2026-10-05.parquet"
   ]
  },
  {
   "name": "bus_predictions",
   "description": "The MTA's predicted arrival of each bus at each stop (what countdown clocks show), stored when a prediction moves by 30 seconds or more. Daily files, large.",
   "source": "MTA GTFS-realtime and elevator feeds, collected by TransitLab (https://transitlab.nyc)",
   "license": "CC BY 4.0 for our processing. The underlying MTA feeds carry the MTA's own data terms.",
   "rows": 47536889,
   "bytes": 529026606,
   "columns": [
    {
     "name": "row_id",
     "type": "VARCHAR",
     "description": "Stable ID of the row. If a row appears twice, keep one."
    },
    {
     "name": "observed_at",
     "type": "TIMESTAMP",
     "description": "When we saw this (UTC)."
    },
    {
     "name": "event",
     "type": "VARCHAR",
     "description": "baseline (first sighting in an hour), added, changed or removed."
    },
    {
     "name": "trip_id",
     "type": "VARCHAR",
     "description": "MTA trip ID."
    },
    {
     "name": "start_date",
     "type": "VARCHAR",
     "description": "Service date, YYYYMMDD."
    },
    {
     "name": "route_id",
     "type": "VARCHAR",
     "description": "Bus route."
    },
    {
     "name": "direction_id",
     "type": "INTEGER",
     "description": "GTFS direction (0 or 1)."
    },
    {
     "name": "vehicle_id",
     "type": "VARCHAR",
     "description": "Bus ID."
    },
    {
     "name": "stop_id",
     "type": "VARCHAR",
     "description": "Stop the prediction is for."
    },
    {
     "name": "stop_sequence",
     "type": "INTEGER",
     "description": "Order of the stop on the trip."
    },
    {
     "name": "arrival",
     "type": "TIMESTAMP",
     "description": "Predicted arrival (UTC)."
    },
    {
     "name": "departure",
     "type": "TIMESTAMP",
     "description": "Predicted departure (UTC)."
    },
    {
     "name": "update_ts",
     "type": "TIMESTAMP",
     "description": "Time the MTA made the prediction (UTC)."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/bus_predictions/year=2026/month=10/2026-10-02.parquet",
    "https://data.transitlab.nyc/v1/bus_predictions/year=2026/month=10/2026-10-04.parquet",
    "https://data.transitlab.nyc/v1/bus_predictions/year=2026/month=10/2026-10-05.parquet"
   ]
  },
  {
   "name": "transit_alerts",
   "description": "Service alerts from the MTA bus and subway/rail alert feeds, one row each time an alert appears, changes or ends. Monthly files.",
   "source": "MTA GTFS-realtime and elevator feeds, collected by TransitLab (https://transitlab.nyc)",
   "license": "CC BY 4.0 for our processing. The underlying MTA feeds carry the MTA's own data terms.",
   "rows": 125174,
   "bytes": 4924127,
   "columns": [
    {
     "name": "row_id",
     "type": "VARCHAR",
     "description": "Stable ID of the row. If a row appears twice, keep one."
    },
    {
     "name": "observed_at",
     "type": "TIMESTAMP",
     "description": "When we saw this (UTC)."
    },
    {
     "name": "event",
     "type": "VARCHAR",
     "description": "baseline (first sighting in an hour), added, changed or removed."
    },
    {
     "name": "source",
     "type": "VARCHAR",
     "description": "Which feed: bus_alerts or mta_alerts."
    },
    {
     "name": "alert_id",
     "type": "VARCHAR",
     "description": "MTA alert ID."
    },
    {
     "name": "content_hash",
     "type": "VARCHAR",
     "description": "Hash of the alert text and details; changes when the alert changes."
    },
    {
     "name": "header",
     "type": "VARCHAR",
     "description": "Alert headline."
    },
    {
     "name": "description",
     "type": "VARCHAR",
     "description": "Alert body."
    },
    {
     "name": "cause",
     "type": "VARCHAR",
     "description": "GTFS cause."
    },
    {
     "name": "effect",
     "type": "VARCHAR",
     "description": "GTFS effect."
    },
    {
     "name": "active_periods",
     "type": "VARCHAR",
     "description": "JSON list of start and end times."
    },
    {
     "name": "informed_entities",
     "type": "VARCHAR",
     "description": "JSON list of routes, stops and trips affected."
    },
    {
     "name": "alert",
     "type": "VARCHAR",
     "description": "The whole alert as JSON."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/transit_alerts/year=2026/month=10/2026-10.parquet"
   ]
  },
  {
   "name": "elevator_outages",
   "description": "MTA elevator and escalator outages, one row each time an outage appears, changes or ends. Monthly files.",
   "source": "MTA GTFS-realtime and elevator feeds, collected by TransitLab (https://transitlab.nyc)",
   "license": "CC BY 4.0 for our processing. The underlying MTA feeds carry the MTA's own data terms.",
   "rows": 325,
   "bytes": 15949,
   "columns": [
    {
     "name": "row_id",
     "type": "VARCHAR",
     "description": "Stable ID of the row. If a row appears twice, keep one."
    },
    {
     "name": "observed_at",
     "type": "TIMESTAMP",
     "description": "When we saw this (UTC)."
    },
    {
     "name": "event",
     "type": "VARCHAR",
     "description": "baseline (first sighting in an hour), added, changed or removed."
    },
    {
     "name": "equipment",
     "type": "VARCHAR",
     "description": "MTA equipment number."
    },
    {
     "name": "station",
     "type": "VARCHAR",
     "description": "Station name."
    },
    {
     "name": "borough",
     "type": "VARCHAR",
     "description": "Borough."
    },
    {
     "name": "lines",
     "type": "VARCHAR",
     "description": "Lines that stop there."
    },
    {
     "name": "equipment_type",
     "type": "VARCHAR",
     "description": "EL (elevator) or ES (escalator)."
    },
    {
     "name": "serving",
     "type": "VARCHAR",
     "description": "What the equipment connects."
    },
    {
     "name": "ada",
     "type": "BOOLEAN",
     "description": "True if it is part of the ADA accessible route."
    },
    {
     "name": "outage_start",
     "type": "VARCHAR",
     "description": "When the outage began, as the MTA gives it."
    },
    {
     "name": "estimated_return",
     "type": "VARCHAR",
     "description": "Estimated return to service, as the MTA gives it."
    },
    {
     "name": "reason",
     "type": "VARCHAR",
     "description": "Reason for the outage."
    },
    {
     "name": "is_upcoming",
     "type": "BOOLEAN",
     "description": "True for planned outages not yet begun."
    },
    {
     "name": "is_maintenance",
     "type": "BOOLEAN",
     "description": "True for maintenance outages."
    },
    {
     "name": "content_hash",
     "type": "VARCHAR",
     "description": "Hash of the record; changes when the outage changes."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/elevator_outages/year=2026/month=10/2026-10.parquet"
   ]
  },
  {
   "name": "elevator_equipment",
   "description": "The MTA's list of elevators and escalators. Monthly files.",
   "source": "MTA GTFS-realtime and elevator feeds, collected by TransitLab (https://transitlab.nyc)",
   "license": "CC BY 4.0 for our processing. The underlying MTA feeds carry the MTA's own data terms.",
   "rows": 707,
   "bytes": 77386,
   "columns": [
    {
     "name": "row_id",
     "type": "VARCHAR",
     "description": "Stable ID of the row. If a row appears twice, keep one."
    },
    {
     "name": "observed_at",
     "type": "TIMESTAMP",
     "description": "When we saw this (UTC)."
    },
    {
     "name": "event",
     "type": "VARCHAR",
     "description": "baseline (first sighting in an hour), added, changed or removed."
    },
    {
     "name": "equipment",
     "type": "VARCHAR",
     "description": "MTA equipment number."
    },
    {
     "name": "station",
     "type": "VARCHAR",
     "description": "Station name."
    },
    {
     "name": "equipment_type",
     "type": "VARCHAR",
     "description": "EL (elevator) or ES (escalator)."
    },
    {
     "name": "record",
     "type": "VARCHAR",
     "description": "The whole record as JSON."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/elevator_equipment/year=2026/month=10/2026-10.parquet"
   ]
  },
  {
   "name": "taxi_yellow_trips",
   "description": "Yellow taxi trips since January 2023, one row per trip, cleaned and with zone names added. Monthly files.",
   "source": "NYC Taxi and Limousine Commission (TLC) Trip Record Data, https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page",
   "license": "NYC Open Data terms of use (public data). Cleaned and joined by TransitLab.",
   "rows": 71370274,
   "bytes": 1283408850,
   "columns": [
    {
     "name": "vendor_id",
     "type": "SMALLINT",
     "description": "TLC code of the meter vendor: 1 Creative Mobile, 2 VeriFone, 6 Myle, 7 Helix."
    },
    {
     "name": "pickup_datetime",
     "type": "TIMESTAMP",
     "description": "When the trip started, New York local time."
    },
    {
     "name": "dropoff_datetime",
     "type": "TIMESTAMP",
     "description": "When the trip ended, New York local time."
    },
    {
     "name": "passenger_count",
     "type": "SMALLINT",
     "description": "Passengers, as the driver entered it."
    },
    {
     "name": "pickup_zone_id",
     "type": "SMALLINT",
     "description": "TLC taxi zone ID of the pickup."
    },
    {
     "name": "pickup_zone",
     "type": "VARCHAR",
     "description": "Name of the pickup taxi zone."
    },
    {
     "name": "pickup_borough",
     "type": "VARCHAR",
     "description": "Borough of the pickup zone (or EWR, Unknown, N/A)."
    },
    {
     "name": "dropoff_zone_id",
     "type": "SMALLINT",
     "description": "TLC taxi zone ID of the dropoff."
    },
    {
     "name": "dropoff_zone",
     "type": "VARCHAR",
     "description": "Name of the dropoff taxi zone."
    },
    {
     "name": "dropoff_borough",
     "type": "VARCHAR",
     "description": "Borough of the dropoff zone (or EWR, Unknown, N/A)."
    },
    {
     "name": "trip_miles",
     "type": "DOUBLE",
     "description": "Trip distance in miles."
    },
    {
     "name": "trip_minutes",
     "type": "DOUBLE",
     "description": "Minutes from pickup to dropoff."
    },
    {
     "name": "rate_code",
     "type": "VARCHAR",
     "description": "Rate: standard, jfk, newark, nassau_westchester, negotiated, group, or unknown."
    },
    {
     "name": "store_and_fwd",
     "type": "BOOLEAN",
     "description": "True if the meter held the trip record before sending it."
    },
    {
     "name": "payment_type",
     "type": "VARCHAR",
     "description": "How the rider paid: credit_card, cash, no_charge, dispute, flex_fare, voided, or unknown."
    },
    {
     "name": "fare_amount",
     "type": "DOUBLE",
     "description": "Fare before tolls, taxes, fees and tips, in dollars."
    },
    {
     "name": "extra",
     "type": "DOUBLE",
     "description": "Rush hour and overnight extras, in dollars."
    },
    {
     "name": "mta_tax",
     "type": "DOUBLE",
     "description": "MTA tax, in dollars."
    },
    {
     "name": "tip_amount",
     "type": "DOUBLE",
     "description": "Tip, in dollars."
    },
    {
     "name": "tolls_amount",
     "type": "DOUBLE",
     "description": "Tolls paid, in dollars."
    },
    {
     "name": "improvement_surcharge",
     "type": "DOUBLE",
     "description": "Improvement surcharge, in dollars."
    },
    {
     "name": "congestion_surcharge",
     "type": "DOUBLE",
     "description": "NY State congestion surcharge, in dollars."
    },
    {
     "name": "airport_fee",
     "type": "DOUBLE",
     "description": "Airport fee, in dollars."
    },
    {
     "name": "cbd_congestion_fee",
     "type": "DOUBLE",
     "description": "MTA congestion pricing toll (from 5 January 2025), in dollars. Null before."
    },
    {
     "name": "total_amount",
     "type": "DOUBLE",
     "description": "Total charged to the rider, in dollars, not counting cash tips."
    },
    {
     "name": "request_source",
     "type": "VARCHAR",
     "description": "How the trip was requested (new in 2026 files). Null before."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2025/month=03/2025-03.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2025/month=04/2025-04.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2025/month=05/2025-05.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2025/month=06/2025-06.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2025/month=07/2025-07.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2025/month=08/2025-08.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2025/month=09/2025-09.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2025/month=10/2025-10.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2025/month=11/2025-11.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2025/month=12/2025-12.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2026/month=01/2026-01.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2026/month=02/2026-02.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2026/month=03/2026-03.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2026/month=04/2026-04.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2026/month=05/2026-05.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2026/month=06/2026-06.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2026/month=07/2026-07.parquet",
    "https://data.transitlab.nyc/v1/taxi_yellow_trips/year=2026/month=08/2026-08.parquet"
   ]
  },
  {
   "name": "taxi_green_trips",
   "description": "Green taxi trips since January 2023, one row per trip, cleaned and with zone names added. Monthly files.",
   "source": "NYC Taxi and Limousine Commission (TLC) Trip Record Data, https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page",
   "license": "NYC Open Data terms of use (public data). Cleaned and joined by TransitLab.",
   "rows": 780894,
   "bytes": 16754019,
   "columns": [
    {
     "name": "vendor_id",
     "type": "SMALLINT",
     "description": "TLC code of the meter vendor: 1 Creative Mobile, 2 VeriFone, 6 Myle, 7 Helix."
    },
    {
     "name": "pickup_datetime",
     "type": "TIMESTAMP",
     "description": "When the trip started, New York local time."
    },
    {
     "name": "dropoff_datetime",
     "type": "TIMESTAMP",
     "description": "When the trip ended, New York local time."
    },
    {
     "name": "passenger_count",
     "type": "SMALLINT",
     "description": "Passengers, as the driver entered it."
    },
    {
     "name": "pickup_zone_id",
     "type": "SMALLINT",
     "description": "TLC taxi zone ID of the pickup."
    },
    {
     "name": "pickup_zone",
     "type": "VARCHAR",
     "description": "Name of the pickup taxi zone."
    },
    {
     "name": "pickup_borough",
     "type": "VARCHAR",
     "description": "Borough of the pickup zone (or EWR, Unknown, N/A)."
    },
    {
     "name": "dropoff_zone_id",
     "type": "SMALLINT",
     "description": "TLC taxi zone ID of the dropoff."
    },
    {
     "name": "dropoff_zone",
     "type": "VARCHAR",
     "description": "Name of the dropoff taxi zone."
    },
    {
     "name": "dropoff_borough",
     "type": "VARCHAR",
     "description": "Borough of the dropoff zone (or EWR, Unknown, N/A)."
    },
    {
     "name": "trip_miles",
     "type": "DOUBLE",
     "description": "Trip distance in miles."
    },
    {
     "name": "trip_minutes",
     "type": "DOUBLE",
     "description": "Minutes from pickup to dropoff."
    },
    {
     "name": "rate_code",
     "type": "VARCHAR",
     "description": "Rate: standard, jfk, newark, nassau_westchester, negotiated, group, or unknown."
    },
    {
     "name": "store_and_fwd",
     "type": "BOOLEAN",
     "description": "True if the meter held the trip record before sending it."
    },
    {
     "name": "trip_type",
     "type": "VARCHAR",
     "description": "street_hail or dispatch."
    },
    {
     "name": "payment_type",
     "type": "VARCHAR",
     "description": "How the rider paid: credit_card, cash, no_charge, dispute, flex_fare, voided, or unknown."
    },
    {
     "name": "fare_amount",
     "type": "DOUBLE",
     "description": "Fare before tolls, taxes, fees and tips, in dollars."
    },
    {
     "name": "extra",
     "type": "DOUBLE",
     "description": "Rush hour and overnight extras, in dollars."
    },
    {
     "name": "mta_tax",
     "type": "DOUBLE",
     "description": "MTA tax, in dollars."
    },
    {
     "name": "tip_amount",
     "type": "DOUBLE",
     "description": "Tip, in dollars."
    },
    {
     "name": "tolls_amount",
     "type": "DOUBLE",
     "description": "Tolls paid, in dollars."
    },
    {
     "name": "improvement_surcharge",
     "type": "DOUBLE",
     "description": "Improvement surcharge, in dollars."
    },
    {
     "name": "congestion_surcharge",
     "type": "DOUBLE",
     "description": "NY State congestion surcharge, in dollars."
    },
    {
     "name": "ehail_fee",
     "type": "DOUBLE",
     "description": "E-hail fee, in dollars."
    },
    {
     "name": "cbd_congestion_fee",
     "type": "DOUBLE",
     "description": "MTA congestion pricing toll (from 5 January 2025), in dollars. Null before."
    },
    {
     "name": "total_amount",
     "type": "DOUBLE",
     "description": "Total charged to the rider, in dollars, not counting cash tips."
    },
    {
     "name": "request_source",
     "type": "VARCHAR",
     "description": "How the trip was requested (new in 2026 files). Null before."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2025/month=04/2025-04.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2025/month=05/2025-05.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2025/month=06/2025-06.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2025/month=07/2025-07.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2025/month=08/2025-08.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2025/month=09/2025-09.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2025/month=10/2025-10.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2025/month=11/2025-11.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2025/month=12/2025-12.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2026/month=01/2026-01.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2026/month=02/2026-02.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2026/month=03/2026-03.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2026/month=04/2026-04.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2026/month=05/2026-05.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2026/month=06/2026-06.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2026/month=07/2026-07.parquet",
    "https://data.transitlab.nyc/v1/taxi_green_trips/year=2026/month=08/2026-08.parquet"
   ]
  },
  {
   "name": "fhv_trips",
   "description": "High-volume for-hire vehicle trips (Uber, Lyft, Via, Juno) since January 2023, cleaned and with zone names added. Monthly files, large.",
   "source": "NYC Taxi and Limousine Commission (TLC) Trip Record Data, https://www.nyc.gov/site/tlc/about/tlc-trip-record-data.page",
   "license": "NYC Open Data terms of use (public data). Cleaned and joined by TransitLab.",
   "rows": 351482183,
   "bytes": 9683993046,
   "columns": [
    {
     "name": "company",
     "type": "VARCHAR",
     "description": "Uber, Lyft, Via or Juno, from the license number."
    },
    {
     "name": "license_num",
     "type": "VARCHAR",
     "description": "TLC high-volume license number (HV0002 Juno, HV0003 Uber, HV0004 Via, HV0005 Lyft)."
    },
    {
     "name": "dispatching_base_num",
     "type": "VARCHAR",
     "description": "TLC base license of the base that dispatched the trip."
    },
    {
     "name": "originating_base_num",
     "type": "VARCHAR",
     "description": "Base that first received the request."
    },
    {
     "name": "request_datetime",
     "type": "TIMESTAMP",
     "description": "When the rider asked for the trip, New York local time."
    },
    {
     "name": "on_scene_datetime",
     "type": "TIMESTAMP",
     "description": "When the driver arrived at pickup (Access-A-Ride trips only)."
    },
    {
     "name": "pickup_datetime",
     "type": "TIMESTAMP",
     "description": "When the trip started, New York local time."
    },
    {
     "name": "dropoff_datetime",
     "type": "TIMESTAMP",
     "description": "When the trip ended, New York local time."
    },
    {
     "name": "pickup_zone_id",
     "type": "SMALLINT",
     "description": "TLC taxi zone ID of the pickup."
    },
    {
     "name": "pickup_zone",
     "type": "VARCHAR",
     "description": "Name of the pickup taxi zone."
    },
    {
     "name": "pickup_borough",
     "type": "VARCHAR",
     "description": "Borough of the pickup zone (or EWR, Unknown, N/A)."
    },
    {
     "name": "dropoff_zone_id",
     "type": "SMALLINT",
     "description": "TLC taxi zone ID of the dropoff."
    },
    {
     "name": "dropoff_zone",
     "type": "VARCHAR",
     "description": "Name of the dropoff taxi zone."
    },
    {
     "name": "dropoff_borough",
     "type": "VARCHAR",
     "description": "Borough of the dropoff zone (or EWR, Unknown, N/A)."
    },
    {
     "name": "trip_miles",
     "type": "DOUBLE",
     "description": "Trip distance in miles."
    },
    {
     "name": "trip_minutes",
     "type": "DOUBLE",
     "description": "Minutes from pickup to dropoff."
    },
    {
     "name": "fare_amount",
     "type": "DOUBLE",
     "description": "Base passenger fare before tolls, taxes, fees and tips, in dollars."
    },
    {
     "name": "tolls_amount",
     "type": "DOUBLE",
     "description": "Tolls paid, in dollars."
    },
    {
     "name": "black_car_fund",
     "type": "DOUBLE",
     "description": "Black Car Fund fee, in dollars."
    },
    {
     "name": "sales_tax",
     "type": "DOUBLE",
     "description": "Sales tax, in dollars."
    },
    {
     "name": "congestion_surcharge",
     "type": "DOUBLE",
     "description": "NY State congestion surcharge, in dollars."
    },
    {
     "name": "airport_fee",
     "type": "DOUBLE",
     "description": "Airport fee, in dollars."
    },
    {
     "name": "cbd_congestion_fee",
     "type": "DOUBLE",
     "description": "MTA congestion pricing toll (from 5 January 2025), in dollars. Null before."
    },
    {
     "name": "tip_amount",
     "type": "DOUBLE",
     "description": "Tip, in dollars."
    },
    {
     "name": "driver_pay",
     "type": "DOUBLE",
     "description": "Total paid to the driver before tips, in dollars."
    },
    {
     "name": "shared_request",
     "type": "BOOLEAN",
     "description": "True if the rider agreed to share the ride."
    },
    {
     "name": "shared_match",
     "type": "BOOLEAN",
     "description": "True if the rider shared the ride with another rider."
    },
    {
     "name": "access_a_ride",
     "type": "BOOLEAN",
     "description": "True if the trip was for an MTA Access-A-Ride rider."
    },
    {
     "name": "wav_request",
     "type": "BOOLEAN",
     "description": "True if the rider asked for a wheelchair-accessible vehicle."
    },
    {
     "name": "wav_match",
     "type": "BOOLEAN",
     "description": "True if the vehicle was wheelchair accessible."
    }
   ],
   "files": [
    "https://data.transitlab.nyc/v1/fhv_trips/year=2025/month=04/2025-04.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2025/month=05/2025-05.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2025/month=06/2025-06.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2025/month=07/2025-07.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2025/month=08/2025-08.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2025/month=09/2025-09.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2025/month=10/2025-10.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2025/month=11/2025-11.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2025/month=12/2025-12.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2026/month=01/2026-01.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2026/month=02/2026-02.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2026/month=03/2026-03.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2026/month=04/2026-04.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2026/month=05/2026-05.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2026/month=06/2026-06.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2026/month=07/2026-07.parquet",
    "https://data.transitlab.nyc/v1/fhv_trips/year=2026/month=08/2026-08.parquet"
   ]
  }
 ]
}
