Busbud Bus & Train Fare Scraper avatar

Busbud Bus & Train Fare Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Busbud Bus & Train Fare Scraper

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.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Share

Scrape Busbud — the bus and train fare aggregator covering 500+ operators worldwide. Get individual scheduled departures between two cities: operator, vehicle type, on-board amenities, departure/arrival times and locations, trip duration, and price. HTTP-only, no login, no cookies required.

What this actor does

  • Route search by city name — free-text origin/destination, resolved automatically to Busbud's internal location codes
  • Batch mode — supply an array of origin/destination pairs to scrape many routes in one run
  • Rolling ~8-day schedule window — every run returns real scheduled departures for today through the next several days; filter to one exact date if needed
  • Filters: travel date, vehicle type, operator name (substring match), max duration, max price
  • Sort: recommended (site order), cheapest first, fastest first, earliest departure first
  • 30 currencies — every price re-quoted server-side in the currency you choose
  • Route-level context on every record: cheapest/highest fare seen, daily departure count, distance
  • Empty fields are omitted — a field only appears on a record when real data was found for it

Output per departure

  • origin, destination — canonical city names for the route
  • date — the calendar date (YYYY-MM-DD) this departure runs
  • operator — carrier name (e.g. FlixBus, Greyhound Lines, Inc., OurBus)
  • vehicleType — e.g. bus, train
  • amenities[] — on-board amenities shown for this departure (e.g. Wifi, Toilet, Power outlets)
  • tags[] — Busbud's own badges for this departure, e.g. Cheapest, Fastest
  • departureTime, departureDateTime, departureLocation
  • arrivalTime, arrivalDateTime, arrivalLocation
  • durationMinutes, durationText
  • price, currency
  • bookingLink — deep link to book this specific departure on Busbud
  • routeLowPrice, routeHighPrice, routeDailyOfferCount — route-level fare context
  • routeDistanceMiles, routeDistanceKm — route-level distance
  • sourceUrl — the Busbud route page this was scraped from
  • recordType: "departure", scrapedAt

Input

FieldTypeDefaultDescription
originstringBostonStarting city name. Ignored if routePairs is set.
destinationstringNew York CityEnding city name. Ignored if routePairs is set.
routePairsarrayBatch mode: [{"origin": "...", "destination": "..."}, ...]
datestringKeep only departures on this exact date (YYYY-MM-DD); leave blank for the full published window
vehicleTypestringanyany / bus / train / shuttle / minibus / ferry
operatorNamestringKeep only departures whose operator name contains this text (case-insensitive)
maxDurationMinutesintDrop departures longer than this many minutes
maxPricenumberDrop departures priced above this amount (in the selected currency)
currencystringUSDRe-price every departure in this currency (30 supported, e.g. EUR, CAD, GBP, JPY, INR)
sortBystringrecommendedrecommended / cheapest / fastest / departureTime
maxItemsint50Hard cap on emitted departures (1–1000)
proxyConfigurationobjectAUTOApify proxy (free AUTO datacenter group); not strictly required

Examples

{
"origin": "Boston",
"destination": "New York City",
"maxItems": 20
}

Example: one exact travel date, cheapest first

{
"origin": "Toronto",
"destination": "Montreal",
"date": "2026-07-10",
"sortBy": "cheapest"
}

Example: only Greyhound buses under $50

{
"origin": "Chicago",
"destination": "Milwaukee",
"operatorName": "Greyhound",
"maxPrice": 50
}

Example: fares in euros

{
"origin": "Paris",
"destination": "Amsterdam",
"currency": "EUR"
}

Example: batch multiple routes in one run

{
"routePairs": [
{ "origin": "Calgary", "destination": "Banff" },
{ "origin": "Montreal", "destination": "Quebec City" }
],
"maxItems": 100
}

Use cases

  • Travel booking comparison tools — pull live bus/train fares into a fare-comparison UI
  • Price tracking — snapshot fares for a route over time to spot trends
  • Travel content/SEO — power "how to get from X to Y by bus" articles with real schedules
  • Corporate/group travel planning — compare operators, amenities, and cost for a route
  • Market research — see which operators actively service a given city pair

Data Source / Limitations

Data comes from Busbud's public route pages, which publish a rolling schedule window (today through roughly the next 7 days) without requiring login. City names are resolved automatically through Busbud's own public location-suggestion service; ambiguous names (e.g. multiple cities sharing a name) are resolved to Busbud's best relevance match, with automatic fallback to nearby candidates (and a live check that a route page actually exists) if the top match turns out to have no service. Dates outside the published window, or route pairs Busbud has no service for, return 0 records with a clear status message rather than failing. operatorName is a substring filter rather than a fixed dropdown because Busbud aggregates 500+ operators — far more than a stable enum can cover.

For a small number of large cities, Busbud's public location-suggestion service doesn't surface a clean city-level match at all (only specific stations/landmarks) even though the city itself has real service — in that case the actor tries several fallback candidates before giving up, but may occasionally still report 0 results for a genuinely serviced city. Retrying with a nearby well-known landmark or the metro area's main station name in origin/destination works around this when it occurs.

FAQ

Is this affiliated with Busbud? No — this is an independent, third-party actor that reads Busbud's public route pages.

Why do some departures have no tags field? Busbud only badges select departures as "Cheapest" or "Fastest" on a given route; most departures carry no badge, so the field is omitted for those.

How far ahead can I search? Busbud's route pages publish roughly an 8-day rolling window starting today. Requesting a date further out than that returns 0 records for that request.

What currency are prices in? Whatever you set in currency (defaults to USD). Busbud re-prices every fare on the page server-side in the requested currency — 30 currencies are supported.

Why is operatorName a text filter instead of a dropdown? Busbud aggregates 500+ bus and train operators globally — far too many for a stable dropdown — so this field matches any operator name containing your text, case-insensitively.

What happens if a city name doesn't resolve, or the route has no service? The actor returns 0 records and sets a status message explaining why — this is a clean, valid result, not an error.