Skip to content
induwara.lk
Premium
induwara.lkSri Lanka · Travel

Sri Lanka Inter-Provincial Bus Timetable (Normal Road)

The departure, stop and arrival times the National Transport Commission prints for normal-road inter-provincial buses — Colombo to Kandy, Anuradhapura, Kurunegala, Kegalle, Gampola and Balangoda, plus Kandy to Kurunegala and Kegalle. Pick a corridor and a time; it lists the buses that leave after it. No signup, no ads, every sheet cited.

By Induwara AshinsanaUpdated Sep 26, 2026
Next inter-provincial busRoute 01
NTC sheet · verified 2026-09-26

Departure, stop and arrival times exactly as the National Transport Commission prints them on the running panel for each route. Pick a corridor, a direction, a service class and a time.

8normal-road corridors transcribed from NTC's own sheets. Expressway routes live on the highway bus page.

Direction

NTC prints 2 classes for this corridor.

24-hour clock, Sri Lanka time. Starts at the time it is in Colombo now.

Between 1 and 12.

Operators

SLTB and private buses share one cycle on these corridors, so they run off the same panel.

Jump to
First bus of the day
00:00
SLTB · arrives 04:10
Last bus of the day
23:40
SLTB · arrives 03:50 next day
Typical gap
7 min
183 buses on this panel
Journey time
4 h 10 min
Median of every end-to-end pair printed

Next 5 buses

  • 06:0310:13
    SLTB4 h 10 min · in 3 min

    Nittambuwa 07:43 · Kegalle 08:43

  • 06:1010:20
    C-124 h 10 min · in 10 min

    Nittambuwa 07:50 · Kegalle 08:50

  • 06:1710:27
    SLTB4 h 10 min · in 17 min

    Nittambuwa 07:57 · Kegalle 08:57

  • 06:2410:34
    C-134 h 10 min · in 24 min

    Nittambuwa 08:04 · Kegalle 09:04

  • 06:3110:41
    SLTB4 h 10 min · in 31 min

    Nittambuwa 08:11 · Kegalle 09:11

Sources citedData integrity: all rows pass

01 Kandy - Colombo Normal Panal.pdf — මහනුවර - කොළඹ (මාර්ග අංක : 01). Route 01, Colombo → Kandy, Normal, 116 km at the 31 km/h the sheet prints, in force from 2020-02-12.

The ordinary bus: three-and-two seating, windows open, stops wherever passengers are waiting. Cheapest fare and the most frequent service on every corridor here.

Cross-check: the sheet's printed running time of 4 h 10 min matches the median of the 366 end-to-end departure–arrival pairs transcribed from it.

Leg cross-check: 3 of 3 leg times the footer prints match the gaps in the rows themselves — Colombo–Nittambuwa 1 h 40 min, Nittambuwa–Kegalle 1 h, Kegalle–Kandy 1 h 30 min.

The Normal panel runs round the clock: the first departure from either end is 00:00 and the last is 23:40, so there is a Kandy–Colombo bus at every hour of the night.

The Luxury sheet prints only the two terminals, not the intermediate stops, so no Nittambuwa or Kegalle time is shown for those turns.

NTC publishes a separate Luxury sheet for special days (dated 2026-02-13) that is not transcribed here.

A turn on the sheet is not a guarantee an operator ran it. If a bus does not show, NTC's passenger hotline is 1955. Open this route's NTC sheet (PDF) · NTC timetable index

How it works

There is no modelling anywhere in this tool. Every time on the page was read off a National Transport Commission running panel — the per-route PDF NTC publishes under the National Transport Commission Act No. 37 of 1991 — and the code does two things with them: it selects the printed rows whose departure is at or after the time you ask about, and it subtracts two printed times to get a duration. It never derives a time from a distance, and it never averages one route's times into another's.

Where the sheets come from

NTC's timetable index page links three Google Drive folders. The normal-road folder holds four sub-folders, one per service class, and a sheet per route inside each. Every route below records the Drive file id of its own sheet, so the download URL can be rebuilt and the claim checked: drive.google.com/uc?export=download&id=<id>. Sheets with a text layer were read with pdftotext -layout. The Sinhala column headers are in a legacy font encoding that the text dump mangles, so every header, footer and run label was read a second time off a rendered image of the page rather than trusted from the text.

Selecting the buses

Given a corridor, a direction, a service class and a time t, the tool returns the first n rows whose departure is >= t. The comparison is greater-than-or-equal, not greater-than, so a bus leaving at exactly the minute you asked about still counts — you can catch the bus that is leaving now, and excluding it would answer the "first bus of the day" question with the second bus.

Journey and leg times

A journey is arrival − departurein minutes, with a single midnight rollover: when a printed time is smaller than the one before it in the same row, 24 hours are added. That case is real, not theoretical. The last bus out of Colombo on route 01 leaves at 23:40 and reaches Kandy at 03:50, so its arrival is stored as 1,430 minutes past midnight and the journey comes out at 250 minutes — 4 hours 10, exactly what the sheet's footer says. A naive subtraction would report minus 19 hours 50. Leg times use the same rule and are shown beside the leg times the sheet itself prints in its footer, as a visible cross-check.

Nothing is recomputed from distance

NTC's route 01 sheet prints 116.0 km, a running time of 4 hours 10 and an average speed of 31.0 km/h. But 116 ÷ 4.1667 is 27.8 km/h, so NTC's speed figure is measured on some other basis — the route 15-1 sheet notes that 15 minutes of driver rest sits inside its running time, which is the sort of thing that explains the gap. The page prints NTC's figures as NTC prints them and derives no speed of its own.

How the data checks itself

Two functions run on every page load. validateTimetable() walks all 1,079 transcribed rows and asserts that each has one time per stop column, that every arrival falls after its departure, that no journey lands outside a 30-to-480-minute band, and that departures appear in the order the sheet prints them. It currently reports no problems. crossCheckJourney()recomputes each class's journey time as the median of its own end-to-end rows and compares that with the running time printed in the sheet footer — two independent numbers off the same PDF, so a transcription that slipped a column stops agreeing. 10 of the 10 class panels agree.

Worked examples

Colombo → Kandy, route 01, Normal, asking at 06:00

Sheet: 01 Kandy - Colombo Normal Panal.pdf · in force from 2020-02-12

  1. The Colombo-end block prints five columns: arrival at Colombo, departure
  2. from Colombo, Nittambuwa, Kegalle, Kandy. Only the second is a departure.
  3. Rows whose departure is at or after 06:00, in order:
  4. SLTB 06:03 → Nittambuwa 07:43 → Kegalle 08:43 → Kandy 10:13
  5. C-12 06:10 → 07:50 → 08:50 → 10:20
  6. SLTB 06:17 → 07:57 → 08:57 → 10:27
  7. Journey: 10:20 − 06:10 = 250 min = 4 h 10
  8. Footer check: Colombo–Nittambuwa 1 h 40 (06:10→07:50 ✓)
  9. Nittambuwa–Kegalle 1 h 00 (07:50→08:50 ✓)
  10. Kegalle–Kandy 1 h 30 (08:50→10:20 ✓)
  11. total 4 h 10 ✓, route length 116.0 km

Colombo → Anuradhapura, route 15-1, asking at 03:30

Sheet: 15-1 N SL Anuradapura - Colombo Panel 2025.01.20.pdf · in force from 2026-01-20

  1. Semi-Luxury, Colombo SL 5:
  2. 03:35 → Kurunegala 06:10 → Dambulla 07:35 → Anuradhapura 09:20
  3. Journey: 09:20 − 03:35 = 345 min = 5 h 45
  4. Normal, Colombo N 1:
  5. 05:10 → Kurunegala 07:45 → Dambulla 09:10 → Anuradhapura 11:10
  6. Journey: 11:10 − 05:10 = 360 min = 6 h 00
  7. Footer check: Colombo–Kurunegala 2 h 35 (both ✓)
  8. Kurunegala–Dambulla 1 h 25 (both ✓)
  9. Dambulla–Anuradhapura 2 h 00 N (09:10→11:10 ✓)
  10. 1 h 45 SL (07:35→09:20 ✓)
  11. Printed: 229.0 km / 38.1 km/h (N), 222.0 km / 38.6 km/h (SL)

Edge case — midnight rollover, route 01, asking at 23:35

The case a naive subtraction gets wrong by 19 h 50

  1. Last departure of the day from Colombo: 23:40
  2. Printed times in that row: 23:40 → 01:20 → 02:20 → 03:50
  3. Each printed time is smaller than the one before it, so each has
  4. crossed midnight and gains 24 h:
  5. 23:40 = 1420 min 01:20 = 1520 min
  6. 02:20 = 1580 min 03:50 = 1670 min
  7. Journey: 1670 − 1420 = 250 min = 4 h 10 ✓
  8. The arrival renders as 03:50 the next day, not 03:50 today.
  9. Naive subtraction would give 03:50 − 23:40 = −1190 min.

Which corridors are on this page

Each corridor below is an NTC bus time table transcribed in full, not a sample: 1,079 bus turns from 8 running panels, across 10 route-and-class columns. The oldest sheet in the set took effect on 2014-09-11; the newest on 2026-01-20.

CorridorRoute no.ClassBuses/daySheet in force
Colombo ⇄ Kandy01Normal3662020-02-12
Colombo ⇄ Kandy01Luxury (AC)1162025-04-06
Colombo ⇄ Anuradhapura15-1Normal392026-01-20
Colombo ⇄ Anuradhapura15-1Semi-Luxury292026-01-20
Colombo ⇄ Kurunegala06Normal492022-11-21
Colombo ⇄ Kegalle1-1Normal1002014-09-11
Kandy ⇄ Kurunegala602Normal1602017-02-01
Kandy ⇄ Kegalle662Normal942018-07-11
Colombo ⇄ Gampola / Nawalapitiya19-2Normal642017-01-01
Colombo ⇄ Balangoda (via Ratnapura)98-6Normal622015-06-03

What is not here yet, and why

A corridor missing from the table above is a corridor whose sheet could not be transcribed to a standard worth publishing. It is not a corridor with no buses.

  • Colombo ⇄ Matara (route 2) — NTC's sheet is a scan with no text layer
  • Colombo ⇄ Galle (route 2-1) — NTC's sheet is a scan with no text layer
  • Colombo ⇄ Jaffna (route 15-87) — NTC's sheet is a scan with no text layer
  • Colombo ⇄ Batticaloa (route 48-1) — NTC's sheet is a scan with no text layer
  • Colombo ⇄ Vavuniya (route 15-7) — NTC's sheet is a scan with no text layer
  • Colombo ⇄ Tangalle (route 32-4) — NTC's sheet is a scan with no text layer
  • Colombo ⇄ Nuwara Eliya (route 79-1) — NTC's sheet is a scan with no text layer
  • Colombo ⇄ Badulla (routes 99, 99-8, 99-9, 99-10, 99-318) — the sheet mixes five route numbers and an unlabelled sixth column; not transcribable to a verifiable standard yet
  • Panadura ⇄ Kandy (route 17) — most turns join the route part-way and the sheet prints the joining point as free text
  • Colombo ⇄ Matale (route 08) — NTC publishes a departure list for this route, not a running panel — no stop or arrival times
  • Puttalam corridor (routes 4-11, 87-2, 92-4, 92-5) — a separate NTC folder with a different sheet shape
  • Southern Expressway services — covered by the highway bus timetable, not repeated here
  • Intra-provincial and city routes — licensed by the provincial road passenger transport authorities, which publish no comparable panel

Frequently asked questions

Sources & references

The individual sheets these times come from:

Every sheet was downloaded and transcribed on 2026-09-26. NTC reissues a panel rather than editing one, so this page is re-checked against the folder on a fixed cycle and whenever a reader reports a change. Fares are deliberately absent: they are gazetted separately and live on the bus fare calculator. If a permitted bus does not run, NTC's passenger hotline is 1955.

Related tools

Comments & feedback

Spotted a bug or want an improvement? Tell us — our team reviews every comment, and good ideas get built. Comments are public and anonymous.

Spotted a time that has changed, or a corridor you need added?

Email me at [email protected] — most fixes ship within 24 hours.