Singapore Bus Network Monitor
Shared corridors, stop demand, walking coverage and data quality from LTA DataMall, URA and SingStat open data. Built 2026-10-14. Code and method: GitHub.
1. Where services share the road
Each line is a stop-to-stop link, coloured by scheduled buses per hour in the weekday AM peak (sum over all services using the link, from the published headway bands).
2. When people board
Monthly totals divided by the number of weekdays or weekend/holiday days in each month (MOM 2026 public holidays). June is the school holiday month.
3. Stops that changed
Weekday boardings per day in August 2026 against the median of February, June and July. A stop is flagged when its change is at least 3.5 robust standard deviations from the network-wide shift and at least 25% relative to it, among stops with 300+ daily boardings. Each flag is then categorised from the monthly series, the services at the stop (DataMall routes, April vs September) and outside sources; only causes named by an official notice count as verified. Details: ANOMALIES.md.
| Stop | Name | Feb | Jun | Jul | Aug | vs baseline | Category | Verified event | Largest destination changes (trips per weekday, Jul → Aug) |
|---|---|---|---|---|---|---|---|---|---|
| 02051 | The Float @ Marina Bay | 448 | 337 | 402 | 17 | -96% | services withdrawn or rerouted away | float_f1 (2026-08-04) | Rochor 60->3; Downtown Core 59->3 |
| 27439 | Blk 861 | 1,438 | 1,389 | 1,108 | 502 | -64% | services withdrawn or rerouted away | jw75_reopen (2026-07-19) | Jurong West 957->365; Orchard 9->0 |
| 27349 | Blk 745 | 1,356 | 1,351 | 1,048 | 634 | -53% | services withdrawn or rerouted away | jw75_reopen (2026-07-19) | Jurong West 919->496; Jurong East 100->108 |
| 67339 | Opp Blk 200B | 288 | 294 | 357 | 382 | +30% | services added or rerouted here | svc_965 (2026-05-24) | Hougang 24->34; Sengkang 166->174 |
| 43551 | Opp Blk 435A | 107 | 250 | 319 | 382 | +52% | services added or rerouted here | Bukit Batok 312->374; Downtown Core 7->8 | |
| 81181 | Dakota Stn Exit A/Blk 99 | 2,094 | 2,149 | 2,600 | 2,783 | +30% | service change (direction unclear) | Marine Parade 1306->1397; Geylang 910->963 | |
| 18331 | Kent Ridge Stn Exit A/NUH | 467 | 469 | 506 | 641 | +36% | service change (direction unclear) | Queenstown 506->641 | |
| 04121 | SMU | 2,014 | 1,411 | 1,591 | 2,063 | +30% | academic term | Orchard 279->385; Kallang 114->158 | |
| 16179 | Opp Yusof Ishak Hse | 685 | 609 | 677 | 901 | +33% | academic term | Clementi 461->611; Bukit Timah 59->94 | |
| 27261 | Hall 4 | 683 | 321 | 417 | 564 | +35% | academic term | Jurong West 417->563 | |
| 16159 | Coll of Design & Engrg | 297 | 237 | 300 | 413 | +39% | academic term | Queenstown 222->312; Clementi 27->50 | |
| 96111 | Opp ITE Coll East Adm Blk | 3,279 | 914 | 1,928 | 2,683 | +39% | academic term | Tampines 1214->1674; Sengkang 337->473 | |
| 96119 | ITE Coll East Adm Blk | 2,084 | 574 | 1,329 | 1,858 | +40% | academic term | Bedok 754->1078; Tampines 510->690 | |
| 17191 | NUS High Sch | 1,214 | 655 | 1,001 | 1,437 | +43% | academic term | Clementi 542->749; Queenstown 389->590 | |
| 16099 | Opp NUS Sports Ctr | 337 | 271 | 188 | 392 | +44% | academic term | Queenstown 88->220; Bukit Merah 70->141 | |
| 18309 | Blk S17 | 310 | 315 | 321 | 454 | +44% | academic term | Queenstown 321->454 | |
| 27221 | Sch of CEE | 746 | 450 | 584 | 869 | +49% | academic term | Jurong West 573->851; Western Water Catchment 10->18 | |
| 16009 | Kent Ridge Ter | 1,379 | 855 | 1,029 | 1,632 | +59% | academic term | Clementi 398->691; Queenstown 410->631 | |
| 16091 | NUS Sports Ctr | 1,163 | 918 | 959 | 1,525 | +59% | academic term | Clementi 442->830; Jurong East 243->325 | |
| 19059 | UTown - RC4 | 345 | 121 | 278 | 446 | +60% | academic term | Clementi 248->371; Queenstown 30->74 | |
| 27231 | Wee Kim Wee Sch of C&I | 1,165 | 660 | 757 | 1,268 | +67% | academic term | Jurong West 749->1250; Western Water Catchment 8->19 | |
| 17099 | UTown - Cendana | 484 | 316 | 399 | 670 | +68% | academic term | Queenstown 291->504; Clementi 108->165 | |
| 16189 | Information Technology | 1,457 | 902 | 934 | 1,715 | +84% | academic term | Clementi 519->980; Queenstown 313->514 | |
| 27199 | Hall 11 | 612 | 306 | 383 | 709 | +85% | academic term | Jurong West 371->688; Western Water Catchment 12->22 | |
| 27061 | Sch of ADM | 567 | 243 | 289 | 561 | +94% | academic term | Jurong West 272->509; Western Water Catchment 17->51 | |
| 16131 | Opp Kent Ridge Ter | 501 | 301 | 300 | 614 | +103% | academic term | Clementi 174->336; Queenstown 46->123 | |
| 27311 | Hall 2 | 238 | 111 | 149 | 309 | +107% | academic term | Jurong West 113->226; Western Water Catchment 36->83 | |
| 27071 | Nanyang Cres Halls | 247 | 106 | 151 | 317 | +109% | academic term | Jurong West 125->208; Western Water Catchment 26->109 | |
| 27241 | SPMS | 361 | 191 | 235 | 506 | +114% | academic term | Jurong West 233->498; Western Water Catchment 2->8 | |
| 27219 | NIE Blk 2 | 1,017 | 497 | 600 | 1,392 | +132% | academic term | Jurong West 488->1187; Western Water Catchment 112->206 | |
| 27211 | Lee Wee Nam Lib | 3,523 | 1,285 | 1,674 | 3,885 | +132% | academic term | Jurong West 1619->3741; Western Water Catchment 55->144 | |
| 16199 | Aft Architecture Dr | 328 | 160 | 189 | 445 | +135% | academic term | Clementi 102->232; Queenstown 48->118 | |
| 27251 | Academic Bldg Sth | 2,051 | 601 | 900 | 2,268 | +152% | academic term | Jurong West 898->2257; Western Water Catchment 2->12 | |
| 16149 | SDE3 | 278 | 113 | 127 | 338 | +165% | academic term | Queenstown 65->171; Clementi 48->130 | |
| 17149 | Blk 426 | 842 | 703 | 777 | 1,002 | +29% | academic term (within 600 m of a campus) | Queenstown 498->693; Clementi 86->123 | |
| 16151 | The Japanese Pr Sch | 1,186 | 905 | 1,084 | 1,403 | +29% | academic term (within 600 m of a campus) | Clementi 694->869; Queenstown 139->234 | |
| 17091 | Aft Clementi Ave 1 | 1,144 | 564 | 942 | 1,250 | +33% | academic term (within 600 m of a campus) | Clementi 619->814; Bukit Timah 238->307 | |
| 17121 | Blk 610 | 1,819 | 1,289 | 1,626 | 2,185 | +34% | academic term (within 600 m of a campus) | Clementi 735->1018; Jurong East 395->522 | |
| 27539 | Bef Xingnan Pr Sch | 440 | 268 | 353 | 504 | +43% | academic term (within 600 m of a campus) | Jurong West 316->443; Jurong East 30->52 | |
| 17139 | Aft Clementi Ave 2 | 690 | 601 | 765 | 1,003 | +45% | academic term (within 600 m of a campus) | Queenstown 511->714; Clementi 51->74 | |
| 19051 | New Town Sec Sch | 1,229 | 504 | 946 | 1,458 | +54% | academic term (within 600 m of a campus) | Queenstown 747->1157; Bukit Merah 131->190 | |
| 17131 | Clementi Flyover | 323 | 158 | 250 | 392 | +56% | academic term (within 600 m of a campus) | Clementi 94->193; Bukit Batok 47->68 | |
| 27321 | Blk 949 | 408 | 295 | 313 | 489 | +56% | academic term (within 600 m of a campus) | Western Water Catchment 305->484; Jurong West 8->6 | |
| 16069 | Heng Mui Keng Terr | 1,059 | 619 | 763 | 1,370 | +80% | academic term (within 600 m of a campus) | Queenstown 504->878; Bukit Merah 131->246 | |
| 16061 | Opp Heng Mui Keng Terr | 865 | 501 | 573 | 1,198 | +109% | academic term (within 600 m of a campus) | Clementi 410->906; Jurong East 57->114 | |
| 16141 | Tentera Diraja Mque | 414 | 180 | 199 | 558 | +179% | academic term (within 600 m of a campus) | Clementi 121->350; Queenstown 28->87 | |
| 44151 | Opp Bt Batok Fire Stn | 763 | 346 | 580 | 755 | +30% | school-term seasonality (June holidays in the baseline) | Woodlands 156->219; Bukit Panjang 186->245 | |
| 44159 | Bt Batok Fire Stn | 1,787 | 598 | 1,249 | 1,666 | +33% | school-term seasonality (June holidays in the baseline) | Bukit Batok 565->751; Jurong West 306->422 | |
| 27401 | Opp Blk 821 | 971 | 684 | 600 | 921 | +35% | school-term seasonality (June holidays in the baseline) | Jurong West 600->921; Pioneer 0->0 | |
| 77219 | Opp Blk 626 | 696 | 555 | 574 | 773 | +35% | school-term seasonality (June holidays in the baseline) | Pasir Ris 574->773 | |
| 46369 | Blk 413 | 1,197 | 823 | 836 | 1,199 | +43% | school-term seasonality (June holidays in the baseline) | Woodlands 836->1199 | |
| 28369 | Opp Jurong Lake | 466 | 275 | 160 | 423 | +54% | school-term seasonality (June holidays in the baseline) | Jurong East 133->360; Tengah 10->26 | |
| 46351 | Woodhaven | 363 | 210 | 218 | 349 | +60% | school-term seasonality (June holidays in the baseline) | Woodlands 218->349 | |
| 27461 | Opp Blk 276B | 573 | 615 | 867 | 914 | +49% | sustained step up since July | Jurong West 862->907; Downtown Core 5->6 | |
| 16109 | The Alpha | 232 | 245 | 387 | 401 | +63% | sustained step up since July | Clementi 358->370; Queenstown 24->25 | |
| 16039 | S'pore Science Pk II | 535 | 637 | 1,266 | 1,303 | +105% | sustained step up since July | Queenstown 1035->1058; Orchard 13->17 | |
| 16031 | Opp S'pore Science Pk II | 152 | 207 | 531 | 565 | +173% | sustained step up since July | Clementi 375->401; Queenstown 76->79 | |
| 14121 | Opp HarbourFront Int | 2,381 | 2,371 | 2,198 | 1,684 | -29% | unexplained | Bukit Merah 1044->763; Queenstown 766->622 | |
| 17119 | Opp Blk 343 | 533 | 457 | 503 | 652 | +30% | unexplained | Queenstown 351->499; Clementi 128->124 | |
| 50241 | Opp S'pore Khalsa Assn | 192 | 244 | 279 | 318 | +30% | unexplained | Kallang 169->193; Downtown Core 67->78 | |
| 65449 | Blk 315B | 442 | 238 | 518 | 580 | +31% | unexplained | Punggol 461->524; Downtown Core 4->3 | |
| 94009 | Upp East Coast Ter | 321 | 328 | 398 | 434 | +32% | unexplained | Bedok 283->304; Tampines 18->23 | |
| 75069 | Blk 970A | 733 | 846 | 1,045 | 1,136 | +34% | unexplained | Bedok 818->911; Geylang 134->130 | |
| 40501 | Blk 131D | 366 | 350 | 468 | 492 | +34% | unexplained | Jurong East 381->404; Bukit Batok 17->18 | |
| 53339 | Opp Bright Hill Tp | 356 | 348 | 296 | 480 | +38% | unexplained | Bishan 252->409; Ang Mo Kio 44->71 | |
| 27101 | Opp Westwood Sec Sch | 1,737 | 1,278 | 1,493 | 2,085 | +40% | unexplained | Western Water Catchment 541->1022; Choa Chu Kang 840->929 | |
| 18041 | Normanton Pk | 431 | 362 | 413 | 578 | +40% | unexplained | Queenstown 226->371; Clementi 94->112 | |
| 15221 | Aft Sth Buona Vista Rd | 673 | 598 | 811 | 984 | +46% | unexplained | Queenstown 590->716; Clementi 160->207 | |
| 27399 | Bet Blks 859/860 | 755 | 664 | 963 | 1,334 | +77% | unexplained | Jurong West 963->1334; Pioneer 0->0 | |
| 22449 | Blk 685B | 421 | 378 | 530 | 813 | +93% | unexplained | Jurong West 498->774; Jurong East 20->27 | |
| 51039 | Opp S'pore Polo Club | 296 | 146 | 170 | 362 | +112% | unexplained | Novena 109->232; Orchard 8->20 |
4. Where trips go
Origin-destination pairs from the tap-in and tap-out stops of weekday bus trips (August 2026, per weekday). 54% of bus trips start and end in the same planning area, so buses mostly carry local and feeder trips. OD totals match the stop tap-in totals to within 0.014%.
5. Who lives within 400 m of a stop
SingStat GHS 2025 residents placed on Master Plan 2019 housing parcels (weighted by plot ratio). Reach is measured three ways: straight line (upper bound), straight line with a 1.3 detour factor, and along the OpenStreetMap walking network (lower bound: OSM misses many void-deck and linkway shortcuts in HDB estates). The map shows the straight-line measure. The low areas are the same under all three.
6. Bus priority screening
Bus links where general traffic in the weekday AM peak is slower than at night. Screening numbers from LTA speed bands, used for ranking, not measured bus travel times.
Observed periods (Singapore time): weekday AM — 2 weekday mornings (2026-09-28, 2026-10-14), 15 snapshots, 2026-09-28 07:47 to 2026-10-14 09:30; night — 89 snapshots, 2026-09-26 22:05 to 2026-10-14 05:00. Each eligible link needs at least 4 valid snapshots in each period, each covering at least half its length; a link's AM speed is the median of its daily medians and needs at least 1 mornings.
Eligible links: 3,378. Positive estimated AM loss: 2,737. The map shows up to 40 highest-ranked links; the table shows the first 10.
Scroll the table horizontally to read all columns.
| Stop link | Services | Scheduled buses/h | AM km/h | Night km/h | Estimated bus-min lost/h |
|---|---|---|---|---|---|
| 72019 → 83119 | 14 | 96.0 | 37.9 | 50.4 | 26.3 |
| 94089 → 94039 | 11 | 55.4 | 20.1 | 41.7 | 25.8 |
| 98019 → 76249 | 11 | 65.4 | 28.2 | 40.1 | 24.8 |
| 03111 → 03071 | 33 | 106.0 | 26.1 | 39.6 | 24.7 |
| 63209 → 63199 | 15 | 67.8 | 27.4 | 45.0 | 23.3 |
| 59041 → 59051 | 16 | 80.6 | 27.8 | 40.6 | 21.9 |
| 03129 → 03218 | 33 | 139.2 | 33.6 | 40.7 | 21.8 |
| 60119 → 60099 | 10 | 55.4 | 29.1 | 46.2 | 21.1 |
| 62071 → 62081 | 4 | 22.8 | 14.4 | 30.8 | 20.1 |
| 03059 → 03129 | 24 | 143.3 | 30.9 | 37.4 | 19.2 |
7. Data quality
| Check | Table | Failing | Rows | Pass | Note |
|---|---|---|---|---|---|
| primary key unique (ServiceNo, Direction, StopSequence) | bus_routes | 0 | 26,842 | 100.00% | |
| stop sequence continuous (step = 1) | bus_routes | 236 | 26,842 | 99.12% | |
| cumulative distance non-decreasing along route | bus_links | 1 | 26,043 | 100.00% | |
| link length plausible (0 < km <= 5) | bus_links | 209 | 26,043 | 99.20% | 0 km = consecutive stops sharing a location; >5 km = non-stop sections of express and City Direct services (e.g. 646-649) |
| route stop exists in BusStops master | bus_routes | 0 | 5,209 | 100.00% | unique stop codes |
| LTA and OSM stop positions agree within 50 m | stops | 269 | 5,194 | 94.82% | median gap 6.5 m |
| stop has non-zero coordinates | stops | 0 | 5,209 | 100.00% | |
| route service exists in BusServices | bus_routes | 0 | 799 | 100.00% | service-direction pairs |
| AM peak frequency present | bus_services | 142 | 802 | 82.29% | |
| volume stop code exists in route network | stop_volume | 129 | 812,444 | 99.98% | |
| volume non-negative | stop_volume | 0 | 812,444 | 100.00% | |
| hour within 0-23 | stop_volume | 14 | 812,444 | 100.00% | |
| stop inside Singapore bounding box | stops | 1 | 5,209 | 99.98% | expected: 46239 Larkin Terminal, Johor Bahru (cross-border service 170) |