SYSTEM all green source sbb.ch queue 14,892 routes p99 latency 312ms dataflirt.com · scraper/sbb-ch
RUN : 42 active pipelines : sbb.ch live

Swiss rail data,
at warehouse scale.

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.

Routes extracted
1.2M /day
Price updates
4.8M /24h
Delay records
124K /run
Active pipelines
42
Uptime
99.98%
Data Dictionary

Every field we extract from sbb.ch

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_idorigin_stationdestination_stationdeparture_timearrival_timeduration_minutestransfer_counttransport_typetrain_numberoperator
journey_routes
● 200 OK
"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_idorigin_stationdestination_stationdeparture_timearrival_timeduration_minutes
1
2
3

Complete list of extractable fields for Ticket Pricing objects from sbb.ch. All fields typed and schema-versioned.

route_idstandard_faresupersaver_farehalf_fare_standardhalf_fare_supersaverfirst_class_premiumcurrencyscraped_atavailability_status
ticket_pricing
● 200 OK
"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_idstandard_faresupersaver_farehalf_fare_standardhalf_fare_supersaverfirst_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_numberstationscheduled_arrivalactual_arrivaldelay_minutesplatform_scheduledplatform_actualstatus_messagecancellation_flag
real-time_status
● 200 OK
"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_numberstationscheduled_arrivalactual_arrivaldelay_minutesplatform_scheduled
1
2
3

Complete list of extractable fields for Occupancy Forecasts objects from sbb.ch. All fields typed and schema-versioned.

train_numberroute_segmentclass_1_occupancyclass_2_occupancydatetimeupdated_atforecast_reliabilitybike_space_available
occupancy_forecasts
● 200 OK
"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_numberroute_segmentclass_1_occupancyclass_2_occupancydatetime
1
2
3

Complete list of extractable fields for Station Facilities objects from sbb.ch. All fields typed and schema-versioned.

station_idnamelockers_availableticket_counterswifi_availableaccessibility_ratingopening_hourscoordinateslounge_access
station_facilities
● 200 OK
"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_idnamelockers_availableticket_counterswifi_availableaccessibility_rating
1
2
3

Capabilities

Complete SBB network data extraction

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.

Timetable Extraction

Extract full daily schedules across the entire SBB network, including regional trains, InterCity routes, and postal buses.

Dynamic Price Tracking

Capture standard fares, Supersaver tickets, and Half-Fare travelcard pricing across all available departure times.

Real-Time Delay Monitoring

Track actual versus scheduled arrival times, delay minutes, and cancellation notices directly from SBB live systems.

Occupancy Forecasts

Extract first and second class passenger load forecasts to model demand and peak travel times.

Multi-Leg Journey Logic

Parse complex routes with transfer times, platform changes, and mixed transport modes automatically.

Platform & Track Updates

Record scheduled platforms, actual platform changes, and train formation details for specific journeys.

Station Infrastructure

Catalogue lockers, accessibility ratings, ticket counter hours, and lounge availability for all SBB stations.

Cross-Border Routes

Extract data for international connections managed via SBB, including TGV, ICE, and Railjet partnerships.

Scheduled & Streaming Modes

Run one-off bulk exports or configure continuous pipelines at hourly or daily cadences.

// engagement pipeline

From station list to warehouse record

Brief in. Clean data out.

Define Scope
d 0

Provide origin-destination pairs, specific train numbers, or date ranges. We design the extraction schema together.

Pipeline Build
d 2–4

We configure Scrapy crawlers, session management, and API payload interception for sbb.ch.

Validation & QA
d 4–6

Schema validation, null-rate checks, and price-outlier detection before full launch.

Delivery
ongoing

JSON, CSV, or Parquet pushed to your S3 bucket, BigQuery dataset, or Snowflake stage on agreed cadence.

Under the hood

How our SBB pipeline handles the hard parts

Transit sites employ strict rate limits and complex session states. Here is how we maintain reliable extraction.

pipeline-monitor · sbb.ch · live ● active
// fingerprinting
Identity rotation
TLS fingerprintrandomised
User-agentrotated
IP poolresidential
Challenges blocked0
// pagination
Page coverage
48,291 pages queued running
// observability
Pipeline health
99.9%
uptime
142ms
p99 lat
0.3%
null rate
2
alerts
API Interception
Direct XHR payload 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.

Rate limits
Residential proxy rotation

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.

Session state
Sequential token passing

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.

Timezones
Strict UTC normalisation

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.

Monitoring
Schema drift detection

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.

Applications

Who uses SBB data and how

Teams across industries use sbb.ch data to build competitive products and smarter operations.

01
OTA Aggregation

Online travel agencies integrate SBB timetables and standard pricing to offer comprehensive European rail booking options.

02
Dynamic Price Analysis

Analysts track Supersaver ticket availability and price fluctuations over time to model SBB revenue management strategies.

03
Mobility App Development

Third-party transit apps use real-time delay and platform change data to provide accurate routing for commuters.

04
Logistics & Freight Planning

Logistics companies monitor passenger network congestion and delays to optimise shared rail infrastructure usage.

05
Delay Pattern Analysis

Researchers aggregate historical delay records to identify structural bottlenecks in the Swiss rail network.

06
Competitor Benchmarking

Alternative transport providers monitor SBB pricing on key routes to adjust their own fare structures.

Why DataFlirt

"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.

Technical Spec

SBB scraper technical capabilities

Everything supported by our sbb.ch scraper — rendered SPA elements, auth walls, rate-limit evasion and beyond.

XHR payload extraction
Direct interception of SBB backend API responses for high-speed parsing
Supported
Supersaver fare tracking
Capture of dynamic discount pricing across multiple departure windows
Supported
Real-time delay monitoring
Continuous polling of live train status and platform changes
Supported
Occupancy forecast extraction
First and second class load predictions per journey segment
Supported
Multi-currency conversion
Extraction of base CHF fares and available EUR conversions
Supported
Cross-border route parsing
Support for international journeys originating or terminating in Switzerland
Supported
SwissPass account history
Extraction of personal journey history and digital travelcards
Partial
Personalised ticket purchasing
Automated execution of ticket transactions via user accounts
Partial
Infrastructure

Infrastructure powering the SBB pipeline

Open-source tooling on proven cloud infra — no vendor lock-in, full observability.

ScrapyPlaywrightPython 3.12RedisPostgreSQLApache AirflowAWS LambdaS3CloudWatch2CaptchaCapSolverResidential ProxiesDockerKubernetesGrafanaPrometheus
Scrapy & API Interception

Scrapy manages request concurrency and deduplication, targeting SBB hidden API endpoints to extract JSON payloads faster than full DOM rendering allows.

Residential Proxy Pools

We route requests through European residential IPs, preventing the rate-limiting and blocking typical of high-volume transit search queries.

Airflow Orchestration

Pipelines are scheduled via Apache Airflow, ensuring daily timetable updates and high-frequency real-time status checks execute exactly on time.

Output & Delivery

Your data, your destination

Data delivered to where your team already works — no new tooling required.

JSON
Newline-delimited or nested schema
CSV
Flat file with typed columns
XLS
Excel compatible format for business teams
Parquet
Columnar format for BigQuery and Snowflake
AWS S3
Direct bucket delivery
Webhook
HTTP POST per record for real-time delay alerts
API
Queryable REST endpoints for extracted data
BigQuery
Streamed directly into your dataset
S3
Direct bucket delivery — compatible with any data lake
// faq

Common questions.

About sbb.ch scraping, legality, and pipeline operations.

Ask us directly →
Can you extract Supersaver ticket prices?

Yes. We navigate the SBB search funnel to extract both standard fares and dynamic Supersaver pricing for specific origin-destination pairs and departure times.

How frequently can you update real-time delay data?

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.

Do you support cross-border train journeys?

Yes. If the route is searchable and ticketed via the SBB platform, we can extract the timetable, transfer logic, and pricing data.

How do you handle SBB rate limits?

We utilise residential proxy pools and control request concurrency to ensure our extraction volume mimics organic traffic patterns, preventing IP blocks.

Can you extract data from the SBB mobile app?

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.

What is the minimum viable engagement for SBB data?

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.

$ dataflirt scope --new-project --source=sbb.ch ready

Tell us what
to extract.
We do the rest.

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.

hello@dataflirt.com · Bengaluru · IST · typical reply < 4h
Related Scrapers

More in travel flights hotels buses

Services

Data Extraction for Every Industry

View All Services →