Vietnam Transit Scraper - VNR Trains & Intercity Bus avatar

Vietnam Transit Scraper - VNR Trains & Intercity Bus

Pricing

Pay per event

Go to Apify Store
Vietnam Transit Scraper - VNR Trains & Intercity Bus

Vietnam Transit Scraper - VNR Trains & Intercity Bus

Vietnam transit via Vexere: Vietnam Railways (Reunification Express, Hà Nội-Sa Pa sleeper) with train numbers, seat-class fares in VND, bilingual VI/EN station names, plus intercity buses with sleeper-bed/cabin types and pickup/dropoff points.

Pricing

Pay per event

Rating

0.0

(0)

Developer

BowTiedRaccoon

BowTiedRaccoon

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

6 days ago

Last modified

Categories

Share

Vietnam Transit Scraper — VNR Trains & Intercity Bus

Scrape Vietnam transit data from the Vexere aggregator, the largest Vietnamese ticket platform. Returns Vietnam Railways (VNR) train schedules — including the Reunification Express Hà Nội ↔ HCMC and the Hà Nội ↔ Sa Pa sleeper — alongside intercity bus services across major operators, with bilingual Vietnamese / English station names and fares in Vietnamese đồng.


Vietnam Transit Scraper Features

  • Returns Vietnam Railways (VNR) services with train numbers (SE1, SE3, SE5, SNT2, ...) and seat-class information.
  • Surfaces intercity buses across major Vietnamese carriers (Phương Trang/Futa, Hoàng Long, The Sinh Tourist, Mai Linh) with bus-type detail — Sleeper Bed, Sleeper Cabin, Seat 45, Limousine 9.
  • Three modes — daily_summary for aggregate counts and fare ranges, train_search for per-train listings, bus_search for per-trip listings. Pick what you need, skip what you don't.
  • Bilingual fields: every station carries a Vietnamese name with diacritics and an English fallback. The data isn't useful if half your team can't read it.
  • Sleeper detection — flags overnight services so you can filter to the trains and cabin buses people actually book for the journey.
  • Bus pickup and dropoff points include district names and lat/lon coordinates. Geocoded out of the box.
  • No browser, no proxy required. Pure JSON API, fast and cheap.
  • Pay-per-event pricing: $0.10 per actor start + $0.001 per record.

What Can You Do With Vietnam Transit Data?

  • Travel apps & itinerary planners — Power Hà Nội ↔ Sa Pa sleeper bookings or Reunification Express search without scraping the official VNR site, which is gated behind login plus an obfuscated payload cipher.
  • Tourism platforms — Track inventory, fare ranges, and seat-class availability for popular backpacker corridors (Hà Nội–HCMC, Đà Nẵng–Huế, HCMC–Đà Lạt).
  • MaaS startups — Index intercity bus operators across Vietnam in one schema. Vexere covers ~500 carriers; you'd otherwise need to scrape each operator's site.
  • Price-tracking dashboards — Daily summary mode emits min/max/avg fares per A→B/date. Run it nightly, plot the curve.
  • SE Asia rail enthusiasts — Pull the full SE1–SE10 + SNT timetable on any date. The dataset includes carriage types and distances.

How Vietnam Transit Scraper Works

  1. Pick a mode — daily_summary, train_search, or bus_search.
  2. Provide an origin and destination by city name (English, Vietnamese, with or without diacritics) or numeric Vexere city ID. The scraper resolves Hà Nội, HCMC, Đà Nẵng, Sa Pa, Đà Lạt, Nha Trang, Huế, Hội An, and 20+ other cities out of the box.
  3. The scraper hits Vexere's internal-vroute.vexere.com API with a static FE Bearer token and polls until inventory populates (a few seconds for fresh queries). It handles the polling for you.
  4. Records flow into the dataset with a stable schema, ready for export to CSV, JSON, or Excel.

Input

{
"mode": "train_search",
"origin": "Hanoi",
"destination": "Ho Chi Minh City",
"date": "",
"sleeperOnly": false,
"maxItems": 15
}
FieldTypeDefaultDescription
modestringtrain_searchOne of daily_summary, train_search, bus_search.
originstringHanoiOrigin city. English, Vietnamese with or without diacritics.
destinationstringHo Chi Minh CityDestination city, same format as origin.
originCityIdinteger(none)Override: numeric Vexere city ID. Use when the city isn't in the lookup table.
destinationCityIdinteger(none)Override: numeric Vexere city ID.
datestringtoday + 7 (ICT)Travel date, YYYY-MM-DD. Empty defaults to a week out.
sleeperOnlybooleanfalseFilter to overnight sleeper trains and sleeper-cabin buses.
maxItemsinteger15Maximum records returned. Tester runs the default; raise for production.
proxyConfigurationobject{ "useApifyProxy": false }Proxy not required.

Bus search example (Hà Nội → Sa Pa):

{
"mode": "bus_search",
"origin": "Hanoi",
"destination": "Sapa",
"maxItems": 50
}

Daily summary example (HCMC → Nha Trang):

{
"mode": "daily_summary",
"origin": "Ho Chi Minh City",
"destination": "Nha Trang",
"date": "2026-06-15"
}

Vietnam Transit Scraper Output Fields

Train search (mode: "train_search")

{
"record_type": "train",
"service_id": "VNR|SE7|2026-05-08|06:00|HNO|SGO",
"operator": "Vietnam Railways Corporation",
"operator_code": "VNR",
"service_type": "rail",
"origin_station": "Hà Nội",
"origin_station_en": "Ha Noi",
"origin_station_code": "HNO",
"destination_station": "Sài Gòn",
"destination_station_en": "Saigon",
"destination_station_code": "SGO",
"departure_date": "2026-05-08",
"departure_time": "06:00",
"arrival_date": "2026-05-09",
"arrival_time": "17:35",
"duration_minutes": 2495,
"train_number": "SE7",
"seats_available": 117,
"distance_km": 1726,
"is_sleeper": true,
"route_url": "https://vexere.com/",
"scraped_at": "2026-05-01T16:38:29.217Z"
}
FieldTypeDescription
record_typestringtrain.
service_idstringVexere idIndex — VNR|<train>|<date>|<time>|<from-code>|<to-code>.
operatorstringVietnam Railways Corporation.
operator_codestringVNR.
service_typestringrail.
origin_stationstringVietnamese name with diacritics.
origin_station_enstringEnglish / diacritic-stripped fallback.
origin_station_codestring3-letter VNR code (HNO, SGO, DNA, ...).
destination_stationstringVietnamese destination.
destination_station_enstringEnglish destination.
destination_station_codestring3-letter VNR code.
departure_datestringYYYY-MM-DD (ICT).
departure_timestringHH:MM (ICT).
arrival_datestringYYYY-MM-DD (ICT).
arrival_timestringHH:MM (ICT).
duration_minutesnumberTotal journey duration.
train_numberstringSE1, SE3, SE5, SNT2, ...
seats_availablenumberTotal available seats across carriages.
distance_kmnumberRoute distance in km.
is_sleeperbooleanTrue for SE-class and SNT night trains.
route_urlstringVexere homepage for verification.
scraped_atstringISO-8601 extraction timestamp.

Bus search (mode: "bus_search")

{
"record_type": "bus",
"service_id": "473571045_2026-05-08_23:46_178500_178508",
"operator": "HK BUSLINES",
"service_type": "bus_intercity",
"origin_station": "Văn phòng 70 Nguyễn Hữu Huân",
"origin_station_en": "Van phong 70 Nguyen Huu Huan",
"destination_station": "Văn phòng 732 Điện Biên Phủ",
"destination_station_en": "Van phong 732 Dien Bien Phu",
"departure_date": "2026-05-08",
"departure_time": "23:46",
"arrival_date": "2026-05-09",
"arrival_time": "05:31",
"duration_minutes": 345,
"distance_km": 318,
"bus_type": "Sleeper Cabin",
"is_sleeper": true,
"pickup_points": [
"Trạm Buýt Bầu | Đông Anh | 21.12936,105.77987",
"Sân bay Nội Bài (Ga Quốc Tế) | Sóc Sơn | 21.21702,105.79323"
],
"dropoff_points": [
"Văn phòng 732 Điện Biên Phủ | Sa Pa | 22.34064,103.84035",
"Trả tại thị trấn Sapa | Sa Pa | 22.33831,103.83642"
],
"scraped_at": "2026-05-01T16:40:29.327Z"
}
FieldTypeDescription
record_typestringbus.
service_idstringVexere internal trip ID.
operatorstringBus company name (Phương Trang, Hoàng Long, The Sinh Tourist, ...).
service_typestringbus_intercity.
bus_typestringSleeper Bed, Sleeper Cabin, Seat, Limousine, ...
origin_station / _enstringPickup-area name (Vietnamese / English).
destination_station / _enstringDropoff-area name.
departure_date / _timestringScheduled departure (ICT).
arrival_date / _timestringScheduled arrival (ICT).
duration_minutesnumberJourney duration.
distance_kmnumberRoute distance.
is_sleeperbooleanTrue for sleeper-bed and sleeper-cabin buses.
pickup_pointsarrayUp to 10 pickup points; each entry is name | district | lat,lon.
dropoff_pointsarrayUp to 10 dropoff points; same format.
scraped_atstringISO-8601 timestamp.

Daily summary (mode: "daily_summary")

{
"record_type": "daily_summary",
"service_id": "vnr-summary-92-77-2026-05-08",
"operator": "Vietnam Railways Corporation",
"operator_code": "VNR",
"service_type": "rail",
"origin_station": "Ga Sài Gòn",
"origin_station_en": "Sai Gon Railway Station",
"destination_station": "Ga Nha Trang",
"destination_station_en": "Nha Trang Railway Station",
"departure_date": "2026-05-08",
"departure_time": "06:00",
"duration_minutes": 428,
"min_fare_vnd": 403000,
"max_fare_vnd": 1973000,
"avg_fare_vnd": 836571,
"distance_km": 411,
"service_count": 7,
"train_types_available": ["SE10", "SE2", "SE22", "SE4", "SE6", "SE8", "SNT2"],
"seat_classes": [
"NAM:Soft seat AC (Ngồi Mềm)",
"NGM:Soft sleeper AC 4-berth (Nằm Giường Mềm)",
"NAC:Hard seat (Ngồi Cứng)"
],
"is_sleeper": true,
"scraped_at": "2026-05-01T16:38:51.812Z"
}
FieldTypeDescription
record_typestringdaily_summary.
service_countnumberNumber of trains running on the date.
min_fare_vnd / max_fare_vnd / avg_fare_vndnumberDaily fare range and mean in VND.
train_types_availablearrayTrain numbers running that day.
seat_classesarrayAvailable carriage codes with bilingual labels.
duration_minutesnumberAggregate route duration.
distance_kmnumberRoute distance.

FAQ

How do I scrape Vietnam Railways train schedules?

Vietnam Transit Scraper hits Vexere's aggregator API, which republishes the official VNR (dsvn.vn) inventory. The official site requires login plus a custom encryption layer for search; Vexere is the cleaner path. Set mode: "train_search", pick origin and destination, and you get train numbers, times, durations, and seat counts.

Does this scraper need a proxy?

Vietnam Transit Scraper does not need a proxy. Vexere is publicly reachable from anywhere; the static FE Bearer token authenticates the call. If you opt in via proxyConfiguration for high-volume runs, the scraper handles the LIMITED_PERMISSIONS proxy flow correctly.

How much does it cost to run?

Vietnam Transit Scraper costs $0.10 per actor start + $0.001 per record. A typical Hà Nội → HCMC train search returns 5–10 records, so a single run is well under a cent of record cost. Bus searches on popular corridors return 30–100+ records, still in the fraction-of-a-dollar range.

Can I search by Vietnamese station names with diacritics?

Vietnam Transit Scraper resolves Hà Nội, Đà Nẵng, Hồ Chí Minh, Sài Gòn, Sa Pa, and similar Vietnamese forms with or without tone marks. The English fallback works too — Hanoi, Da Nang, HCMC, Saigon, Sapa. If you need a city not in the built-in lookup, pass the numeric Vexere ID via originCityId / destinationCityId.

What's the difference between the three modes?

daily_summary returns one aggregate record per A→B/date — fare range, train types, count. Fast and lightweight. train_search returns one record per running train, with departure times and seat availability. bus_search does the same for intercity buses, plus pickup/dropoff geocodes. Pick train_search for booking-class detail; pick daily_summary for price-tracking dashboards.


Need More Features?

Need additional fields, bus operators, or a different target site? File an issue or get in touch.

Why Use Vietnam Transit Scraper?

  • No bot war required — Vexere ships a static client-side Bearer token; we capture once and replay. No CAPTCHAs, no proxy gymnastics.
  • Bilingual data out of the box — every station carries a Vietnamese name with diacritics and an English fallback. The data is usable downstream without a second extraction pass.
  • Cheaper than building it yourself — $0.001 per record on Apify's pay-per-event pricing beats the time cost of reverse-engineering dsvn.vn's payload cipher and OAuth dance.