Greyhound Bus Tickets, Megabus & Amtrak Scraper
Pricing
from $1.00 / 1,000 trip results
Greyhound Bus Tickets, Megabus & Amtrak Scraper
Compare Greyhound bus tickets and Megabus fares with the Amtrak schedule on any US route: times, stops, seats left and booking links. $3 per 1,000 trips.
Pricing
from $1.00 / 1,000 trip results
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Security
Limited permissionsShare
Greyhound Bus Tickets, Megabus & Amtrak Scraper returns live Greyhound bus ticket prices and Megabus fares plus the Amtrak schedule for any US route in one normalized dataset, with departure and arrival times, duration, transfers, stops, carrier, seats left and a booking link. It is built for travel comparison sites, US trip planners, mobility researchers and AI agents, and costs $3.00 per 1,000 trip records on the Apify Free plan plus a $0.10 start fee per run at the default 1 GB memory.
The Actor reads each carrier's public booking or timetable data, never buys tickets or uses accounts, and charges only for records it saves. Amtrak rows are timetable entries without fares.
What Greyhound, Megabus and Amtrak data does it return?
Each dataset row is one trip from one provider on one date.
| Field | What it holds |
|---|---|
id, provider, mode | Stable ID, amtrak, greyhound or megabus, and rail or bus |
origin, destination | City or station name, code, ID, stop name and stop ID |
departureTime, arrivalTime | ISO 8601 times (Greyhound with offset; Amtrak and Megabus in local time) |
durationMinutes, transfers | Trip length and number of changes |
serviceName, serviceNumber, carrier | Train number or trip type, and the operating carrier |
price, currency | Live bus fare (USD, or CAD for Greyhound on request); null for Amtrak |
availability, seatsLeft | Greyhound load level and seats left at that price, Megabus available/unavailable, Amtrak scheduled |
amenities | On-board amenities when Greyhound lists them, for example WIFI |
segments | Each leg's carrier, mode, times and stops |
bookingUrl, sourceUrl, queryDate, scrapedAt | Link to the carrier's search, provenance, date searched and capture time |
Each run also writes an OUTPUT record with status (DATA, EMPTY, BLOCKED or REJECTED), resultCount (rows actually saved), stopReason (COMPLETED, MAX_RESULTS or CHARGE_LIMIT), a count per provider, and warnings for any route or provider that failed.
When should you use it, and when not?
Use it when you need:
- Greyhound bus tickets and Megabus fares for the same US route and date, side by side;
- the Amtrak schedule next to bus departures, to compare times and durations;
- several routes in one run, for example New York to Boston and New York to Washington;
- a scheduled monitor of US intercity bus prices.
Do not use it when:
- you need Amtrak fares or seat availability. Amtrak rows are schedules only;
- you want to book. The Actor is read-only;
- you need European buses or trains: FlixBus Tickets Scraper, Deutsche Bahn Train Tickets Scraper, National Rail Tickets Scraper, Trenitalia Train Tickets Scraper or Italo Train Scraper;
- you need flights. Use Google Flights Scraper API.
How do I compare Greyhound bus tickets and the Amtrak schedule on a route?
Add one or more routes. Each route has an origin, a destination and an optional date.
- Bus origins work best as city names such as
New York, NY. Amtrak stations work best as three-letter codes such asNYP,BOS,WAS,PHL,CHIorLAX; for those six cities the city name is mapped to the station automatically. dateisYYYY-MM-DD, for example"date": "2026-12-18". Without it, the Actor searchesdateOffsetDaysafter the run day (default 7, range 1-60), which keeps scheduled runs evergreen. Words such as "tomorrow" are not accepted.providerspicks any ofamtrak,greyhoundandmegabus(default: all three).adults(1-9) sets the passengers for bus fares;currencyisUSDorCADfor Greyhound (Megabus prices are always USD).maxResults(1-500, default 50) is a total cap shared fairly across routes and providers, so one carrier cannot fill the whole dataset.requestTimeoutSecs(5-120, default 30) bounds each carrier request.
{"routes": [{ "origin": "New York, NY", "destination": "Boston, MA" },{ "origin": "NYP", "destination": "WAS" }],"providers": ["amtrak", "greyhound", "megabus"],"dateOffsetDays": 7,"adults": 1,"maxResults": 60}
Use it from an AI assistant
Greyhound Bus Tickets, Megabus & Amtrak Scraper works from Claude, ChatGPT, Cursor or any other MCP client through Apify's MCP server. Add https://mcp.apify.com/?tools=muhammadafzal/us-intercity-rail-bus-scraper as a server, and the assistant can call the Actor as one tool. Example prompt: "Compare Greyhound and Megabus prices from Philadelphia to Washington next Saturday and show the Amtrak departures for the same day."
How do I run it from code?
JavaScript (apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('muhammadafzal/us-intercity-rail-bus-scraper').call({ routes: [{ origin: 'New York, NY', destination: 'Boston, MA' }], maxResults: 50 },{ maxTotalChargeUsd: 0.5 },);const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.map((t) => `${t.provider} ${t.departureTime} ${t.price ?? 'schedule'} ${t.currency ?? ''}`));
Python (apify-client 3.x):
import osfrom decimal import Decimalfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("muhammadafzal/us-intercity-rail-bus-scraper").call(run_input={"routes": [{"origin": "New York, NY", "destination": "Boston, MA"}], "maxResults": 50},max_total_charge_usd=Decimal("0.50"),)for trip in client.dataset(run.default_dataset_id).iterate_items():print(trip["provider"], trip["departureTime"], trip["durationMinutes"], trip["price"])
Both examples raise the maximum cost per run so that all 50 rows fit (see pricing below).
What does the output look like?
Two rows from a default run (New York to Boston, searched 2026-10-26 for 2026-11-02), shortened: IDs and segments are trimmed.
[{"provider": "greyhound","mode": "bus","origin": { "name": "New York, NY", "code": "US-NY", "stopName": "New York Port Authority" },"destination": { "name": "Boston, MA", "code": "US-MA", "stopName": "Boston (South Station)" },"departureTime": "2026-11-02T05:00:00-05:00","arrivalTime": "2026-11-02T11:00:00-05:00","durationMinutes": 360,"transfers": 0,"serviceName": "Direct","carrier": "grey","price": 37.99,"currency": "USD","availability": "high","amenities": ["WIFI", "POWER_SOCKETS"],"queryDate": "2026-11-02"},{"provider": "amtrak","mode": "rail","origin": { "name": "Ny Moynihan Train Hall At Penn Station", "code": "NYP" },"destination": { "name": "Boston", "code": "BOS" },"departureTime": "2026-11-02T06:53:00","arrivalTime": "2026-11-02T11:37:00","durationMinutes": 284,"transfers": 0,"serviceNumber": "1150","carrier": "Amtrak","price": null,"currency": null,"availability": "scheduled","bookingUrl": "https://www.amtrak.com/tickets/departure.html","queryDate": "2026-11-02"}]
Pricing: how much does a US intercity search cost?
You pay per trip record saved, plus a start fee. Platform usage is included in these prices.
| Event | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
| Trip result (primary event, per saved row) | $0.003 | $0.0025 | $0.002 | $0.001 |
| Actor start (per started GB of allocated memory) | $0.10 | $0.10 | $0.10 | $0.10 |
PLATINUM and DIAMOND plans pay the GOLD price. The default memory is 1,024 MB, so a normal run pays one start event ($0.10); a 2 GB run pays two.
Worked totals on the Free plan:
- New York to Boston default search that returned 43 rows: $0.10 + 43 × $0.003 = $0.229.
- 500 rows, the maximum: $0.10 + 500 × $0.003 = $1.60 (GOLD: $0.60).
The Actor's default run options set a maximum cost per run of $0.255, enough for the $0.10 start fee plus the default 50 rows at Free-plan prices. If you set a lower maximum cost per run, the run stops cleanly when it is reached: OUTPUT.stopReason is CHARGE_LIMIT, and OUTPUT.resultCount and the status message count only the rows actually saved and charged.
How reliable is it, and what are its limits?
- The default New York to Boston run finished in about 9 seconds on 2026-10-26 and saved 43 rows: 11 Amtrak, 17 Greyhound and 15 Megabus.
- Amtrak rows come from Amtrak's public timetable feed: no fares, seats or live delays.
- Greyhound rows include only trips on sale. Greyhound's search can include partner-operated trips;
carrierholds the operator code, for examplegrey. - Each provider is searched separately with bounded retries. If one provider fails, the others still return rows and the failure appears in
OUTPUT.warnings. - Fares and seats change quickly. Each row is a snapshot at
scrapedAt; confirm on the carrier's site before you buy.
FAQ
Does it return Amtrak ticket prices?
No. Amtrak rows are timetable entries with price: null and availability: "scheduled". Bus rows from Greyhound and Megabus carry live prices.
Can it compare Amtrak vs Greyhound on a route?
Yes for departure times, durations and transfers, because both appear in one dataset. Fare comparison covers Greyhound and Megabus only.
Which date does it search?
The route's date when set; otherwise the run day plus dateOffsetDays (default 7). Set dateOffsetDays: 1 to always search tomorrow.
Which cities and stations work?
US cities served by Greyhound or Megabus, and any station in Amtrak's timetable. Use Amtrak station codes for rail when the city name is ambiguous.
Does it buy or reserve tickets?
No. It reads public trip data only. Open bookingUrl to continue on the carrier's site.
Why did I get fewer rows than maxResults?
Either the carriers had fewer trips that day, maxResults was split fairly across providers, or the maximum cost per run was reached. OUTPUT.byProvider shows the split.
Related Actors
- FlixBus Tickets Scraper: FlixBus schedules, prices and seats in Europe and the US.
- Deutsche Bahn Train Tickets Scraper: German train tickets and timetables.
- National Rail Tickets Scraper: UK train times and fares.
- Trenitalia Train Tickets Scraper and Italo Train Scraper: Italian rail fares.
- Google Flights Scraper API: flight fares when the trip is too long for a bus.
Legal and responsible use
Use the data for research, comparison and planning at a reasonable volume, and respect each carrier's terms and applicable law. Do not present scraped fares as guaranteed or as a booking. This Actor is independent and not affiliated with or endorsed by Amtrak, Greyhound or Megabus.
Last verified: 2026-10-27