We extract timetables, Supersaver ticket prices, live delay metrics, and occupancy forecasts from SBB. 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 Journey Routes objects from sbb.ch. All fields typed and schema-versioned.
"route_id": "ZRH-GVA-0815", "origin_station": "Zurich HB", "destination_station": "Geneve", "departure_time": "2026-10-14T08:15:00Z", "arrival_time": "2026-10-14T11:00:00Z", "duration_minutes": 165, "transfer_count": 0, "transport_type": "IC", "train_number": "IC1"
| # | route_id | origin_station | destination_station | departure_time | arrival_time | duration_minutes |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Ticket Pricing objects from sbb.ch. All fields typed and schema-versioned.
"route_id": "ZRH-GVA-0815", "standard_fare": 88.0, "supersaver_fare": 44.0, "half_fare_standard": 44.0, "half_fare_supersaver": 22.0, "currency": "CHF", "first_class_premium": 55.0, "scraped_at": "2026-10-10T09:14:00Z"
| # | route_id | standard_fare | supersaver_fare | half_fare_standard | half_fare_supersaver | first_class_premium |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Real-Time Status objects from sbb.ch. All fields typed and schema-versioned.
"train_number": "IC1", "station": "Bern", "scheduled_arrival": "2026-10-14T09:28:00Z", "actual_arrival": "2026-10-14T09:32:00Z", "delay_minutes": 4, "platform_scheduled": "4", "platform_actual": "5", "cancellation_flag": false
| # | train_number | station | scheduled_arrival | actual_arrival | delay_minutes | platform_scheduled |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Occupancy Forecasts objects from sbb.ch. All fields typed and schema-versioned.
"train_number": "IC1", "route_segment": "Zurich HB to Bern", "class_1_occupancy": "LOW", "class_2_occupancy": "HIGH", "date": "2026-10-14", "time": "08:15", "forecast_reliability": "HIGH", "bike_space_available": true
| # | train_number | route_segment | class_1_occupancy | class_2_occupancy | date | time |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Station Facilities objects from sbb.ch. All fields typed and schema-versioned.
"station_id": "8503000", "name": "Zurich HB", "lockers_available": true, "ticket_counters": 12, "wifi_available": true, "accessibility_rating": "FULL", "opening_hours": "00:00-24:00", "lounge_access": true
| # | station_id | name | lockers_available | ticket_counters | wifi_available | accessibility_rating |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Our SBB scraper navigates complex booking funnels, sequential API requests, and rate limits to extract timetables, dynamic pricing, and real-time status updates at scale.
Extract full daily schedules across the entire SBB network, including regional trains, InterCity routes, and postal buses.
Capture standard fares, Supersaver tickets, and Half-Fare travelcard pricing across all available departure times.
Track actual versus scheduled arrival times, delay minutes, and cancellation notices directly from SBB live systems.
Extract first and second class passenger load forecasts to model demand and peak travel times.
Parse complex routes with transfer times, platform changes, and mixed transport modes automatically.
Record scheduled platforms, actual platform changes, and train formation details for specific journeys.
Catalogue lockers, accessibility ratings, ticket counter hours, and lounge availability for all SBB stations.
Extract data for international connections managed via SBB, including TGV, ICE, and Railjet partnerships.
Run one-off bulk exports or configure continuous pipelines at hourly or daily cadences.
Brief in. Clean data out.
Provide origin-destination pairs, specific train numbers, or date ranges. We design the extraction schema together.
We configure Scrapy crawlers, session management, and API payload interception for sbb.ch.
Schema validation, null-rate checks, and price-outlier detection before full launch.
JSON, CSV, or Parquet pushed to your S3 bucket, BigQuery dataset, or Snowflake stage on agreed cadence.
Transit sites employ strict rate limits and complex session states. Here is how we maintain reliable extraction.
SBB routes and prices are loaded dynamically via complex API calls. We intercept these XHR payloads directly, bypassing heavy DOM rendering to extract clean JSON data at higher velocity.
High-frequency route searches trigger IP bans. We distribute requests across Swiss and European residential proxy pools to maintain steady throughput without triggering security rules.
Extracting Supersaver pricing requires progressing through a specific search funnel. Our crawlers manage the sequential tokens and cookies required to reach the final pricing payload.
Transit data is highly time-sensitive. We normalise all local Swiss departure and arrival times to strict UTC formats before warehouse ingestion to prevent downstream analytic errors.
SBB updates its API structures periodically. Our monitoring stack detects unexpected null rates or missing fields, pausing the pipeline and alerting our engineers before bad data reaches your database.
Online travel agencies integrate SBB timetables and standard pricing to offer comprehensive European rail booking options.
Analysts track Supersaver ticket availability and price fluctuations over time to model SBB revenue management strategies.
Third-party transit apps use real-time delay and platform change data to provide accurate routing for commuters.
Logistics companies monitor passenger network congestion and delays to optimise shared rail infrastructure usage.
Researchers aggregate historical delay records to identify structural bottlenecks in the Swiss rail network.
Alternative transport providers monitor SBB pricing on key routes to adjust their own fare structures.
"SBB operates one of the most complex dynamic pricing models in European transit, but extracting that pricing data requires navigating strict rate limits and sequential booking funnels."
Building a reliable SBB scraper means managing session tokens across multi-leg journey searches and rotating proxies to avoid IP bans. DataFlirt handles the extraction infrastructure, delivering clean transit data directly to your warehouse so your team can focus on analysis.
Everything supported by our sbb.ch 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 manages request concurrency and deduplication, targeting SBB hidden API endpoints to extract JSON payloads faster than full DOM rendering allows.
We route requests through European residential IPs, preventing the rate-limiting and blocking typical of high-volume transit search queries.
Pipelines are scheduled via Apache Airflow, ensuring daily timetable updates and high-frequency real-time status checks execute exactly on time.
Data delivered to where your team already works — no new tooling required.
About sbb.ch scraping, legality, and pipeline operations.
Ask us directly →Yes. We navigate the SBB search funnel to extract both standard fares and dynamic Supersaver pricing for specific origin-destination pairs and departure times.
For a targeted list of routes or stations, we can configure pipelines to poll real-time status and platform changes at sub-5-minute intervals.
Yes. If the route is searchable and ticketed via the SBB platform, we can extract the timetable, transfer logic, and pricing data.
We utilise residential proxy pools and control request concurrency to ensure our extraction volume mimics organic traffic patterns, preventing IP blocks.
We focus on web-based extraction from sbb.ch and its underlying public APIs, which provide parity with the data displayed in the mobile application.
Our minimum engagement typically starts with a defined list of 500 origin-destination pairs tracked daily. Contact us with your specific volume requirements for a precise quote.
20-minute scoping call. Pilot dataset within the week. Production within two. Whether you need daily timetable updates or real-time delay monitoring across the Swiss rail network, we scope, build, and operate the pipeline. Tell us what you need.