· 12 min read
Virail Train & Bus Trip Scraper: 14 Data Fields per Record (2026)
Each record carries 14 output fields, including operator, departure station, arrival station, departure time, arrival time, price, and currency. Searching costs $5.00 per 1,000 results on Apify's free plan, with no login or paid residential proxies required. The Actor extracts server-rendered structured trip data for train and bus connections. Built for travel aggregators and fare analysts comparing route pricing, but not for teams needing seat maps or live booking capabilities, which the dataset does not include.
Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 1,000 results at $0.005 each before platform usage. Open Virail Train & Bus Trip Scraper on Apify and run the prefilled example.
How reliable is Virail Train & Bus Trip Scraper in production?
Across the last 30 days of public runs on the Apify platform, Virail Train & Bus Trip Scraper recorded 68 runs with the following outcomes.
| Outcome | Runs | Share |
|---|---|---|
| Succeeded | 68 | 100.0% |
| Failed | 0 | 0.0% |
| Aborted by the user | 0 | 0.0% |
| Timed out | 0 | 0.0% |
| Total | 68 | 100.0% |
No run failed or timed out in the last 30 days. Keep a retry and an alert on scheduled runs all the same: a clean month is a record, not a guarantee.
What does it cost to run Virail Train & Bus Trip Scraper?
Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. No run failed or timed out in the last 30 days, so the list price is a fair budget; keep a retry in place all the same.
The maxItems control has the largest impact on cost because result charges apply to each record written to the dataset. Running the example input with maxItems set to 20 caps result charges at $0.10. Setting maxPrice can also limit dataset output by filtering out trips above a specific cost threshold.
How do you run Virail Train & Bus Trip Scraper from the API?
The schema marks 2 of its 6 controls as required: origin, destination. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~omio-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"origin":"London","destination":"Paris","transport":"train","sortBy":"recommended","maxItems":20}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"origin": "London",
"destination": "Paris",
"transport": "train",
"sortBy": "recommended",
"maxItems": 20
}
run = client.actor("crawlerbros~omio-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"origin": "London",
"destination": "Paris",
"transport": "train",
"sortBy": "recommended",
"maxItems": 20
}
const run = await client.actor('crawlerbros~omio-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.
Which Virail Train & Bus Trip Scraper inputs matter, and which can you skip?
The origin and destination controls are required and specify departure and arrival cities. Use standard city names like London or Paris to ensure proper route matching. Optional settings like transport, sortBy, and maxPrice can remain at their defaults for initial testing.
origin(string): Departure city, e.g. 'London'. Default:"London".destination(string): Arrival city, e.g. 'Paris'. Default:"Paris".transport(string): Which mode(s) to search. Default:"train".sortBy(string): How to order results. Default:"recommended".maxPrice(number): Only return trips at or below this price (in the currency Virail itself returns, typically USD). Leave blank for no limit.maxItems(integer): Hard cap on the number of trip options to return. Default:20.
Fixed-choice controls: transport accepts train (Train only), bus (Bus only), both (Both train and bus); sortBy accepts recommended (site's own order), priceLowToHigh (Price: low to high), departureTime (Departure time).
What does Virail Train & Bus Trip Scraper return?
Returned dataset records work well for route comparison, carrier analysis, and fare tracking. They provide operator names, stations, schedules, and prices for each trip option. The output does not contain seat selection details, purchase tokens, or ticket booking capability.
transportType-trainorbusorigin,destination- as given in the search inputsourceUrl- the Virail route page this trip was scraped fromoperator- the carrier running this specific trip (e.g. "Eurostar", "BlaBlaCar Bus")departureStation,departureTimearrivalStation,arrivalTimeprice,currencyavailability- e.g.InStock, when Virail publishes itrecordType: "trip",scrapedAt
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open Virail Train & Bus Trip Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Run a test query using origin set to London and destination set to Paris with maxItems set to 5.
- Open the dataset tab and check that origin and destination fields match your input string.
- Set transport to train, bus, or both depending on which operators you need to capture.
- Set sortBy to priceLowToHigh if your ingestion pipeline requires results ordered by lowest cost.
- Set maxPrice if you need to discard items above a specific fare threshold before dataset output.
- Increase maxItems up to 200 based on the volume of route options needed per run.
- Verify that operator and departureTime fields contain valid non-null string values.
- Schedule the Actor run on Apify to collect scheduled trip records on a recurring timer.
How do you apply it? Three worked playbooks
These are Virail Train & Bus Trip Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Travel planning
Outcome: Compare real train/bus options and prices between two cities
Configure: origin set to 'London', destination set to 'Paris', transport set to 'both', maxItems set to 20
Working method: Execute an initial run using London as origin and Paris as destination. Verify that the output dataset includes both train and bus transportType values with complete operator fields. Evaluate departure times and prices across returned records to compare route choices.
Deliverable: A dataset containing up to 20 trip records with operator, travel times, and prices.
Stop condition: The returned dataset contains zero records or fails to populate operator fields.
Use case 2: Price monitoring
Outcome: Track fares for a route over time
Configure: origin set to 'Berlin', destination set to 'Amsterdam', transport set to 'both', sortBy set to 'priceLowToHigh', maxItems set to 50
Working method: Configure a scheduled run on Apify targeting Berlin and Amsterdam with sortBy set to priceLowToHigh. Store the dataset output from each scheduled execution. Compare low-cost records across historic runs to observe price trends over time.
Deliverable: Historical dataset runs recording lowest available fares per route over time.
Stop condition: The price field returns null or missing values across consecutive scheduled runs.
Use case 3: Fare research
Outcome: See which operators serve a given route and at what price
Configure: origin set to 'Madrid', destination set to 'Barcelona', transport set to 'both', maxPrice set to 50, maxItems set to 30
Working method: Run a search between Madrid and Barcelona while setting maxPrice to 50. Group output records by the operator field to identify all active carriers in that budget bracket. Analyze fare ranges across each identified carrier.
Deliverable: A structured array of carrier names paired with their respective low-cost fare records.
Stop condition: The dataset contains items exceeding the specified maxPrice ceiling.
What breaks, and how do you design around it?
- Over the last 30 days, 0.0% of public runs failed and 0.0% timed out. Build retries and alerting around those rates rather than assuming every run completes.
If Virail does not list routes for distant or poorly-connected city pairs, the dataset returns zero items. Switch origin or destination inputs to major regional hubs when smaller suburban names return empty outputs. If high route volume hits the 200 item maxItems limit, split your extractions by passing individual modes using transport.
When should you not use Virail Train & Bus Trip Scraper?
Do not use this Actor if you require multi-modal transit options like flights, ferries, or rideshares alongside ground transport. For broader journey planning that includes flights and cars, use Rome2Rio Multi-Modal Route Scraper instead. If your system specifically requires major European bus network details like onboard amenities and transfer connections, FlixBus Scraper or Busbud Bus & Train Fare Scraper provide specialized coverage.
What should you check before trusting the output?
- Verify that price contains a positive number and is not null on returned records.
- Check that currency contains a valid string code on all written dataset records.
- Confirm departureTime and arrivalTime fields contain valid time strings.
- Stop scheduled runs if the dataset returns zero records for a major city pair.
- Check that transportType matches your requested transport filter setting.
None of this proves a record is correct. It gives a scheduled Virail Train & Bus Trip Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
How much does running this Actor cost?
Results cost $0.005 per item written to the dataset, which is $5.00 per 1,000 results on Apify's free plan. Paid plans pay less per result. Apify also charges platform usage fees for each run execution.
Why did a run return zero results?
Zero results mean Virail has no listed routes between the specified origin and destination, or the city name was not recognized. Try searching major city names rather than small suburbs.
Are the scraped prices live and accurate?
Prices reflect what Virail displays on its public route pages at the moment the search runs. Always verify final fares on the carrier's official booking page before purchasing tickets.
Do I need paid residential proxies or accounts to run this?
No login, cookies, or paid residential proxies are needed. The Actor uses Apify's free datacenter AUTO proxy group because Virail embeds structured trip data directly on its public route pages.
Can I filter results by budget or transport mode?
Yes, set transport to train, bus, or both. You can also pass a numeric maxPrice value to restrict returned results to fares at or below that limit.
Where to go next
When you are ready to run it, open Virail Train & Bus Trip Scraper on Apify; the free plan covers up to 1,000 results a month.
Start with the Virail Train & Bus Trip Scraper Actor page for the current input schema, pricing tier, and run history.
Other Actors we maintain for related data:
- Rome2Rio Multi-Modal Route Scraper: Scrape Rome2Rio trip-planning results - compare flight, train, bus, car, ferry, and rideshare options between any two cities or airports, with durations, price ranges, and operators.
- Busbud Bus & Train Fare Scraper: Scrape Busbud bus and train departures between any two cities - operators, vehicle types, amenities, schedules, durations, and prices aggregated across 500+ operators.
- FlixBus Scraper: Scrape FlixBus - Europe and North America's largest intercity bus network.
- Squaremouth Travel Insurance Quote Comparison Scraper: Get a live, side-by-side comparison of travel insurance plans from Squaremouth for any trip - destination, dates, traveler ages, and trip cost.
Related guides:
- Trainline Scraper: Up to 1,000 Free Results a Month (2026)
- Intrepid Travel Package Tour Scraper: Up to 1,000 Free Results a Month
- Coverfox Scraper: Extract 1,000 Insurance Plans for $5.00 (2026)
- Google Maps Directions Scraper: Operational Guide and Use Cases
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-26.
Actor last updated by its maintainers on 2026-07-21.
Run outcome figures cover the 30 day public window ending 2026-09-26.
Featured actors
Virail Train & Bus Trip Scraper
Scrape Virail - a free multi-modal travel search comparison site. Search real train and bus trip options between any two cities with prices, times, and operators.
Run on Apify ↗