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

Finnish rail data,
at warehouse scale.

We extract train schedules, dynamic pricing, seat availability, and route intelligence from vr.fi. Delivered as clean JSON, CSV, or Parquet to S3, BigQuery, or Snowflake on your cadence.

Schedules extracted
12,481 /day
Price updates
142K /24h
Seat map records
38K /run
Active pipelines
41
Uptime
99.98%
Data Dictionary

Every field we extract from vr.fi

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

Complete list of extractable fields for Train Schedules objects from vr.fi. All fields typed and schema-versioned.

train_numbertrain_typedeparture_stationarrival_stationdeparture_timearrival_timeduration_minutestransfer_countstatus
train_schedules
● 200 OK
"train_number": "IC 27",
"train_type": "InterCity",
"departure_station": "Helsinki",
"arrival_station": "Oulu",
"departure_time": "2026-10-14T08:24:00+02:00",
"arrival_time": "2026-10-14T14:32:00+02:00",
"duration_minutes": 368,
"transfer_count": 0
# train_numbertrain_typedeparture_stationarrival_stationdeparture_timearrival_time
1
2
3

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

train_numberdeparture_dateticket_classpricecurrencyeco_class_priceextra_class_pricecancellation_policyscraped_at
ticket_pricing
● 200 OK
"train_number": "IC 27",
"departure_date": "2026-10-14",
"ticket_class": "Eco",
"price": 42.5,
"currency": "EUR",
"eco_class_price": 42.5,
"extra_class_price": 57.5,
"cancellation_policy": "Non-refundable"
# train_numberdeparture_dateticket_classpricecurrencyeco_class_price
1
2
3

Complete list of extractable fields for Seat Availability objects from vr.fi. All fields typed and schema-versioned.

train_numberdeparture_datetotal_seatsavailable_seatswheelchair_spacesbike_spacespet_seatsupper_deck_availablewagon_details
seat_availability
● 200 OK
"train_number": "IC 27",
"departure_date": "2026-10-14",
"available_seats": 142,
"wheelchair_spaces": 2,
"bike_spaces": 0,
"pet_seats": 12,
"upper_deck_available": true
# train_numberdeparture_datetotal_seatsavailable_seatswheelchair_spacesbike_spaces
1
2
3

Complete list of extractable fields for Route & Stops objects from vr.fi. All fields typed and schema-versioned.

train_numberstation_codestation_namescheduled_arrivalscheduled_departureactual_arrivaltrack_numberdelay_minutesstop_sequence
route_& stops
● 200 OK
"train_number": "IC 27",
"station_code": "TPE",
"station_name": "Tampere",
"scheduled_arrival": "2026-10-14T10:00:00+02:00",
"scheduled_departure": "2026-10-14T10:05:00+02:00",
"track_number": "3",
"delay_minutes": 0,
"stop_sequence": 4
# train_numberstation_codestation_namescheduled_arrivalscheduled_departureactual_arrival
1
2
3

Complete list of extractable fields for Station Metadata objects from vr.fi. All fields typed and schema-versioned.

station_codestation_namecitycoordinatesticket_office_hoursaccessibilityparking_spacesluggage_lockersconnecting_transit
station_metadata
● 200 OK
"station_code": "HKI",
"station_name": "Helsinki Central",
"city": "Helsinki",
"coordinates": "60.1719, 24.9414",
"accessibility": true,
"luggage_lockers": true,
"connecting_transit": "['Metro', 'Tram', 'Bus']"
# station_codestation_namecitycoordinatesticket_office_hoursaccessibility
1
2
3

Capabilities

Extract the complete Finnish railway network

Our vr.fi scraper handles complex booking flows, dynamic pricing updates, and real-time transit schedules — with JavaScript rendering and session management built in.

Timetable Extraction

Capture exact departure and arrival times, durations, and transfer requirements across the entire VR network.

Dynamic Ticket Pricing

Track price fluctuations for Eco, Extra, and Saver tickets as departure dates approach.

Seat & Cabin Availability

Extract available seat counts, specific wagon details, and speciality spaces (bikes, pets, wheelchairs).

Night Train & Car Carriers

Parse availability and pricing for sleeper cabins and car-carrier slots on northern routes.

Real-Time Delay Tracking

Monitor live status updates, track changes, and delay minutes for active trains.

Station Intelligence

Extract station facilities, operating hours, and geocoordinates for the entire network.

Commuter & Long-Distance

Differentiate between HSL commuter zones and long-distance InterCity/Pendolino routes.

Multi-Language Support

Extract content localised in Finnish, Swedish, or English based on parameter configuration.

High-Frequency Polling

Run pipelines at sub-hourly cadences to capture last-minute availability and price drops.

// engagement pipeline

From route list to warehouse record

Brief in. Clean data out.

Define Scope
d 0

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

Pipeline Build
d 2–4

We configure Scrapy / Playwright crawlers, proxy rotation, and session management for vr.fi.

Validation & QA
d 4–6

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

Delivery
ongoing

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

Under the hood

Handling VR.fi's technical complexities

Transit booking systems are stateful and heavily rate-limited. Here is how we maintain stable data extraction.

pipeline-monitor · vr.fi · 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
Navigating the booking flow

VR.fi requires sequential API calls and cookie validation to surface accurate pricing and seat maps. We maintain stateful Playwright sessions to navigate the search funnel exactly as a human user would.

Dynamic rendering
React hydration and API interception

The modern VR frontend relies heavily on client-side React hydration. We intercept the underlying GraphQL and REST API calls directly from the browser network tab, extracting clean JSON before it hits the DOM.

Rate limiting
Distributed EU proxies

Aggressive polling of train schedules triggers IP bans. We distribute requests across a pool of European residential and mobile proxies, keeping request volumes per IP well below VR's rate-limit thresholds.

Change detection
Only re-scrape what's changed

For historical pricing analysis, we maintain a hash index of last-seen values per route. Subsequent runs only push diffs — reducing compute cost and downstream processing load.

Data normalisation
Handling timezone complexities

Transit data is highly sensitive to timezones and daylight saving transitions. All extracted timestamps are normalised to UTC with explicit offset metadata for accurate downstream analytics.

Applications

Who uses VR data — and how

Teams across industries use vr.fi data to build competitive products and smarter operations.

01
Travel Aggregators & OTAs

Integrate Finnish rail schedules and pricing into global multi-modal travel platforms.

02
Dynamic Pricing Analysis

Competitor transit operators monitor VR's yield management strategies and advance booking curves.

03
Carbon Footprint Tracking

Corporate travel platforms calculate precise CO2 emissions for rail versus domestic flight alternatives.

04
Infrastructure Planning

Urban planners and logistics firms analyse delay frequencies and route density across the network.

05
Dynamic Packaging

Tour operators combine real-time train availability with hotel inventory for automated package creation.

06
Mobility-as-a-Service (MaaS)

Local transit apps integrate long-distance rail schedules with first-mile/last-mile commuter data.

Why DataFlirt

"Transit data decays the second a train departs. Querying historical pricing curves and live delay metrics requires an infrastructure built for continuous, stateful extraction."

Most teams fail at transit scraping because they treat it like static HTML. Extracting accurate seat maps and dynamic pricing from vr.fi requires mimicking complex booking flows, managing session cookies, and handling strict rate limits. DataFlirt absorbs that complexity so your engineers can focus on the analysis.

Technical Spec

VR.fi scraper — technical capabilities

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

JavaScript rendering
Full Playwright sessions required for booking flow navigation
Supported
API interception
Direct extraction from underlying GraphQL/REST endpoints
Supported
Residential proxies
EU-based ISP proxies to bypass regional rate limits
Supported
Live delay tracking
Sub-minute polling for active train statuses
Supported
Seat map parsing
Extraction of individual seat availability and wagon types
Supported
Multi-language
Support for FI, SV, and EN localisations
Supported
Change detection
Hash-based diffs for pricing and availability updates
Supported
Veturi loyalty points
Requires authenticated user sessions
Partial
Logged-in ticket purchases
Execution of actual financial transactions
Partial
Infrastructure

Infrastructure powering the VR pipeline

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

ScrapyPlaywrightPython 3.12RedisPostgreSQLApache AirflowAWS LambdaS3CloudWatch2CaptchaCapSolverResidential ProxiesDockerKubernetesGrafanaPrometheusFastAPICelery
Scrapy + Playwright Stack

Scrapy handles route orchestration and deduplication. Playwright handles JavaScript rendering, cookie sessions, and the multi-step booking flow.

European Proxy Infrastructure

We maintain pools of residential ISP proxies across the EU region. Rotation happens per-session to maintain state during availability checks.

Cloud-Native Orchestration

Pipelines run on AWS ECS for sustained polling. 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 — Excel/Sheets compatible
XLS
Direct Excel 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
RESTful endpoints to query extracted datasets on demand
BigQuery
Streamed directly into your dataset with schema auto-detect
Snowflake
Stage + COPY INTO workflow — incremental or full-replace
Postgres
Upsert into your existing schema with conflict resolution
S3
Direct bucket delivery — compatible with any data lake
// faq

Common questions.

About vr.fi scraping, legality, and pipeline operations.

Ask us directly →
Is scraping vr.fi legal?

Scraping publicly available timetables and pricing is generally permissible. DataFlirt targets only public, non-authenticated schedule and fare data. We do not extract personal user data or circumvent authentication walls. Clients should review VR's Terms of Service and consult legal counsel for specific use cases.

How do you handle the complex booking flow?

We use stateful Playwright sessions that programmatically navigate the search funnel, handling date selection, passenger configuration, and train selection to expose the final pricing and seat maps.

Can you track real-time train delays?

Yes. We can configure high-frequency polling pipelines targeting active routes to capture live status updates, track changes, and exact delay minutes.

Do you capture historical pricing data?

Every pipeline run produces timestamped snapshots. We maintain a time-series table per route for pricing and availability from the date your pipeline starts, allowing you to build advance booking curves.

What is the minimum viable engagement?

Our smallest packages start at a defined route list (e.g., top 50 station pairs) with daily delivery. For full network coverage or high-frequency polling, we price based on compute volume. Contact us for a scoped quote.

Can I request a sample dataset?

Yes. We provide a sample run of up to 20 routes across a 7-day departure window as part of the pre-engagement scoping process, allowing you to validate schema fit and data quality.

$ dataflirt scope --new-project --source=vr.fi 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 timetable dump or a continuous price-monitoring feed across the entire Finnish 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 →