Skip to content
Docs

Bus route speeds

Our own bus speeds by route, direction and hour, worked out each night from every bus's reported position.

Rows
11,120
Size
120 KB
Covers
October 2026 to about two days ago
Updated
Nightly
Source
MTA bus GTFS-realtime vehicle positions and bus GTFS
License
CC BY 4.0
Fileshttps://data.transitlab.nyc/v1/bus_route_speeds.parquetOne file. In the database as transitlab.bus_route_speeds.

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

One route, direction and New York hour on one day. We snap each bus’s reported position to its route’s shape, then add up the distance it covered and the time it took between reports. Time spent at stops and lights counts, as in the MTA’s own figures.

To combine rows, add up meters and seconds, then divide:

sum(meters) / sum(seconds) * 2.23694 -- miles per hour

Averaging the mph column instead would give a quiet hour as much weight as a busy one.

-- Speed by hour of day on the M15 Select Bus, weekdays
SELECT hour,
round(sum(meters) / sum(seconds) * 2.23694, 2) AS mph
FROM 'https://data.transitlab.nyc/v1/bus_route_speeds.parquet'
WHERE route_id = 'M15+'
AND dayofweek(service_date::DATE) BETWEEN 1 AND 5
GROUP BY hour
ORDER BY hour;
service_datevarchar

New York date, YYYY-MM-DD.

route_idvarchar

MTA route, e.g. M15+ for the M15 Select Bus.

direction_idinteger

GTFS direction, 0 or 1.

hourinteger

New York hour of day, 0 to 23.

metersdouble

Distance buses covered along the route shape.

secondsdouble

Time they took. Stops and lights count; layovers don't.

tripsinteger

Trips that contributed.

intervalsinteger

Pairs of position reports that contributed.

computed_attimestamp

When the row was worked out (UTC).

mphdouble

meters over seconds, in miles per hour. To combine rows, add up meters and seconds instead.

  • Left out: reports within 150 m of either end of the route (buses waiting to start), more than 60 m off the route, gaps over 5 minutes, and jumps faster than 56 mph.
  • A day appears about two days later. A New York day runs to 04:00 UTC the next day, and positions are added the morning after that.
  • One row per key. If a day was worked out twice, the file keeps the latest.
  • On one Sunday in October 2026 our citywide speed was 8.66 mph against the MTA’s 8.59 for the month, and 91% of routes were within 10%. See Bus speeds.