How to travel from Surabaya to Jakarta, Indonesia

The distance between Surabaya and Jakarta is around 704km (437 miles) and the quickest way to get there is to fly and then take the bus which takes around 2h 35m.

6 routes found

We've found 6 different ways to get from Surabaya to Jakarta by plane, bus, train and car. The recommended routes, which include information on duration, ticket price, and level of difficulty, can be found below.

👋 Also check out JakartaSurabaya if you're planning a return trip.

1
plane
+

Fly

Fly from Juanda International (SUB) to Jakarta Halim Perdana Kusuma (HLP).

  • Duration2h 40m
  • Flight time1h 20m
  • Typical cost
    IDR 928,635($62)
Operated by

Batik Air

+ 1 others

2 similiar routes

We’ve grouped similar routes together, click the arrows to see the other options.

💰 Cheapest
2
train
+

Train

Take the train to Jakarta Gambir.

  • Duration8h 10m
  • Departsevery 3 hours
  • Typical cost
    IDR 269,605($18)
Operated by

Kereta API

3
bus
+

Bus

Take the bus to Jakarta Pinang Ranti Bus Station.

  • Duration18h 60m
  • Departsonce daily
  • Typical cost
    IDR 389,425($26)
Operated by

Kramat Djati

4
car
+

Drive

Drive to Jakarta.

  • Duration8h 35m
  • Distance779km (484 miles)
Get turn-by-turn directions

Frequently asked questionsabout travel between Surabaya and Jakarta

There are several options for getting from Surabaya to Jakarta by plane, bus, train and car. The cheapest option is to take the train which costs around IDR 269,605 ($18) and will take around 8h 10m. If you need to get there more quickly, you can fly and then take the bus and arrive in approximately 2h 35m, though it is a bit more costly at approximately IDR 808,810 ($54).

The distance between Surabaya and Jakarta is around 704km (437 miles). In a direct line (as the crow flies), the distance is 663km (412 miles)

It takes around 2h 35m to get from Surabaya and Jakarta by plane and bus. If you are travelling by car it will take around 8h 35m to drive there.

The quickest way to get from Surabaya to Jakarta is to fly and then take the bus which takes around 2h 35m and will set you back approx IDR 808,810 ($54).

The cheapest way to travel between Surabaya and Jakarta, if you exclude driving, is to take the train which will typically cost around IDR 269,605 ($18) for a standard one-way ticket.

Train travel

Yes there is a train service that runs between Surabaya and Jakarta. It typically takes around 8h 10m and departs 4 times a day.

Yes there is a direct train service that runs between Surabaya and Jakarta with no changeovers required. The train runs 4 times a day and takes 8h 10m.

Kereta API run train services between Surabaya and Jakarta. Trains depart 4 times a day and will take around 8h 10m, however, this may vary depending on the particular service and whether it runs express or stops all stations.

Bus travel

Yes there is a bus that runs regularly from Surabaya and Jakarta. It typically takes around 18h 60m and departs once daily.

There are no direct bus services that runs from Surabaya to Jakarta. However, you can instead can take several connecting buses with changeovers in Surabaya Bungurasih Station and Jakarta Pinang Ranti Bus Station. These services run once daily and will take a minimum of 18h 60m.

Kramat Djati run regular bus services between Surabaya and Jakarta. Buses run once daily and take around 18h 60m on average but will vary depending on you book with.

Flights and Airlines

Yes you can fly from Surabaya and Jakarta. Flights depart from Juanda International (SUB) and arrive at Jakarta Halim Perdana Kusuma (HLP). The flight takes around 1h 20m.

Yes there is a direct flight between Surabaya and Jakarta with no stop-overs required. Flights typically take around 1h 20m.

Batik Air and Citilink Indonesia fly between Surabaya and Jakarta. Flights depart from Juanda International (SUB) and and arrive into Jakarta Halim Perdana Kusuma (HLP). These flights usually take around 1h 20m.

The flight from Surabaya to Jakarta typically takes around 1h 20m. Flights depart from Juanda International (SUB) and and arrive into Jakarta Halim Perdana Kusuma (HLP).

The closest major airport to Jakarta is Halim Perdanakusuma Airport (HLP) (HLP) which is approximately 12km (8 miles) from Jakarta. Soekarno–Hatta International Airport (CGK) (CGK) and Husein Sastranegara International Airport (BDO) (BDO) are also nearby and might be a better alternative airport depending on where you are flying from.

Drive yourself

Yes it is possible to drive from Surabaya and Jakarta. The distance is around 779km (484 miles) by road and it will take around 8h 35m in normal traffic conditons.

If you don't have a car, the easiest way to get from Surabaya to Jakarta is to fly and then take the bus which takes, on average, 2h 35m and will usually cost around IDR 808,810 ($54).

How do I get from Surabaya to Jakarta

Compare travel optionsbetween Surabaya and Jakarta

Transport options from Surabaya to Jakarta
Transport optionDurationCostFrequencyDistance
Fly + 2 similar
2h 40m
IDR 928,635($62)
hourly704km (437 miles)
Plane and Bus2h 35m
IDR 808,810($54)
hourly742km (461 miles)
Fly to Husein Sastranegara (BDO), Bus4h 45m
IDR 1,557,705($105)
hourly774km (481 miles)
Train
8h 10m
IDR 269,605($18)
every 3 hours718km (446 miles)
Bus
18h 60m
IDR 389,425($26)
once daily800km (497 miles)
Drive
8h 35m
IDR 659,030($44)
on demand779km (484 miles)

Top Carriersoperating between Surabaya and Jakarta

Airlines

Bus companies

Train operators

Airports near Jakarta

The following major airports near Jakarta offer regular flights to various popular destinations within Indonesia and internationally.

HLP
Halim Perdanakusuma Airport (HLP)
Domestic Airport
Distance
12km (8 miles) from Jakarta
CGK
Soekarno–Hatta International Airport (CGK)
International Airport
Distance
20km (12 miles) from Jakarta
BDO
Husein Sastranegara International Airport (BDO)
International Airport
Distance
116km (72 miles) from Jakarta