Skip to content
Docs

Subway slow zones

Every stretch of the subway where trains ran well over their usual time for days on end, since 2022, with what it cost riders.

Rows
10,442
Size
254 KB
Covers
Zones starting 2022-01-01 or later
Updated
Nightly
Source
Built from subway segment times; riders from MTA origin-destination estimates
License
CC BY 4.0
Fileshttps://data.transitlab.nyc/v1/subway_slow_zones.parquetOne file. In the database as transitlab.subway_slow_zones.

Rows and size from catalog.json, 2026-10-06.

One episode on one segment: a run of four or more weekdays in a row when trains took at least 10% and 10 seconds longer than usual (one ordinary day inside the run is allowed). “Usual” is a good typical day: the 10th percentile of the previous 120 weekdays of subway segment times.

Not every episode is a slow order on the track. The kind column sorts them:

kindWhat it means
slow zoneMedian extra time up to 2 minutes and 150%. Most likely a speed restriction or work nearby. The site shows only these.
disruptionMore extra time than that: reroutes, skipped stops, shuttles.
service changeThe routes using the segment changed, or the segment is new.
system-wide change15 or more episodes started the same day: a timetable change or a network-wide event.

The full method, and how we checked it against the news, is in Subway slow zones.

-- Rider-hours lost to slow zones, by the year each zone started
SELECT year(start_date) AS year,
count(*) AS zones,
round(sum(rider_hours_lost)) AS rider_hours_lost
FROM 'https://data.transitlab.nyc/v1/subway_slow_zones.parquet'
WHERE kind = 'slow zone'
GROUP BY year
ORDER BY year;
a_stopvarchar

GTFS stop ID where the segment starts.

b_stopvarchar

GTFS stop ID where it ends.

segmentvarchar

Readable name, e.g. Queensboro Plaza → 60 St tunnel.

routesvarchar

Routes running through it during the zone, space-separated.

start_datedate

First slow weekday.

end_datedate

Last slow weekday. Recent zones may still be going.

slow_daysbigint

Slow weekdays in the zone.

baseline_sdouble

Usual time in seconds: 10th percentile of the previous 120 weekdays.

extra_s_mediandouble

Median extra seconds per train over the baseline.

extra_s_maxdouble

Worst day's extra seconds.

extra_pctdouble

extra_s_median as a percentage of baseline_s.

trains_per_daybigint

Typical trains a weekday, 6:00 to 21:59.

train_hours_lostdouble

Extra seconds × trains, summed over the zone, in hours.

riders_per_weekdaybigint

Riders passing through on a typical 2025 weekday daytime.

rider_hours_lostbigint

Extra seconds × riders, summed over the zone, in hours.

usual_routesvarchar

Routes on the segment in the 60 weekdays before.

kindvarchar

slow zone, disruption, service change or system-wide change. The site shows only slow zone.

  • One stretch of slow track shows up as several rows, one per segment and direction.
  • Run time includes the stop. A segment can look slow because platforms got busier, not because of a speed restriction.
  • Rider counts are 2025 averages, routed along the fastest path, which sends too many riders to express lines.
  • Zones from 2021 are left out. Baselines from near-empty pandemic trains made the 2021 return of riders look like slow zones.
  • The MTA doesn’t publish its speed restrictions, so this is an outside estimate, not a copy of an official list.