Thailand Transit Scraper — SRT, BTS Skytrain & ARL Red Line
Pricing
Pay per event
Thailand Transit Scraper — SRT, BTS Skytrain & ARL Red Line
Extract Thailand transit data from three sources: SRT station catalog (~750 stations, bilingual Thai/English), BTS Skytrain stations with first/last train times (~119 stations), and ARL Red Line departure timetables. Outputs fares in THB, line assignments, and service direction data.
Pricing
Pay per event
Rating
0.0
(0)
Developer
BowTiedRaccoon
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 days ago
Last modified
Share
Scrapes transit data from three Thai public transport networks: the State Railway of Thailand (SRT), BTS Skytrain, and the SRT Red Line. Returns bilingual station catalogs (Thai + English), first/last service times, fare data in THB, and departure timetables — around 870 records per full run.
What Thailand Transit Scraper Extracts
- SRT stations — ~750 stations across four lines (North, Northeast, East, South), with bilingual Thai and English names, station codes, and line assignments
- BTS Skytrain stations — ~119 stations on the Sukhumvit, Silom, and Gold lines, with first and last train times per station, latitude/longitude, and line colors
- ARL Red Line timetables — hourly departure schedules for the two Red Line routes (Bangkok Aphiwat to Rangsit and Bangkok Aphiwat to Taling Chan), stored as structured JSON
- Operator filter — run all three sources together or target a single operator (SRT, BTS, or ARL)
- Bilingual output — every station record includes both Thai script (
station_name_th) and English romanization (station_name_en), which is more than you'll get from a Google search
Who Uses Thailand Transit Data?
- Travel app developers — build station selectors, route planners, and schedule widgets for Bangkok tourism apps
- SE Asia trip-planning platforms — populate stop data, transit options, and fare estimates for multi-modal itinerary builders
- Thailand MaaS startups — seed the station database for mobility-as-a-service products integrating SRT, BTS, and urban rail
- Data journalists and researchers — map transit access, coverage gaps, and service hours for urban mobility analyses
- Expat and digital-nomad tools — help newcomers navigate Bangkok's overlapping rail networks with accurate bilingual data
How It Works
- Select your operator. Set
operatortoany,srt,bts, orarl. The default pulls all three sources in sequence. - SRT station catalog. Posts to the D-Ticket API, receives all ~750 stations in one response, filters active entries, and emits
srt_stationrecords. - BTS station list and service times. Posts to the EBM route-map API for all stations, then fetches first/last train times per station with bounded concurrency.
- ARL timetable. Fetches the SRTET fare-timetable page, parses the HTML departure tables, and returns structured hourly schedules as JSON strings.
Thailand Transit Scraper Input Fields
{"operator": "any","includeFares": false,"maxItems": 15,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "TH"},"sp_intended_usage": "Transit data for Bangkok travel app","sp_improvement_suggestions": "none"}
| Field | Type | Default | Description |
|---|---|---|---|
operator | string | "any" | Which network to scrape: any, srt, bts, or arl |
includeFares | boolean | false | Reserved for future BTS fare-per-pair calculations |
maxItems | integer | 15 | Maximum total records to return; set higher for full datasets |
proxyConfiguration | object | Thai residential | Apify proxy config; Thai residential recommended for geographic consistency |
sp_intended_usage | string | — | Required: describe your intended use of this data |
sp_improvement_suggestions | string | — | Required: feedback or "none" |
Thailand Transit Scraper Output Fields
Records come in three types, set by record_type. Each type populates a different subset of fields.
SRT Station (srt_station)
{"record_type": "srt_station","operator": "SRT","service_id": "1001","station_name_en": "Hua Lamphong","station_name_th": "หัวลำโพง","station_code_en": "HLP","station_code_th": "หลป","line": "SRT South","line_id": "4","scraped_at": "2025-11-01T08:30:00.000Z"}
| Field | Type | Description |
|---|---|---|
record_type | string | srt_station |
operator | string | SRT |
service_id | string | Internal station ID |
station_name_en | string | Station name in English |
station_name_th | string | Station name in Thai script |
station_code_en | string | English station code (e.g. HLP) |
station_code_th | string | Thai station code |
line | string | Line name: SRT North, SRT Northeast, SRT East, or SRT South |
line_id | string | Numeric line identifier as string |
scraped_at | string | ISO 8601 timestamp |
BTS Station (bts_station)
{"record_type": "bts_station","operator": "BTS","service_id": "42","station_name_en": "Asok","station_name_th": "อโศก","line": "Sukhumvit Line","line_color": "#009C3B","station_key": "E4","station_order": "4","latitude": 13.7363,"longitude": 100.5606,"first_train_to_end": "05:56","first_train_to_start": "06:10","last_train_to_end": "24:00","last_train_to_start": "23:48","scraped_at": "2025-11-01T08:30:00.000Z"}
| Field | Type | Description |
|---|---|---|
record_type | string | bts_station |
operator | string | BTS |
service_id | string | BTS internal station ID |
station_name_en | string | Station name in English |
station_name_th | string | Station name in Thai script |
line | string | Sukhumvit Line, Silom Line, or Gold Line |
line_color | string | Hex color code for the line |
station_key | string | BTS line key (e.g. N8, S6, G1) |
station_order | string | Sequence number on the line |
latitude | number | Station latitude |
longitude | number | Station longitude |
first_train_to_end | string | First train toward end of line (HH:MM) |
first_train_to_start | string | First train toward start of line (HH:MM) |
last_train_to_end | string | Last train toward end of line (HH:MM) |
last_train_to_start | string | Last train toward start of line (HH:MM) |
scraped_at | string | ISO 8601 timestamp |
ARL Schedule (arl_schedule)
{"record_type": "arl_schedule","operator": "ARL","service_id": "arl_Bangkok_Aphiwat_Rangsit","station_name_en": "Bangkok Aphiwat","line": "ARL Red Line","line_color": "#FF0000","direction_from": "Bangkok Aphiwat","direction_to": "Rangsit","first_train_to_end": "05:43","last_train_to_end": "23:30","schedule_json": "[{\"hour\":5,\"minutes\":[43]},{\"hour\":6,\"minutes\":[0,15,30,45]},...]","scraped_at": "2025-11-01T08:30:00.000Z"}
| Field | Type | Description |
|---|---|---|
record_type | string | arl_schedule |
operator | string | ARL |
service_id | string | Route identifier string |
direction_from | string | Departure origin station |
direction_to | string | Departure destination station |
first_train_to_end | string | First departure time (HH:MM) |
last_train_to_end | string | Last departure time (HH:MM) |
schedule_json | string | Full hourly schedule as JSON string |
scraped_at | string | ISO 8601 timestamp |
🔍 FAQ
How do I scrape Thailand transit station data?
Thailand Transit Scraper handles it in one run. Set operator to any to pull all three networks simultaneously, or target a single one (srt, bts, or arl) if you only need a subset. Full datasets return in under 2 minutes.
What data can I get from the BTS Skytrain API?
Thailand Transit Scraper returns all ~119 BTS stations across the Sukhumvit, Silom, and Gold lines, with bilingual names, GPS coordinates, line colors, station keys (e.g. N8, S6), and first/last service times per direction. That covers everything you need to build a station selector or schedule widget.
How much does Thailand Transit Scraper cost to run?
At the default pay-per-event rate, a full run costs roughly $0.001 per record — around $0.87 for all ~870 records. Test runs with maxItems: 15 are negligible.
Does Thailand Transit Scraper need proxies?
Thailand Transit Scraper uses Thai residential proxies by default. The BTS API performs geographic checks, so a Thai IP is recommended. The SRT and ARL sources work without proxies, but the default configuration keeps everything consistent.
Why is MRT Bangkok not included?
The MRT Bangkok site (metro.bemplc.co.th) is behind an Imperva WAF that requires full browser rendering to bypass. It's out of scope for this actor.
Need More Features?
Need MRT Bangkok, fare pair calculations, or a different operator? File an issue on the actor page or contact us through the Apify console.
Why Use Thailand Transit Scraper?
- Bilingual by default — every SRT and BTS record includes both Thai script and English romanization, saving the translation step that other sources skip
- Three networks, one run — SRT station catalog, BTS schedule data, and ARL timetables in a single actor with a single operator filter, which is more efficient than maintaining three separate scrapers
- Structured schedule output — ARL departures come as parseable JSON arrays, not raw strings scraped from a timetable page