Improving SBS Transit's iris NextBus

If you happen to use public transport in Singapore and also happen to surf the internets on the go, chances are that you've heard of SBS Transit's NextBus information service, iris. I am a frequent user of this service and although I like it, there is one particular aspect of it that really annoys me. Allow me to illustrate.

iris homepage

This above is the home page of the iris service on which you enter the bus stop number & the bus service number for which you wish to know the arrival time. Although it isn't obvious from the page, you can leave the bus service field empty and submit the form. When the bus service number is not specified, you get a page that lists all the services operating at the specified bus stop. Like this:

iris stop listing

Now once you get this page, you can click on any of the service numbers to get the estimated arrival times. Clicking on 93 above would get you:

iris service listing

And this is what annoys me. It is quite likely that I would be interested in more than one of these bus numbers. But to get information on multiple service numbers, I have to navigate back & forth between the service numbers listing & the individual service numbers arrival info.

To fix this annoyance, I made When you visit this new site, you are greeted with this page:

sbsnextbus homepage

As earlier, you just enter the bus stop number and hit Fetch. If all goes well, the resulting page will look something like this:

sbsnextbus service listing

There, all the arrival information in one easily accessible page! No more annoying back & forth navigation! So if you use public transport in Singapore and also happen to surf the internets on the go, please test out and let me know how it works (or not!) for you.

Oh, here's the QR Code to the site, if your phone supports reading these digital hieroglyphics:

Update: (4/Sep/2008) Hello to everyone coming here via Mr Brown's blog! Thanks for your interest and for trying out this app! Your usage has revealed a few corner cases and bugs which I have now fixed. I've also made a few cosmetic changes suggested by Eric (in comments) and Jon (of so that the pages display better on an iPhone.

Update: (7/Sep/2008) This app is now integrated with SinGeo as well as! Read the details on the SinGeo blog.

Update: (8/Sep/2008) The app now shows bus stop descriptions.

Update: (9/Sep/2008) Read the blog post describing some of the tech behind the app.

Update: (30/Oct/2008) New release with new features.


You my friend are a rock star... I'm trying to think of how many folks I know who would code up an app to solve a UI problem on another website :).. it's a very short list!

Oh PS: iris is very nice but I sure wish there was an equivalent service for SMRT buses.. or even better something that combined the two.

Nice. Are you scraping their pages? Or do they expose some kind of API?

It's not just a UI problem; all those extra page fetches cost me real money! Unlike some people, I don't have an unlimited data plan ;-)

SMRT sucks. They can't even present their schedule properly on their website, forget about real time tracking.

Scrape, scrape, scrape! Thankfully, these are bare-bones mobile optimized pages so scraping is trivial.

The only semi-interesting thing in this app's implementation is working around App Engine's requirement that every HTTP request be handled completely within a few seconds, empirically measured as ~8 seconds. Fetching a new page per (service, stop) combo within the app can easily exhaust the timer!

Great stuff!

Deepak, great stuff. I'd love to integrate this into my iphone web app at I've integrated iris with the bus stop location service, but it can only be accessed one bus at a time. I'll send an email with more detail.

Sure! Looking forward to your email.

Hi Deepak,

mind adding 2 more lines into your pages? I'm an iPhone user and this will optimise the experience ;) btw, i build something similar previously, but i think yours is a better AND simpler solution!

<meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;" />

<body orient="landscape">

Awesome, thank you!

Dude, you're a saviour! I like.. Who wants to take bets that SBS will now come after you for copyright infringement or something nasty? :(

Well, I hope they improve their offering before sending me a cease & desist order. If that happens, I'll be happy to comply :-)

Awesome you are. Thanks for this!

baik. you rock like this app man.totally. thanks alot!

This is fantastic stuff. But is this possible on my mobile? That would really make it useful!

This is made for mobile phone browsers. All the screenshots above are from my N73 phone.

great app. I wanted to ask my programmer wife to code something like this for me. Thanks. Perhaps adding the bus stop description would be an improvement?

Yep, planning to add it in the next few days.

Great APP!!!! It is going to be such a useful tool for me.Thank you very much and Kudos to you :)

Hi, I love this app :) I always wanted to create such an app but didn't have the know how to do it :)

Anyway is there anyway for you to include the bus arrivals @ Interchanges?

Is it possible for you to implement one for terminals/interchanges? The current Application doesn't work =(

I hearts this app. It's my bookmark now.

SMRT does offer arrival timings, but it's limited to a few bus stops on those boards by LTA, eg. outside AMK MRT.

Hmm.. Will think about it but I am not sure if there is an obvious way to get that information (all buses at a terminal) from iris.

Also, such a query could be really slow since several dozens of bus services can start from a single interchange.

Yes, I've seen those boards. But as far as I know, that info is not available online anywhere :-(

I've written a reply to your info@Interchange request down the page.

BTW, thanks for posting in HWZone :-)

been a little busy to drop by to thank you. I saw the busstop description implemented on Tues.

Hehe.. no problem. I needed that feature too.. easier to save bookmark when title is descriptive :-)

Hope you are enjoying the app!

haha thanks for looking into it

it seems a little tough

maybe instead of showing all the services, probably we can type in the numbers of the bus serivices we want etc....

Hi, may i know is there any API to integrate your function into my Final Year Project? Or should i say how to use your application? How your get the API Iris bus function? can you tell me more about this function? Thanks!

Hi Justin,

I have an API in the works. Can you contact me via email (deepak at antrix dot net) so that I can give you access?


is the services still up and running? coz i'm unable to get the timings on my mobile as well as through the PC.

It has been down since today morning. Not sure why.. perhaps SBS Transit changed something at their end.

Unfortunately, I won't be able to fix it until evening when I get home from work :-(

Sorry about the trouble.

Looks like it's down again! Think SBSTransit doesn't want any unofficial sites duplicating their efforts, especially if it's superior.


Some bus-stops with a quite a number of bus plying through, appeared to be taking a longer time to load. I think it is due to the webpage's large memory size.


Example of bus-stops : 52079, 52071.

Btw keep up the good work.

Yes, more buses means more time to create the page. But this affects only the 'simple' version of the site - the one that is typically served to your handphone browser.

If you use the site on your desktop/laptop computer, or on an iPhone, the page should load quite quickly irrespective of the number of buses.

Down again! Any reason why the site's so unstable these days? I use it daily and it's annoying when its down :(

Hi deepak,

Even though i am willing to wait for the page to load, the page do not always appear. It maybe due to error occurred or connection disconnected.

42089 cant work retry keep appearing

The site no longer works. Every bus time is "retry".

Hi Deepak,

What url you use to get arrival time for a particular bus for a particular bus stop? I tried to copy-paste the same from address bar after changing the bus#, but it brings me back to the main menu page (3 links).

@Mark The URLs become invalid very quickly. You have to extract the URLs from the services list page for each bus stop & then quickly fetch those pages & extract the arrival times before the links become invalid.

@Roy: Site is blocked again :(

Markdown formatting supported