The On-Time Performance (OTP) product gives insights into your transit system’s historical schedule adherence. By understanding where vehicles are scheduled to be versus where they actually are throughout their trips, Swiftly accurately identifies when and where vehicles are early, late, and on time. In the OTP product, you can view overall schedule adherence performance over a particular date range or narrow in on a particular route to understand where routes become problematic - at specific stops, during certain time windows, or both - so that you can make informed decisions about how to triage and resolve schedule and planning issues.
Note: Swiftly looks at stop departures for the on-time performance product.
The Basics
Summary Overview: You can view the overall on-time performance across all stops and routes for your transit system. Also, you can view changes and trends to your on-time performance over the past 6 months. The Data Completeness chart in On-Time Performance helps put performance data in context. While the On-Time Performance summary chart shows the percentage of observed stops that were on time, late, or early, the Data Completeness chart shows how that fits into the full picture of your scheduled service.
Filters: In the On-Time Performance product, you can look at data for your whole system, or hone in on a specific route's performance. You can also look at performance for a single day or over a longer date range. You can exclude dates that may impact on-time performance (snow days, events that disrupt service, etc.). Lastly, you can adjust on-time performance parameters--these changes will persist in other products during the current dashboard session, but any setting changes will reset when you log in again.
Stop Handling: Swiftly supports stop-level OTP configurations as a way to reflect what is happening in the real world. For example, we know there are stops (such as on commuter routes, or the last stop of a trip) where it may not make sense to penalize early arrivals. As stop-handling is typically done at the agency level, in order to change these parameters, please contact support@goswift.ly.
Swiftly can handle last stop performance in three ways: (1) including last stop arrivals in performance reporting normally, (2) including them but treating early arrivals as on-time, or (3) simply excluding last stops from the data sample entirely.
Swiftly can handle drop-off only stops in three ways: (1) including drop-off only stop arrivals in performance reporting normally, (2) including them but treating early arrivals as on-time, or (3) simply excluding drop-off only stops from the data sample entirely. Drop-off only handling needs to be configured in GTFS in the stop_times.txt file using pickup_type=1 (no pickups). Stops denoted as drop-off only will flow through to Swiftly. Please contact support@goswift.ly if you could use assistance setting this up.
Routes Overview: You can view on-time performance for all routes or specific routes. If you select a single route, you can view OTP by stop, by time of day, by severity (histogram), or at the granular schedule level. Need to quickly see OTP for a specific group of routes in the dashboard? Learn more about accessing route groups.
Own your data: When you use Swiftly, we help process and display your data in ways that help isolate problems, but at the end of the day, the underlying data is always yours. You can easily export the underlying data we use to generate charts in our dashboard to CSV so you can merge with other data sets or run your own analyses.
__________________________________________________
On-Time Performance Filters
Route Groups
Using route groups is valuable if your agency typically assesses on-time performance for specific groups of routes rather than for the entire system. The most common use cases for route groups are to separate different modes (bus, rail, streetcar, etc), or to separate contracted service from directly operated service. For example, if an agency has three streetcar lines that have different on-time performance standards than its bus network, then it could have two route groups: one for all bus routes and another for all streetcar lines.
If you would like to create a route group, please contact support@goswift.ly.
Once created, In the Swiftly Dashboard, you can specify a route group in the On-Time Performance product. A route group consists of a subset of your routes and populates the summary and route views with data solely from those specified routes.
Typically, the Summary and Routes views show overview data for all routes and stops in your system, or for a specific route.
When you select a route group, you will get summary data for only the specified routes.
Or you can compare the performance data for those few routes directly in the Routes view.
On-Time Performance Filters
The On-Time Performance (OTP) product allows you to set special filters on your data to hone in on the most important information. These filters can be accessed from the left-side of the OTP product on the Filters Panel:
From here you'll be able to set the following filters:
- Service Date Range – Select a service date range that you'd like to view for the OTP reports
- Exclude Date(s) - Select any number of service dates within your service date range to exclude. These may include holidays or other days with unique circumstances that don’t reflect overall performance.
- Day of Week - Limit your OTP reports to weekdays vs. weekends, or choose a specific day of the week that you are concerned with.
- Time Range - For the specified service date range look at a limited time range such as A.M. Peak, or Mid-Day service. Time range references the service date so selection may be > 24 hours.
- Stop Type - Select from All Stops, Timepoints, or First Stops only.
- Allowable Minutes - This filter allows you to customize the allowable on-time performance--changing what is consider early and late in this OTP session. This filter is only a temporary adjustment of your OTP parameters, and do not affect the OTP standard parameters for your agency as a whole.
- Stop Handling - Swiftly can handle last stop performance in three ways: (1) including last stop arrivals in performance reporting normally, (2) including them but treating early arrivals as on-time, or (3) simply excluding last stops from the data sample entirely. Swiftly can handle drop-off only stops in three ways: (1) including drop-off only stop arrivals in performance reporting normally, (2) including them but treating early arrivals as on-time, or (3) simply excluding drop-off only stops from the data sample entirely. As stop-handling is typically done at the agency level, in order to change these parameters, please contact support@goswift.ly.
Once these filters are applied, each view will be updated to reflect these filters. Additionally, these will also be applied to the data that you download.
___________________________________________________
On-Time Performance Parameters
On-Time Performance (OTP) parameters are defined in the Swiftly Dashboard as the number of minutes behind or ahead of the schedule a vehicle is running. These parameters determine whether a vehicle is considered “early,” “on-time,” or “late.”
The default settings for On-Time Performance parameters in the Swiftly dashboard are 1 min “early” and 4 min “late.” These default OTP parameters can be reconfigured to any standard definition of “early” and “late” that is used operationally for your agency.
Understanding On-Time Performance Parameters
Let's say your agency sticks with the Swiftly Default OTP parameters: -1 min early and 4 min late.
- Vehicles departing the stop >1 min early are considered “early.”
- Vehicles departing the stop <= 1 min early and﹤= 4 min late are considered “on-time”
- Vehicles departing the stop > 4 min late are considered “late.”
For example, if a vehicle leaves two minutes before the scheduled departure, the vehicle will be considered "early" and a vehicle that leaves six minutes after the scheduled departure would be considered "late".
To check the default OTP parameters for your agency, look at the “Allowable Minutes” filter shown on the On-Time Performance product’s filters toolbar, as displayed in the screenshot below.
Note: changing the OTP allowable minutes within the OTP product filters does not change the default OTP parameter settings, but will change how your current dashboard session's OTP data is displayed & categorized. If you would like to change your default OTP parameters, please contact support@goswift.ly.
___________________________________________________
Data Completeness in On-Time Performance
The Data Completeness chart in On-Time Performance helps put performance data in context. While the On-Time Performance summary chart shows the percentage of observed stops that were on time, late, or early, the Data Completeness chart shows how that fits into the full picture of your scheduled service to better understand the rider experience.
This chart shows your agency’s scheduled service, broken down by:
- Scheduled service that was Observed: Swiftly correctly observed a vehicle serving these stops in your agency’s real-time data.
- Scheduled service that was Missing: Swiftly did not observe a vehicle serving these stops in your agency’s real-time data. Swiftly does not know why service was missing. It may have been because service was truly not delivered, there was a detour but it wasn't entered in Swiftly or there was an issue with the AVL reporting.
- Scheduled service that was Adjusted: Swiftly did not expect these stops to be served as they were omitted due to an adjustment like a detour or trip cancelation.
This is a great way to understand the rider experience, as it is both important to deliver service on time, as well as to adjust service to allow riders to get accurate real-time information. Riders will receive information about their trip in all cases except when data is missing. You can use Swiftly’s Service Adjustments to update your agency’s real-time data to reflect detours, trip cancelations, stop closures and more.
Investigating Missing Data
Upon reviewing the Data Completeness chart, you may want to investigate root causes, or dig in further to understand where you can focus your efforts to reduce missing data in the future. There are a few methods to investigate missing data, which involve using the On-Time Performance Schedule View, GPS Playback, and the Download Center reports.
Below is a link to a slide deck created for a customer webinar Swiftly hosted in December 2024. It walks through the Data Completeness chart and how to conduct investigations of missing data.
Swiftly Dashboard–3 enhancements to On-Time Performance to support Operations Teams (pdf)
___________________________________________________
On-Time Performance by Route
In the On-Time Performance product, you can use the routes view to generate reports for an individual route. This helps determine how that specific route is performing overall.
The Basics
An individual route's performance can be measured using five core reports:
Summary View: See how the overall route is performing and how the route's performance is trending over time. This view compares a route to itself and lays out time trends of a route's early, late, and on-time departures.
Stops View: This view allows you to get a granular look at historic on-time performance for all stops along a route. The Stops view looks at departures from each stop, and sorts information by early, on-time, and late. This data can be downloaded as a CSV. Learn more about downloading on-time performance.
Time of Day View: This view organizes departure on-time performance by time of day. This view allows you to understand what times of day have the best and worst on-time performance.
Histogram View: On-time performance information represented as a histogram, grouping departures by how many minutes early or late they were, and how many stops are early or late. This view can help identify how late your late vehicles are and how early your early vehicles are, giving you a better understanding of how well your system is performing.
Schedule View: A complete table of every recorded departure for one day is in your Schedule View. Each row in this table is a trip (trip start time is listed in the far left column), and each column is a stop along those trips. Each cell displays the number of minutes early (pink) or late (yellow) the vehicle departed a stop. Click on any cell to get details about that departure. This is the most granular view and shows on-time performance by trips and stops. When data is missing from a cell, it means that information was not captured from that stop during the specific trip. This could be a result of GTFS or AVL issue, detour in which the stop was not serviced, or an unassigned vehicle.
Tip: The schedule view is only viewable for one day's worth of data. If you've selected a date range, the Schedule view will display data for the most recent day in that range.
Service Adjustments within Schedule View: If your agency has access to the Service Adjustments tool, you can see adjusted or modified trips for a specific day's service. Note: Service Adjustments are not available in Schedule View for today's date due to how Swiftly processes data.
Canceled Service:
In the example above, you can see each canceled trip has an orange bar to the left of the start time and the stop times are replaced with "Reduced Service" indicating the cancellation.
Stop Closure:
When stops are closed using the Service Adjustments too, the stop will appear with an "x" in their respective time cell.
When a closed stop's time cell is clicked, a dialogue box will show with schedule, block, trip, and stop information. Clicking the detour button will take you to the Action Log, where you can view more information on this closed stop and any other modifications made in Service Adjustments.
Detour:
If a detour is in effect, an orange exclamation point will appear to the left of the orange bar. Affected stops will appear with an "x" in their respective time cell, indicating a stop closure as a result of the detour.
Clicking the exclamation point will open a dialogue box stating a detour was in effect during the trip, and gives you the ability to view the trip in GPS Playback.
__________________________________________________
Downloading Your On-Time Performance
Your Swiftly data can be downloaded directly from the On-Time Performance (OTP) product by clicking on the down arrow button highlighted in the image below. This can be found in the middle-right region of the OTP screen, below your agency's “High-Level Stats” or from a route’s OTP Stops view.
Your data can be downloaded from system-wide or route-level pages, and these downloads will generate an exported CSV file based on the filters that you’ve set.

What do the downloads include?
The downloaded data will include all assignment stats, including block_id, trip_id, route information, and vehicle_id. Details for many of these can be found in our Glossary. Here's some additional information about other data included in this CSV:
- sched_adherence_secs: refers to "schedule adherence in seconds". This is the same as on-time performance. Negative values mean that the vehicle departed/arrived earlier than the scheduled time, and positive values mean that the vehicle departed/arrived late.
- scheduled_date & scheduled_time: when the vehicle was scheduled to depart or arrive at the stop.
- actual_date & actual_time: when the vehicle departed or arrived at the stop.
-
is_arrival: refers to whether on-time performance is determined by the arrival or departure of vehicles that service that stop. In most cases, this will display as "FALSE", because most stops are defined as having scheduled departure times. "TRUE" means that the data for that stop is stored as an arrival.
This file can then be merged with internal ridership, fare type, lift event data, etc. to get the most comprehensive stop/timepoint level data.

Missing Stops
If there is a missing time stamp in the observed_time column, this means data was not collected for that specific stop for the scheduled trip. This could be a result of a cancelled trip, vehicle going off route, GTFS issue, etc.
Service Adjustments
If your agency has purchased Service Adjustments, the affected data will also show in the CSV download.
- adjustment_ids: identifies the unique adjustment being passed from the Action Log
- adjustment_type: distinguishes what type of adjustment is in effect. The image above shows the adjustment type as a detour.
- adjustment_effects: shows what effect the service adjustment has on the stop. In the example above, the stop is skipped.
___________________________________________________
Take On-Time Performance Beyond the Basics
Swiftly Customer use Cases:
- Speeding Up Transit and Project Timelines at Santa Clara VTA
- How Juneau Is Wooing Cruise Ship Passengers with a Transit Rebrand
- Swiftly Restores Transit Calm on the Oregon Coast
Customer Community Training Webinars:
Comments
Article is closed for comments.