The operator publishes data
Operators or their technology suppliers publish schedules and automatic vehicle-location updates.
Independent travel information
Where the timetable and live vehicle information comes from, how we turn it into departure predictions, and why it may occasionally differ from information supplied by the operator.
Return to the bus mapThis website is independently operated and is not affiliated with, endorsed by, or operated by Brighton & Hove Buses, Metrobus, the Department for Transport or the Bus Open Data Service. For official travel advice, service updates, tickets and customer support, please use the relevant bus operator’s website.
The main source is the Department for Transport’s Bus Open Data Service, usually shortened to BODS.
BODS makes timetable, route, fare and vehicle-location information published by bus operators available as open data. We currently use the timetable and vehicle-location parts of that service.
Operators or their technology suppliers publish schedules and automatic vehicle-location updates.
The Department for Transport makes the information available through open datasets and live feeds.
Our server imports the schedules, matches live vehicles to trips and produces the map and departure boards.
Published timetable data describes routes, stops, trips, service calendars, stop sequences and scheduled departure times. We import this into local GTFS-style tables used by the website.
This gives us the planned order of stops for each individual trip, rather than assuming that every journey on a route follows exactly the same pattern. This matters because a route may have:
Route lines shown on the map are generated from the published route shapes. Where a route has several legitimate variants, the map can display more than one shape.
Vehicle positions are obtained from the BODS SIRI-VM feed. SIRI-VM is a standard format for sharing automatic vehicle-location information between transport systems.
A live record can contain information such as:
A position is the latest observation received from the vehicle. It is not necessarily its exact location at the moment the map is viewed. Feed, network and processing delays can all make a marker appear behind the real bus.
A location alone is not enough to identify a journey. Two buses may be close together, travelling in opposite directions, or serving different branches of the same route.
We therefore compare several pieces of information, including:
If the evidence is not strong enough, we prefer not to claim that a vehicle serves a particular stop. This may mean that a genuine bus is temporarily absent rather than shown on the wrong side of the road or against the wrong journey.
Live feeds can occasionally contain school-only, positioning or otherwise non-public journeys using a familiar route number. Confirmed examples can be excluded using their exact route, origin and destination references. We do not broadly hide every journey that mentions a school, because many ordinary public services legitimately serve schools and colleges.
The live feed supplies vehicle positions, but it does not always provide a ready-made prediction for every stop. Our server therefore combines the live position with the matched timetable trip.
Predictions are recalculated regularly and cached briefly. This lets many passengers use the site without every page view separately downloading and processing the complete live feed.
The displayed time is therefore our best estimate based on open timetable and vehicle-location data. It is not a guarantee that a bus will arrive at that exact time.
We have matched a recent vehicle observation to this particular timetable journey and calculated a prediction from its progress.
The time comes from the published timetable because no sufficiently reliable live vehicle match is currently available.
“Scheduled” does not necessarily mean that the bus is cancelled or not running. It only means that this website cannot currently attach a reliable live observation to that departure.
The browser uses MapLibre to display route lines, stops and vehicle markers over OpenStreetMap-based mapping.
Static information—such as stops and route shapes—is generated periodically and served as GeoJSON. Frequently changing vehicle and departure information is prepared by a background task and stored in a short-lived cache.
Between live observations, a marker may be moved along the matched route shape to make movement easier to follow. We limit how far a position can be corrected. If an observation is too far away from the expected route, the site avoids drawing an invented straight line across buildings or unrelated roads.
When a bus marker is selected, its popup uses the matched trip’s remaining ordered stops. Its destination normally comes from the final stop of that specific trip, which preserves branches and short workings. A curated route-level destination is used only when the trip itself lacks usable terminal information.
Open transport data is extremely useful, but it is not perfect. Information may occasionally be late, incomplete, contradictory or attached to the wrong journey.
Examples include:
Please allow extra time for important journeys and check official operator information for disruptions, cancellations, accessibility, fares and ticket validity.
| Information | Source or process |
|---|---|
| Timetables | Operator-published open timetable data imported locally |
| Vehicle locations | BODS SIRI-VM automatic vehicle-location feed |
| Stops and stop order | Imported timetable and stop-time records |
| Route lines | Published route shapes converted into GeoJSON |
| Live predictions | Calculated by this website from vehicle progress and timetable intervals |
| Scheduled predictions | Future calls from the active timetable calendar |
| Destinations | The matched trip’s final stop, with curated fallback naming |
| Map rendering | MapLibre with OpenStreetMap-based mapping |
| Performance | Background processing, static GeoJSON and short-lived Laravel caches |