We extract journey planners, live departure boards, Advance fare pricing, and disruption alerts from ScotRail. Delivered as clean JSON, CSV, or Parquet to S3, BigQuery, or Snowflake on your cadence.
Structured, schema-consistent data across all major object types — delivered clean, typed, and ready to query.
Complete list of extractable fields for Live Departures objects from scotrail.co.uk. All fields typed and schema-versioned.
"station_code": "EDB", "destination": "Glasgow Queen Street", "scheduled_time": "2026-05-12T08:15:00Z", "expected_time": "2026-05-12T08:19:00Z", "platform": "14", "status": "Delayed", "delay_minutes": 4, "operator": "ScotRail"
| # | station_code | destination | scheduled_time | expected_time | platform | status |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Timetables objects from scotrail.co.uk. All fields typed and schema-versioned.
"origin_crs": "GLC", "destination_crs": "ABD", "departure_time": "2026-05-12T09:41:00Z", "arrival_time": "2026-05-12T12:20:00Z", "duration_minutes": 159, "changes": 0, "operator": "ScotRail", "train_uid": "C39281"
| # | origin_crs | destination_crs | departure_time | arrival_time | duration_minutes | changes |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Ticket Fares objects from scotrail.co.uk. All fields typed and schema-versioned.
"route_id": "EDB-GLQ", "ticket_type": "Advance Single", "price_gbp": 14.8, "railcard_discount": "16-25 Railcard", "travel_class": "Standard", "flexibility": "Fixed train only", "availability_status": "Available", "scraped_timestamp": "2026-05-12T07:12:00Z"
| # | route_id | ticket_type | price_gbp | railcard_discount | travel_class | flexibility |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Disruptions objects from scotrail.co.uk. All fields typed and schema-versioned.
"incident_id": "INC-8832", "route_affected": "Inverness to Edinburgh", "severity": "High", "description": "Tree blocking the railway at Pitlochry.", "start_time": "2026-05-12T06:30:00Z", "delay_reason": "Severe weather", "alternative_travel": "Bus replacement in operation."
| # | incident_id | route_affected | severity | description | start_time | estimated_clear_time |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Station Info objects from scotrail.co.uk. All fields typed and schema-versioned.
"station_name": "Stirling", "crs_code": "STG", "accessibility_rating": "Category A", "parking_spaces": 142, "toilets_available": true, "waiting_room": true, "wifi_available": true, "ticket_office_hours": "06:15 - 20:00"
| # | station_name | crs_code | ticket_office_hours | accessibility_rating | parking_spaces | toilets_available |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Our pipelines handle session state, dynamic pricing grids, and real-time polling constraints to deliver structured rail data without manual intervention.
Track expected versus scheduled times, platform alterations, and cancellation notices across all Scottish stations in near real-time.
Capture Advance, Off-Peak, and Anytime ticket prices. Monitor yield management algorithms as departure dates approach.
Extract live incident alerts, severity ratings, delay reasons, and alternative travel advice published on the ScotRail network.
Map complete A-to-B route combinations, including intermediate calling points, duration, and operator data.
Gather metadata on station accessibility, ticket office hours, parking capacity, and facility availability.
Apply 16-25, Senior, Disabled Persons, and regional railcard modifiers to extract discounted fare grids.
Extract intermediate calling points and connection times for complex multi-leg journeys across the network.
Capture the number of coaches and expected train length where surfaced by the journey planner.
Run one-off timetable exports or configure continuous pipelines at minutely cadences for live departure tracking.
Brief in. Clean data out.
Provide CRS codes, route combinations, or station lists. We design the extraction schema together.
We configure Scrapy / Playwright crawlers, proxy rotation, and session management for scotrail.co.uk.
Schema validation, null-rate checks, and data type enforcement before full launch.
JSON / CSV / Parquet pushed to your S3 bucket, BigQuery dataset, or Snowflake stage on agreed cadence.
Travel sites deploy strict rate limits and complex session states. We manage the infrastructure so you receive clean data.
Travel sites rate-limit aggresively. We route requests through UK-based residential proxies to distribute load and prevent IP blocks during high-frequency polling.
Extracting accurate pricing requires navigating multi-step journey planners. We maintain cookie sessions and CSRF tokens to simulate valid search flows.
Live departure boards require frequent polling. We optimise request timing and distribute queries across proxy pools to ensure data freshness without triggering WAF rules.
ScotRail updates its frontend periodically. We deploy multi-layered selectors with fallback chains to ensure UI changes do not break the extraction pipeline.
We monitor null rates and schema drift in real time. If a fare grid fails to load, the system retries automatically with a fresh session.
Online Travel Agencies (OTAs) sync timetables and fares to display accurate routing options to end users.
Machine learning teams use historical delay and cancellation data to train predictive models for network reliability.
Expense management platforms verify claimed ticket prices against historical fare grids for compliance.
B2B SaaS providers ingest live incident reports to push real-time travel alerts to corporate commuters.
Coach operators and domestic airlines track rail fares to optimise their own dynamic pricing algorithms.
Consultancies use timetable frequency and station facility data as proxies for regional economic activity.
"Rail data is highly dynamic. Fares change by the hour and delays cascade across the network. Querying it requires purpose-built infrastructure."
Extracting reliable data from ScotRail involves managing session tokens, bypassing rate limits, and parsing complex grid layouts. DataFlirt handles the extraction layer completely, delivering structured transit data directly to your warehouse so your team can focus on downstream analysis.
Everything supported by our scotrail.co.uk scraper — rendered SPA elements, auth walls, rate-limit evasion and beyond.
Open-source tooling on proven cloud infra — no vendor lock-in, full observability.
Scrapy handles crawl orchestration, deduplication, and retry logic. Playwright handles JavaScript rendering, cookie sessions, and interaction flows. Combined via scrapy-playwright middleware.
We maintain pools of residential ISP proxies across UK regions. Rotation happens per-request with sticky sessions where required. IP score monitoring prevents blacklisted pool contamination.
Pipelines run on AWS Lambda (burst) and ECS (sustained). Airflow handles scheduling, dependency management, and SLA alerting. All state stored in managed Postgres.
Data delivered to where your team already works — no new tooling required.
About scotrail.co.uk scraping, legality, and pipeline operations.
Ask us directly →Scraping publicly available timetable, pricing, and disruption data is generally permissible. DataFlirt targets only public, non-authenticated network data. We do not extract personal user accounts or execute ticket purchases. Clients should review ScotRail's terms of service and consult legal counsel for their specific use cases.
We use UK-based residential proxies, realistic browser fingerprints, and strict session management. Our crawlers simulate human request timing to avoid triggering Web Application Firewalls (WAF) during high-frequency polling.
Live departure pipelines can be configured to poll specific station boards at minutely intervals, providing near real-time updates on delays and platform changes.
We capture data going forward from the day your pipeline is commissioned. By continuously polling live boards and timetables, we build a historical time-series of network performance over time.
Yes. We can feed the journey planner a matrix of origin and destination CRS codes to extract pricing and timetables for multi-leg journeys, including intermediate calling points.
Our minimum engagements typically start with a defined list of routes or stations polled daily. Pricing scales based on the frequency of extraction and the total volume of data processed.
20-minute scoping call. Pilot dataset within the week. Production within two. Whether you need a daily timetable extract or continuous polling for live departures, we scope, build, and operate the pipeline. Tell us what you need.