We extract rail schedules, coach routes, dynamic pricing signals, station metadata, and journey durations from Trainline. 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 Train Schedules objects from trainline.com. All fields typed and schema-versioned.
"journey_id": "TL-8492-LDN-MAN", "origin_station": "London Euston", "destination_station": "Manchester Piccadilly", "departure_time": "2026-05-12T08:20:00Z", "arrival_time": "2026-05-12T10:28:00Z", "duration_minutes": 128, "operator": "Avanti West Coast"
| # | journey_id | origin_station | destination_station | departure_time | arrival_time | duration_minutes |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Pricing & Fares objects from trainline.com. All fields typed and schema-versioned.
"journey_id": "TL-8492-LDN-MAN", "ticket_class": "Standard", "fare_type": "Advance Single", "base_price": 124.5, "current_price": 42.0, "currency": "GBP", "splitsave_available": true, "splitsave_savings": 14.5
| # | journey_id | ticket_class | fare_type | base_price | current_price | currency |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Coach Routes objects from trainline.com. All fields typed and schema-versioned.
"route_id": "NX-492-LDN-BRS", "origin_stop": "London Victoria Coach Station", "destination_stop": "Bristol Bus Station", "departure_time": "2026-05-12T09:00:00Z", "arrival_time": "2026-05-12T11:45:00Z", "operator": "National Express", "price": 12.9, "currency": "GBP"
| # | route_id | origin_stop | destination_stop | departure_time | arrival_time | duration_minutes |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Station Intelligence objects from trainline.com. All fields typed and schema-versioned.
"station_code": "EUS", "station_name": "London Euston", "country": "UK", "latitude": 51.5281, "longitude": -0.1336, "operator": "Network Rail", "accessible": true, "ticket_machines": 24
| # | station_code | station_name | country | latitude | longitude | operator |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Live Status & Delays objects from trainline.com. All fields typed and schema-versioned.
"journey_id": "TL-8492-LDN-MAN", "scheduled_departure": "2026-05-12T08:20:00Z", "estimated_departure": "2026-05-12T08:35:00Z", "delay_minutes": 15, "status_message": "Delayed due to signalling fault", "cancellation_reason": "None", "platform_altered": true, "last_updated": "2026-05-12T08:10:00Z"
| # | journey_id | scheduled_departure | estimated_departure | delay_minutes | status_message | cancellation_reason |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Our Trainline scraper handles every layer of the platform: route schedules, dynamic pricing, live delay feeds, and SplitSave logic - with JavaScript rendering, session management, and anti-bot circumvention built in.
Origin, destination, intermediate stops, transfer times, and exact platform data for rail and coach journeys.
Capture standard fares, Advance singles, Off-Peak returns, and First Class upgrades across operators.
Extract Trainline's proprietary split-ticketing recommendations and exact saving margins per journey.
Identify specific operators (Avanti, LNER, National Express) and train types servicing each route.
Simulate searches with 16-25, Two Together, or Senior Railcards applied to extract discounted fare tables.
Monitor real-time punctuality, platform alterations, and cancellation reasons across the network.
Extract coordinates, accessibility features, facility counts, and operating hours for thousands of stations.
Handle complex multi-operator itineraries spanning Eurostar and domestic European rail networks.
Run one-off bulk exports or configure continuous pipelines at hourly, daily, or real-time cadences with change-detection diffing.
Brief in. Clean data out.
Provide origin-destination pairs, station codes, or date ranges. We design the extraction schema together.
We configure Scrapy / Playwright crawlers, proxy rotation, session management, and CAPTCHA handling for trainline.com.
Schema validation, null-rate checks, price-outlier detection, and route continuity testing before full launch.
JSON / CSV / Parquet pushed to your S3 bucket, BigQuery dataset, or Snowflake stage on agreed cadence.
Trainline invests heavily in scraping detection. Here's how we stay resilient - and why teams choose managed infrastructure over DIY.
Trainline implements strict rate limiting and IP reputation checks. Our crawlers use residential ISP proxies with realistic browser fingerprints, randomised request timing, and full cookie session management.
Trainline's routing engine relies on complex session tokens and multi-step API handshakes. We maintain stateful Playwright sessions to navigate the search funnel without triggering session invalidation.
Fares update in real-time via WebSocket and XHR requests. We intercept these background network calls directly, bypassing DOM parsing to extract raw JSON pricing payloads.
Trainline frequently updates its front-end architecture. Our selector strategy uses multiple fallback chains per field, relying heavily on internal API responses rather than brittle CSS selectors.
For large route catalogues, we maintain a hash index of last-seen values per journey. Subsequent runs only push diffs - reducing compute cost, storage bloat, and downstream processing load.
Transport operators and OTAs track Trainline fares to benchmark their own pricing algorithms and identify uncompetitive routes.
Multi-modal travel platforms ingest Trainline schedules to build comprehensive point-to-point routing engines.
Enterprise procurement teams analyse historical fare data to negotiate better corporate rates with specific rail operators.
Insurers and logistics firms use historical delay and cancellation data to model network reliability and calculate risk premiums.
Sustainability platforms map rail and coach alternatives against short-haul flights to calculate comparative emissions.
Hedge funds track booking volumes, route frequency changes, and pricing elasticity to model operator revenue.
"Trainline aggregates the fragmented European rail network into a single pricing engine - but extracting that data requires navigating complex session states and aggressive rate limits."
Most teams underestimate the investment required: reliable Trainline scraping requires residential proxies, stateful session management, WebSocket interception, and daily selector maintenance. DataFlirt absorbs that complexity so your engineers can focus on the analysis - not the infrastructure.
Everything supported by our trainline.com 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/EU 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 trainline.com scraping, legality, and pipeline operations.
Ask us directly →Scraping publicly available schedule and pricing information is generally permissible. DataFlirt targets only public, non-authenticated route and fare data. We do not extract personal data or bypass authentication walls.
We use residential ISP proxies, full Playwright browser sessions with realistic fingerprints, and request timing modelled on human behaviour. We monitor for 429/503 rate spikes in real time.
Yes. Our pipelines capture both standard direct fares and Trainline's proprietary SplitSave recommendations, including the exact split points and cost savings.
Real-time streaming pipelines achieve sub-15-minute latency for dynamic pricing signals on a defined route set. Full network refreshes complete within a 4-8 hour window depending on scale.
Yes. We extract data for UK domestic operators, Eurostar, SNCF, Deutsche Bahn, Trenitalia, and other European networks supported by Trainline.
Our smallest packages start at a defined set of origin-destination pairs (typically 500-2,000 routes) with daily delivery. For larger networks, we price based on volume and frequency.
Absolutely. We provide a sample run of up to 100 routes as part of the pre-engagement scoping process - so you can validate schema fit and data quality before signing a contract.
20-minute scoping call. Pilot dataset within the week. Production within two. Whether you need historical route schedules or continuous dynamic price tracking across European rail networks - we scope, build, and operate the pipeline. Tell us what you need.