We extract train schedules, dynamic pricing, route connections, and real-time delay metrics from obb.at. 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 Schedules & Routes objects from obb.at. All fields typed and schema-versioned.
"journey_id": "RJX-765-20261012", "departure_station": "Wien Hauptbahnhof", "arrival_station": "Salzburg Hauptbahnhof", "departure_time": "2026-10-12T08:30:00Z", "arrival_time": "2026-10-12T10:58:00Z", "duration_minutes": 148, "transfer_count": 0, "train_type": "Railjet Xpress", "train_number": "RJX 765"
| # | journey_id | departure_station | arrival_station | departure_time | arrival_time | duration_minutes |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Pricing & Fares objects from obb.at. All fields typed and schema-versioned.
"journey_id": "RJX-765-20261012", "standard_fare": 59.9, "sparschiene_fare": 19.9, "first_class_upgrade": 25.0, "business_class_upgrade": 40.0, "currency": "EUR", "ticket_flexibility": "Non-refundable", "scraped_at": "2026-05-12T09:14:00Z"
| # | journey_id | standard_fare | sparschiene_fare | first_class_upgrade | business_class_upgrade | currency |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Station Data objects from obb.at. All fields typed and schema-versioned.
"station_id": "AT-8103000", "station_name": "Wien Hauptbahnhof", "coordinates_lat": 48.1852, "coordinates_lon": 16.3775, "country_code": "AT", "platform_count": 12, "wheelchair_accessible": true, "facilities": "['WiFi', 'Lounges', 'Lockers']"
| # | station_id | station_name | coordinates_lat | coordinates_lon | country_code | facilities |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Live Status & Delays objects from obb.at. All fields typed and schema-versioned.
"train_number": "RJX 765", "current_station": "Linz Hauptbahnhof", "scheduled_arrival": "2026-10-12T09:45:00Z", "actual_arrival": "2026-10-12T09:52:00Z", "delay_minutes": 7, "platform_changed": false, "status_message": "Delayed due to signal failure", "disruption_reason": "Signal malfunction"
| # | train_number | current_station | scheduled_arrival | actual_arrival | delay_minutes | status_message |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Nightjet & Sleepers objects from obb.at. All fields typed and schema-versioned.
"journey_id": "NJ-490-20261012", "train_number": "NJ 490", "seating_carriage_price": 29.9, "couchette_6_price": 59.9, "sleeper_cabin_price": 139.9, "private_compartment_available": true, "breakfast_included": true, "shower_included": true
| # | journey_id | train_number | seating_carriage_price | couchette_4_price | couchette_6_price | sleeper_cabin_price |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Our ÖBB scraper handles the complex session states of their booking platform: multi-leg route resolution, dynamic Sparschiene pricing, and live delay tracking, all with JavaScript rendering and anti-bot circumvention built in.
Departure times, arrival times, transfer nodes, and journey durations scraped across all Railjet, Nightjet, and regional ÖBB services.
Capture standard fares, Sparschiene discounts, first-class upgrades, and business class supplements timestamped per crawl.
Extract complex routing graphs including transfer wait times, platform changes, and multi-operator journey segments.
Monitor real-time train status, actual vs scheduled arrival times, delay minutes, and official disruption reasons.
Track pricing and availability for sleeper cabins, couchettes, and seating carriages on overnight international routes.
Geographic coordinates, platform counts, accessibility features, and facility listings for thousands of European transit nodes.
Automated handling of ÖBB API session tokens required to unlock deep pricing data and Sparschiene availability.
Track international connections into Germany, Italy, Switzerland, and Eastern Europe operated under the ÖBB umbrella.
Configure continuous pipelines at hourly or real-time cadences for delay tracking and price-drop alerts.
Brief in. Clean data out.
Provide origin-destination pairs, station lists, or specific train numbers. We design the extraction schema together.
We configure Scrapy and Playwright crawlers, proxy rotation, and session management for the obb.at booking SPA.
Schema validation, null-rate checks, price-outlier detection, and route continuity testing before full launch.
JSON, CSV, or Parquet pushed to your S3 bucket, BigQuery dataset, or Snowflake stage on agreed cadence.
Transit operators protect their pricing APIs aggressively. Here is how we stay resilient and why teams choose managed infrastructure over DIY.
The ÖBB pricing API requires sequential token generation. Direct HTTP requests fail without a valid session state. Our crawlers replicate the exact sequence of the Angular SPA to acquire and refresh tokens, ensuring uninterrupted access to Sparschiene data.
The obb.at booking flow is a heavy single-page application. We run full Playwright browser sessions with JavaScript execution and lazy-load triggering to hydrate the DOM and capture dynamic fare widgets.
High-volume requests from datacenter IPs are quickly rate-limited. We route traffic through residential ISP proxies located in Austria, Germany, and Switzerland to maintain high trust scores and prevent IP bans.
Multi-leg journeys return deeply nested JSON structures with variable transfer nodes. We flatten and normalise these graphs into relational tables, making them immediately queryable in your data warehouse.
Transit APIs change frequently. Every run emits structured logs to our observability stack. We alert on schema drift, null-rate spikes in pricing fields, and coverage drops, responding before you notice.
Online travel agencies integrate ÖBB schedules and pricing into their multi-modal booking engines to offer seamless European transit options.
Rival coach and rail operators track Sparschiene discounts and standard fares to optimise their own dynamic pricing algorithms.
Mobility apps map ÖBB station nodes, local transit connections, and live delays to provide accurate door-to-door routing.
Sustainability platforms extract train type and distance metrics to calculate precise CO2 emissions for corporate travel reporting.
Enterprise travel managers ingest timetable and pricing data to enforce travel policies and audit historical route costs.
Logistics and insurance firms model historical delay data and disruption reasons to assess route reliability and risk.
"ÖBB operates one of Europe's densest transit networks. Extracting multi-leg pricing and real-time delay data requires navigating complex session states and strict rate limits."
Most teams underestimate the investment required. Reliable ÖBB scraping requires residential proxies, full JavaScript rendering for their booking SPA, session token management, and continuous schema maintenance. DataFlirt absorbs that complexity so your engineers can focus on the analysis, not the infrastructure.
Everything supported by our obb.at 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 route orchestration and retry logic. Playwright handles SPA rendering, session token acquisition, and interaction flows. Combined via custom middleware.
We maintain pools of residential ISP proxies across Austria, Germany, and Switzerland. Rotation happens per-request with sticky sessions for the booking flow.
Pipelines run on AWS Lambda and Kubernetes. Airflow handles scheduling, dependency management, and SLA alerting. All state stored in managed PostgreSQL.
Data delivered to where your team already works — no new tooling required.
About obb.at scraping, legality, and pipeline operations.
Ask us directly →Scraping publicly available information from obb.at is generally permissible. DataFlirt targets only public, non-authenticated schedule, pricing, and station data. We do not extract personal data or circumvent authentication walls. Clients should review ÖBB terms of service and consult legal counsel for specific use cases.
Our Playwright integration replicates the initial SPA load sequence to generate valid session tokens. These tokens are passed to our Scrapy HTTP clients and refreshed automatically when they expire, ensuring continuous access to the pricing API.
Yes. We extract standard fares alongside all available Sparschiene discount tiers, including first-class upgrades and business class supplements.
For live status tracking, pipelines can be configured to poll specific train numbers or station boards at high frequencies, achieving sub-5-minute latency for delay and platform change alerts.
We extract all train types. Nightjet records include specific fields for seating carriages, 4-berth couchettes, 6-berth couchettes, and private sleeper cabins.
Our observability stack detects schema drift and null-rate spikes immediately. Our engineering team updates selectors and API parsers, typically resolving breaking changes within hours to maintain SLA uptime.
Absolutely. We provide a sample run of up to 500 origin-destination pairs as part of the pre-engagement scoping process so you can validate schema fit and data quality.
20-minute scoping call. Pilot dataset within the week. Production within two. Whether you need a one-off station metadata dump or a continuous price-monitoring feed across 10,000 routes, we scope, build, and operate the pipeline. Tell us what you need.