12go.asia Scraper - Train, Bus, Ferry, Flight Schedules (Asia)
12go.asia Multimodal Transport Scraper
Scrape multimodal transport schedules and fares from 12go.asia. Returns trains, buses, ferries, flights, vans, and private transfers across Thailand, Vietnam, Indonesia, Malaysia, Philippines, Cambodia, Laos, Japan, India, Sri Lanka, and 30+ other countries — with operator names, schedules, fares, ratings, and direct booking links in clean JSON.
12go Asia Scraper Features
- Extracts trip data across all 12go transport modes — train, bus, ferry, flight, van, private transfer, taxi, and mixed multi-segment journeys.
- Returns 24 fields per trip including operator, vehicle class, origin/destination terminals, departure and arrival times, duration, transfers, price, currency, rating, and booking URL.
- Searches by city pair — supply origin, destination, and an optional travel date. Slug resolution is automatic.
- Currency override built in. Pick from USD, EUR, GBP, THB, VND, IDR, MYR, SGD, PHP, JPY, INR, or AUD and prices come back normalized.
- Multi-route batches in a single run — each search executes independently with shared deduplication, so the same trip never appears twice.
- Handles AWS WAF challenges automatically via headless browser. Routes that look hard to scrape are not.
- Residential proxy support out of the box for geo-flexible runs.
Who Uses 12go Asia Data?
- Travel aggregators — feed real-time schedules and fares into route-planning apps without negotiating partner agreements.
- Backpacker booking platforms — rebuild the 12go index with your own filtering and presentation, or just pull in the price-comparison data.
- Tourism startups in Southeast Asia — track operator pricing, route popularity, and seat availability across the region's biggest multimodal booking engine.
- Hostel and accommodation sites — show transport options between properties as a value-add. People book hostels based on how easy it is to get there.
- Travel-tech researchers — analyze pricing trends, operator coverage, and route density across countries that don't surface this data anywhere else.
- Affiliate marketers — generate booking-link inventory for content sites and SEO landing pages.
How 12go Asia Scraper Works
- Provide a list of
{ origin, destination, date? }searches. City names get lowercased and dashed into 12go's URL slugs (e.g.Koh Samuibecomeskoh-samui). - The scraper navigates each search URL through a headless browser. AWS WAF resolves on its own — no captcha solving, no proxy gymnastics.
- Trip cards are parsed from the rendered page. Each card yields one record with operator, mode, schedule, price, rating, and a deep link to the booking page.
- Records flush to the dataset as they're found. Set
maxItemsto cap the total across all searches.
Input
{
"searches": [
{ "origin": "Bangkok", "destination": "Koh Samui" },
{ "origin": "Ho Chi Minh City", "destination": "Phnom Penh", "date": "2026-08-15" }
],
"currency": "USD",
"maxItems": 50,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}
| Field | Type | Default | Description |
|---|---|---|---|
searches |
array of objects | — (required) | List of routes. Each entry has origin (string), destination (string), and optional date (YYYY-MM-DD). |
currency |
string | USD |
Output currency. One of: USD, EUR, GBP, THB, VND, IDR, MYR, SGD, PHP, JPY, INR, AUD. |
maxItems |
integer | 15 |
Maximum total trip records across all searches. |
proxyConfiguration |
object | residential | Apify proxy configuration. Residential is recommended — 12go uses AWS WAF. |
12go Asia Scraper Output Fields
{
"trip_id": "TH1esQ01Mp9DAf0SJ03SPY6d",
"mode": "ferry",
"operator": "Lomprayah",
"vehicle_class": "Ferry with Lomprayah",
"origin_city": "Bangkok",
"origin_terminal": "Khao San Lomprayah, Bangkok",
"origin_country": "",
"destination_city": "Koh Samui",
"destination_terminal": "Maenam Samui, Koh Samui",
"destination_country": "",
"departure_time": "21:30",
"arrival_time": "11:30",
"travel_date": "",
"duration_minutes": 840,
"duration_text": "14h",
"transfers": 0,
"route_summary": "14h | Lomprayah | Ferry",
"labels": "Instant confirmation | Bestseller | Recommended | Most popular class",
"features": "Free cancellation",
"price_total": 44.58,
"price_text": "$44",
"price_currency": "USD",
"rating": 4.4,
"booking_url": "https://12go.asia/en/trip-page/TH1esQ01Mp9DAf0SJ03SPY6d/2026-05-04-21-30-00?position=1&fromSlug=bangkok&toSlug=koh-samui",
"scraped_at": "2026-05-01T15:11:27.919Z"
}
| Field | Type | Description |
|---|---|---|
trip_id |
string | Internal 12go trip ID extracted from the trip detail URL. |
mode |
string | Transport mode: train, bus, ferry, flight, van, private_transfer, taxi, or mixed for multi-segment trips. |
operator |
string | Operator name (Lomprayah, State Railway of Thailand, Bangkok Airways, Giant Ibis, etc.). |
vehicle_class |
string | Human-readable transport label (e.g. Ferry with Lomprayah, Bus, Ferry with Boonsiri). |
origin_city |
string | Origin city as supplied in the search. |
origin_terminal |
string | Departure terminal name — station, pier, airport, or office address. |
origin_country |
string | Origin country (when 12go publishes it; otherwise empty). |
destination_city |
string | Destination city as supplied in the search. |
destination_terminal |
string | Arrival terminal name. |
destination_country |
string | Destination country (when published). |
departure_time |
string | Scheduled departure as HH:MM (24-hour, local time). |
arrival_time |
string | Scheduled arrival as HH:MM (24-hour, local time). |
travel_date |
string | Travel date in YYYY-MM-DD if supplied in the search; otherwise empty. |
duration_minutes |
number | Total duration in minutes, parsed from the route summary. |
duration_text |
string | Duration as displayed (14h, 13h 30m). |
transfers |
number | Number of connections. 0 for direct trips, 1+ for multi-segment journeys. |
route_summary |
string | Route summary line as 12go displays it. |
labels |
string | Trip badges joined by ` |
features |
string | Trip features joined by ` |
price_total |
number | Numeric total price in the selected currency. |
price_text |
string | Price as displayed ($44, £35, ฿1,500). |
price_currency |
string | ISO currency code (USD, THB, EUR, etc.). |
rating |
number | Operator/trip rating from 1 to 5. |
booking_url |
string | Direct deep link to the 12go booking page for this trip. |
scraped_at |
string | ISO 8601 timestamp of the scrape. |
FAQ
How do I scrape 12go.asia transport data?
12go Asia Scraper handles it. Supply a list of city pairs in the searches input, and the scraper resolves them to 12go URL slugs, navigates each one, parses the trip cards, and writes structured JSON to the dataset.
How much does the 12go Asia Scraper cost to run?
Pricing is pay-per-event: $0.10 per actor start, plus $0.002 per trip record. Most runs cost a few cents — a 50-trip search comes in around $0.20. Apify proxy usage is included in the per-record price.
What data can I get from 12go.asia?
Operator name, transport mode, vehicle class, origin and destination terminals, departure/arrival times, duration, number of transfers, total price in your chosen currency, operator rating, trip badges, and a direct booking URL. Twenty-four fields per trip.
Does the 12go Asia Scraper need proxies?
12go Asia Scraper runs through Apify residential proxies by default. 12go uses AWS WAF, which is geo-aware. Residential is recommended for stable runs; you can switch to no proxy or datacenter via the proxyConfiguration input if your use case allows.
Can I get prices in a specific currency?
Yes. Set currency to any of USD, EUR, GBP, THB, VND, IDR, MYR, SGD, PHP, JPY, INR, or AUD. 12go converts in real time and the scraper normalizes the output. The default is USD.
What countries does 12go cover?
Heavy coverage across Southeast Asia — Thailand, Vietnam, Indonesia, Malaysia, Philippines, Cambodia, Laos, Myanmar — plus growing service in Japan, India, Sri Lanka, Turkey, Egypt, Morocco, and more. Some EU routes are bundled via partner integrations.
Need More Features?
Need extra fields, a different output format, or a related scraper? File an issue or get in touch.
Why Use 12go Asia Scraper?
- Affordable — about $0.002 per trip record, with a $0.10 start fee.
- Multimodal coverage — train, bus, ferry, flight, van, and private transfer in a single actor, which is more than the source site's official partners offer in their own APIs.
- Clean structured JSON — 24 fields per trip with consistent names, parsed durations in minutes, and direct booking deep links. No HTML cleanup on your end.