UK National Rail Scraper — Live Train Times, Boards & Delays
UK National Rail Scraper — Live Train Times, Delays & Departure Boards
Scrape live departure and arrival boards from nationalrail.co.uk by station CRS code. Returns real-time service data — operator, scheduled and actual times, delay in minutes, platform assignments, cancellation reasons, and crowding indicators — for any UK station in one run.
What does the UK National Rail Scraper do?
The scraper fetches each station's live departure or arrival board from National Rail and returns structured JSON. You supply a list of 3-letter CRS station codes and choose whether to pull departures or arrivals. Every UK train operating company is covered: LNER, GWR, Avanti West Coast, ScotRail, Southern, Thameslink, Transport for Wales, CrossCountry, Northern, the Elizabeth line, and more.
No browser rendering is required. The site embeds structured service data server-side, so the scraper is fast and runs without headless Chrome.
What data does it extract?
Each service record contains:
| Field | Description |
|---|---|
station_name |
Name of the queried station |
station_crs |
3-letter CRS code of the queried station |
board_type |
departures or arrivals |
rid |
Run ID — unique service identifier |
train_uid |
Timetable UID |
operator |
Train operating company name (e.g. London North Eastern Railway) |
operator_code |
2-letter TOC code (GR, GW, SR, etc.) |
origin_station / origin_crs |
Origin station name and CRS code |
destination_station / destination_crs |
Destination name and CRS code |
scheduled_departure |
Planned departure (ISO 8601) |
estimated_departure |
Real-time estimated departure, null if unavailable |
actual_departure |
Actual departure time, null if not yet departed |
scheduled_arrival |
Planned arrival at destination (ISO 8601) |
estimated_arrival |
Real-time estimated arrival |
actual_arrival |
Actual arrival time |
delay_minutes |
Delay in whole minutes (positive = late), null if no real-time data |
platform |
Platform number or letter, null if not yet announced |
status |
OnTime, Late, Cancelled, Arrived, or Departed |
cancelled |
Boolean — true if service is cancelled |
cancellation_reason |
Reason text when cancelled, null otherwise |
stops_count |
Number of intermediate stops |
service_category |
ExpressPassengerTrain or PassengerTrain |
loading_level |
Crowding indicator: Unknown, Level1 (quiet), Level2 (busy), Level3 (very busy) |
scraped_at |
ISO 8601 timestamp when this record was collected |
Note on loading_level: National Rail publishes crowding as one of four categorical values (Unknown, Level1, Level2, Level3), not as a numeric percentage. Most services return Unknown.
How to use it
The actor requires at least one CRS station code. Every UK station has a 3-letter CRS code — here are the most commonly needed ones:
| Station | CRS |
|---|---|
| London King's Cross | KGX |
| London Paddington | PAD |
| London Euston | EUS |
| London Victoria | VIC |
| London Waterloo | WAT |
| Manchester Piccadilly | MAN |
| Birmingham New Street | BHM |
| Edinburgh Waverley | EDB |
| Glasgow Central | GLC |
| Leeds | LDS |
The full list is published by National Rail. For less common stations, search <station name> CRS code — the 3-letter code appears on timetable PDFs and booking sites.
{
"mode": "departure_board",
"stations": ["KGX", "EDB", "MAN"],
"maxItems": 30,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"countryCode": "GB"
}
}
| Field | Type | Default | Description |
|---|---|---|---|
mode |
string | departure_board |
departure_board or arrival_board |
stations |
array | ["KGX", "EDB"] |
List of CRS codes — at least one required |
maxItems |
integer | 10 |
Maximum total records across all stations |
proxyConfiguration |
object | UK Residential | UK residential proxy is required for reliable results |
Use cases
- Travel app developers — build live board displays, delay notifications, or real-time journey planners on National Rail data
- Delay and performance research — track cancellation rates, delay patterns, and operator performance over time by running the scraper on a schedule
- MaaS platforms — integrate UK rail into multi-modal journey planning
- Operations and operations research — pull service-level data for train flow modelling or incident analysis
- Journalists and analysts — extract operator-level delay and cancellation data for reporting on rail performance
FAQ
Does this scraper need proxies?
Yes. A UK residential proxy is required for reliable results from nationalrail.co.uk. The default proxy configuration (RESIDENTIAL, country GB) is pre-filled — leave it as-is unless testing at low volume.
Does this return historical timetable data?
No. The scraper returns the live board at the time of the run — the next services from each station. It does not cover historical schedules or full 24-hour timetables. For historical data, commercial feeds (Darwin, LDBWS) or the OpenTrainTimes API are the appropriate sources.
How much does a run cost?
Charged at $0.10 per run start plus $0.0015 per service record. A run fetching 20 records from two stations costs approximately $0.13.
Results are available for download as JSON, CSV, or Excel from the Apify dataset view.