London only routes which aren't ran by TFL

There’s a number of routes which run under London Service Permit and run exclusively within London however TFL does not tell anyone about these services at all despite the fact they are open for the public to use and often compliment the TFL network. As they only operate within London, Bus Open Data laws don’t apply. As such, the services go unadvertised. TFL should at bare minimum be putting these services on Traveline but best case scenario would be to put them on their own website and release the data via open data.

Such examples being the H30 service is a free link between T4 and T5 yet not a single journey planner knows about it. HereEast, The Richmond Park Shuttle when it’s in operation. Some of the Heathrow services only exist on journey planners thanks to operators own open data (N30 shows up thanks to Diamonds open data, A30 shows up only because of National Express open data).

TFL really should do better with regards to promotion of London Service Permit routes both on their own website and through open data for London only routes (Cross border routes come under BODS so no worries there)


Provision of information about non-TfL bus routes that operate entirely within London is something we would like to offer. In fact, I have already started to put together a strategy for achieving this. However, this is not as straightforward as it may seem.

We actually tried putting in some of these routes in our system, however it resulted in a few issues that we will need to address. There are two basic requirements I think need to be satisfied:

  • Non-TfL routes should be clearly distinguishable from TfL routes, both in terms of data and in user interfaces. For example, it would be inappropriate to use a London Buses roundel to indicate a non-TfL bus. More than anything, this is to reduce confusion to members of the travelling public, who may need to use a different means of payment compared to when they use a TfL service.

  • We should not present incorrect fares information. We could get into hot water if we quote the wrong fare, but it’s also just a poor experience for the user if our website told them, for example, that they can get on one of these buses for free because of the Hopper fare, when they’d instead need to pay a full fare. Where we’re unable to provide an accurate fare, we shouldn’t provide a fare at all.

We need to ensure these bus routes are displaying correctly on both the website and in TfL Go, as well as our open data (both the Unified API and TransXChange data), and we need to consider the consumers of our open data, too.

I hope you will appreciate that there are quite a lot of complexities to this. As I say, we do intend to offer this information, but it will take time, and we need to fit this work in alongside other projects.

By the way, the Here East Shuttle Bus used to be in our system, but we no longer include it as it is really intended “for the Here East community and event attendees”, rather than the general public. But certainly, we would like to include the bus routes serving Heathrow.

Hi Leon, I can understand some of the concerns raised but these must have been overcome with the river services as Thames River Services don’t charge the same as Thames Clippers and have zero integration into the wider TFL network (in comparison to Thames Clippers where Oyster is valid etc)

In the short term, if TFL isn’t able to properly integrate all of these into the core website, why isn’t TFL putting these into the Traveline database so then at least journey planners can still pick up these services.

Heathrow H30 should be easier for you to introduce though, that’s a free bus, you’d just need to say ‘not operated by TFL, please contact BM Coaches with any concerns’

HereEast may be intended for the community and event attendees but as it’s not advertised, how are people meant to know about it? Kind of defeats the object. It’s not as if the bus is useful really to anyone other than for the community and event attendees so the impact of having it on the TFL system would be negligible.

Hi, the situation with buses is quite different to river services. Piers, as well as Underground stations and railway stations are modelled within our fares system. Data about individual Underground lines, Train Operating Companies and River Bus services are also held in this system. This allows us to provide the correct fare based on the origin, the destination and the ‘line’ taken.

Buses are different. It’s a flat fare, and therefore the bus stops are not modelled within the fares system. Similarly, there is no need to map out each bus route. We just detect that there’s a bus journey and quote the flat fare (taking into account the Hopper fare, of course). We do not quote a fare for journeys that include a bus journey on a non-TfL bus outside of London, but this is only possible because these bus routes are not held within our Unified API. So we will need to build in functionality to not quote a fare for journeys that include a bus leg for a route that is within our Unified API but is not a TfL service.

This is an interesting suggestion, and perhaps one for us to think about, though I’m not sure if it entirely makes sense for us to have our Journey Planner data team maintain the timetables in the Journey Planner system to export to Traveline, but not actually have the route returned in Journey Planner itself. We may get better results by focusing on a more joined-up solution.

Whether a bus is free or not doesn’t really make things easier. The important factor is whether a bus is a TfL service or not.

As I mentioned, the Here East Shuttle used to be included in our Journey Planner. However, we received complaints from users who were advised by Journey Planner to take the Shuttle, but were denied entry. I reached out to Here East and the company that operates the Shuttle on their behalf, who confirmed it is not for the general public. We therefore decided to remove the Shuttle from Journey Planner.

@LeonByford @petejackson745
This is interesting, even though at my age the phrase “bus fare” has become an oxymoron, unless I am in Wales.

My first thought was that you must have nightmares at the thought of a future Mayor deciding that bus fares should no longer be flat, as you would have to map out each bus route in order to get the fares right.

My second thought, perhaps linked to my opening paragraph, was that I had no idea that Journey Planner did fares information! I may be misunderstanding quite a lot here but when I just planned a sample journey I could not see any info on fares (or a link to such) in what was returned on screen, nor could I see a “cheapest fare option” when planning the journey. I can see that, quite separately, I can get fares info by going through the Fares rather than Plan a Journey links but it seems not to be joined up. Am I missing something obvious here?

This led me to wondering about the relative footfall for the journey planning and fares aspects. If the fares side is used by, say, half of the number of visitors that JP gets then it is important. If it is 1 per cent then much less so and excluding them from JP because providing fares data is problematic becomes a bit like the tail wagging the dog. I appreciate that a different (more joined up?) presentation could give quite different relative footfall results.

I would echo the thought that someone somewhere should be providing the non-TfL bus data to Traveline. Of course if the route goes outside London someone already is, so it is the relatively small nut of non-TfL bus services entirely within London that remains to be cracked.

Isn’t that the whole point of

public const WHEREAMIUK = '';

I can see that those urls give access to two probably huge BODS zip files relating to BODS but I am unclear as to what you are saying about whether existing journey planners can use the routes in question. Or indeed whether you are!

Unfortunately, there is currently a bug that means fares information often doesn’t get returned by Journey Planner, but the functionality is there and we’re working to address the issue.

Interestingly, one of the most common complaints we received when TfL Go first launched was that there was no information about how much a journey would cost. So this is a feature that is valued by many users, and it’s important that we get it right.

You should be able to see the fare information in action with this example:

These buses exist to transport people, why should they go unadvertised because TFLs main systems don’t like non TFL buses? Long term it may be planned to integrate these (albeit long overdue), short term though, these routes need to be on journey planners and if that means they have to be on Traveline, so be it.

In an ideal world, someone would lobby the Govt to get the law changes on BODS so that rather than exempting buses within London, it exempted TFL buses. This may solve some of the issues faced here and would remove the burden for TFL/TFLs operators from having to supply bus open data datasets for the services which run cross border, sometimes for very short distances. That would be the best outcome but until BODS law is changed, TFL should be populating the Traveline database and there is no reason why that isn’t the case now other than hoping that no one would notice. As stated, it’s only a few services so the workload for TFL staff isn’t going to be that big.

Also no real reason that Tfl shouldn’t provide the BODS data voluntarily - it’s actually available in the BODS GTFS dataset, but not the TxC one. I can’t get a straight answer from BODS as to why this is or as to what exactly they think their London dataset (with no Tfl) is for

Thanks - before typing anything else could I thank you more widely for responding so frequently and informatively to the wide range of queries coming your way. The downside of that is that you are likely to be tagged for every query!

I have failed dismally to get any fares info on JP for tube journeys starting from Southgate, even simple ones (like to Finsbury Park). Really weird.

My suggestion of a “cheapest available option” would of course fall over as it would inevitably point me towards a six bus four hour marathon, which I already get as the bus-only option. It would have to be something like “cheapest realistic option”, with realistic defined as (say) less than twice the duration of the fastest journey, perhaps unless it is less than X minutes. Messy and too difficult to understand, I suspect.

HereEast services are covered by BODS as Go-Ahead London (London General) provide the data. Until recently it was shown as route 847 but seems to have changed to route ‘HE’ (was 847 until 22/01 and became ‘HE’ on the 23/01). Unfortunately the destination seems to be 'Here East Stop Arrivals".


I would echo the thought that someone somewhere should be providing the non-TfL bus data to Traveline. Of course if the route goes outside London someone already is, so it is the relatively small nut of non-TfL bus services entirely within London that remains to be cracked.

I raised with BODS when they first started that there were stage carriage services operating in London that weren’t covered by TfL iBUS/Countdown, for example, I believe the many sightseeing tours that offer ‘local fares’ for point to point journeys on their circular tours should be required to provide data…


Thank you for the kind words. You’re very welcome!

That’s odd. I tested Southgate to Finsbury Park and the fare was returned:

This is a common request we receive, and although it is something we would like to offer, there are two main complicating factors:

  • Currently, the journey planning engine has no knowledge about fares. It just calculates a journey, and then we work out the fare from the route afterwards. But for the engine to be able to work out the cheapest route, it would need to have all the fares data up-front. We would need to ensure that whenever there is a fares revision, the engine’s fares data is updated. Furthermore, the engine would need to be able to account for all the complexities of our fares system, including some slightly obscure rules and edge-cases.
  • And, as you mentioned, a lot of the time, the cheapest route would be the same as the Bus Only option anyway. So we would need to find a way to only provide a reasonable route. But then we probably couldn’t call that the “cheapest route”.

It is something we would like to implement, however, and we have some ideas for how it can be done, so although there are hurdles to overcome, we are keen to have a go at it.

Thanks again. I’m getting a fare for Southgate to Finsbury Park today but no fare for Southgate to West Croydon, a more complicated journey. Is the bug you mentioned one which affects specific types of journey, or does it strike at random?

On “cheapest fare” journeys, while it would be useful I am conscious from experience that sometimes the best can be the enemy of the good or, to put it another way, project creep is a danger.

Somewhat ironically for this forum topic, the bug affects any journey involving a bus trip.
It looks like some rail journeys that might be used between Southgate and West Croydon are also not returning fares – this is usually due to a configuration issue, so we’ll take a look at this. Thanks for reporting it.

I tried doing the journey again and got no fare. So I had a look at the urls. Yours ended with
Mine ended with
Was Date/Time making a difference? No. What did make a difference was removing &Mode=tube from the end of your string. Now I suppose the moment you don’t filter on mode you get bus options coming into play and that brings in a bus-only option and therefore perhaps the bus bug but it does seem odd if the user has to specify mode, or at least explicitly exclude bus, in order to get the fares. I think it is unlikely that many users would bother to filter by mode.

Of course I should not generalise from a sample of one journey but in this case it might be helpful.