Amtrak Scraper
Pricing
from $3.00 / 1,000 results
Amtrak Scraper
Scrape Amtrak - America's intercity passenger rail network. Get the full station list, every train route, station-to-station schedules, and per-train service details (train number, route stops, service type).
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
6 days ago
Last modified
Categories
Share
Scrape Amtrak — America's intercity passenger rail network. Get the complete station list (1,000+ stations), every train route, per-train service details with route stop orders, and station-to-station schedule searches.
What this actor does
- Five modes:
stationsList(all Amtrak stations),popularRoutes(Amtrak's featured origin→destination pairs),routesList(all train routes),byTrainNumber(train number → service + route stops),search(station-to-station schedule search) - Station records: 3-letter station code, full name, facility name (short + long), city, state, country, timezone (+ friendly IANA name), daily departures (+ count), autocomplete label, popular-station flag, popular destinations
- Route records: route code, route name, cities served
- Train records: train number → service type (e.g.
2150→ Acela), ordered stop list, origin/terminus stations, stop count - Schedule records: train number, origin/destination, departure/arrival times, duration, service type, days of operation
- Empty fields are omitted
Data source
Amtrak (amtrak.com) publishes its network reference data as public JSON/XML resources on its own site, and the schedule search runs in the public web app. This actor loads the site in a full browser (Playwright) — plain HTTP clients are blocked by Amtrak's CDN (verified) — and reads:
https://www.amtrak.com/services/data.stations.json— the complete station list (1,000+ stations)https://www.amtrak.com/services/data.popularstations.json— popular-station flagshttps://www.amtrak.com/services/routes-list.json— every train route.../config/TrainCodesResource.xml— train number → service name map.../config/stopslist.json— route → ordered station stopshttps://www.amtrak.com/tickets/schedule-results.html— the schedule search flowhttps://www.amtrak.com/dotcom/travel-service/schedules— the schedules JSON API the timetable widget calls (primary search path)
If the datacenter IP is blocked, the optional Apify proxy is engaged automatically with rotating sessions.
Schedule search: mode=search calls Amtrak's own schedules JSON API (/dotcom/travel-service/schedules) from inside the browser session — the same request the timetable widget makes (verified live, 40+ trains per corridor). The API returns the full schedule: train number, service name, departure/arrival times, duration, days of operation, status, and the ordered stop list. If that API is ever unavailable, the actor falls back to driving the timetable widget (typing the station codes, picking the date, submitting) — which requires dismissing Amtrak's cookie-consent overlay first. The station, route and train modes read Amtrak's public data resources directly and are fully reliable.
Output per record
Per station (mode = stationsList)
stationCode— 3-letter code (NYP,CHI,BOS, …)name,stationName,city,state,alias,autoFillNamefacilityName,facilityNameLong— station facility names (short + long forms)timezone— Amtrak zone code (E/C/M/MS/P/PS),timezoneName— IANA-style name (America/New_York,America/Phoenix, …)dailyDepartures— e.g.3 daily departures,dailyDepartureCount— the parsed numberisPopular,popularDestinations— Amtrak's featured origin stations and their top destinationscountry—US(from upstream;CAfor Amtrak's Canadian stations)sourceUrl,recordType: "station",scrapedAt
Per popular route (mode = popularRoutes)
originStation— featured origin code (e.g.NYP)destinationStations[]— its top destinations (e.g.["WAS", "PHL", "BOS", …]),destinationCountsourceUrl,recordType: "popularRoute",scrapedAt
Per route (mode = routesList)
routeCode(e.g.ACEX,NERG,COAS),routeName(Acela, Northeast Regional, Coast Starlight, …),citiesServedsourceUrl,recordType: "route",scrapedAt
Per train (mode = byTrainNumber)
trainNumber(e.g.2150),serviceType(e.g.Acela)routeName,stops[]— ordered station codes,stopCount,originStation,terminusStationsourceUrl,recordType: "train",scrapedAt
Per schedule (mode = search)
trainId/trainNumber,origin,destinationdepartureTime,arrivalTime,duration,durationMinutestravelDate,status,originFacility,destinationFacilityserviceType,serviceNameShort(e.g. "NE Regional"),frequency[](days of operation)trainType(e.g. "Intercity Train"),tripId,distanceMiles,directionCodeoperator(e.g. "Amtrak"),operatorCode(e.g. "AMTK")nightTrain,isSelfTransfer,restricted(booleans),amenities[](Cafe, Quiet Car, Free WiFi, Seat Selection)stops[]— ordered station codes,stopCountsourceUrl,recordType: "schedule",scrapedAt
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | string | stationsList | stationsList / popularRoutes / routesList / byTrainNumber / search |
origin | string | NYP | Origin station code (mode=search) |
destination | string | WAS | Destination station code (mode=search) |
travelDate | string | – | Departure date YYYY-MM-DD (mode=search) |
departAfter | string | – | Earliest departure HH:MM 24h (mode=search) |
trainNumber | string | 2150 | Train number (mode=byTrainNumber) |
maxItems | int | 100 | Hard cap (1–1000) |
proxyConfiguration | object | Apify proxy | Optional; auto-engaged on CDN block |
Example: popular origin-destination pairs
{"mode": "popularRoutes"}
Example: full station list
{"mode": "stationsList","maxItems": 500}
Example: lookup a train
{"mode": "byTrainNumber","trainNumber": "2150"}
Example: schedule search
{"mode": "search","origin": "NYP","destination": "WAS","travelDate": "2026-09-15","departAfter": "06:00"}
Example: all routes
{"mode": "routesList"}
Use cases
- Travel apps — power station autocomplete with the full official station catalog
- Transit analytics — map every route, its corridor and stop sequence
- Trip planning tools — train-number lookups and station-to-station schedules
- Rail research — network topology data for the US intercity rail system
Limitations
- Browser required — Amtrak's CDN blocks plain HTTP clients (verified); the actor loads the public pages in a real browser (Playwright). The optional Apify proxy is auto-engaged on a CDN block.
searchcan fall back to a widget path — the primary path uses Amtrak's own schedules API; if Amtrak blocks or changes it, the in-browser timetable flow may return 0 rows when Amtrak serves results without an established booking session. The station, route and train modes always work because they read the public data resources directly.- Stop-order data covers 33 named routes — trains whose service is not in
stopslist.json(or has a section suffix, e.g. "Lake Shore Limited - Boston") emit the train number and service type without a stop list. - Station codes are Amtrak's 3-letter codes — the same codes shown on tickets (
NYP,CHI,BOS), not IATA codes. - Schedules require a valid future date — past departure dates are not served by Amtrak's schedule API.
FAQ
What is the data source? Amtrak's own website (amtrak.com), which publishes the station catalog, route list, train-code map and stop lists as public data resources.
Why does the actor need a browser? Amtrak's CDN blocks plain HTTP clients (verified). The actor loads the public pages in a real browser, which is the only reliable way to read the data.
Where do station codes come from? stationCode is Amtrak's official 3-letter code used in the booking system — the same codes shown on tickets (e.g. NYP = New York Penn Station).
Why do some trains have no stops? The stop-order data (stopslist.json) covers 33 named routes. Trains whose service is not in that file (or whose name has a section suffix, e.g. "Lake Shore Limited - Boston") emit the train number and service type without a stop list. This is an upstream data limitation, not an omission.
Why might search return no records? The primary path uses Amtrak's own schedules API, which returns full schedules for any station pair and date. If Amtrak blocks or changes that API, the actor falls back to the in-browser timetable flow; the widget path can return 0 rows if Amtrak serves the results without an established booking session. The station, route and train modes always work because they read the public data resources directly.
How fresh is the data? Every run reads Amtrak live; scrapedAt records exactly when each record was captured.
What does frequency mean? The days of operation for a schedule, as 3-letter codes (MON, TUE, …). Some schedules run only on certain days.
Is this affiliated with Amtrak? No. This is an independent third-party actor using Amtrak's public website.