We extract train schedules, dynamic pricing, real-time delays, platform assignments, and route transfers from pkp.pl. 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 Train Schedules objects from pkp.pl. All fields typed and schema-versioned.
"train_id": "EIP 1600", "carrier": "PKP Intercity", "train_type": "Express InterCity Premium", "origin_station": "Warszawa Centralna", "destination_station": "Wrocław Główny", "departure_time": "2026-05-12T08:15:00Z", "arrival_time": "2026-05-12T12:05:00Z", "duration_minutes": 230
| # | train_id | carrier | train_type | origin_station | destination_station | departure_time |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Pricing & Fares objects from pkp.pl. All fields typed and schema-versioned.
"train_id": "EIP 1600", "class_type": "Class 2", "base_price": 169.0, "promo_price": 119.0, "currency": "PLN", "ticket_type": "Super Promo", "reservation_required": true
| # | train_id | class_type | base_price | promo_price | currency | ticket_type |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Real-Time Status objects from pkp.pl. All fields typed and schema-versioned.
"train_id": "IC 3514", "current_station": "Kraków Główny", "scheduled_arrival": "2026-05-12T14:30:00Z", "actual_arrival": "2026-05-12T14:45:00Z", "delay_minutes": 15, "platform": "3", "track": "1"
| # | train_id | current_station | scheduled_arrival | actual_arrival | delay_minutes | delay_cause |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Station Boards objects from pkp.pl. All fields typed and schema-versioned.
"station_id": "5100065", "station_name": "Gdańsk Główny", "board_type": "DEPARTURE", "train_number": "TLK 58110", "direction": "Szczecin Główny", "scheduled_time": "2026-05-12T09:45:00Z", "status": "ON_TIME"
| # | station_id | station_name | board_type | train_number | direction | scheduled_time |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Complete list of extractable fields for Route & Transfers objects from pkp.pl. All fields typed and schema-versioned.
"search_id": "req_992831", "origin_id": "5100065", "destination_id": "5100028", "total_duration": 410, "transfer_stations": "['Poznań Główny']", "layover_durations": "[25]", "total_distance_km": 542
| # | search_id | origin_id | destination_id | total_duration | transfer_stations | layover_durations |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | ||||||
| 3 |
Our pkp.pl scraper handles dynamic search forms, session tokens, and real-time polling to deliver accurate schedule and pricing data across all major carriers.
Timetables across all PKP carriers including EIP, EIC, IC, and TLK, captured with origin and destination metadata.
Capture base fares, promotional tiers, and class variations across routes as departure dates approach.
Extract live delay minutes, platform changes, and track assignments from Portal Pasażera integrations.
Parse complex transfer logic, layover durations, and connecting train IDs for multi-stop journeys.
Simulate physical departure and arrival boards for any station in the Polish railway network.
Distinguish between PKP Intercity, Polregio, and regional operators mapped on the platform.
Monitor reservation requirements, class capacity indicators, and sold-out flags per route.
Manage the complex token exchanges required to load pricing beyond standard timetables.
Run daily timetable syncs or configure high-frequency pipelines for real-time status updates.
Brief in. Clean data out.
Provide station pairs, train IDs, or regional boundaries. We design the extraction schema together.
We configure Scrapy / Playwright crawlers, proxy rotation, and session management for pkp.pl search forms.
Schema validation, null-rate checks, and delay-outlier detection before full launch.
JSON / CSV / Parquet pushed to your S3 bucket, BigQuery dataset, or Snowflake stage on agreed cadence.
State owned transport networks use complex session management and rate limiting. Here is how we ensure reliable data delivery.
Bypass basic rate limits on PKP schedule searches using ISP-grade Polish IPs, ensuring high concurrency without triggering firewall blocks.
PKP requires complex POST requests with session tokens to retrieve pricing. We automate this flow using headless browsers to capture accurate fare data.
Extracting live delays requires high-frequency polling of undocumented internal API endpoints. We manage the request load to capture accurate arrival estimates.
The timetable structure varies by carrier. We use multiple XPath and regex fallbacks to ensure clean data extraction regardless of UI updates.
Maintain a hash index of timetables to only emit diffs when a carrier updates their schedule, reducing compute cost and downstream storage.
OTAs and meta-search engines integrate PKP schedules and pricing into their multi-modal routing engines.
ML teams use historical delay data, weather correlations, and route congestion to train predictive ETA models.
Competitors and analysts track EIP and IC fare fluctuations against booking windows.
Freight operators monitor passenger network congestion to optimise cargo routing on shared infrastructure.
TMCs sync live schedules and fares to internal booking portals for enterprise clients.
Consultancies analyse route frequency and capacity metrics for regional transport studies.
"Polish railway data is highly fragmented across carriers and dynamic search forms. Capturing it reliably requires stateful session management at scale."
Most teams underestimate the complexity of scraping state owned transport networks. Reliable pkp.pl extraction requires managing session tokens for pricing, handling undocumented delay APIs, and parsing complex multi leg journeys. DataFlirt absorbs that complexity so your engineers can focus on routing algorithms, not the infrastructure.
Everything supported by our pkp.pl 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 and deduplication. Playwright handles dynamic form submissions and session tokens required for pricing.
Polish ISP proxies avoid geographic blocking and rate limits, ensuring high success rates for schedule searches.
ECS and Lambda provide burst scaling during peak travel hours, orchestrated by Airflow for strict SLA adherence.
Data delivered to where your team already works — no new tooling required.
About pkp.pl scraping, legality, and pipeline operations.
Ask us directly →Extracting public timetables and pricing is generally permissible for non-commercial or fair commercial use, provided it does not disrupt their infrastructure. We do not extract personal user data. Clients should review local regulations regarding transport data usage.
We use Playwright to simulate the exact form submission flow, managing session tokens and cookies required to load the final pricing page accurately.
Yes. We poll the live status endpoints to extract current delays, platform changes, and estimated arrival times across the network.
Yes. The platform aggregates PKP Intercity, Polregio, and regional carriers. We extract the carrier metadata for every route.
Pricing pipelines can run at high frequency, capturing fare changes and promotional tier availability as departure times approach.
We typically start with a defined set of station pairs or a specific region with daily delivery. Contact us for a custom quote based on your volume requirements.
20-minute scoping call. Pilot dataset within the week. Production within two. Whether you need a daily timetable dump or a real-time delay monitoring feed, we scope, build, and operate the pipeline. Tell us what you need.