Skip to content
Docs

Service alerts

Every MTA bus, subway and rail service alert, with each change to its text or timing, since October 2026.

Rows
125,174
Size
4.9 MB
Covers
October 2026 onward
Updated
Daily
Source
MTA GTFS-realtime alert feeds
License
CC BY 4.0
Fileshttps://data.transitlab.nyc/v1/transit_alerts/year=YYYY/month=MM/YYYY-MM.parquetOne file a month. In the database as transitlab.transit_alerts.

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

One change to one alert: it appeared, its text or details changed, or it ended. Alerts come from two MTA feeds, bus_alerts and mta_alerts (subway and rail). content_hash changes whenever anything in the alert does. event works as for bus positions.

-- Subway and rail alerts that first appeared yesterday
SELECT alert_id, header, cause, effect
FROM transitlab.transit_alerts
WHERE source = 'mta_alerts' AND event IN ('added', 'baseline')
AND observed_at >= current_date - 1 AND observed_at < current_date
QUALIFY row_number() OVER (PARTITION BY alert_id ORDER BY observed_at) = 1
ORDER BY header;

informed_entities is JSON. To find alerts about one route:

SELECT DISTINCT alert_id, header
FROM transitlab.transit_alerts
WHERE json_contains(informed_entities, '{"routeId": "A"}');
row_idvarchar

Stable ID of the row. If a row appears twice, keep one.

observed_attimestamp

When we fetched the feed snapshot this row came from (UTC).

eventvarchar

baseline, added, changed or removed. See reading change events.

sourcevarchar

Which feed: bus_alerts or mta_alerts (subway and rail).

alert_idvarchar

MTA alert ID.

content_hashvarchar

Changes whenever the alert's text or details change.

headervarchar

Headline, in English.

descriptionvarchar

Body text, in English.

causevarchar

GTFS cause, e.g. CONSTRUCTION.

effectvarchar

GTFS effect, e.g. DETOUR.

active_periodsvarchar

List of start and end times.

informed_entitiesvarchar

Routes, stops and trips the alert is about.

alertvarchar

The whole alert as the feed gave it.

  • One alert, many rows. Planned work alerts are often edited many times; group by alert_id.
  • active_periods holds when the alert applies, which can be days after it first appears.