Malaysia Transit โ KTMB Rail & Easybook Bus Routes
Pricing
Pay per event
Malaysia Transit โ KTMB Rail & Easybook Bus Routes
Scrape Malaysian transit data: KTMB rail stations (ETS, Intercity, Komuter โ ~150 stations with IDs and state groupings) and Easybook intercity bus routes (80+ routes with distance, duration, and city-pair metadata). Transit network graph for travel apps, MaaS platforms, and mapping services.
Pricing
Pay per event
Rating
0.0
(0)
Developer
Actor stats
0
Bookmarked
3
Total users
0
Monthly active users
13 days ago
Last modified
Share
Malaysia Transit Scraper โ KTMB Rail & Easybook Bus Routes
Extracts Malaysian public transit network data from two sources: the KTMB rail station directory and the Easybook intercity bus route catalog. Delivers the station and route graph used by travel apps, MaaS platforms, and regional mapping services โ without requiring live schedule queries or CAPTCHA solving.
Malaysia Transit Scraper Features
- Scrape KTMB rail stations across Peninsular Malaysia โ ~150 stations covering ETS, Intercity, and Komuter lines with numeric station IDs and state groupings
- Scrape the Easybook intercity bus route catalog โ 400+ Malaysia routes with city-pair metadata including distance, average journey duration, and operator count
- Filter by data source: KTMB rail only, Easybook bus only, or both in a single run
- Cap results with
maxItemsfor sampling or testing without pulling the full catalog - Runs on Malaysian residential proxy for geo-consistent content
- Handles rate limiting and retries automatically via CoreCrawler
Who Uses Malaysian Transit Data?
- MaaS platforms โ bootstrap a Malaysia transit network graph without manually compiling station lists from PDFs or timetable PDFs
- Travel apps โ populate route finders and journey planners with real station IDs and city-pair links
- Regional mapping services โ overlay rail and bus networks on maps using structured place IDs and geographic metadata
- Transport researchers โ analyze intercity connectivity, route coverage, and operator presence across Peninsular Malaysia
- Developers โ integrate KTMB station IDs directly with the KTMB booking API for downstream automation
How Malaysia Transit Scraper Works
- Select which data source to scrape: KTMB rail stations, Easybook bus routes, or both.
- For KTMB, the scraper fetches the timetable search page and extracts the embedded
groupedStationsJSON โ all ~150 stations with their IDs, names, lines, and state groupings, no CAPTCHA required. - For Easybook, the scraper fetches the Malaysia bus route directory, collects all route links, and visits each route page to extract static metadata: distance, average duration, operator count, and from/to place IDs from the embedded search view model.
- Results are saved as flat records. KTMB and Easybook records share the same schema with null fields for inapplicable columns.
Input
{"dataSource":"all","maxItems":15}
| Field | Type | Default | Description |
|---|---|---|---|
dataSource | String | "all" | Which sources to scrape. Options: "all", "ktmb_stations", "easybook_routes". |
maxItems | Integer | 15 | Maximum records to return across all sources. |
proxyConfiguration | Object | Malaysian residential | Apify proxy configuration. Defaults to MY residential proxy for geo-consistent results. |
KTMB Stations Only
{"dataSource":"ktmb_stations","maxItems":150}
Easybook Bus Routes Only
{"dataSource":"easybook_routes","maxItems":100}
Malaysia Transit Scraper Output Fields
KTMB Rail Station Record
{"record_type":"ktmb_station","source":"KTMB","station_id":"19100","station_name":"KL SENTRAL","line":"ETS / Intercity","state":"Kuala Lumpur","from_city":null,"from_place_id":null,"to_city":null,"to_place_id":null,"distance_km":null,"avg_duration_mins":null,"operator_count":null,"route_url":null}
Easybook Bus Route Record
{"record_type":"easybook_route","source":"Easybook","station_id":null,"station_name":null,"line":null,"state":null,"from_city":"Kuala Lumpur","from_place_id":"2","to_city":"Penang","to_place_id":"5","distance_km":351.0,"avg_duration_mins":294,"operator_count":12,"route_url":"https://www.easybook.com/en-my/bus/booking/kualalumpur-to-penang"}
| Field | Type | Description |
|---|---|---|
record_type | String | Record type: ktmb_station or easybook_route |
source | String | Data source name: KTMB or Easybook |
station_id | String | KTMB numeric station ID (KTMB records only) |
station_name | String | KTMB station name in uppercase (KTMB records only) |
line | String | Train line or service type โ ETS / Intercity / Komuter (KTMB records only) |
state | String | Malaysian state where the station is located (KTMB records only) |
from_city | String | Origin city for the bus route (Easybook records only) |
from_place_id | String | Easybook internal place ID for the origin city |
to_city | String | Destination city for the bus route (Easybook records only) |
to_place_id | String | Easybook internal place ID for the destination city |
distance_km | Number | Route distance in kilometres (Easybook records only) |
avg_duration_mins | Number | Average journey duration in minutes (Easybook records only) |
operator_count | Number | Number of bus operators serving this route (Easybook records only) |
route_url | String | Easybook route page URL (Easybook records only) |
Scope and Limitations
This scraper extracts the static transit network directory โ station catalogs and route metadata. It does not extract:
- Live departure times or timetables (gated behind CAPTCHA on both KTMB and Easybook)
- Fare prices or seat availability (CAPTCHA-gated)
- Real-time service status or disruptions
The station and route data changes infrequently and is stable for use in network graph construction, mapping overlays, and app bootstrapping.
