
Ferry
Is Batam a Cheaper Gateway to Jakarta, Yogyakarta and Beyond?
Ferry to Batam, then fly domestic: sometimes it saves money, sometimes it costs more. An honest route-by-route comparison for Singapore travellers heading to Jakarta, Yogyakarta, Sumatra cities and Kuala Lumpur.
Sarah Tan
The Short Answer
The Batam gateway route — ferry from Singapore to Batam, then a domestic flight from Hang Nadim Airport (BTH) — is worth considering in three situations:
- Routes with no direct Singapore service (Pekanbaru, Padang, Palembang): Batam is not a cost hack here, it is the only practical option.
- Yogyakarta when Scoot or Singapore Airlines fares are high (above SGD 130–150 on peak dates): a promotional domestic fare from BTH can undercut the direct ticket.
- You are already in Batam for a weekend and want to fly onward: the ferry cost is sunk, and every BTH domestic fare beats flying from Changi.
For Jakarta, Surabaya or Medan it is rarely worth the extra time and planning. For Kuala Lumpur, it never is. For Bali, there is no direct BTH–Bali flight, so the route does not exist.
All fare ranges below are indicative as of October 2026. Indonesian domestic fares change daily — check Traveloka or Tiket.com with your specific travel date before committing.
Destination Comparison
| Destination | Direct from SIN | Via Batam all-in | Extra travel time | Verdict |
|---|---|---|---|---|
| Jakarta (CGK) | SGD 50–130 | SGD 96–147 | +2–3 h | Usually not worth it |
| Yogyakarta (YIA) | SGD 107–173 | SGD 86–154 | +2–3 h | Worth comparing at peak fares |
| Surabaya (SUB) | SGD 95–159 | SGD 110–161 | +2–3 h | Rarely worth it |
| Medan (KNO) | SGD 80–130 | SGD 89–132 | +3–4 h | Situational |
| Kuala Lumpur (KUL) | SGD 55–70 | SGD 110–125+ | +4 h | Never worth it |
| Pekanbaru (PKU) | No direct flight | SGD 74–111 | — | Clear win via Batam |
| Padang (PDG) | No direct flight | SGD 80–120 | — | Clear win via Batam |
| Palembang (PLM) | No direct flight | SGD 80–120 | — | Clear win via Batam |
| Bali (DPS) | SGD 100–200+ direct from SIN | No direct BTH–DPS flight | — | Fly direct from SIN |
The via-Batam all-in figures include a realistic ferry cost of SGD 40–50 and a Grab transfer from the terminal to the airport. Fares as of October 2026 — check before booking.
The Clear Wins: Routes Without a Singapore Direct Flight
Pekanbaru, Padang and Palembang have no confirmed nonstop service from Changi. The alternative is a connecting flight through Jakarta, which adds a full day and a separate domestic leg. Via Batam, a morning ferry and a short transfer reach Hang Nadim in time for a midday domestic departure — a single-stop journey typically completed in 5–6 hours, substantially faster than the Jakarta transit option.
For Pekanbaru, Padang and Palembang, Batam is the natural route, not a budget trick.
Yogyakarta: Worth Comparing
Yogyakarta is the destination where Singapore travellers are most likely to save meaningful money via Batam. Direct SIN–YIA fares on Scoot or Singapore Airlines typically run SGD 107–173. When those fares spike above SGD 130 during school holidays, Chinese New Year or Hari Raya, Indonesian domestic fares from BTH often remain low: promotional Super Air Jet or Citilink fares start around SGD 57. Add a Sindo Ferry crossing (from SGD 38 all-in) and a Grab to the airport (SGD 6–11), and the total can fall to SGD 86–95 — a saving of SGD 20–70 depending on dates.
The trade-off is 2–3 extra hours of travel and the need to plan and book both tickets carefully. It works best for travellers who are flexible with departure times and book 3–6 weeks ahead.
Jakarta: Usually Not Worth It
Jakarta is the most competitive international route from Singapore. Multiple carriers — Scoot, Singapore Airlines, Batik Air, Citilink, Garuda and others — operate over 20 nonstop flights a day. Promotional Scoot fares start from around SGD 50 and average SGD 91–130. Via Batam, you add SGD 40–50 for the ferry, a Grab transfer, and extend total door-to-airport travel time from roughly 3–4 hours to 5.5–7 hours.
The maths only works when a peak-season SIN–CGK fare is above SGD 130 and a promotional BTH–CGK domestic fare is simultaneously available. That overlap is rare. For most journeys to Jakarta, fly direct from Changi.
Surabaya: Rarely Worth It
Direct SIN–SUB fares on Scoot run SGD 95–159. The via-Batam minimum is around SGD 110, which gives little or no saving at normal fares and adds the same 2–3 hour time penalty as the Jakarta route. Consider it only if the direct fare is above SGD 130 and a promotional BTH–Surabaya fare is available at the same time.
Medan: Situational
Medan (KNO) has the shortest domestic flight from BTH — about 1 hour 30 minutes — which makes the via-Batam figures tightest after Yogyakarta. At promotional fares from BTH, plus a SGD 38–50 ferry, the all-in total can reach SGD 81–93, comparable to direct SIN–KNO fares at the low end. The saving is narrow and comes with 3–4 extra hours of travel. For travellers already in Batam at the end of a weekend, flying to Medan makes excellent sense. For a pure Singapore-origin trip, the case is marginal.
Kuala Lumpur: Never Worth It
The direct SIN–KUL flight takes 40–60 minutes and costs SGD 55–70 on AirAsia or Scoot. Via Batam, the same trip costs SGD 110–125 or more and takes the better part of a day. There is no logical case for the Batam route to KL unless you are already in Batam and want to fly onward to KL without returning to Singapore first.
Bali: The Route That Does Not Exist
There is no direct flight from Hang Nadim Airport to Bali (DPS). A BTH-to-Bali journey requires a connection through Jakarta: about 1 hour 50 minutes to CGK, a minimum 90-minute layover, then another 1 hour 45 minutes to DPS — over five hours in the air, before transfers are added. The direct SIN–DPS flight takes about 2 hours 20 minutes. Fly direct from Changi.
The No-Through-Ticket Risk
This is the most important practical point.
There is no interline agreement between any Batam ferry operator and any airline. Your ferry booking and your flight booking are entirely separate contracts. If the ferry is delayed, the airline owes you nothing — you will need to buy a new ticket at walk-up prices.
Ferry delays are uncommon on normal days, but the northeast monsoon (November through March) can produce rough conditions in the Singapore Strait, and Batam Fast and Sindo Ferry have cancelled or delayed crossings on storm days.
The rule: Book an afternoon flight from Hang Nadim after a morning ferry. Never book the last flight of the day. If you do miss your scheduled flight to Jakarta, there are usually 17 or more daily departures, so a same-day rebook is possible — but at a much higher price.
Choosing Your Singapore Terminal
| Priority | Best option | Why |
|---|---|---|
| Fastest transfer to BTH airport | Tanah Merah → Nongsa (BatamFast only) | Nongsapura is 8–12 km from BTH; Grab takes 10–20 minutes |
| Most sailings and flexibility | HarbourFront → Batam Centre | Sailings every 30–60 minutes; BatamFast, Sindo and Majestic all operate |
| East Singapore / Changi area | Tanah Merah → Batam Centre | MRT direct to Tanah Merah (EW4); less crowded than HarbourFront |
If speed to the airport matters most, use the Nongsa route via Tanah Merah. The trade-off is frequency: BatamFast runs only 3–5 sailings on weekdays and up to 8 on weekends. Check the timetable and book at least 48 hours ahead — miss this sailing and the next one may not arrive for 2–3 hours.
Browse all flights from Batam or individual route pages for schedules and booking links.
Time Buffers
Build in enough time between your ferry departure from Singapore and your BTH flight. These are minimum figures for a quiet weekday; add 30 minutes on weekends and 60–90 minutes on public holidays:
| Ferry route | Minimum Singapore departure to BTH check-in |
|---|---|
| Via Nongsa (Tanah Merah → Nongsa) | 3.5 hours |
| Via Batam Centre (HarbourFront or Tanah Merah → Batam Centre) | 4–4.5 hours |
The crossing itself takes 50–60 minutes. Allow 15–30 minutes for Batam immigration on a normal day (up to 60 minutes on holidays), time for the Grab transfer to BTH, and a minimum 90-minute check-in buffer at the airport.
The safest approach: take the first or second morning ferry and book a midday or early afternoon flight from BTH.
The Return Direction
The last ferry from Batam Centre to Singapore departs at approximately 20:30 WIB (Batam local time, which is 21:30 SGT). The last Nongsapura sailing to Tanah Merah departs around 20:00 WIB — check the current BatamFast timetable, as schedules can change.
To reach the last ferry comfortably, plan to land at Hang Nadim by 15:30–16:00 at the latest. That allows time to collect bags, take a Grab to Batam Centre (25–45 minutes), and check in before the final departure.
If you miss the last ferry, overnight accommodation is available across Batam, and the first morning departure from Batam Centre is around 06:00 local time (07:00 SGT).
Visa and Entry
Singapore citizens enter Indonesia visa-free for up to 30 days — no fee, regardless of whether you enter at Batam or Jakarta.
Other nationalities pay the e-VOA fee once, at whichever Indonesian port you first arrive. You do not pay it twice by routing through Batam. The current fee is IDR 500,000. A fee increase was proposed in August 2026 but had not been confirmed as in force at the time of writing — check evisa.imigrasi.go.id for the current amount before applying.
Entering through Batam means clearing Indonesian immigration at the Batam ferry terminal. That counts as a single entry; onward domestic travel within Indonesia requires no further immigration.
Baggage: Check Before You Book
Indonesian low-cost domestic carriers have smaller free baggage allowances than international carriers, and the allowances change frequently. Do not assume your suitcase is included in the fare. Check the specific allowance on the airline's website at the time of booking, and confirm what the promotional fare tier includes — the cheapest tickets may exclude checked luggage entirely. Adding a bag at the airport costs significantly more than prepaying online.
Travelling with large checked luggage also adds practical friction: standard Grab cars in Batam have limited boot space. For three or more travellers with full-size suitcases, book a GrabCar XL or pre-arrange a van transfer from the ferry terminal to BTH.
Booking Order
- Book the BTH domestic flight first on Traveloka or Tiket.com, ideally 3–6 weeks ahead. Indonesian domestic fares rise sharply in the final two weeks before travel.
- Book the ferry second, choosing a departure that gives the time buffer described above. BatamFast tickets are available at batamfast.com, Sindo at sindoferry.com.sg, or through Klook and KKday.
- Do not book both on the same day unless you have already confirmed fares and availability for each leg independently.