Busbud Bus & Train Fare Scraper
Pricing
from $3.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
13 days ago
Last modified
Categories
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 routedate— the calendar date (YYYY-MM-DD) this departure runsoperator— carrier name (e.g.FlixBus,Greyhound Lines, Inc.,OurBus)vehicleType— e.g.bus,trainamenities[]— on-board amenities shown for this departure (e.g.Wifi,Toilet,Power outlets)tags[]— Busbud's own badges for this departure, e.g.Cheapest,FastestdepartureTime,departureDateTime,departureLocationarrivalTime,arrivalDateTime,arrivalLocationdurationMinutes,durationTextprice,currencybookingLink— deep link to book this specific departure on BusbudrouteLowPrice,routeHighPrice,routeDailyOfferCount— route-level fare contextrouteDistanceMiles,routeDistanceKm— route-level distancesourceUrl— the Busbud route page this was scraped fromrecordType: "departure",scrapedAt
Input
| Field | Type | Default | Description |
|---|---|---|---|
origin | string | Boston | Starting city name. Ignored if routePairs is set. |
destination | string | New York City | Ending city name. Ignored if routePairs is set. |
routePairs | array | – | Batch mode: [{"origin": "...", "destination": "..."}, ...] |
date | string | – | Keep only departures on this exact date (YYYY-MM-DD); leave blank for the full published window |
vehicleType | string | any | any / bus / train / shuttle / minibus / ferry |
operatorName | string | – | Keep only departures whose operator name contains this text (case-insensitive) |
maxDurationMinutes | int | – | Drop departures longer than this many minutes |
maxPrice | number | – | Drop departures priced above this amount (in the selected currency) |
currency | string | USD | Re-price every departure in this currency (30 supported, e.g. EUR, CAD, GBP, JPY, INR) |
sortBy | string | recommended | recommended / cheapest / fastest / departureTime |
maxItems | int | 50 | Hard cap on emitted departures (1–1000) |
proxyConfiguration | object | AUTO | Apify proxy (free AUTO datacenter group); not strictly required |
Examples
Example: simple city-to-city search
{"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.