SYSTEM all green source dsb.dk queue 14,892 routes p99 latency 112ms dataflirt.com · scraper/dsb-dk
RUN · 41 active pipelines · dsb.dk live

Danish rail data,
at warehouse scale.

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.

Schedules extracted
1.4M /day
Price updates
482K /24h
Station records
845 /run
Active pipelines
41
Uptime
99.98%
Data Dictionary

Every field we extract from dsb.dk

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_idorigin_stationdestination_stationdeparture_timearrival_timeduration_minutestransfer_counttransfer_stationstrain_typetrain_numberdirectiontrack_number
schedules_& routes
● 200 OK
"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_idorigin_stationdestination_stationdeparture_timearrival_timeduration_minutes
1
2
3

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

journey_idfare_classticket_typeprice_dkkis_sold_outrefundableseat_reservation_includedscraped_at
ticket_pricing
● 200 OK
"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_idfare_classticket_typeprice_dkkis_sold_outrefundable
1
2
3

Complete list of extractable fields for Station Information objects from dsb.dk. All fields typed and schema-versioned.

station_idstation_namelatitudelongitudeticket_machines7_eleven_presentwaiting_roomtoiletsaccessibility_liftbicycle_parking
station_information
● 200 OK
"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_idstation_namelatitudelongitudeticket_machines7_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_idaffected_routesaffected_stationsseveritydescription_dadescription_enexpected_resolutionalternative_transportpublished_at
real-time_disruptions
● 200 OK
"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_idaffected_routesaffected_stationsseveritydescription_dadescription_en
1
2
3

Complete list of extractable fields for Train Composition objects from dsb.dk. All fields typed and schema-versioned.

train_numbertrain_typecarriage_counthas_quiet_zonehas_family_zonehas_bicycle_spaceshas_wheelchair_spaceswifi_availablepower_outlets
train_composition
● 200 OK
"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_numbertrain_typecarriage_counthas_quiet_zonehas_family_zonehas_bicycle_spaces
1
2
3

Capabilities

Extracting the Danish rail network

Our DSB scraper navigates complex journey planner forms, handles session tokens, and parses dynamic pricing tiers to deliver accurate rail data without infrastructure overhead.

Comprehensive Schedule Data

Extract origin, destination, departure times, transfer nodes, and train numbers across InterCity, Lyntog, and regional services.

DSB Orange Price Tracking

Monitor dynamic pricing for Standard, DSB 1', Orange, and Orange Fri tickets to capture fare fluctuations over time.

Station Facility Mapping

Catalogue accessibility features, retail presence, parking, and operational hours for every station in the DSB network.

Disruption & Delay Monitoring

Capture real-time track changes, cancellations, and alternative transport arrangements directly from traffic information feeds.

Seat & Class Availability

Determine sold-out status and reservation requirements for specific carriages, including quiet zones and bicycle spaces.

Cross-Border Routes

Extract schedules and pricing for international connections to Sweden (Øresundståg) and Germany.

Automated Form Navigation

Programmatic execution of the DSB journey planner search, handling complex date-time inputs and pagination.

High-Frequency Polling

Configure pipelines to poll specific routes at high frequency for real-time pricing and availability alerts.

Structured Delivery

Receive nested JSON arrays mapping complex route topologies and fare structures, ready for warehouse ingestion.

// engagement pipeline

From route list to warehouse record

Brief in. Clean data out.

Define Scope
d 0

Provide origin-destination pairs, station lists, or date ranges. We design the extraction schema together.

Pipeline Build
d 2–4

We configure Scrapy / Playwright crawlers, manage session cookies, and handle dsb.dk search forms.

Validation & QA
d 4–6

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

Delivery
ongoing

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

Under the hood

How our DSB pipeline handles the hard parts

Extracting transit data requires navigating stateful search forms and dynamic pricing logic. Here is how we maintain data integrity.

pipeline-monitor · dsb.dk · 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
Stateful sessions
Managing journey planner tokens

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.

Dynamic pricing
Capturing Orange fare tiers

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.

Language parsing
Normalised Danish date and time formats

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.

Anti-bot layer
Residential proxy rotation

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.

Change detection
Only re-scrape what's changed

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.

Applications

Who uses DSB data — and how

Teams across industries use dsb.dk data to build competitive products and smarter operations.

01
Travel Aggregators & OTAs

Integrate comprehensive Danish rail schedules and pricing into multi-modal journey planning applications.

02
Corporate Travel Platforms

Provide corporate clients with accurate DSB 1' and Standard pricing to optimise travel budgets and policy compliance.

03
Mobility Analytics

Analyse schedule density, transfer times, and disruption frequencies to model transit accessibility and network efficiency.

04
Dynamic Pricing Models

Track DSB Orange fare fluctuations to train predictive pricing algorithms for competing transit operators.

05
Carbon Footprint Calculators

Map exact train types and route distances to calculate precise CO2 emissions for ESG reporting.

06
Real Estate & Urban Planning

Correlate property values with station facility data and commute times to major Danish urban centres.

Why DataFlirt

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

Technical Spec

DSB scraper — technical capabilities

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

JavaScript rendering
Full Playwright sessions for journey planner execution and pricing matrices
Supported
Danish IP proxies
Requests routed through DK residential pools to prevent geographic blocking
Supported
ISO 8601 normalisation
All Danish date/time strings converted to standard UTC timestamps
Supported
Multi-class pricing
Extraction of Standard, DSB 1', Orange, and Orange Fri fares simultaneously
Supported
Disruption monitoring
Real-time extraction of track changes and cancellation notices
Supported
Cross-border schedules
Support for routes extending into Sweden and Germany via DSB network
Supported
Change detection (diffs)
Hash-based diff: only emit records with changed fields since last run
Supported
User ticket purchase history
Requires authenticated DSB account access
Partial
DSB Plus loyalty dashboard
Gated point balances and exclusive offers behind login wall
Partial
Infrastructure

Infrastructure powering the DSB pipeline

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

ScrapyPlaywrightPython 3.12RedisPostgreSQLApache AirflowAWS LambdaS3CloudWatch2CaptchaCapSolverResidential ProxiesDockerKubernetesGrafanaPrometheus
Scrapy + Playwright Stack

Scrapy handles crawl orchestration, deduplication, and retry logic. Playwright handles JavaScript rendering, cookie sessions, and interaction flows. Combined via scrapy-playwright middleware.

Residential Proxy Infrastructure

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.

Cloud-Native Orchestration

Pipelines run on AWS Lambda (burst) and ECS (sustained). Airflow handles scheduling, dependency management, and SLA alerting. All state stored in managed Postgres.

Output & Delivery

Your data, your destination

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

JSON
Newline-delimited or nested — schema versioned per run
CSV
Flat file with typed columns
XLS
Excel compatible format for analyst teams
Parquet
Columnar format for BigQuery, Snowflake, Athena
AWS S3
Direct bucket delivery — compatible with any data lake
Webhook
HTTP POST per record for real-time downstream processing
API
RESTful endpoints to query extracted schedule data
PostgreSQL
Direct database upsert with conflict resolution
S3
Direct bucket delivery — compatible with any data lake
// faq

Common questions.

About dsb.dk scraping, legality, and pipeline operations.

Ask us directly →
Is scraping dsb.dk legal?

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.

How do you handle the DSB journey planner search form?

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.

Can you track DSB Orange ticket prices over time?

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.

How fresh is the disruption data?

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.

Do you normalise Danish station names and times?

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.

What is the minimum viable engagement?

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.

$ dataflirt scope --new-project --source=dsb.dk 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 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.

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 →