How to travel from Jakarta to Surabaya, Indonesia

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

7 routes found

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

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

1
plane
+

Fly

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

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

Batik Air

+ 1 others

3 similiar routes

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

💰 Cheapest
2
train
+

Train

Take the train to Surabaya Pasar Turi.

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

Kereta API

1 similiar route

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

3
car
+

Drive

Drive to Surabaya.

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

Frequently asked questionsabout travel between Jakarta and Surabaya

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

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

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

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

The cheapest way to travel between Jakarta and Surabaya, 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 Jakarta and Surabaya. It typically takes around 9h 30m and departs 4 times a day.

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

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

Bus travel

Sorry, looks like there is no bus service that runs between Jakarta and Surabaya. We recommend that you take the bus to Toll Sedyatmo then fly from Soekarno–Hatta (CGK) to Juanda International (SUB). instead which will take 2h 35m.

Flights and Airlines

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

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

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

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

The closest major airport to Surabaya is Juanda International Airport (SUB) (SUB) which is approximately 16km (10 miles) from Surabaya. Abdul Rachman Saleh Airport (MLG) (MLG) and Blimbingsari Airport (BWX) (BWX) 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 Jakarta and Surabaya. The distance is around 779km (484 miles) by road and it will take around 8h 30m in normal traffic conditons.

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

How do I get from Jakarta to Surabaya

Compare travel optionsbetween Jakarta and Surabaya

Transport options from Jakarta to Surabaya
Transport optionDurationCostFrequencyDistance
Fly + 3 similar
2h 45m
IDR 928,635($62)
hourly702km (436 miles)
Bus and Plane2h 35m
IDR 823,790($55)
hourly752km (468 miles)
Plane and Train4h 20m
IDR 1,437,885($95)
once daily832km (517 miles)
Bus to Dipati Ukur, Fly4h 40m
IDR 1,407,930($95)
hourly770km (479 miles)
Train + 1 similar
9h 30m
IDR 269,605($18)
every 3 hours718km (446 miles)
Train to Gubeng11h 45m
IDR 299,560($20)
once daily827km (514 miles)
Drive
8h 30m
IDR 659,030($44)
on demand779km (484 miles)

Top Carriersoperating between Jakarta and Surabaya

Airlines

Bus companies

Train operators

Airports near Surabaya

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

SUB
Juanda International Airport (SUB)
International Airport
Distance
16km (10 miles) from Surabaya
MLG
Abdul Rachman Saleh Airport (MLG)
Domestic Airport
Distance
76km (47 miles) from Surabaya
BWX
Blimbingsari Airport (BWX)
Domestic Airport
Distance
213km (132 miles) from Surabaya