We extract train schedules, dynamic ticket pricing, station facilities, and network disruptions from dsb.dk. 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 dsb.dk. All fields typed and schema-versioned.
"journey_id": "JRN-8492-KBH-AAR", "origin_station": "København H", "destination_station": "Aarhus H", "departure_time": "2026-08-14T08:00:00Z", "arrival_time": "2026-08-14T10:45:00Z", "duration_minutes": 165, "transfer_count": 0, "train_type": "ICL", "train_number": "Lyn 43"
| # | journey_id | origin_station | destination_station | departure_time | arrival_time | duration_minutes |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Ticket Pricing objects from dsb.dk. All fields typed and schema-versioned.
"journey_id": "JRN-8492-KBH-AAR", "fare_class": "Standard", "ticket_type": "DSB Orange", "price_dkk": 129.0, "is_sold_out": false, "refundable": false, "seat_reservation_included": false, "scraped_at": "2026-08-01T14:22:10Z"
| # | journey_id | fare_class | ticket_type | price_dkk | is_sold_out | refundable |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Station Information objects from dsb.dk. All fields typed and schema-versioned.
"station_id": "ST-1001", "station_name": "København H", "latitude": 55.6728, "longitude": 12.5647, "7_eleven_present": true, "waiting_room": true, "accessibility_lift": true, "bicycle_parking": true
| # | station_id | station_name | latitude | longitude | ticket_machines | 7_eleven_present |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Real-Time Disruptions objects from dsb.dk. All fields typed and schema-versioned.
"incident_id": "INC-9921", "affected_routes": "['Kystbanen']", "severity": "High", "description_da": "Aflysninger på Kystbanen grundet signalfejl.", "description_en": "Cancellations on Kystbanen due to signal errors.", "expected_resolution": "2026-08-01T18:00:00Z", "alternative_transport": "Togbusser indsat", "published_at": "2026-08-01T15:10:00Z"
| # | incident_id | affected_routes | affected_stations | severity | description_da | description_en |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Train Composition objects from dsb.dk. All fields typed and schema-versioned.
"train_number": "Lyn 43", "train_type": "IC3", "carriage_count": 3, "has_quiet_zone": true, "has_family_zone": true, "has_bicycle_spaces": true, "wifi_available": true, "power_outlets": true
| # | train_number | train_type | carriage_count | has_quiet_zone | has_family_zone | has_bicycle_spaces |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Our DSB scraper navigates complex journey planner forms, handles session tokens, and parses dynamic pricing tiers to deliver accurate rail data without infrastructure overhead.
Extract origin, destination, departure times, transfer nodes, and train numbers across InterCity, Lyntog, and regional services.
Monitor dynamic pricing for Standard, DSB 1', Orange, and Orange Fri tickets to capture fare fluctuations over time.
Catalogue accessibility features, retail presence, parking, and operational hours for every station in the DSB network.
Capture real-time track changes, cancellations, and alternative transport arrangements directly from traffic information feeds.
Determine sold-out status and reservation requirements for specific carriages, including quiet zones and bicycle spaces.
Extract schedules and pricing for international connections to Sweden (Øresundståg) and Germany.
Programmatic execution of the DSB journey planner search, handling complex date-time inputs and pagination.
Configure pipelines to poll specific routes at high frequency for real-time pricing and availability alerts.
Receive nested JSON arrays mapping complex route topologies and fare structures, ready for warehouse ingestion.
Brief in. Clean data out.
Provide origin-destination pairs, station lists, or date ranges. We design the extraction schema together.
We configure Scrapy / Playwright crawlers, manage session cookies, and handle dsb.dk search forms.
Schema validation, null-rate checks, and price-outlier detection before full launch.
JSON / CSV / Parquet pushed to your S3 bucket, BigQuery dataset, or Snowflake stage on agreed cadence.
Extracting transit data requires navigating stateful search forms and dynamic pricing logic. Here is how we maintain data integrity.
The DSB search interface relies on stateful session tokens and complex POST requests. Our pipeline maintains valid cookie jars and CSRF tokens across paginated results to ensure uninterrupted extraction.
DSB Orange tickets are yield-managed and fluctuate based on demand. We render the full pricing matrix using Playwright to capture exact price points across all available ticket classes for a given departure.
Transit schedules present complex localized date formats. Our extraction layer parses Danish weekday abbreviations and holiday schedules into strict ISO 8601 UTC timestamps for immediate database ingestion.
High-frequency polling of the journey planner triggers rate limits. We distribute requests across Danish residential IP pools to mimic organic user search patterns and maintain pipeline uptime.
We maintain a hash index of last-seen schedules. Subsequent runs only push diffs — reducing compute cost and downstream processing load when mapping the static timetable.
Integrate comprehensive Danish rail schedules and pricing into multi-modal journey planning applications.
Provide corporate clients with accurate DSB 1' and Standard pricing to optimise travel budgets and policy compliance.
Analyse schedule density, transfer times, and disruption frequencies to model transit accessibility and network efficiency.
Track DSB Orange fare fluctuations to train predictive pricing algorithms for competing transit operators.
Map exact train types and route distances to calculate precise CO2 emissions for ESG reporting.
Correlate property values with station facility data and commute times to major Danish urban centres.
"Transit data is the backbone of modern mobility applications, but extracting accurate, yield-managed fares from stateful interfaces requires dedicated infrastructure."
Teams often struggle with session timeouts and complex form navigation when scraping transit providers. DataFlirt handles the state management, proxy rotation, and schema normalisation so your engineers can focus on routing algorithms and user experience.
Everything supported by our dsb.dk 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 DK 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 dsb.dk scraping, legality, and pipeline operations.
Ask us directly →Scraping publicly available schedule, pricing, and station information is generally permissible. DataFlirt extracts only public, non-authenticated data. We do not extract personal user data or circumvent authentication walls. Clients should review DSB's terms of service and consult legal counsel for specific commercial use cases.
We use Playwright to programmatically interact with the search interface, managing the necessary session cookies, CSRF tokens, and complex date-time inputs to retrieve accurate result sets.
Yes. We configure pipelines to poll specific origin-destination pairs at defined intervals, capturing the current price of Orange and Orange Fri tickets to build a historical pricing dataset.
For pipelines monitoring real-time network status, we can achieve sub-5-minute latency to capture delays, track changes, and cancellations as they are published.
Yes. All station names are captured exactly as presented, while all dates and times are parsed from Danish formats into strict ISO 8601 UTC timestamps for immediate database compatibility.
Our smallest packages start at a defined set of routes with daily delivery. For comprehensive network extraction or real-time polling requirements, we price based on volume and frequency. Contact us with your use case.
20-minute scoping call. Pilot dataset within the week. Production within two. Whether you need a static extract of station facilities or a high-frequency feed of Orange ticket prices — we scope, build, and operate the pipeline. Tell us what you need.