Skip to main content

Where England's bus times come from

How timetables and live positions are published, and why different websites can disagree.

By How the data works

Bus times on this site are not typed in by hand, and they are not scraped from operator websites. They come from national data services that bus companies in England publish into. Knowing how that works explains a lot of the odd things you see on bus websites — including why two of them can show different times for the same bus.

Four separate sources, four separate jobs

What What it provides
Bus Open Data Service (BODS) Timetables, live vehicle positions and disruption notices, published by operators
NaPTAN The national record of bus stops — names, codes, coordinates, bearings
National Operator Codes (NOC) The register of bus operators and their official names
GOV.UK bank holidays The official list of bank holiday dates for England and Wales

These are maintained separately. A timetable can be updated without the stop database changing, and the stop database can be corrected without any operator republishing anything.

The full list, with links, is on our data sources page.

Timetables

Operators publish their timetables as structured files, one dataset per operator or per group of services. Each dataset describes the services, the journeys within them, which days each journey runs, and the time it calls at each stop.

That last point is worth dwelling on. A timetable is not a list of times per stop — it is a list of journeys, each with its own pattern of stops and times. What you see on a stop page is assembled by working out which journeys call at that stop today, and when.

This is why a stop can show departures on a route whose main timetable does not obviously mention it, and why some journeys on a route skip stops that others serve.

Which days a journey runs

Each journey carries the days it operates, and separately any rules about bank holidays. Those bank holiday rules are extensive: of the 730,835 journeys we currently hold, 721,001 carry explicit bank holiday operating rules.

That matters more than it sounds. Without applying those rules, a site would happily show you a normal weekday timetable on Christmas Day. With them, journeys that do not run on a given holiday are removed and any special holiday journeys are included.

Journeys can also be marked as running only on school days. We hold 51,071 of those, and they are the reason a bus that runs reliably in term time can vanish in the holidays.

Live vehicle positions

Live positions are a completely different feed. Vehicles report where they are, and that data is republished nationally. It includes the route, the operator, the position, and details identifying which scheduled journey the bus is running.

Two consequences follow from it being separate:

  • A route can have a perfect timetable and no live data at all. Not every operator sends positions, and not every vehicle reports reliably.
  • Live data alone does not tell you the timetable. It tells you where buses are now. Turning that into an expected time at your stop means matching the vehicle to its scheduled journey first.

Disruptions

Roadworks, diversions and suspended services are published as separate notices rather than as changes to the timetable. That is why a route can appear to be running normally in the timetable while a disruption notice says it is diverted. Both are true: the timetable has not changed, but the buses are not following it today. Current notices are on service updates.

Why two bus websites can disagree

Given a shared set of sources, differences come down to three things:

  1. When each site last took a copy. Operators republish timetables regularly. A site that refreshed this morning and one that refreshed last week will differ.
  2. Whether bank holiday and school-day rules are applied. These are optional to implement and easy to skip.
  3. How live positions are matched to scheduled journeys. This is the hardest part, and different approaches produce different results. Where a match cannot be made confidently, the honest thing is to show the scheduled time rather than guess.

What this means for you

If a time looks wrong, it is worth knowing which layer is likely at fault. A stop in the wrong place is a stop database issue. A service that no longer exists is a timetable that needs republishing by its operator. A bus that is not being tracked is a live feed issue and says nothing about whether the timetable is right.

If you spot something wrong, the report a problem page is the place to tell us, and it helps to say which of those it looks like.

Check your bus right now

Live departures from the stops closest to you.

Find stops near me

More guides