Derek Ellis
Stylized map of OC Transpo routes

OC Transpo's New Age of Transit Data

It might not be apparent to everyone yet, but there are some big changes just around the corner to OC Transpo’s realtime data feeds and we’re already starting to see the benefits. A year ago, as part of the 2023 budget, OC Transpo announced that it would be overhauling its public-facing real-time GPS data feed to use the General Transit Feed Specification Real-time format (GTFS-rt for short) and I don’t think this has been getting the attention or hype that it deserves.

The real-time data feed is what gives transit apps the location and estimated arrival times of buses, which has notably been problematic over the last several years. So what was so bad, and what’s new?

Out with the Broke and Bespoke

When you think about the issues with OC Transpo’s realtime data, you might immediately think about “ghost buses” and inaccurate arrival times, but these aren’t the only limitations with the system in place today.

Since its creation over a decade ago, OC Transpo’s realtime data feed has been published in a bespoke format that hasn’t aged particularly well. The old format only provides a small window of data to apps at a time, listing only the next three buses on each route at a given stop. It’s like asking OC Transpo “when will the next three buses for routes X, Y, and Z arrive at stop 1234?”. This was an intuitive way of providing estimated arrival times that closely matched the way people would normally use a transit app to look up the next buses as they stood at a bus stop, but it wasn’t without its issues.

Being a bespoke format meant that some apps just couldn’t be bothered to integrate OC Transpo’s realtime data; most famously being Google Maps. But even with the variety of locally-developed apps that focused on OC Transpo, the old format could actually be very limiting. What if you wanted to check arrival times for a transfer down the line? Or check alternative travel options for other bus stops nearby? Every additional request an app made to OC Transpo’s feed would count against that app’s daily request limit1 and would also put additional strain on a system that just wasn’t built for this kind of functionality.

The last big shortcoming worth mentioning is the lack of integrated service alerts and cancellation reporting. Although OC Transpo publishes an RSS feed of detours, cancellations, and other notices, it can be somewhat tricky for app developers to try and match the notices and cancellations being reported in one feed to the data being reported in the realtime feed. Also, did you know that cancellations aren’t reported automatically? A real person has to manually enter those cancellation notices to be posted on the website (and formerly on Twitter). This is the reason why so many trip cancellations have historically gone unreported.

Clearly room for improvement!

In with the Improvements

The behind-the-scenes work at OC Transpo to improve the state of their customer data systems has now been ongoing for years. At the core of these improvements is their internal dispatching system, which was recently overhauled. That system now feeds into “BusTime®”, the commercially developed product that provides the estimated arrival times in the realtime data feed that apps use. Now the latest piece of ongoing work has been to start publishing realtime data in the GTFS-rt format.

In contrast to the “small window” of data that apps used to be able to ask for, the GTFS-rt format can be thought of as a unified global snapshot of the entire transit network at any given moment. It provides the location of every vehicle in the transit network, the status of every trip and cancellation at that time, and any other notices about disruptions and detours that are affecting the transit network. It should go without saying that this format will be a far richer set of data for app developers, and others, to use.

We’ve already started to see this work pay off. All apps now receive estimated times for a trip even before the trip starts. More recently, through their partnership with OC Transpo, the Transit App is also now already using the GTFS-rt feed which has brought on a number of other improvements:

That’s right—trip cancellations are now reported automatically; straight from the dispatch system. It sadly won’t help your bus from being cancelled, but now it’ll be far less likely to become a “ghost bus” that never shows up.

Most of these new features are currently exclusive to the Transit App as the new feed isn’t available publicly to all developers yet, but it’s expected to be in the near future. We’ll soon see a lot of other apps get to take advantage of the new format and features that it offers.

New Tools for Advocacy?

Perhaps the most overlooked benefit that these improvements will bring is what this could mean for transit advocacy in Ottawa. It was never very easy or reliable to independently gather data on trip performance or cancellations (nevermind the official policy that prohibits the mass archiving of GPS data to prevent overloading the system), but the change to an openly available global snapshot of the transit system can’t be ignored.

Imagine a web app that uses this data to produce daily reports summarizing the performance of the system on that day, or that tracks trends over time. It will now be possible to actually build these kinds of things for Ottawa! It’s certainly the kind of thing that I’d personally love to try and put together.

There’s still a ways to go towards improving Ottawa’s transit, but it’s hard not to get at least a little excited when we’re already starting to see the payoff of these kinds of improvements, and with more on the way.


  1. By default, each app can make up to 10,000 requests to the feed each day. ↩︎