ŽSR / ZSSK
Live delays Train positions Timetables Unofficial source
Live delays, train positions and timetables of ŽSR / ZSSK in Slovakia, recorded since 28 Sep 2026 from GTFS-RT and GTFS feeds, and from data published on data.slovensko.sk, which the archive converts to GTFS-RT.
Download
Pick a day on the calendar. Each day is one file with everything recorded that day, in Slovakia local time. You choose the format on the next page: a spreadsheet (CSV, opens in Excel, LibreOffice or Google Sheets) or Parquet (a compact table format for code).
November 2026
| Mon | Tue | Wed | Thu | Fri | Sat | Sun |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | Wednesday 4 November 2026: still being collected | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- A file to download
- Collected, file ready after 02:15 UTC
- Today, still being collected
- No data
37 days ready to download. The archive has data for this source since 28 Sep 2026.
Several days at once
Choose the first and last day: you get one zip with a file per day.
The timetable
The planned timetable: stations, routes, trips and times. It comes as GTFS, the standard timetable format, one Parquet table per GTFS file. 3 versions stored, a new one when ŽSR / ZSSK changes the coming week’s trains.
Tools that need a GTFS zip: pip install gtfs-parquet, then gtfs_parquet.write_gtfs(gtfs_parquet.read_parquet(folder), "gtfs.zip") on a folder of the tables. This version was stored on 28 Oct 2026, 13:54 and is the current one.
Accounts are free: you sign in with a code sent to your email, no password.
Use it from code
Every day is a Parquet file at a fixed address. Read it straight from DuckDB, Polars or anything that reads Parquet over HTTP: only the columns and rows your query needs are downloaded. You need a free API token from an account.
Try it in your browser Developer guide
- Source id
sk-zsr- Services
TripUpdatelive delays: daily files from 28 Sep 2026 to 3 Nov 2026 (37 days)VehiclePositiontrain positions: daily files from 28 Sep 2026 to 3 Nov 2026 (37 days)- Daily file
https://data.train-archive.eu/daily/provider=sk-zsr/service=TripUpdate/date=YYYY-MM-DD.parquetfinal delays per train and stop- Every update
https://data.train-archive.eu/provider=sk-zsr/service=SERVICE/date=YYYY-MM-DD/day.parquet- Today
- Still being collected in 15-minute files. The day’s file is built after 02:15 UTC. The developer guide shows how to read the 15-minute files.
- Timetables
- Service
static: 3 versions, listed insk-zsr/static/latest.json
INSTALL httpfs; LOAD httpfs;
-- The most recent positions of the day
SELECT trip_tripId, vehicle_label, position_latitude, position_longitude, lastSeen
FROM read_parquet('https://data.train-archive.eu/provider=sk-zsr/service=VehiclePosition/date=2026-10-05/day.parquet?token=YOUR_TOKEN')
WHERE position_latitude IS NOT NULL
ORDER BY lastSeen DESC
LIMIT 20;
import polars as pl
token = "YOUR_TOKEN"
df = pl.read_parquet(f"https://data.train-archive.eu/provider=sk-zsr/service=VehiclePosition/date=2026-10-05/day.parquet?token={token}")
# The most recent positions of the day
print(
df.filter(pl.col("position_latitude").is_not_null())
.select("trip_tripId", "vehicle_label", "position_latitude", "position_longitude", "lastSeen")
.sort("lastSeen", descending=True)
.head(20)
)
curl -L -o sk-zsr-VehiclePosition-2026-10-05.parquet \
'https://data.train-archive.eu/provider=sk-zsr/service=VehiclePosition/date=2026-10-05/day.parquet?token=YOUR_TOKEN'
Replace YOUR_TOKEN with one of your API tokens. Times are in UTC.
import json, urllib.request
import polars as pl
base, token = "https://data.train-archive.eu", "YOUR_TOKEN"
latest = json.load(urllib.request.urlopen(f"{base}/sk-zsr/static/latest.json?token={token}"))
stops = pl.read_parquet(f"{base}/{latest['tables']['stops']}?token={token}")
print(stops.select("stop_id", "stop_name"))
Also: every file of this source, listed, and asking an AI assistant to query it for you.
What is covered
- Local time
- Europe/Bratislava
- Rail filter
- Off: the feed carries trains only
- Relayed by
- jbb.ghsq.de
- Live delays
- 28 Sep 2026 to 4 Nov 2026, 114 files, 109.0 MB.
15 missing hours
- 22 Oct 2026: 10h, 11h
- 24 Oct 2026: 06h, 07h, 08h, 09h, 10h, 11h
Archive outage on 29 Sep 2026, 05:00 to 12:15: the archive recorded nothing from any source (the archive's collector ran out of memory and restarted in a loop). Our fault, not the source’s.
On a usual day the live data covers 100% of the trains the timetable plans. Incomplete days: 28 Sep 2026 (24%, part of the day), 29 Sep 2026 (80%, part of the day), 22 Oct 2026 (92%, part of the day), 24 Oct 2026 (60%, part of the day).
- Train positions
- 28 Sep 2026 to 4 Nov 2026, 114 files, 90.0 MB.
No missing hours.
Archive outage on 29 Sep 2026, 05:00 to 12:15: the archive recorded nothing from any source (the archive's collector ran out of memory and restarted in a loop). Our fault, not the source’s.
- Feed status, live delays
- Last update 19:32 on 4 Nov 2026, local time, 139 trains.
- Feed status, train positions
- Last update 19:32 on 4 Nov 2026, local time, 139 trains.
- Timetables
- 3 versions stored.
- 28 Oct 2026, 13:54 8 files, 194.4 KB current
- 22 Oct 2026, 12:01 10 files, 219.9 KB
- 30 Sep 2026, 17:41 10 files, 224.2 KB
Unofficial source: the operator does not publish all of this data as GTFS, and volunteers convert or relay part of it. It can stop at any time.
From 10 to 19 October 2026 about a quarter of the updates matched no train of the timetable the archive had (30 September; ŽSR's uploads of those days are no longer published), so those days lack the planned stops of many trains: treat them as doubtful. 20 and 21 October were rebuilt against the timetable of 22 October (every update matched).
Do you publish this feed? Ask for a change or its removal. Removal stops collection and deletes the files already stored.