How to determine if School Holidays in Effect


I was looking for advice on how to determine whether school holidays schedules are active in regards to bus schedules.

Unsure if anyone has tricks on how to do this via TFL api, or any other open api’s that may offer this. As a far as I can see uk gov api offers bank holidays but no school holiday dates.

Thanks in advance

“The local authority sets dates for maintained schools and voluntary controlled schools and these are recommended for other types of schools. However, academies, foundation, voluntary aided and free schools have powers to set their own term dates and we recommend that parents check with individual school websites.” -

I have a vague memory of seeing an extract from some sort of TfL document which mapped schedules onto days of the year but it may be a false memory. If it exists and could be made available that would be a valuable addition, not just for school holidays but also for the special schedules which operate around Christmas.

For what it is worth, I suspect that knowing the actual school holidays may not be enough. I have heard it said that some operators do not bother to operate school holiday schedules on some routes at half term or on the few Christmas school holiday days where a Monday to Friday service operates. Also that if term starts on a Wednesday (say) some operators start the school day service on the Monday.

What I have heard said may be quite wrong but if it isn’t I would expect that they tell TfL what service they are going to operate!

As I understand most bus schedules don’t have School/Non-School term schedule, but many do (about 7% looking at open data). If I take one at random

there are multiple schedules ( “Mon-Fri Schooldays” / “Mon-Fri Non-Schooldays”) for Monday - Friday. I don’t know which one is relevant. The timetable api is useful, but for this info is not accurate if I don’t know which schedule is in effect - I was wondering if there are any undocumented ways to figure this out for each route?


I’m guessing that as school buses mean one extra bus in the morning and another in the afternoon (as per your example of the 240) that this has been left, contractually to the company operating the bus, which is Metroline

I suspect that the contract specifies that they have to determine what is a school-day “locally” so it’s never being input into any of the TfL systems.

It’s worth noting that school buses are chickenfeed in the grand scheme of things. The 677 (600-699 are school buses) is costing TfL £12k a year.

I’m not sure that all school holiday schedules do involve fewer vehicles. In some cases the intention may be to reduce running times to reduce the annoyance generated by buses being held at stops rather than necessarily to generate a saving. Some school holiday schedules have unchanged times but the driver duties differ and/or crosslinks to school routes are not present.

The 600 series of school routes generally serve one or two specific schools and I would hope that they never run when those schools are closed.

If an operator were to run a different schedule to that expected by TfL they would be in danger of incurring fines if the times involved were too different. I would have thought it very much in their interest to tell TfL what they are intending to run.


1 Like

There is the “current” document from TfL here detailing the expectations of a bus contractor (“Operator”).

It does say that the Operators “Manage the day to day operation of routes”. It also says that Operators “Develop timetables, schedules and staff rotas – timetables must be agreed with London Buses”

Around Christmas Saturday & Sunday timetables are run from what I understand (and Bank Holidays too), again there is no way to determine (as far as I know) which timetable is in effect from timetables api, TFL would certainly have this in their systems, just as to how to expose this in their open data. If in the json response there was a key value to tell which schedule was active would be very useful, as timetable data is kinda useless at the moment if you are always returning the Term time schedules, around Christmas all of the data would incorrect at the user end

1 Like

@willa I think that we agree about this, but it seems that the data isn’t collected by TfL to distribute.


The information must be accessible to Journey Planner if (and I realised this is an assumption on my part) JP is to deliver the right journey information.

The codes used are not always consistent. For example the Saturday-style service between Christmas and the New Year get variously described as sMF, sMT, sFr or sSa. Of course that does not matter operationally as long as TfL and the operator know what interpretation is being used for a particular route but it’s guesswork for everyone else.


I guess this must be testable. I’m given to think your assumption is possible in error.

As I have a moment, I’m looking at and it says that Feb 17-20 2020 is the Spring Half Term.

I’m picking the 674 bus from

However, when I try to Jounrey Plan I dont see the 674 in the output, no matter what…

Hurah? However I change the date to the week before and the answer is the same.

Looking at Google Maps, it’s the same too, no 6XX buses.

From this I might conculde that you don’t see Schoool Buses in the Journey Planner.

Can you @mjcarchive see a 600-699 bus route in the Journey Planner?

Found the 692/699 from Dame Alice Owen’s School to Southgate, leaving at 1555ish.

Many of the Romford area routes have just had new schedules issued. I don’t know whether the 674 should have had one but it is conceivable that it has but that it has not been loaded?

The other possibility is that the journey is not shown because there is a better alternative. The 496 which leaves after the 674 is scheduled to arrive at Romford Station before the 674. That may be testable using stops which are on the 674 but not the 496 but most stops en route probably have an alternative regular service which might be quicker (though if they are high frequency services they might show up as slower etc etc).


OK @mjcarchive this goes give me the 699 bus for today…

But the same details for the Friday 21st Feb

I’m not sure the Journey Planner knows about school holidays, or this bus runs during Half Term.

So try Friday 10th Apr, 15:45 and you get a non-bus result

My first thought was that maybe Hertfordshire (or at least Dame Alice Owens) half term times were not yet known to JP, It would be odd if the Easter holiday dates were known but the half term dates were not. Then I realised that Friday 10th is Good Friday so is school holiday by definition! Do you get similar results for Friday 17th? I would try myself but the drop down menu for JP seems to run out at 22nd February.

I looked at another journey - Riefield Road / Crown Woods School to Bromley North Station and found I was getting 6xx options both now and on 21st February. That would suggest that JP hasn’t been updated with the half term dates for any school routes yet - but can that really be the case just three weeks beforehand?


As it’s a GET you can just change the value in the URL to any date…



It’s a moot point how far into the future you would expect it to be reliable though. If it is on the drop down menu (as February half term is) then it ought to be but for New Year’s Eve night )for example) even a couple of days beforehand I think JP was offering bus journeys on some but not all routes from stops well inside the zone that was due to be closed to traffic. While it would be nice to think that all information has been loaded for any date you can drop down to it is all going to depend on when the relevant timetable (or days of operation information) is updated by the operator and in the real world that process is going to be spread out over time.

Back to the original issue, though, of how open data users can work out what operates when. Can @jamesevans perhaps comment on whether there is any such document/system and if so whether there is any prospect of providing wider access to it?


@ mjcarchive

Agreed. I was going off on my points just as a matter of discovery about this topic.

It might be useful - @jamesevans - l to get the feeds for the school holidays as an ICS feed, as per the UK Government Bank Holidays.

ICS isn’t very nice but it does load in human readable form into every calendar I can think of, whilst being easy to code for in a high level language.

I have a feeling that academies and free schools have the freedom to “compete” by setting different holiday dates. This is spectacularly daft as if you have children at different schools you may end up unable to take a holiday at all! So quite possibly they keep in line with the local authority dates. But don’t the dates also differ potentially between local authorities? Half term week might be totally different.



I have a feeling that academies and free schools have the freedom to “compete” by setting different holiday dates.

Yes, but this has been true for England for decades. Only the ILEA project brought them into line in Greater London. ILEA was replace in 1990.

But don’t the dates also differ potentially between local authorities?

Yes. Again this has literally been true for decades. See

So, back to the question, which is - on which dates does EACH SCHOOL BUS SERVICE run? There will be dates:

  • No school bus services run (weekends, Bank Holidays)
  • All school bus services run
  • Some school bus services run - so list them.

This is what is needed.

I agree it would be a moot point to discuss sourcing this data from other sources if TfL don’t follow the same schedule pattern across all bus routes. What would be easier if their was a flag somewhere to tell use which schedule is being implemented “Sch” or “Ho” or even “Sat” or “Sun” for Bank Holidays. This would definitely be marked in the iBus system (where all this data I imagine ultimately is fed from). The bus schedules ending in …Ho.pdf and Sch.pdf (like the 197 for example) will probably be switched on during different weeks depending on what Schools the bus route is serving and probably TfL agree these dates with the School/ local authorities when making the schedule.

1 Like