In bus scheduling, a run (called a block in GTFS ⧉) is a sequence of trips assigned to a single vehicle for a service day. A run isn't tied to one route since a bus can start on one route, interline onto another, and finish on a third, all as part of the same continuous assignment. This creates a naming problem: since a bus's physical run box (the display showing its identifier) usually only fits a couple of digits, and the run itself can span multiple routes, agencies need a way to label runs that doesn't just default to "route number."
On this site, Runs are labeled XXX / YY, where XXX is the
dominant route and YY is a sequential
identifier that doubles as the physical run number. The dominant
route is whichever route accounts for the greatest share of the
run's scheduled service. This isn't decided fresh for each bus; it
falls out of how the underlying routes' blocks are structured, so
when two routes are interlined together, whichever one carries more
service time across those blocks comes out dominant consistently,
run after run.
Within a given service day, no two runs sharing the same dominant route carry the same number at the same time, and that holds at any point during that day. It isn't a claim that a number is permanently tied to one run, since the same number can point to a completely different run on a different day type, as covered below.
Numbers are assigned in order, though the lowest number still available on a route isn't guaranteed to be the one that gets used, since assignment can skip around as runs are built and retired through the day. What stays fixed is that the dominant route is what disambiguates a run, not the number by itself, so two buses on different dominant routes can carry the same physical number at the same time without conflict.
Runs are day-specific. Because schedules differ by service day (weekday, Saturday, Sunday, holiday), "Run 02" on a Monday is a completely different assignment than "Run 02" on a Saturday which has the same label but an unrelated run.
Trip IDs vs. runs. Each run is made up of individual trips, and
in GTFS, trips belonging to the same run are linked via the block_id
field in trips.txt: trips sharing a block_id are part
of the same vehicle block. When block_id is populated reliably, this
tells you exactly which trips belong together.
Public visibility varies by agency. In most cases, run numbers are functionally obsolete for riders. On the TTC, however, they're displayed to the public as yellow or white 2-digit numbers on the windshield in a "run box". Single digits may be padded with a leading 0 or X.
On run/block pages, you'll sometimes see one of two notes listing extra routes alongside the ones already shown for that run:
Here's what a Line + Run search looks like on the home page ↗. It's shown here for reference only:
0, whereas the TTC's run box may instead
show a leading X.
Any Weekday not only implies a plain weekday
pattern, it also includes modified weekday (holiday) schedules.
Although this search asks for a Line, it understands interlining and "also covers" relationships, so it can resolve a plain route number back to the correct Line/Run even if your request would otherwise be ambiguous.
Grouping a run's trips under one dominant route is standard practice for transit agencies across Canada and the US (it's just not often given a rider-facing name), and the TTC doesn't use it operationally at all! So, 'line' was chosen to represent this concept, even though it isn't standardized terminology. Also called: home route, dominant line, dominant route, or block group, depending on the agency and whom you ask.
This page reflects observed TTC practice and is provided for reference only. It is not affiliated with, endorsed by, or verified by the TTC, and may contain inaccuracies. See the full disclaimer ↗ for details.