SYSTEM all green source nmbs.be queue 12,409 routes p99 latency 215ms dataflirt.com · scraper/nmbs-be
RUN - 42 active pipelines - nmbs.be live

Belgian rail data,
at warehouse scale.

We extract live train timetables, ticket pricing, platform changes, and route disruptions from NMBS. Delivered as clean JSON, CSV, or Parquet to S3, BigQuery, or Snowflake on your cadence.

Routes tracked
14,291 /day
Live delay updates
84,302 /24h
Fares extracted
112K /run
Active pipelines
42
Uptime
99.98%
Data Dictionary

Every field we extract from nmbs.be

Structured, schema-consistent data across all major object types — delivered clean, typed, and ready to query.

Complete list of extractable fields for Timetables & Routes objects from nmbs.be. All fields typed and schema-versioned.

train_iddeparture_stationarrival_stationdeparture_timearrival_timeduration_minutestransferstrain_typedeparture_platformdate
timetables_& routes
● 200 OK
"train_id": "IC 1532",
"departure_station": "Bruxelles-Midi",
"arrival_station": "Antwerpen-Centraal",
"departure_time": "2026-10-12T08:24:00Z",
"arrival_time": "2026-10-12T09:15:00Z",
"duration_minutes": 51,
"train_type": "Intercity",
"departure_platform": "14"
# train_iddeparture_stationarrival_stationdeparture_timearrival_timeduration_minutes
1
2
3

Complete list of extractable fields for Live Disruptions objects from nmbs.be. All fields typed and schema-versioned.

train_idstatusdelay_minutesdisruption_reasonupdated_ataffected_stationsalternative_routesexpected_resolution
live_disruptions
● 200 OK
"train_id": "IC 1532",
"status": "Delayed",
"delay_minutes": 12,
"disruption_reason": "Infrastructure issue",
"updated_at": "2026-10-12T08:10:00Z",
"affected_stations": "['Bruxelles-Midi', 'Bruxelles-Central', 'Bruxelles-Nord']",
"expected_resolution": "2026-10-12T11:00:00Z"
# train_idstatusdelay_minutesdisruption_reasonupdated_ataffected_stations
1
2
3

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

route_idtravel_classfare_typepricecurrencypassenger_typerefundableflexiblevalid_until
ticket_pricing
● 200 OK
"route_id": "BRU-ANT-20261012",
"travel_class": "2nd Class",
"fare_type": "Standard Ticket",
"price": 8.4,
"currency": "EUR",
"passenger_type": "Adult",
"refundable": false,
"flexible": true
# route_idtravel_classfare_typepricecurrencypassenger_type
1
2
3

Complete list of extractable fields for Station Data objects from nmbs.be. All fields typed and schema-versioned.

station_codestation_name_nlstation_name_frcoordinatesticket_machinesparking_capacityaccessibilitybike_storageopening_hours
station_data
● 200 OK
"station_code": "FBMZ",
"station_name_nl": "Brussel-Zuid",
"station_name_fr": "Bruxelles-Midi",
"ticket_machines": 24,
"parking_capacity": 1500,
"accessibility": true,
"bike_storage": true,
"coordinates": "50.8357, 4.3365"
# station_codestation_name_nlstation_name_frcoordinatesticket_machinesparking_capacity
1
2
3

Complete list of extractable fields for Transfer Details objects from nmbs.be. All fields typed and schema-versioned.

journey_idleg_sequencefrom_stationto_stationtrain_idwait_time_minutesconnection_guaranteedplatform_change
transfer_details
● 200 OK
"journey_id": "J-98234-A",
"leg_sequence": 2,
"from_station": "Mechelen",
"to_station": "Leuven",
"train_id": "L 2864",
"wait_time_minutes": 14,
"connection_guaranteed": true,
"platform_change": "Platform 4 to Platform 9"
# journey_idleg_sequencefrom_stationto_stationtrain_idwait_time_minutes
1
2
3

Capabilities

Everything you need from NMBS - nothing you don't

Our NMBS scraper handles the routing engine, session tokens, and multi-language interfaces to extract timetables, dynamic fares, and live platform updates.

Route Search Automation

Map A-to-B journeys across the entire Belgian rail network, capturing direct routes and multi-leg transfers.

Live Delay Tracking

Poll disruption endpoints to capture real-time delays, platform changes, and cancellation notices.

Multi-Tier Pricing

Extract fares for Standard, Youth, Senior, and Weekend tickets across 1st and 2nd class options.

Platform & Transfer Logic

Record exact departure and arrival platforms, alongside wait times and connection guarantees for multi-leg trips.

Station Amenity Extraction

Compile data on station facilities, including accessibility, parking capacity, ticket machines, and bike storage.

Multi-Language Normalisation

Map station names across French, Dutch, and English variants to maintain a consistent downstream schema.

Intercity vs Regional Filtering

Distinguish between IC, S, L, and P trains to analyse travel times and route efficiency.

Scheduled + Streaming Modes

Run daily timetable refreshes or configure high-frequency polling for live disruption monitoring.

Geolocation Mapping

Extract latitude and longitude coordinates for all stations to feed spatial analytics models.

// engagement pipeline

From route list to warehouse record

Brief in. Clean data out.

Define Scope
d 0

Provide origin-destination pairs, station lists, or specific train IDs. We design the extraction schema together.

Pipeline Build
d 2–4

We configure Scrapy / Playwright crawlers, proxy rotation, session management, and routing logic for nmbs.be.

Validation & QA
d 4–6

Schema validation, null-rate checks, and multi-language alignment verification 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 NMBS pipeline handles the hard parts

Railway booking engines use session-based routing and rate-limiting. Here is how we extract reliable timetable data without triggering blocks.

pipeline-monitor · nmbs.be · 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
Session Token Management
Handling NMBS search context

The NMBS journey planner relies on stateful session tokens to progress from search to pricing. Our crawlers maintain strict session continuity, ensuring multi-step API requests return accurate fare data without expiring.

Rate Limit Circumvention
Proxy rotation across BE IPs

High-frequency polling for live delays triggers firewall rules. We distribute requests across a pool of Belgian residential and mobile IP addresses to keep request volumes per IP well below threshold limits.

Real-Time Polling
Low-latency disruption tracking

Delays and platform changes happen instantly. We configure targeted sub-minute polling for specific train IDs or station boards, delivering webhook payloads the moment a status changes.

Multi-Language Alignment
FR/NL station mapping

Belgium's bilingual infrastructure means station names change depending on the language toggle (e.g., Anvers vs Antwerpen). Our pipeline normalises all station entities to a single canonical ID.

Schema Stability
Resilient selectors for booking flows

Ticketing interfaces undergo frequent A/B testing. We use multi-layer fallback chains targeting hidden JSON payloads and DOM attributes to ensure fare extraction survives front-end redesigns.

Applications

Who uses NMBS data - and how

Teams across industries use nmbs.be data to build competitive products and smarter operations.

01
Travel Aggregation

Multimodal travel platforms sync NMBS timetables and pricing to offer cross-border rail connections.

02
Corporate Mobility

HR and expense management platforms monitor standard fares to validate employee travel claims and budget commuter allowances.

03
Disruption Analytics

Data teams model historical delay patterns to predict future network reliability and optimize logistics.

04
Dynamic Pricing Intelligence

Bus operators and regional airlines track NMBS weekend and youth fares to adjust their own competitive pricing models.

05
Commuter App Development

Third-party developers build alternative routing and delay-notification apps using our low-latency webhook feeds.

06
Infrastructure Planning

Urban planners analyse train frequency and station amenity data to inform regional transit investments.

Why DataFlirt

"Belgium's rail network generates thousands of real-time status changes and dynamic pricing combinations daily - none of which are accessible without a dedicated extraction pipeline."

Most teams underestimate the investment required: reliable NMBS extraction demands session token management, residential proxy rotation, and continuous monitoring of the booking engine's DOM. DataFlirt absorbs that complexity so your engineers can focus on the analysis - not the infrastructure.

Technical Spec

NMBS scraper - technical capabilities

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

Live delay polling
High-frequency extraction for real-time disruption monitoring
Supported
Session token management
Maintains state across multi-step ticketing flows
Supported
Multi-language extraction
Supports FR, NL, EN, and DE interfaces
Supported
Residential proxy rotation
ISP-grade residential IPs from BE pools
Supported
Station coordinate mapping
Lat/long extraction for spatial analytics
Supported
Change detection (diffs)
Only emit records with changed timetable fields since last run
Supported
Webhook delivery
HTTP POST per record for real-time delay alerts
Supported
MyNMBS account history
Gated data (past purchases, saved routes) requires account credentials
Partial
Personalised MoBIB card data
Gated data (subscription status, personal details) requires login
Partial
Infrastructure

Infrastructure powering the NMBS pipeline

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

ScrapyPlaywrightPython 3.12RedisPostgreSQLApache AirflowAWS LambdaS3CloudWatch2CaptchaCapSolverResidential ProxiesDockerKubernetesGrafanaPrometheusKafka
Scrapy + Playwright Stack

Scrapy handles crawl orchestration and retry logic. Playwright handles JavaScript rendering and session token progression for fare extraction.

Residential Proxy Infrastructure

We maintain pools of residential ISP proxies across BE regions. Rotation happens per-request with sticky sessions where required.

Cloud-Native Orchestration

Pipelines run on AWS Lambda (burst) and ECS (sustained). Airflow handles scheduling, dependency management, and SLA alerting.

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 - Excel/Sheets compatible
XLS
Legacy spreadsheet format for business analysts
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
REST endpoints for on-demand data retrieval
PostgreSQL
Upsert into your existing schema with conflict resolution
BigQuery
Streamed directly into your dataset with schema auto-detect
Snowflake
Stage + COPY INTO workflow - incremental or full-replace
S3
Direct bucket delivery — compatible with any data lake
// faq

Common questions.

About nmbs.be scraping, legality, and pipeline operations.

Ask us directly →
Is scraping nmbs.be legal?

Scraping publicly available timetable and pricing information from nmbs.be is generally permissible. DataFlirt targets only public, non-authenticated schedule and fare data. We do not extract personal data or circumvent authentication walls. Clients should review NMBS terms of service and consult legal counsel for specific use cases.

How do you handle NMBS rate limits?

We use Belgian residential ISP proxies and request timing modelled on human behaviour. For high-frequency polling, we distribute requests across wide IP pools to prevent blocking.

Do you capture both FR and NL station names?

Yes. Our extraction maps the bilingual variants (e.g., Bruxelles-Midi and Brussel-Zuid) to a canonical station code, ensuring your downstream analytics remain consistent.

How fresh is the delay data?

Real-time streaming pipelines achieve sub-minute latency for disruption signals on a defined route set, delivered via webhook.

Can you extract multi-leg international journeys?

Yes. We extract the full transfer sequence, including wait times and platform changes, for journeys extending into neighboring networks where available via the NMBS planner.

What is the minimum viable engagement?

Our smallest packages start at a defined route list (e.g., top 500 commuter paths) with daily delivery. For full network coverage or high-frequency polling, we price based on compute volume.

Can I request a sample dataset?

Absolutely. We provide a sample run of up to 100 routes as part of the pre-engagement scoping process so you can validate schema fit and data quality.

$ dataflirt scope --new-project --source=nmbs.be 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 one-off station database or a continuous live-delay feed across 10,000 routes - 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 →